CRI ADX  Last Updated: 2024-09-25 17:41 p
Atom サウンドレンダラ (ASR)

Atom サウンドレンダラ (ASR) とは

Atom サウンドレンダラ (ASR) は、以下の3つの役割を持つモジュールです。
  • 1. 複数のボイスのミキシング
  • 2. エフェクトの信号処理
  • 3. 出力先への音声出力
覚え書き
マニュアル・ライブラリー内で「ASRラック」という表現を使用する箇所がありますが、「ASR」と「ASRラック」は基本的に同義語です。
CRI Atom ライブラリは、初期化時にメイン出力となるASRを自動で作成します。このメイン出力のASR は CriAtomExAsrConfig 構造体で指定された設定(デフォルトでは criAtomExAsr_SetDefaultConfig マクロで設定される)に基づき、内部構成を決定します。
Atomライブラリのボイスの発音は、特に指定が無い限りライブラリが作成したメイン出力のASRに送られます。ASRに送られた音声はPCM信号がミックスされるため、1音単位の制御ができなくなります。

ボイスのミキシング

ASRラックは内部のレンダリングに使用する独自のスピーカー構成を持っています。ボイスがASRに送られる時、ボイスのデータのチャンネル構成からASRのスピーカー構成への変換が行われます。

スピーカーマッピング

スピーカーマッピング( CriAtomSpeakerMapping )は、音声のミキシング・レンダリングに使用されるスピーカー構成を示す値です。
Atomライブラリは、入力された音声データをASRでミックスする際に、指定されたスピーカーマッピングに合致する形式に変換します。
音声に パンニング が設定されている場合、パンスピーカータイプ を使用したパンニングにて変換が行われます。
また、Atom サウンドレンダラ内の信号処理( エフェクトの信号処理 )も指定されたスピーカー構成に基づいてに行われます。
Atomライブラリーのメイン出力ASRのスピーカーマッピングは、Atomライブラリを初期化する際 CriAtomExAsrConfig::speaker_mapping で指定します。 新しいASRラックを作成する際は、 CriAtomExAsrRackConfig::speaker_mapping に作成するミキサーのスピーカー構成を指定します。
覚え書き
デフォルト値は CRIATOM_SPEAKER_MAPPING_AUTO で、 CriAtomAsrConfig::output_channels の値に基づき自動的に決められます。
CriAtomExAsrConfig::speaker_mappingCriAtomAsrConfig::output_channels の関係については、 スピーカーマッピングと出力チャンネル数の関係 を参照してください。
音声データのチャンネルコンフィグとミキサーのスピーカーマッピングが一致している場合、音声データの変換を行われません。
一致しない場合、Atomライブラリは入力された音声がミキサーの形式に合致するよう、適宜ダウンミックス(又はアップミックス)します。
注釈
スピーカーマッピングはあくまでソフトウェアミキシングに使用されるスピーカー構成です。
指定したスピーカー構成が実際にアプリケーションを使用する一般ユーザーの環境と異なる場合、指定されたスピーカー構成から当該ユーザー環境向けにAtomライブラリが再度変換を行います。
(詳細については、 出力チャンネル数とプラットフォーム を参照してください。)

パンスピーカータイプ

パンスピーカータイプ( CriAtomExPanSpeakerType )は、パンニングされた音声データのレンダリング先を決定するパラメーターです。
音声をパンニングした際、当該音声がどのスピーカーから出力されるかはパンスピーカータイプによって決まります。
例えば、 criAtomExPlayer_SetPan3dAngle 関数でモノラル音声を背後(180°)に定位させた際、パンスピーカータイプが CRIATOMEX_PAN_SPEAKER_TYPE_4CH であれば、音声はLs・Rsチャンネルにパンニングされます。
これに対し、パンスピーカータイプを CRIATOMEX_PAN_SPEAKER_TYPE_6CH に設定して同様の操作を行った場合、音声はLb・Rbチャンネルにパンニングされます。
パンスピーカータイプはデフォルト状態では、 CRIATOMEX_PAN_SPEAKER_TYPE_AUTO に設定されています。
そのため、パンニングした音声がどのスピーカーから出力されるかは、その音声の出力先に指定したスピーカーマッピングに応じて変化します。
スピーカーマッピングに応じた具体的なパンスピーカータイプは以下のとおりです。
スピーカーマッピング パンスピーカータイプ
CRIATOM_SPEAKER_MAPPING_STEREO CRIATOMEX_PAN_SPEAKER_TYPE_4CH
CRIATOM_SPEAKER_MAPPING_5_1 CRIATOMEX_PAN_SPEAKER_TYPE_4CH
CRIATOM_SPEAKER_MAPPING_7_1 CRIATOMEX_PAN_SPEAKER_TYPE_6CH
CRIATOM_SPEAKER_MAPPING_5_1_2 CRIATOMEX_PAN_SPEAKER_TYPE_4_0_2CH
CRIATOM_SPEAKER_MAPPING_7_1_2 CRIATOMEX_PAN_SPEAKER_TYPE_6_0_4CH
CRIATOM_SPEAKER_MAPPING_7_1_4 CRIATOMEX_PAN_SPEAKER_TYPE_6_0_4CH


パンスピーカータイプとASRのスピーカーマッピング

例えば、モノラル音声を CRIATOM_SPEAKER_MAPPING_5_1 を指定して作成したASRに出力すると、デフォルトの CRIATOMEX_PAN_SPEAKER_TYPE_AUTOCRIATOMEX_PAN_SPEAKER_TYPE_4CH と解釈され、L・R・Ls・Rsを使用したパンニングが行われます。
一方、ASRのスピーカーマッピングよりパンスピーカータイプが大きい場合、一度パンニングしたあとASRのスピーカーマッピングに合わせてダウンミックスされます。以下の図は、 CRIATOMEX_PAN_SPEAKER_TYPE_4CH を指定した音声を CRIATOM_SPEAKER_MAPPING_STEREO のASRに入力する時の流れです。
この時適用されるダウンミックス計算式は ダウンミックス計算式 を参照してください。
注釈
デフォルト設定では、センタースピーカーはパンニング結果の出力に使用されません。
パンニングされた音声をセンタースピーカーからも出力したい場合には、デフォルトのパンスピーカータイプを CRIATOMEX_PAN_SPEAKER_TYPE_AUTO_WITH_CENTER に変更してください。
// センタースピーカーをパンニング結果の出力に使用
@ CRIATOMEX_PAN_SPEAKER_TYPE_AUTO_WITH_CENTER
パンニング自動設定(センタースピーカーあり)
Definition: cri_le_atom_ex.h:2173
void criAtomExPlayer_ChangeDefaultPanSpeakerType(CriAtomExPanSpeakerType pan_speaker_type)
パンニング時の出力スピーカータイプ設定のデフォルト値変更


エフェクトの信号処理

ASRにはAtom Craftで作成したDSPバス設定をアタッチすることが可能です。
DSPバス設定にはASRバスの構成やバス名、バス同士のセンド情報、各バスにあるバスエフェクトの情報が含まれています。
覚え書き
ASRラックを作成した直後などDSPバス設定がアタッチされていない場合、ASRラックには8本のバスが設定されています。
ASRに出力するボイスは指定されたバスセンドによってバスに送られ、最終的に0番目のバスであるMasterOutから出力されます。

DSPバスとエフェクト

ADXでは、DSPバス設定によりミキサーや様々なエフェクターを自由に組み合わせて高度なサウンド処理を行うことができます。



DSPバス設定の使用方法

CRI Atom CraftでDSPバス設定を作成

DSPバス設定の作成の仕方は バス を参照してください。

作成したDSPバス設定をプログラム側でアタッチ

作成したDSPバス設定をアタッチするコードを下記に示します。
/* DSPバス設定のアタッチ */
criAtomEx_AttachDspBusSetting("DspBusSetting_0", NULL, 0);
:
:
/* バス1へのセンドレベルを上げる */
criAtomExPlayer_SetBusSendLevelOffset(player, 1, 0.5f);
/* 再生開始 */
criAtomExPlayer_SetCueId(player, acb, 1);
void criAtomEx_AttachDspBusSetting(const CriChar8 *setting, void *work, CriSint32 work_size)
DSPバス設定のアタッチ
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
再生の開始
void criAtomExPlayer_SetCueId(CriAtomExPlayerHn player, CriAtomExAcbHn acb_hn, CriAtomExCueId id)
音声データのセット(キューID指定)
基本的に1度にアタッチできるDSPバス設定は1つだけですが、
ASRラックが使用できる環境では、ASRラックにもアタッチすることができます。
criAtomEx_RegisterAcfFile("proj.acf", NULL, 0);
/* DSPバス設定のアタッチ */
criAtomExAsrRack_AttachDspBusSetting(rack_id, "DspBusSetting_0", NULL, 0);
:
:
/* 使用するASRラックをセット */
/* バス1へのセンドレベルを上げる */
criAtomExPlayer_SetBusSendLevelOffset(player, 1, 0.5f);
/* 再生開始 */
criAtomExPlayer_SetCueId(player, acb, 1);
void criAtomExAsrRack_AttachDspBusSetting(CriAtomExAsrRackId rack_id, const CriChar8 *setting, void *work, CriSint32 work_size)
DSPバス設定のアタッチ
CriBool criAtomEx_RegisterAcfFile(CriFsBinderHn binder, const CriChar8 *path, void *work, CriSint32 work_size)
ACFファイルの登録
void criAtomExPlayer_SetAsrRackId(CriAtomExPlayerHn player, CriSint32 rack_id)
ASRラックIDの指定


カスタムエフェクトプラグイン

ADXのオーディオエフェクトとしてCRI標準のエフェクトとは別に、ユーザーが作成したエフェクトやサードパーティー製のエフェクトをプラグインとして利用することができます。
CRI ADX Audio Effect Plugin SDKで作成されたエフェクトプラグインをVSTとして作成することで、ツール上でのパラメーター調整が行いやすくなります。
CRI ADX Audio Effect Plugin SDK詳しくは カスタムエフェクトプラグイン を参照ください。

ミキサーAISAC

ミキサーAISACは、 DSPバス設定 に対して設定することができるAISACです。

通常のAISACと同じように、AISACコントロール値によってDSPバスのパラメーターを変化させることができます。
ミキサーAISACを介して、以下のバスパラメーターを操作できます。
  • ボリューム
  • パン角度
  • バスセンドレベル
  • パンスプレッド
ミキサーAISACは、通常のAISACと比べて以下の仕様が異なります。
  • 他のAISACからAISACコントロール値を操作することはできません。
    AISACコントロール値の操作は criAtomExAsrRack_SetAisacControlById または criAtomExAsrRack_SetAisacControlByName で行います。
  • AISACモジュレーションは使用できません。
  • ランタイムで新しいミキサーAISACをアタッチすることはできません。

CRI Atom Craft上での設定方法などは、CRI Atom CraftマニュアルのミキサーAISAC を参照してください。

3rd Party製エフェクト

ADXには、ADX組み込みのエフェクトだけでなく、3rd Party製のエフェクトと連携して動作する機能があります。

McDSP社の各種エフェクト

McDSP社のエフェクトをADXに組み込み可能にしたADXの機能拡張 CRI ADX Audio Effect McDSP Expansion をハンドルしています。
CRI Atom Craftに組み込み可能なMcDSPエフェクトプラグインを1ヶ月無償評価可能です。
  • McDSPプラグインの組み込み方法については、ADX SDKの以下のディレクトリに配置されているドキュメントをご参照下さい。
    /cri/expansion/cri_audio_effect/

出力先への音声出力

ASRのサウンド出力方式

ASRのMasterOutの出力は、ASRの作成時に指定した出力先に送られます。 ASRの出力先は CriAtomExAsrConfig::sound_renderer_type に以下の値を設定することで指定することができます。
CRIATOM_SOUND_RENDERER_ASR を指定した場合、 CriAtomExAsrRackConfig::output_rack_id に指定した他の ASR へサウンドを出力します。
そのため、Atom ライブラリ初期化時に作成される ASR に対しては指定できません。
::CRIATOM_SOUND_RENDERER_SPATIAL を指定した場合は Atom 内部で立体音響の機能が有効化されます。
立体音響機能の詳細については「 立体音響 」を参照してください。

ASRの出力チャンネル数

ASR 作成時、 スピーカーマッピングと出力チャンネルをそれぞれ指定することができます。この2つのパラメータは、それぞれ以下の意味合いを持ちます。

スピーカーマッピングと出力チャンネル数の関係

スピーカーマッピングのデフォルトは CRIATOM_SPEAKER_MAPPING_AUTO で、出力チャンネル数の値に基づき自動的に決められます。 そのため多くのの場合 CriAtomExAsrConfig::output_channels のみを指定するだけでも正しい結果が得られます。
以下の図は、7.1 ch の音声素材を CriAtomExAsrConfig::output_channels に 8 を設定したASRで再生したときの流れです。
CriAtomExAsrConfig::speaker_mapping は自動的に CRIATOM_SPEAKER_MAPPING_7_1 に設定され、ASRは8chで動作し、プラットフォームにそのまま出力します。

出力チャンネル数とプラットフォーム

ASRの出力チャンネル数には、プラットフォームが対応している出力チャンネル数を超えた値を指定することも可能です。
その時、Atomライブラリはプラットフォームが対応している最大のチャンネル数を把握し、ASRの出力に対して更にダウンミックスを行います。
以下の図は最大5.1chに対応したプラットフォームに対して CriAtomExAsrConfig::output_channels に 8 を設定したときの流れです。
ASRは8chで動作しますが、その出力をAtomのプラットフォーム固有モジュールが 6ch にダウンミックスしてプラットフォームに出力します。
注意
CriAtomExAsrConfig::output_channels の値がプラットフォームの最大チャンネル数以上の時、ASRはその最大チャンネル数の信号をプラットフォームに送ります。
この時一部のプラットフォームは受け取った最大のチャンネル数の信号から、実際のデバイスのチャンネル数に合わせて更に変換を行うことがあります。この処理はプラットフォーム固有のものであり、Atom内のダウンミックスとは関係ありません。
覚え書き
スマートフォン向けAtomライブラリのASRは、 CriAtomExAsrConfig::output_channels のデフォルト値が 2 です。
PC 環境で同じ出力を確認したい場合、PCの CriAtomExAsrConfig::output_channels に 2 を指定することで、各種プラットフォーム間で一致したステレオサウンド出力が得られます。

ダウンミックス計算式

以下の値が異なる時、Atomの中でダウンミックスが発生することがあります。
Atom の中のダウンミックスは、下表の計算式に従います。
入力ch数 出力ch数 計算式 (出力スピーカ) = (入力スピーカ)
7.1.4.4ch 7.1.4ch L(mix) = L + Lbf * (-3dB)
R(mix) = R + Rbf * (-3dB)
C(mix) = C
LFE(mix) = LFE
Ls(mix) = Ls
Rs(mix) = Rs
Lb(mix) = Lb + Lbb * (-3dB)
Rb(mix) = Rb + Rbb * (-3dB)
Ltf(mix) = Ltf
Rtf(mix) = Rtf
Ltb(mix) = Ltb
Rtb(mix) = Rtb
7.1.4ch 7.1ch L(mix) = L + Ltf * (-3dB)
R(mix) = R + Rtf * (-3dB)
C(mix) = C
LFE(mix) = LFE
Ls(mix) = Ls
Rs(mix) = Rs
Lb(mix) = Lb + Ltb * (-3dB)
Rb(mix) = Rb + Rtb * (-3dB)
7.1ch 5.1ch L(mix) = L
R(mix) = R
C(mix) = C
LFE(mix) = LFE
Ls(mix) = Ls + Lb * (-3dB)
Rs(mix) = Rs + Rb * (-3dB)
5.1ch 4ch(L,R,Ls,Rs) L(mix) = L + C * (-3dB)
R(mix) = R + C * (-3dB)
Ls(mix) = Ls
Rs(mix) = Rs
4ch(L,R,Ls,Rs) 2ch L(mix) = L + Ls * (-3dB)
R(mix) = R + Rs * (-3dB)
2ch 1ch MONO(mix) = L * (-3dB) + R * (-3dB)
上記の表にない組み合わせの場合、段階的にダウンミックスします。
例えば、入力7.1ch->出力2chの場合、7.1ch->5.1ch->4ch->2chの順にダウンミックスします。
結果として、ダウンミックス計算式は以下のようになります。
L(mix) = L + C * (-3dB) + Ls * (-3dB) + Lb * (-6dB)
R(mix) = R + C * (-3dB) + Rs * (-3dB) + Rb * (-6dB)