Module Sounds(音声や効果音)

訳注: Music(楽曲)とは別のモジュール・ファイルです。
このページの情報のほとんどは MadVader 氏の Music modding reference より。
module_sounds.py 冒頭に書かれた指定方法
音声のレコードには下記の項目がある。
(1) 音声 ID。このレコードを特定するために使われる。
(2) フラグ群。指定可能なフラグは header_sounds.py を参照のこと。
(3) 音声ファイル。ファイルの名前。

この module_sounds.py というファイルでは、MOD で使う効果音や声を指定します。module_music.py と同様で、内容は単にタプルを集めたリストです。例えば、兵や馬のエージェント(シーン内で具現化した姿)の足音、人物の叫び声、馬の鼻息、ぶつかり合う音、遠隔武器(飛び道具)の発射音など、様々な場面で使われます。

フラグ群

下記のフラグを指定できます。

sf_2d 音量レベルを、カメラとの距離に依存させず、一定にする。2D 音声の場合でもステレオにする必要がある。
sf_always_send_via_network agent_play_sound 命令を使ってサーバ上で音声を再生時、クライアントがこのエージェントから 20 メートル以上離れている場合(デフォルトでは制限されるが)、全クライアントに常に同期される [1]
sf_looping 再生を繰り返す。
sf_priority_x 音声同士の優先順位。xの部分に 1~15 の範囲で指定。全ての音声チャンネルが現在(同時に)使用されていると、優先順位が上の音声が下の音声よりも使われやすくなる。距離も、結果の優先度に影響する [2]
# sound priority of 0-256 (0 hightest 256 lowest) calculated as such:
# float pf = (base_dist / (base_dist + dist)) * ((1.0f - priority_effect) + priority_effect * (priority_squared ? get_priority() * get_priority() : get_priority()));
# sounds prio lower then 225 override other sounds in the list with lowest priority.
sound_base_dist = 3.5
sound_priority_effect = 0.45
sound_priority_squared = 1
log_sound_priority = 0
sf_start_at_random_pos 音声ファイル内のランダムな位置から再生する。
sf_stream_from_hd この音声をハードディスクからストリーミング(つまり必要な時に動的にロード)させる。ファイル・サイズが大きく、頻繁に再生されない場合のみ推奨。
sf_use_next_for_far 既製 MOD 「With Fire and Sword」(WFaS)用の音声フラグ。(Natice でも機能するか、要調査)。
sf_vol_x 音声の音量。xの部分に 1~15 の範囲で指定。値が大きいほど音量レベルが上がる。

最適な音声ファイル形式

このトピックに関する知識のほとんどは、xenoargh 氏の多くのテストに基づいています。彼はゲームの状態を停止させる一見ランダムなロックアップの問題を正確に特定し、解決策を見つけたことにかなり自信を持っていました。そして問題はグラフィックスではないことが判明しました。HERR_BUFFER_LOCK エラーは、VRAM の枯渇が原因ではなく、CPU のロック状態が発生したことを示す症状でした。本当のロックアップの問題は音声、特にファイル形式にあるようです。彼が全ての OGG ファイル(Taleworlds の全ての音声を含む)を 16 ビット 22kHz モノラル WAV に変換したところ、この HERR_BUFFER_LOCK エラーは消えました [3]。 あるいは、モノラル、44.100 kHz、16 ビット PCM の音声ファイルが提唱されています [4]

楽曲トラック(Music モジュール)のほうでは、理論上、効果音として OGG および WAV(および MP3)ファイルを使えます [5]。 ただし、Warband には音声に関して既知の問題があります。使われている音声エンジンは、WAV ファイルでのパフォーマンスが大幅に向上しています。OGG ファイルだけの場合は、パフォーマンスが低下し、遅かれ早かれエンジンがクラッシュします。短いファイルはすべて WAV にする必要があります。WAV ファイルを使うと、Viking Conquest のような DLC(ダウンロード型コンテンツ)ではファイル・サイズの合計が増し得ますが、全体的には有利になります [6]

OGG ファイルのほうがサイズが「小さい」というのはよくある誤解ですが、ディスク上で小さくなっているだけです。ゲーム・エンジンが起動するとすぐに、全ての OGG ファイルが解凍され、メモリに配置されます。6 KB のファイルが 10 MB にもなったりします [6]。 Warband は、単に無料のリファレンス解凍ライブラリを再利用しています。ただし、ゲーム・エンジンは汎用ツールと FMOD というミドルウェアを使ってストリーミング部分を実装する必要があるので、おそらく非効率的な使い方をしています。音声(Sound フォルダ下)と楽曲(Music フォルダ下)は それでも MOD パッケージの大した部分を占めていませんが、音声を WAV として配置するのは かなり無駄に思えそう。ただし、CPU が進行中の全処理のうち、Warband がボトルネックになり、ゲーム・エンジンが Vorbis/MP3 音声ファイルのデコード/解凍に追加のスレッドや CPU コアを使わない場合、フレームごとにその追加の処理を行うと、当然ながら WAV 形式には無いオーバヘッドが増します。これは知識に基づく推測に過ぎませんが [7]

逆に、頻繁に再生されない大きなサウンド ファイルは、ハードディスクからストリーミングすべきです。そのほうが、起動時にメモリにロードされず、メモリに さほど負担をかけないからです。ハードディスクの速度低下による問題を避けるために、これらの音声ファイルは OGG にしたほうがよいです。ストリーミングをさせるには module_sounds.py の各エントリで音声フラグ sf_stream_from_hd を指定します [6]

その他の注意点

音声ファイル数の上限について質問。 Caba`drin, Modding Q&A。回答。 MadVader, Modding Q&A

人物が倒された時の音声を変更。 Somebody, Modding Q&A

sf_priority_x による優先順。 MadVader, Modding Q&A

音声に関する情報。 Caba`drin, Modding Q&A

WFaS には module_sound エントリ(叫び声など)に追加の派閥タプルがある。非常に優れているが、Warband で機能するかは不明。 Somebody, Modding Q&A

馬の種類ごとに異なる音声は可能(The Last Days of the Third Age(TLD)では warg(ワーグ/ウォーグ)と馬で実現済み)。 既存の音声のレコードにはダミーを指定し、ミッション・トリガーを作って迂回。 MadVader, Modding Q&A(訳注: play_sound_at_position 命令で馬の位置に再生している。)

訳注: 他に参考になりそうなリンク。

ラクダが馬のように鳴くのを避けたい。ゲーム・エンジンは 1 種類の乗り物しか認識せず、サウンドを変更すると、すべての乗り物でサウンドが変更される。デフォルトのサウンドを無効にし、コードでサウンドを作成する方法はありそう。質問者 Cyclohexane、複数の回答者 Mount sound question

象の鳴き声を変えたい。TLD で warg の声の例がある。itp_disable_agent_sounds を指定した上で、 custom_warg_sounds というミッション・テンプレートのようにエージェントを見分けて agent_play_sound 命令を実行する。 Eärendil Ardamírë, How do I add custom sound to a mount?

2D を指定すると、単にステレオ音声を各チャンネルの左右の音量で再生し、距離による減衰はありません。3D なら、聞き手からの距離によって音量を決め、左右のチャンネルは、音源に対するリスナーの向きによって変わります。Native は明らかに 3D オーディオをサポートしています。(dstn 氏による)

マルチ・プレイヤーで馬の音声を変更して消す。 Lumos, Modding Q&A

module_sounds.py の 1 行に指定できる音声の数。Viking Conquest では 32 個という実績あり。 kalarhan, Modding Q&A

指定が 32 個を超えると、"more than 32 samples per sound" というエラー。 _Sebastian_, Modding Q&A

特定の音声が聞こえる距離の限界を設定したい。直接は指定できないが、優先順で似たことができる。 _Sebastian_, Modding Q&A

音声の優先順。 _Sebasitan_, Modding Q&A (訳注: "plus this" の後ろ)

弾丸系の武器ごとに命中音を変えたかったが、遅延と Native の既定音を消す処理が煩雑になった。質問 Modding Q&A。優先順の指定を加えて解決。回答 kalarhan, Modding Q&A

音速のシミュレート(1000 m 離れていると 3 秒かかるなど)。マルチ・プレイヤーの MOD "Battle of Europe" で実績あり。音声のスロット sound_slot_XXXX を使う。 _Sebastian_, Modding Q&A

音声変更ガイド(チュートリアル), Colt, Sound Modification Guide