版本
menu

Wwise SDK 2025.1.2
AkSpeakerVolumes.h
浏览该文件的文档.
1 /*******************************************************************************
2 The content of this file includes portions of the AUDIOKINETIC Wwise Technology
3 released in source code form as part of the SDK installer package.
4 
5 Commercial License Usage
6 
7 Licensees holding valid commercial licenses to the AUDIOKINETIC Wwise Technology
8 may use this file in accordance with the end user license agreement provided
9 with the software or, alternatively, in accordance with the terms contained in a
10 written agreement between you and Audiokinetic Inc.
11 
12 Apache License Usage
13 
14 Alternatively, this file may be used under the Apache License, Version 2.0 (the
15 "Apache License"); you may not use this file except in compliance with the
16 Apache License. You may obtain a copy of the Apache License at
17 http://www.apache.org/licenses/LICENSE-2.0.
18 
19 Unless required by applicable law or agreed to in writing, software distributed
20 under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
21 OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for
22 the specific language governing permissions and limitations under the License.
23 
24  Copyright (c) 2025 Audiokinetic Inc.
25 *******************************************************************************/
26 
27 // AkSpeakerVolumes.h
28 
29 /// \file
30 /// Multi-channel volume definitions and services.
31 /// Always associated with an AkChannelConfig. In the case of standard configurations, the volume items ordering
32 /// match the bit ordering in the channel mask, except for the LFE which is skipped and placed at the end of the
33 /// volume array.
34 /// See \ref goingfurther_speakermatrixcallback for an example of how to manipulate speaker volume vectors/matrices.
35 
36 #ifndef _AK_SPEAKER_VOLUMES_H_
37 #define _AK_SPEAKER_VOLUMES_H_
38 
39 #include <string.h>
41 
42 #ifdef __cplusplus
43 
44 #include <AK/SoundEngine/Platforms/Generic/AkSpeakerVolumes.h>
45 
46 extern "C" {
47 #endif
48 
49 /// Copy volumes.
50 ///
51 /// \param[out] out_pVolumesDst Pointer to destination volume vector.
52 /// \param[in] in_pVolumesSrc Pointer to source volume vector.
53 /// \param[in] in_uNumChannels Number of channels.
55 
56 /// Copy volumes with gain.
57 ///
58 /// \param[out] out_pVolumesDst Pointer to destination volume vector.
59 /// \param[in] in_pVolumesSrc Pointer to source volume vector.
60 /// \param[in] in_uNumChannels Number of channels.
61 /// \param[in] in_fGain Gain to apply.
63 
64 /// Clear volumes.
65 ///
66 /// \param[out] out_pVolumesDst Pointer to volume vector.
67 /// \param[in] in_uNumChannels Number of channels.
69 
70 /// Accumulate two volume vectors.
71 ///
72 /// \param[in,out] io_pVolumesDst Pointer to first and destination vector.
73 /// \param[in] in_pVolumesSrc Pointer to second vector.
74 /// \param[in] in_uNumChannels Number of channels.
76 
77 /// Compute the sum of all components of a volume vector.
78 ///
79 /// \param[in] in_pVolumes Pointer to volume vector.
80 /// \param[in] in_uNumChannels Number of channels.
81 /// \return The sum of all volumes.
83 
84 /// Multiply volume vector with a scalar.
85 ///
86 /// \param[in,out] io_pVolumesDst Pointer to volume vector.
87 /// \param[in] in_fVol Volume multiplier.
88 /// \param[in] in_uNumChannels Number of channels.
90 
91 /// Multiply two volume vectors.
92 ///
93 /// \param[in,out] io_pVolumesDst Pointer to first and destination vector.
94 /// \param[in] in_pVolumesSrc Pointer to second vector.
95 /// \param[in] in_uNumChannels Number of channels.
97 
98 /// Get max for all elements of two volume vectors, independently.
99 ///
100 /// \param[in,out] io_pVolumesDst Pointer to first and destination vector.
101 /// \param[in] in_pVolumesSrc Pointer to second vector.
102 /// \param[in] in_uNumChannels Number of channels.
104 
105 /// Get min for all elements of two volume vectors, independently.
106 ///
107 /// \param[in,out] io_pVolumesDst Pointer to first and destination vector.
108 /// \param[in] in_pVolumesSrc Pointer to second vector.
109 /// \param[in] in_uNumChannels Number of channels.
111 
112 /// Compute size (in number of elements/floats) required for given number of channels in vector.
113 ///
114 /// \param[in] in_uNumChannels Number of channels.
116 
117 /// Compute size (in bytes) required for given number of channels in vector.
118 ///
119 /// \param[in] in_uNumChannels Number of channels.
121 
122 /// Compute matrix size required for given channel configurations.
123 ///
124 /// \param[in] in_uNumChannelsIn Number of input channels.
125 /// \param[in] in_uNumChannelsOut Number of output channels.
126 /// \return Matrix size in byte.
128 
129 /// Compute number of elements in matrix required for given channel configurations.
130 ///
131 /// \param[in] in_uNumChannelsIn Number of input channels.
132 /// \param[in] in_uNumChannelsOut Number of output channels.
133 /// \return Number of matrix elements.
135 
136 /// Get pointer to volume distribution for input channel in_uIdxChannelIn.
137 ///
138 /// \param[in] in_pVolumeMx Pointer to volume matrix.
139 /// \param[in] in_uIdxChannelIn Index of input channels.
140 /// \param[in] in_uNumChannelsOut Number of output channels.
141 /// \return Pointer to volume distribution vector.
143 
144 /// Get pointer to volume distribution for input channel in_uIdxChannelIn.
145 ///
146 /// \param[in] in_pVolumeMx Pointer to volume matrix.
147 /// \param[in] in_uIdxChannelIn Index of input channels.
148 /// \param[in] in_uNumChannelsOut Number of output channels.
149 /// \return Pointer to volume distribution vector.
151 
152 /// Copy matrix.
153 ///
154 /// \param[out] out_pVolumesDst Pointer to destination volume matrix.
155 /// \param[in] in_pVolumesSrc Pointer to source volume matrix.
156 /// \param[in] in_uNumChannelsIn Number of input channels.
157 /// \param[in] in_uNumChannelsOut Number of output channels.
158 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_Copy)(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
159 
160 /// Copy matrix with gain.
161 ///
162 /// \param[out] out_pVolumesDst Pointer to destination volume matrix.
163 /// \param[in] in_pVolumesSrc Pointer to source volume matrix.
164 /// \param[in] in_uNumChannelsIn Number of input channels.
165 /// \param[in] in_uNumChannelsOut Number of output channels.
166 /// \param[in] in_fGain Gain to apply.
167 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_CopyAndApplyGain)(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain);
168 
169 /// Clear matrix.
170 ///
171 /// \param[out] out_pVolumesDst Pointer to destination volume matrix.
172 /// \param[in] in_uNumChannelsIn Number of input channels.
173 /// \param[in] in_uNumChannelsOut Number of output channels.
174 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_Zero)(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
175 
176 /// Multiply a matrix with a scalar.
177 ///
178 /// \param[in,out] io_pVolumesDst Pointer to volume matrix.
179 /// \param[in] in_fVol Volume multiplier.
180 /// \param[in] in_uNumChannelsIn Number of input channels.
181 /// \param[in] in_uNumChannelsOut Number of output channels.
182 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_Mul)(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkReal32 in_fVol, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
183 
184 /// Add all elements of two volume matrices, independently.
185 ///
186 /// \param[in,out] io_pVolumesDst Pointer to first and destination volume matrix.
187 /// \param[in] in_pVolumesSrc Pointer to second volume matrix.
188 /// \param[in] in_uNumChannelsIn Number of input channels.
189 /// \param[in] in_uNumChannelsOut Number of output channels.
190 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_Add)(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
191 
192 /// Pointwise Multiply-Add of all elements of two volume matrices.
193 ///
194 /// \param[in,out] io_pVolumesDst Pointer to first and destination volume matrix.
195 /// \param[in] in_pVolumesSrc Pointer to second volume matrix.
196 /// \param[in] in_uNumChannelsIn Number of input channels.
197 /// \param[in] in_uNumChannelsOut Number of output channels.
198 /// \param[in] in_fGain Volume multiplier.
199 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_MAdd)(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain);
200 
201 /// Get absolute max for all elements of two volume matrices, independently.
202 ///
203 /// \param[in,out] io_pVolumesDst Pointer to first and destination volume matrix.
204 /// \param[in] in_pVolumesSrc Pointer to second volume matrix.
205 /// \param[in] in_uNumChannelsIn Number of input channels.
206 /// \param[in] in_uNumChannelsOut Number of output channels.
207 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_AbsMax)(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
208 
209 /// Get max for all elements of two volume matrices, independently.
210 ///
211 /// \param[in,out] io_pVolumesDst Pointer to first and destination volume matrix.
212 /// \param[in] in_pVolumesSrc Pointer to second volume matrix.
213 /// \param[in] in_uNumChannelsIn Number of input channels.
214 /// \param[in] in_uNumChannelsOut Number of output channels.
215 AK_EXTERNAPIFUNC(void, AK_SpeakerVolumes_Matrix_Max)(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut);
216 
217 #ifdef __cplusplus
218 } // extern "C"
219 
220 namespace AK
221 {
222 /// Multi-channel volume definitions and services.
223 namespace SpeakerVolumes
224 {
225  /// Volume vector services.
226  namespace Vector
227  {
228  AkForceInline void Copy(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
229  {
230  if (in_uNumChannels)
231  memcpy(in_pVolumesDst, in_pVolumesSrc, in_uNumChannels * sizeof(AkReal32));
232  }
233 
234  AkForceInline void Copy(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels, AkReal32 in_fGain)
235  {
236  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
237  {
238  in_pVolumesDst[uChan] = in_pVolumesSrc[uChan] * in_fGain;
239  }
240  }
241 
242  AkForceInline void Zero(VectorPtr in_pVolumes, AkUInt32 in_uNumChannels)
243  {
244  if (in_uNumChannels)
245  memset(in_pVolumes, 0, in_uNumChannels * sizeof(AkReal32));
246  }
247 
248  AkForceInline void Add(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
249  {
250  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
251  {
252  in_pVolumesDst[uChan] += in_pVolumesSrc[uChan];
253  }
254  }
255 
256  AkForceInline AkReal32 L1Norm(ConstVectorPtr io_pVolumes, AkUInt32 in_uNumChannels)
257  {
258  AkReal32 total = 0;
259  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
260  {
261  total += io_pVolumes[uChan];
262  }
263 
264  return total;
265  }
266 
267  AkForceInline void Mul(VectorPtr in_pVolumesDst, const AkReal32 in_fVol, AkUInt32 in_uNumChannels)
268  {
269  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
270  {
271  in_pVolumesDst[uChan] *= in_fVol;
272  }
273  }
274 
275  AkForceInline void Mul(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
276  {
277  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
278  {
279  in_pVolumesDst[uChan] *= in_pVolumesSrc[uChan];
280  }
281  }
282 
283  AkForceInline void Max(AkReal32* in_pVolumesDst, const AkReal32* in_pVolumesSrc, AkUInt32 in_uNumChannels)
284  {
285  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
286  {
287  in_pVolumesDst[uChan] = AkMax(in_pVolumesDst[uChan], in_pVolumesSrc[uChan]);
288  }
289  }
290 
291  AkForceInline void Min(AkReal32* in_pVolumesDst, const AkReal32* in_pVolumesSrc, AkUInt32 in_uNumChannels)
292  {
293  for (AkUInt32 uChan = 0; uChan < in_uNumChannels; uChan++)
294  {
295  in_pVolumesDst[uChan] = AkMin(in_pVolumesDst[uChan], in_pVolumesSrc[uChan]);
296  }
297  }
298  }
299 
300  /// Volume matrix (multi-in/multi-out channel configurations) services.
301  namespace Matrix
302  {
303  AkForceInline AkUInt32 GetRequiredSize(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
304  {
305  return in_uNumChannelsIn * Vector::GetRequiredSize(in_uNumChannelsOut);
306  }
307 
308  AkForceInline AkUInt32 GetNumElements(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
309  {
310  return in_uNumChannelsIn * Vector::GetNumElements(in_uNumChannelsOut);
311  }
312 
313  AkForceInline VectorPtr GetChannel(MatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
314  {
315  return in_pVolumeMx + in_uIdxChannelIn * Vector::GetNumElements(in_uNumChannelsOut);
316  }
317 
318  AkForceInline ConstVectorPtr GetChannel(ConstMatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
319  {
320  return in_pVolumeMx + in_uIdxChannelIn * Vector::GetNumElements(in_uNumChannelsOut);
321  }
322 
323  AkForceInline void Copy(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
324  {
325  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
326  if (uNumElements)
327  memcpy(in_pVolumesDst, in_pVolumesSrc, uNumElements * sizeof(AkReal32));
328  }
329 
330  AkForceInline void Copy(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain)
331  {
332  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
333  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
334  {
335  in_pVolumesDst[uChan] = in_pVolumesSrc[uChan] * in_fGain;
336  }
337  }
338 
339  AkForceInline void Zero(MatrixPtr in_pVolumes, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
340  {
341  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
342  if (uNumElements)
343  memset(in_pVolumes, 0, uNumElements * sizeof(AkReal32));
344  }
345 
346  AkForceInline void Mul(MatrixPtr in_pVolumesDst, const AkReal32 in_fVol, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
347  {
348  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
349  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
350  {
351  in_pVolumesDst[uChan] *= in_fVol;
352  }
353  }
354 
355  AkForceInline void Add(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
356  {
357  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
358  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
359  {
360  in_pVolumesDst[uChan] += in_pVolumesSrc[uChan];
361  }
362  }
363 
364  AkForceInline void MAdd(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain)
365  {
366  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
367  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
368  {
369  in_pVolumesDst[uChan] += in_pVolumesSrc[uChan] * in_fGain;
370  }
371  }
372 
373  AkForceInline void AbsMax(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
374  {
375  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
376  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
377  {
378  in_pVolumesDst[uChan] = ((in_pVolumesDst[uChan] * in_pVolumesDst[uChan]) > (in_pVolumesSrc[uChan] * in_pVolumesSrc[uChan])) ? in_pVolumesDst[uChan] : in_pVolumesSrc[uChan];
379  }
380  }
381 
382  AkForceInline void Max(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
383  {
384  AkUInt32 uNumElements = Matrix::GetNumElements(in_uNumChannelsIn, in_uNumChannelsOut);
385  for (AkUInt32 uChan = 0; uChan < uNumElements; uChan++)
386  {
387  in_pVolumesDst[uChan] = (in_pVolumesDst[uChan] > in_pVolumesSrc[uChan]) ? in_pVolumesDst[uChan] : in_pVolumesSrc[uChan];
388  }
389  }
390  }
391 }
392 }
393 #endif // __cplusplus
394 
395 #endif //_AK_SPEAKER_VOLUMES_H_
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_Mul(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkReal32 in_fVol, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void Copy(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
#define AkMax(x1, x2)
Definition of data structures for AkAudioObject
AKSOUNDENGINE_API AkUInt32 AK_SpeakerVolumes_Vector_GetNumElements(AkUInt32 in_uNumChannels)
AkReal32 * AkSpeakerVolumesMatrixPtr
Definition: AkTypedefs.h:83
AkForceInline AkReal32 L1Norm(ConstVectorPtr io_pVolumes, AkUInt32 in_uNumChannels)
AkForceInline void Max(AkReal32 *in_pVolumesDst, const AkReal32 *in_pVolumesSrc, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_AbsMax(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_CopyAndApplyGain(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain)
#define AK_EXTERNAPIFUNC(_type, _name)
AkForceInline AkUInt32 GetRequiredSize(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_Copy(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void Zero(MatrixPtr in_pVolumes, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline AkUInt32 GetNumElements(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API AkReal32 AK_SpeakerVolumes_Vector_L1Norm(AkSpeakerVolumesConstVectorPtr in_pVolumes, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API AkUInt32 AK_SpeakerVolumes_Vector_GetRequiredSize(AkUInt32 in_uNumChannels)
float AkReal32
32-bit floating point
AkForceInline void AbsMax(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
#define AkMin(x1, x2)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Zero(AkSpeakerVolumesVectorPtr out_pVolumesDst, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API AkUInt32 AK_SpeakerVolumes_Matrix_GetRequiredSize(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Max(AkSpeakerVolumesVectorPtr io_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
AkForceInline VectorPtr GetChannel(MatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_MulScalar(AkSpeakerVolumesVectorPtr io_pVolumesDst, AkReal32 in_fVol, AkUInt32 in_uNumChannels)
AkSpeakerVolumesVectorPtr MatrixPtr
Definition: AkTypedefs.h:104
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_Add(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void Add(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void Zero(VectorPtr in_pVolumes, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API AkSpeakerVolumesVectorPtr AK_SpeakerVolumes_Matrix_GetChannel(AkSpeakerVolumesMatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void MAdd(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain)
AKSOUNDENGINE_API AkUInt32 AK_SpeakerVolumes_Matrix_GetNumElements(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkForceInline void Add(VectorPtr in_pVolumesDst, ConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_CopyAndApplyGain(AkSpeakerVolumesVectorPtr out_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels, AkReal32 in_fGain)
AkSpeakerVolumesConstVectorPtr ConstVectorPtr
Definition: AkTypedefs.h:105
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_MAdd(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut, AkReal32 in_fGain)
AkReal32 * AkSpeakerVolumesVectorPtr
Constant volume vector. Access each element with the standard bracket [] operator.
Definition: AkTypedefs.h:86
AkSpeakerVolumesConstMatrixPtr ConstMatrixPtr
Definition: AkTypedefs.h:106
AkForceInline void Mul(MatrixPtr in_pVolumesDst, const AkReal32 in_fVol, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
uint32_t AkUInt32
Unsigned 32-bit integer
AkForceInline void Copy(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Min(AkSpeakerVolumesVectorPtr io_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Mul(AkSpeakerVolumesVectorPtr io_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
const AkReal32 * AkSpeakerVolumesConstMatrixPtr
Opaque data structure for storing a collection of external sources. Refer to API in AK/SoundEngine/Co...
Definition: AkTypedefs.h:92
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_Zero(AkSpeakerVolumesMatrixPtr out_pVolumesDst, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Copy(AkSpeakerVolumesVectorPtr out_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
AkForceInline void Max(MatrixPtr in_pVolumesDst, ConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
#define AkForceInline
Definition: AkTypes.h:63
AKSOUNDENGINE_API AkSpeakerVolumesConstVectorPtr AK_SpeakerVolumes_Matrix_GetChannel_Const(AkSpeakerVolumesConstMatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
AKSOUNDENGINE_API void AK_SpeakerVolumes_Matrix_Max(AkSpeakerVolumesMatrixPtr io_pVolumesDst, AkSpeakerVolumesConstMatrixPtr in_pVolumesSrc, AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
AkSpeakerVolumesMatrixPtr VectorPtr
Definition: AkTypedefs.h:103
const AkReal32 * AkSpeakerVolumesConstVectorPtr
Constant volume matrix. Access each input channel vector with AK::SpeakerVolumes::Matrix::GetChannel(...
Definition: AkTypedefs.h:89
AKSOUNDENGINE_API void AK_SpeakerVolumes_Vector_Add(AkSpeakerVolumesVectorPtr io_pVolumesDst, AkSpeakerVolumesConstVectorPtr in_pVolumesSrc, AkUInt32 in_uNumChannels)
AkForceInline void Min(AkReal32 *in_pVolumesDst, const AkReal32 *in_pVolumesSrc, AkUInt32 in_uNumChannels)
AkForceInline void Mul(VectorPtr in_pVolumesDst, const AkReal32 in_fVol, AkUInt32 in_uNumChannels)

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅