UDN
Search public documentation:

AudioSystemJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

オーディオシステム

ドキュメントの概要: オーディオシステムのプラットフォーム非依存レイヤーに関する詳細な説明。

ドキュメントの変更ログ: John Scott により作成。

概要

UnrealEngine3 のオーディオシステムは、ベース オーディオクラスである UAudioDevice システムにより構成されています。ベース実装は、UAudioComponent オブジェクトの追加と削除のような基礎ロジックを処理します。UAudioComponent オブジェクトは、UAudioDevice で再生できるコンテンツです。UAudioComponent オブジェクトは USoundCue オブジェクトを含んでおり、この USoundCue オブジェクトは、実際のオーディオデータを含んだ USoundNode オブジェクトを参照します(例えば、USoundNodeWave は、wave オーディオデータを含むなど)。

UnrealEngine3 のオーディオコードで、プラットフォーム指定のものは、UAudioDevice オーディオベースクラスから派生したオーディオデバイスクラスに存在します。現在 3 つのプラットフォーム指定のオーディオデバイスがあります:UALAudioDevice (OpenAL PC)、 UXeAudioDevice (XBox360)、 そして UPS3AudioDevice (PlayStation3) です。

すべてのデバイスは、任意のソースローパスフィルター、bus reverbエフェクト、bus EQ フィルターおよびマルとチャンネル (4.0, 5.1, 6.1 および7.1) サウンド (ハードウェアが許可時)ごとにサポートします。すべてのプラットフォームができるだけ互いに近く音がでることを意図としています。

ベースオーディオクラスの実装については、Engine\Src\UnAudio.cpp と Engine\Inc\UnAudio.h の宣言文をご覧ください。 ベースオーディオコンポーネントの実装については、Engine\Src\UnAudio.cpp と Engine\Inc\UnActorComponent.h の宣言文をご覧ください。

共通コンセプト

オーディオデバイス

上に説明されているとおり、これはオーディオシステムのメインのインターフェースです。ロードされている資産のリストを維持し、リスナーに対応し、サウンドのソースを管理します。

  • Init - ハードウェアを初期化し、チャンネルを割り当て、オーディオを聴くためのその他すべての動作を行います。
  • TearDown - ハードウェアをシャットダウンし、すべてのリソースをフリーにしてシステムへ返します。
  • Update - リスナーの位置、方向、および速度を更新します。
  • Exec - コンソールにタイプされたデバッグのコマンドを処理します。

UAudioDevice::Update サウンド システムのための主な "Tick" 関数です。すべてのアクティブな AudioComponents (エンジンが望むサウンドを再生) を反復し、優先順位に応じてソートして、サウンド ソースを更新または新しいサウンドをスタートさせます。また、すべてのハウスキーピングおよびポージングを処理します。

サウンドソース

サウンドソース(または Voices)とは、最終的な出力にミックスされるサウンドのシングルソースを意味します。これらの数には限りがあり、ハードウェアまたは設定ファイルによって決定します。各ソースには位置、ボリューム、ピッチ、および速度があります。MaxChannels のデフォルトの数値はすべてのプラットフォームにおいて 32 で、内部的には 16 から 64 の間でクランプされています。MaxChannels を 0 に設定しておくと、すべてのオーディオシステムのコードを回避することができます。

  • Init (初期化) - 再生するサウンドアセットを検出し、ハードウェアへパスします。
  • Update (更新) - ボリューム、ピッチ、位置、および速度を、エンジンからハードウェアへ更新します。
  • Play (再生)- サウンドソースの再生を開始します。
  • Stop (停止) - サウンドソースの再生を停止します。
  • Pause (一時停止) - ソースのサウンド プレイバックを一時停止します。
  • IsFinished (終了) - サウンドの終了の処理、必要に応じた通知、キューしているバッファのダブル バッファを行います。

サウンド バッファ

サウンド バッファとは、wave データのコンテナを意味します。コンソール コマンドの「ListSounds」 (サウンドのリスト) により、現在ロードされているすべてのウェーブとそのフォーマットが表示されます。これらの数には、メモリが許す限り上限はありません。これらには通常 2 つの基本的なタイプがあります:サウンドシステムが完全にすべてのデータを含み、エンジンには最低限のコントロールしかない場合のレジデント タイプ、そして、サウンドがループした場合またはリアルタイムで解凍された(例えば、PC での ogg vorbis 解凍)場合にエンジンに知らせることができるようキューしているタイプです。

  • Init - サウンドリソースをロケートし、必要に応じてロードします。

UAudioComponent

エンジンは、AudioComponent によりオーディオデバイスと通信します。エンジンがサウンドを再生する場合、 UAudioDevice::CreateComponent を呼び出し、返し構造のプロパティを設定します。するとこの構造は、後に管理に利用されるようアクタのコンポーネントのリストに付記されます。ロケーションが UAudioDevice::CreateComponent 関数にパスされると、サウンドが短い場合は単純な距離のカル チェックが行われ、コンポーネントが作成されない場合があります。常に UAudioDevice::CreateComponent からの NULL リターンをチェックすることが重要です。

UActorComponent で一番重要なフィールドは

class USoundCue* SoundCue; // コントロールと共に再生されるサウンド
BITFIELD bUseOwnerLocation:1; // これが関連付けられているアクタのロケーションで空間化
BITFIELD bAllowSpatialization:1; // 3D の空間においてこのサウンドを空間化
FVector Location; // 関連付けられていない場合に、空間化のために使用する位置
FVector ComponentLocation; //関連付けられている場合に、空間化のために使用する位置

サウンドクラス

サウンドキューはそれぞれサウンドクラスに割り当てられています。サウンドクラスは、[Engine.AudioDevice] の下の Config\DefaultEngine.ini ファイルで定義されています。 これらのサウンドクラスは、 FSoundGroupProperties クラスを投入するサウンドキューの、クラスのプロパティを指定します。これらは構造として階層的で、ペアレント プロパティの一部はすべての子ノードに伝達されます。ルートのサウンドクラスは「Master」と呼ばれ、必要です。SoundModeVoice は、ゼロ(EQ 効果なし)または1(EQ 効果あり)です。

これらのヒエラルキーはセットアップされ、プロパティはサウンドクラスエディタで変更されます。これはサウンドキューエディタと非常に良く似た方法で動作します。

このグループはボリュームおよび/またはピッチのダッキングを適用するのに使われます。どのグループがどの効果を適用するかを定義するために、DefaultEngine.ini ファイルのサウンドクラス プロパティセクションを使います。UTGame はこれをイラスト化するためのテストマップ"DM-SoundMode"をもっています。これがどのように作動するかを見るため、コマンドライン上にSetSoundMode 'bandpass' および 'highpass'を呼び出します。1つ注意しておきたいことは、サウンドグループプロパティは階層的には動作しません。

リバーブ効果

必要に応じて使われるターゲットプラットフォームのパラメータを使用して、プラットフォーム非依存法に実装されます。パラメータは FAudioEffectsManager::ReverbPresets テーブル内でコードによって定義されますが、将来的にはエディタにも公開されます。UnPlayer.cpp では、コードはプレーヤがいる反響ボリュームのための反響設定を取得し、これらを補間のために FAudioEffectsManager::SetReverbSettings へパス、さらにプラットフォーム固有のレイヤーへパスします。パラメータは補間されるため、リバーブが断続することはありません。リバーブボリュームを作成するには、ビルダブラシを右クリックし、[Add Volume] (ボリュームの追加) --> [Reverb Volume] (リバーブボリューム) の順にクリックします。 FAudioEffectsManager は基本クラスで、プラットフォーム固有のインターフェースはここから派生します。

AmbientZone(アンビエントゾーン)エフェクト

Reverb ボリュームには'AmbientZone' 設定が導入されています。これは以前アンビエントサウンドのオクルージョンをエミュレートしていました。ボリュームおよび/またはローパスフィルターエフェクトは内部の時に外部のサウンドが、外部の時に内部のサウンドが適用されます。例えば、レベル全体を覆う非常に大きなアウトドア アンビエント サウンドウィンドエフェクトを配置することができますが、プレイヤーが中に移動するとサウンドはフェードダウンし、プレイヤーがフェードアップすると同じ音量のサウンドが再生されます。

付加ドキュメンテーションをご覧になりたい場合は、 AmbientZones Overview? ページをご覧ください。

DistanceModel 減衰

減衰とはプレイヤーが遠ざかるとサウンドもフェードアウトするように聞こえる機能です。フェーディング率はDistanceModel プロパティにより定義されます。

更なる情報については DistanceModel Attenution ページをご覧ください。

Low Pass Filter(ローパスフィルタ)

これは現在ノードに減衰サウンドノードより実装されています。有効にするフラグとminおよびmax distanceがあります。これは実際にハイシェルフ・フィルターとして実装され、最短距離で何もないものから、最長距離での高周波でないコンポーネントまでを実装します。

サウンドモード

サウンドモードは、サウンドクラスのセットに変更を適用します。サウンドグループは、AmbientやWeaponsなどのサウンドクラスの廃止されている名前です(パッケージグループでの衝突のため)。

希望のサウンド変更でのサウンドクラスエフェクトの配列をセットアップします。例えば、シネマティックダイアログの場合、ダイアログのボリュームを上げ、エフェクトのボリュームを下げます(これらは階層的に適用されません)。最初の遅延後に、モードのフェードインが(フェードインタイム上にて)開始するようにサウンドモードを設定することは、持続期間を継続させ、デフォルトにフェードバック(フェードアウトタイム上にて)します。持続期間が< 0 とは、他のモードが設定されるまで、そのモードが継続されるということです。デフォルトsoundmode エントリを持つ、soundmode と呼ばれるパッケージがあります。これは、パッケージに新しいサウンドモードを追加します。新しいサウンドモードがgameplay スクリプトによりトリガされます。

UTGameにあるDM-SoundMode マップがすべてを説明しています。 Run it and type 'setsoundmode quick', 'setsoundmode slow' or 'setsoundmode loud' at the command line.PIEにて実行、独自のオンザフライを編集または作成することができます。

下記のボリュームダッキング例は、使用例です。

ボリュームダッキング

ボリュームダッキングは通常、ダイアログなど(ムービーに限定されず)試聴が必要なものを除き他のサウンドグループすべてのボリュームを減少するために使われます。その制御は次の通りです:

  • ダッキングの原因となっている サウンドグループの特定 (ダイアログ)。
  • グループからサウンドがトリガされると、他のグループのボリュームがある時間 X の希望した量(フェード)だけ減少 (FadeStartTime = 0.3 秒)。
  • 他のグループのボリューム減少分の合計 (FadeAmount = -0.4).
  • ダッキンググループからのサウンドが中止時に、他のグループのボリュームがある時間 X の通常の量(フェード)に戻る (FadeStopTime = 0.2 秒).
  • ダッキングプロセス(例:音楽)へのサウンドグループ、または影響がない Exceptions と呼ばれるサウンドグループの例外。

ボリュームに上記のシステムを制限する代わりに、ピッチ、EQおよび他のフィルタを追加することでさらにコントロールが可能です(Modeシステム)。

例えば、ムービーのラウドセクション(例:戦闘中など)で、通常のボリュームで一人の人がもう一人の人に話しかけているシーンがある場合は、他のサウンドすべてを ダックした ためその人達の会話を聞くことができます。すべての戦闘/アンビエント/エフェクトサウンドは、そのダイアログが再生時により静かに再生されます。

ゲームの場合は、アンビエントサウンドグループ(およびその他の)でボリュームを ダック します。

サウンドのインポート

現在エンジンでは、非圧縮のリトルエンディアン 16 ビット wave のファイルの、すべてのサンプルレート(サンプルレート 44100 Hz または 22050 Hz を推奨)でのインポートをサポートしています。

仕様  
フォーマット .Wav
ビットレート 16
スピーカーチャンネル モノ、ステレオ 2.1, 4.1, 5.1 6.1, 7.1

標準のサウンドファクトリでインポートを行うと、シンプルなサウンドノード ウェーブを生み出し、これはプレイバックの際にサウンドキューにより参照されます。これらのサウンドは、モノラルあるいはステレオのいずれかです。サウンド サラウンド ファクトリ(および特別な命名法)と共にインポートすると、マルチチャンネル(5.1 など)サウンドが潜在的に可能となります。すべてのプラットフォームにおいて 8 チャンネルまでのサウンドが圧縮可能ですが、これらを効率的にプレイバックできるプラットフォームは限られます。パッケージの保存プロセスにおいて、プラットフォームのネイティブのフォーマットに変換するすべての作業がなされます。スピーカーの厳密なマッピングはないため、チャンネルの数により、どのチャンネルがどのスピーカーで再生されるかが決まります(下の表を参照)。

  拡張子 4.0 5.1 6.1 7.1  
FrontLeft (前方左) _fl * * * *  
FrontRight (前方右) _fr * * * *  
FrontCenter (前方中央) _fc   * * *  
LowFrequency (低周波) _lf   * * *  
SideLeft (サイド左) _sl * * * *  
SideRight (サイド右) _sr * * * *  
BackLeft (後方左) _bl     * * BackRight (後方右) チャンネルがない場合は、これが BackCenter (後方中央) チャンネルに該当
BackRight (後方右) _br       *  

圧縮の設定を微調整することにより、すべてのプラットフォームにおいて類似した品質を維持することができます。数多くのサウンドをテストした結果、弊社のミュージシャンは XMA 品質における 40 が、ogg vorbis 品質における 0.15 と同等であると判断しました。

ビジュアル編集ツール

サウンドキューエディタ

sound waves 形式としてオーディオファイルをインポートすることができ、可視の サウンドキューエディタオーディオノード  を呼び出したモディファイヤを適用します。

サウンド品質プレビューア

汎用ブラウザ にあるSoundNodeWave資産を右クリックし Sound Quality Previewer を選択すると、エンジンは圧縮設定 5, 10, 15, 20, 15, 30, 35, 40, 50, 60 でサウンドを圧縮します。任意の品質設定をクリックすることができ、16ビットPCMに拡張しなおされた後にサウンドが聞こえます。これはメモリ設定に対するベストなfidelity (忠実度)を選択するのに使われます。 OK をクリックすると、現在選択されている設定がwave に表示されます。

マルチチャンネルのインポート/エクスポート

汎用ブラウザ 内で

インポートするには:

  • メニューから Import (インポート)を選択します。
  • "Surround_fl.wav"、 "Surround_fr.wav"、 "Surround_sl.wav"、 "Surround_sr.wav"ファイルを選択します。
  • 保存したいパッケージを選択し OK to all をクリックします。

これにより"Surround"と呼ばれる4つのチャンネル資産が作成されます

エクスポートするには:

  • メニューから Export (エクスポート)を選択します。
  • ファイルを保存したい場所を選びます。

これによりスピーカー拡張子付きのオリジナルモノファイルが保存されます。

方法

最もラウドな潜在ボリュームにつきましては、バンド幅全体に作業が必要です。例えば、ボリューム 1.0 でのステレオファイルは、モノファイルの2倍の音量になります。例としては、4つモノファイルがあったとすると音量は4倍になります。しかし、全体の閾値に達してしまいクリップやゆがみのアウトプットが開始します。

既存のサウンドキューで、2.0までのボリューム設定は、オーディオファイルの認知音量を増加しますが、2.0以上のものは増加しません。単独キューは決してゆがみませんが、複数のキューがゲーム内で再生時にオーバーロードの原因となるため最大音量にしないようにしてください。

一貫したボリューム案を練るか、その他の一般的なガイドラインを考案してください。:

Dialog ~1.4
Music ~0.75
Weapons ~1.1
Ambience ~0.5

音楽の例外を伴ったすべてのオーディオのプラットフォームにわたり一貫性を管理するため、全域にわたってモノラルアセットを使うよう考慮してください。

サウンドメモリ使用の最適化

コンテンツをオーサリング時、audio fidelityを管理する一番低いサンプルレートを使うことが最適です。すべてのサンプルレートはすべてのプラットフォーム用にサポートされています。例えば、さらに高い必要がある(例:40.0キロヘルツ)高域周波数(ガンショットなど)で再生されたエフェクトに対して、通常22.1キロヘルツでもまだ聞こえがよいダイアログなどです。同様のヒューリスティックは品質設定に適応されます。

以前、distance crossfade ノードはdistance でのサウンド用のローパスフィルタを適用するために使われていました(ドライサウンドは同じサウンドのローパスフィルタされたバージョンでミックスされました)。しかし、すべてのプラットフォームはローパスフィルタでの減衰をサポートしており、サウンドのフィルタされたバージョンが必要ないということです。

テストマップ

UTGame にはオーディオシステム機能性を確認するための複数のテストマップがあります。-

  • DM-SoundLoop - 無限ループや通知サウンド付きのループをテストする。
  • DM-SoundReverb - ローパスフィルタでのreverb および 減衰をテストする。
  • DM-SoundMultichannel - 5.1 プレイバックをテストする。
  • DM-SoundMode - サウンドモードをテストする。利用可能なテストモードはloud, quiet, quick, slow, lowpass, bandpass, highpassです。
  • DM-SoundInterior - アンビエントゾーンの機能性をテストする。

ストリーミング

Unreal Engine オーディオシステムは、任意のオーディオコンテンツの同時ストリーミングをサポートしておらず、オーディオを含むパッケージのストリーミングのみをサポートしています。可能な限り多くのバンド幅をテクスチャストリーミングに投入したかったのと、Unreal Tournament や Gears of War などのような敏速なアクションゲームの遅れは受け入れ難く、この時点ではFaceFX アニメーションの同期は追加の日課となるものだったため、この方法は優遇されていました。代替策として Gears of war 用に特別な ダイアログシステム が作成されました。

デバッグコマンド

  • ResetSoundState:任意の、およびすべてのでバックコマンドをオフにする。
  • TestLowPassFilter:すべてのソースにローパスフィルタを適用する。
  • IsolateDryAudio:リバーブされていないサウンドのみを残すreverb サウンドをフィルタアウトする。
  • IsolateReverb:reverb サウンドのみを残すドライソースをフィルタアウトする。
  • SetSoundMode x:Sound group プロパティからボリュームおよびピッチ変更を適用し、UnAudioEffects.cppにて定義された表からEQ フィルタを適用する。
  • ListSounds, ListSoundDurations, ListAudioComponents:現在ロードされたサウンドの詳細のリストをする。
  • ListWaves:現在ロードされたサウンドの詳細のリストする。

既知の問題点

  • TTP 60174:gameplay ウィンドウが移動されるとオーディオーが再び再生する。
  • TTP 64605:-nosound はPIEにプロパゲートしない。
  • TTP 80463:AmbientSoundSimple アクタは常にエディタにてリアルタイムプレビューでリスタートしない。
  • TTP 92710:Delay ノードを使っているサウンドキューは、Generic ブラウザまたはサウンドキューエディタにて正しくプレビューしない。
  • TTP 120345:AmbientSoundSimpleToggleable ボリュームフェードが破損している。
  • TTP 122495:非Looping Node が接続時にミキサーの後に置換するとLooping Node が作動しない。
  • TTP 122683:Distance Crossfade ノードが不正にSoundNodeWave プレイバックを再トリガする。

プラットフォーム仕様