Skip to content

間隔を空けたレシーバーとチャンネル間コヒーレンス ​

部屋そのものに左右はありません。ステレオの部屋鳴りは、2 か所から聴いたときに初めて生まれ、その 2 か所の距離が部屋の広がり方を決めます。libsonare のステレオ用ルーム関数はこれをそのままモデル化しています。部屋を間隔を空けた 1 対の無指向性レシーバーで聴き、その距離を receiverSpacingM で指定します。

1 つの部屋に 2 本のマイク ​

同じ無指向性マイクを 2 本、少し離してホールに立てたとします。どちらもどこにも向いておらず、違うのは立っている位置だけです。それぞれが直接音を拾い、次に自分の位置に届く壁の反射を拾い、最後に密な後期残響を拾います。直接音と初期反射は、2 つの位置にわずかに違う時刻で届きます。後期残響はあらゆる方向から同時に届く波の場で、そうした場の中の 2 点が同じ音を聴くのは、波長が 2 点の間隔より十分長い周波数に限られます。音響学ではこれを理想的な拡散音場と呼びます。あらゆる方向から等しいエネルギーが届き、届く波どうしに位相の関係がない音場です。

2 つの信号が周波数ごとにどれだけ似ているかはチャンネル間の相関値で表し、−1 から 1 の係数をとります。1 なら同一、0 なら無関係、負の値は 2 つが逆向きに動くことを表します(コヒーレンスはこの関係の大きさを表す近い量で、0 を下回りません)。拡散音場の中で距離 d 離れた 2 点の相関値は、周波数 f で次のとおりです。

sin(kd) / (kd)、k = 2π·f / c、c = 343 m/s

低い周波数では 1 から始まり、f = c / (2d) で最初に 0 になり、その上ではわずかに負へ振れてから 0 へ近づきます。既定の 0.5 m では 343 Hz です。それより下では 2 本のテールが一緒に動き、上ではほぼ独立します。

間隔で何が変わるか ​

相関の高いチャンネルは狭く聞こえ、モノラルに足しても痩せません。相関のないチャンネルは広く聞こえ、モノラルに足すとレベルが下がります。振幅ではなくエネルギーが足し合わされるためです。間隔は、この 2 つが入れ替わる周波数を動かします。

  • 間隔が狭いと、スペクトルのかなり上までテールの相関が残ります。部屋鳴りは中央に寄って狭く聞こえ、モノラルへのフォールドダウンにも耐えます。
  • 間隔が広いと、相関が消える帯域が低域まで下がります。一緒に動くのは最低域のオクターブだけになり、部屋鳴りが音像全体に広がります。

間隔で音源が定位するわけではありません。エンジンはレシーバーの対をリスナーを中心に置き、その軸を水平かつ音源方向に直交させます。そのため 2 つのレシーバーは音源から等距離にあり、直接音は両チャンネルの同じサンプルに届きます。広がりは反射とテールから生まれます。間隔を空けた実際のマイクペアでも、広がりの出どころは同じです。

エンジンでの測定値 ​

10 × 8 × 4 m、吸音率 0.15 の部屋で、音源をリスナーから 4 m の位置に置き、roomMorphStereo の両入力チャンネルに単位インパルスを入れました。最初の 150 ms を除いた 2 本の出力テールの、帯域ごとの相関です。

receiverSpacingM63–125 Hz250–500 Hz1–2 kHz4–8 kHz
0.021.001.000.930.09
0.170.980.75−0.080.00
0.5(既定)0.860.00−0.020.00
20.300.00−0.020.00
40.210.00−0.020.00

0.5 m の行は式のとおりの位置に来ます。低域はまだ一緒に動き、250–500 Hz 帯は 343 Hz の最初のゼロをまたいでいます。この間隔で 2 本のテールをモノラルに足すと、チャンネル平均に対して 1 kHz より上で 3.00 dB、100 Hz より下で 0.20 dB 下がります。独立な信号と、ほぼ同一の信号のそれぞれに対する理論どおりの値です。

レシーバーの対を使う関数 ​

  • roomMorphStereo({ left, right, ...options }) はステレオ録音をターゲットの部屋へ寄せます。左チャンネルは左レシーバーの応答で、右チャンネルは右レシーバーの応答で畳み込まれます。receiverSpacingM の範囲は (0, 4] m で、省略すると 0.5 です。0、4 を超える値、有限でない値は RangeError になります。
  • effects.reverb.room と effects.acoustic.roomMorph インサートは、ステレオのストリップでは対を使い、モノラルのストリップでは単一リスナーの応答を使います。これらの receiverSpacingM キーでは 0 が「0.5 m を使う」を意味します。
  • roomMorph と synthesizeRir はモノラルです。リスナー 1 点だけをレンダリングし、対は置きません。

レシーバーのどちらかが部屋の外に出る配置は、移動されずに拒否されます。動かしたレシーバーは別の部屋鳴りになるからです。したがって側壁までの距離が間隔の半分より近いリスナーは失敗し、エラーはレシーバーとその座標を示します(left receiver at (7.000, -0.150, 1.500) lies outside the room)。インサート記述子の最大値 2.5 m は、この同じ規則をインサート既定の部屋と配置で評価した値で、そこでは 2.5 m を超えると右のレシーバーが壁に当たります。記述子の coupledWith が、これを動かす部屋と配置のキーを挙げています。もっと大きな部屋なら 4 m まで構築できます。

空間ルームスキャナーは、推定または選択した部屋の試聴に、既定の 0.5 m 間隔の roomMorphStereo を使い、推定したオクターブ帯域ごとの bandAbsorption も渡します。そのため左右の耳に別々のテールが届きます。

libsonare でのレシーバーの対の作り方

receiver_pair は 2 つのレシーバーを、リスナーから音源への方向に直交する水平軸に沿って ±d/2 ずらします(音源がリスナーの真上か真下にあるときは y 軸)。synthesize_rir_pair は、イメージソース法による初期反射、混合時刻、クロスフェードをレシーバーごとに別々に計算します。後期テールは synthesize_late_tail_pair から来ます。左のテールはモノラルの後期テール用ノイズ列そのもので、右のテールはその列と独立にシードした 2 本目の列を 1/3 オクターブ帯ごとに γ·left + √(1 − γ²)·right で混ぜ、そのあと共通の帯域別減衰エンベロープを掛けます。γ は sinc(2π·f·d/c) を帯域の周波数範囲で平均した値です(late_tail_pair_coherence)。レベル合わせのスケールは中央のリスナー位置で 1 つだけ求め、両チャンネルに使います。検証では acoustic.receiver_spacing_out_of_range と acoustic.receiver_outside_room が報告されます。2 チャンネルのインサートでは、音源テールの抑制ゲインを大きいほうのチャンネルから求めて両チャンネルで共有するため、抑制で音像がずれません。

関連: 音源距離と DRR、部屋の形状と容積、モノラル互換性、ルーム音響解析、エフェクトインサート