ゲームの中には、Wwiseですぐに利用できない非常に特定のルーティングやパニングがあるものがあります。この限界を回避する一つの方法は、"speaker matrix callback" (スピーカー マトリックス コールバック) への登録です。このコールバックは、ボイスやバスが他のバスにミックスされる際に呼び出します。このコールバックから、ボイスやバスのグローバルならびにチャンネルに特化したレベルを変更できるので、ミックスやパニングの修正ができます。
以下の例では、ボイスのコールバックを登録する方法を示しています。これはこのボイスを再生するイベントをポストした際に発生します。
VoiceCallback コールバックは、そのように出力バスの特定、ボイスを出力バスにミックスする際のベースボリュームの変更、そして異なる発生角度をシミュレートするためのパニングボリュームの変更ができるかを示しています。AkSpeakerVolumeMatrixCallbackInfo::pContext は、ボイスに関連する情報を、そして AkSpeakerVolumeMatrixCallbackInfo::pMixerContext はそのボイスがミックスされるバスに関連する情報を示します (ドライ出力バスまたはAUXセンド)。
static void VoiceCallback(
)
{
AKASSERT( eventID == AK::EVENTS::PLAY_HELLO );
return;
if ( uNumPosition > 0 )
{
if (pBusObject)
{
listenerTop.
X = -listenerTop.
X;
listenerTop.
Y = -listenerTop.
Y;
listenerTop.
Z = -listenerTop.
Z;
posEmitter,
posListener,
);
}
}
}
次の例は、バスコールバックにどの様に登録するかを示しています。この場合では、AkSpeakerVolumeMatrixCallbackInfo::pContext が登録をしたバス (「My_Bus」) に関連する情報を、AkSpeakerVolumeMatrixCallbackInfo::pMixerContext が、ミックスされたその親バス (またはシグナルチェーンの次のミキシングバス) に関連する情報を示します。
static void BusCallback(
)
{
cfgThreeStereo,
mxTransmix );
{
while ( uChanOut < uNumOutputChannelsToCopy )
{
vMixOut[uChanOut] = vTransmixOut[uChanOut];
++uChanOut;
}
while ( uChanOut < in_pCallbackInfo->outputConfig.uNumChannels )
{
vMixOut[uChanOut] = 0;
++uChanOut;
}
}
}
次の例は、そのメータリングデータを問い合わせるための、バスへの登録方法を示しています。
static void MeterCallback(
)
{
AkReal32 fPower = in_pMetering->GetKWeightedPower();
{
AkReal32 fChannelPeak = vTruePeak[uChannel];
...
}
...
}
AK::IAkMixerInputContext * pContext
Context of the current voice/bus about to be mixed into the output bus with specified base volume and...
AkGameObjectID gameObjID
Game object ID
virtual AkReal32 GetSpread(AkUInt32 in_uIndex)=0
AkReal32 * pfBaseVolume
Base volume, common to all channels.
@ AK_EnableBusMeter_KPower
Enable computation of K-weighted power metering (used as a basis for computing loudness,...
AkChannelConfig outputConfig
Channel configuration of the output bus.
AKSOUNDENGINE_API AKRESULT RegisterBusVolumeCallback(AkUniqueID in_busID, AkBusCallbackFunc in_pfnCallback, void *in_pCookie=NULL)
AkUInt32 uNumChannels
Number of channels.
AkChannelConfig inputConfig
Channel configuration of the voice/bus.
AkUInt64 AkGameObjectID
Game object ID
AkUInt32 uChannelMask
Channel mask (configuration).
AkMeteringFlags
Metering flags. Used for specifying bus metering, through AK::SoundEngine::RegisterBusVolumeCallback(...
AkForceInline AkUInt32 GetRequiredSize(AkUInt32 in_uNumChannelsIn, AkUInt32 in_uNumChannelsOut)
Compute size (in bytes) required for given channel configurations.
AK::IAkMixerPluginContext * pMixerContext
Output mixing bus context. Use it to access a few useful panning and mixing services,...
AkCallbackType
Type of callback. Used as a bitfield in methods AK::SoundEngine::PostEvent() and AK::SoundEngine::Dyn...
float AkReal32
32-bit floating point
virtual AKRESULT GetGameObjectPosition(AkUInt32 in_uIndex, AkSoundPosition &out_position) const =0
AkUniqueID eventID
Unique ID of Event, passed to PostEvent()
virtual IAkVoicePluginInfo * GetVoiceInfo()=0
AkReal32 * VectorPtr
Volume vector. Access each element with the standard bracket [] operator.
AkUInt32 AkUniqueID
Unique 32-bit ID
virtual AkReal32 GetFocus(AkUInt32 in_uIndex)=0
AkForceInline VectorPtr GetChannel(MatrixPtr in_pVolumeMx, AkUInt32 in_uIdxChannelIn, AkUInt32 in_uNumChannelsOut)
Get pointer to volume distribution for input channel in_uIdxChannelIn.
@ AK_EnableBusMeter_TruePeak
Enable computation of true peak metering (most CPU and memory intensive).
#define AK_SPEAKER_SETUP_3STEREO
3.0 setup channel mask
virtual AkUInt32 GetNum3DPositions()=0
#define AKASSERT(Condition)
AKSOUNDENGINE_API AKRESULT RegisterBusMeteringCallback(AkUniqueID in_busID, AkBusMeteringCallbackFunc in_pfnCallback, AkMeteringFlags in_eMeteringFlags, void *in_pCookie=NULL)
AkReal32 * pfEmitterListenerVolume
Emitter-listener pair-specific gain. When there are multiple emitter-listener pairs,...
virtual AKRESULT Compute3DPositioning(AkReal32 in_fAngle, AkReal32 in_fElevation, AkReal32 in_fSpread, AkReal32 in_fFocus, AkChannelConfig in_inputConfig, AkChannelMask in_uInputChanSel, AkChannelConfig in_outputConfig, AkReal32 in_fCenterPerc, AK::SpeakerVolumes::MatrixPtr out_mxVolumes)=0
Struct containing metering information about a buffer. Depending on when this struct is generated,...
static const AkPlayingID AK_INVALID_PLAYING_ID
Invalid playing ID
virtual AKRESULT ComputeSpeakerVolumesDirect(AkChannelConfig in_inputConfig, AkChannelConfig in_outputConfig, AkReal32 in_fCenterPerc, AK::SpeakerVolumes::MatrixPtr out_mxVolumes)=0
AKSOUNDENGINE_API AkUInt32 GetIDFromString(const char *in_pszString)
virtual IAkGameObjectPluginInfo * GetGameObjectInfo()=0
AkForceInline void SetStandard(AkUInt32 in_uChannelMask)
Set channel config as a standard configuration specified with given channel mask.
AkReal32 * MatrixPtr
Volume matrix. Access each input channel vector with AK::SpeakerVolumes::Matrix::GetChannel().
virtual AkReal32 GetCenterPerc()=0
uint32_t AkUInt32
Unsigned 32-bit integer
Game object information available to plugins.
3D vector for some operations in 3D space. Typically intended only for localized calculations due to ...
AKSOUNDENGINE_API AkPlayingID PostEvent(AkUniqueID in_eventID, AkGameObjectID in_gameObjectID, AkUInt32 in_uFlags=0, AkCallbackFunc in_pfnCallback=NULL, void *in_pCookie=NULL, AkUInt32 in_cExternals=0, AkExternalSourceInfo *in_pExternalSources=NULL, AkPlayingID in_PlayingID=AK_INVALID_PLAYING_ID)
@ AK_SpeakerVolumeMatrix
Callback triggered at each frame, letting the client modify the speaker volume matrix....
AK::SpeakerVolumes::MatrixPtr pVolumes
Pointer to volume matrix describing the contribution of each source channel to destination channels....
AkUInt32 AkPlayingID
Playing ID
AkPlayingID playingID
Playing ID of Event, returned by PostEvent()
const AkReal32 * ConstVectorPtr
Constant volume vector. Access each element with the standard bracket [] operator.
あなたのプロジェクトについて教えてください。ご不明な点はありませんか。
プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。
Wwiseからはじめよう