Skip to main content

Module normalizer

Module normalizer 

Source
Expand description

任意のデバイスフレーム(任意 SR / 任意 ch / interleaved f32)を 2 段で 正規化・再変換する。

入力(任意 SR/ch)
  │  第 1 段(内部正規化・不変)
  │   ・チャンネル mix(→stereo)
  │   ・SR 変換(rubato, →48000)
  ▼
内部正規形: f32 / 48000 Hz / stereo / 20ms = 960 frame
  │  第 2 段(出口・新規)
  │   ・チャンネル変換(stereo→mono 平均 / mono→stereo 複製 / そのまま)
  │   ・SR 変換(rubato, 48000→output.sample_rate。等しければパススルー)
  ▼
出力: f32 / output.sample_rate / output.channels / 時間ベース 20ms 固定
       (48k=960 / 16k=320 / 8k=160 frame)

既定の出力 {48000, 2} なら第 2 段は丸ごとパススルー(内部正規形がそのまま出る)。 第 1 段の SR 変換は in_sample_rate == 48000 で、第 2 段の SR 変換は output.sample_rate == 48000 でそれぞれパススルーになる。

どちらの rubato リサンプラも FixedAsync::Input(固定入力チャンク)で、生成された 可変長出力を内部 accumulator に集約し、20ms 相当の境界で切り出す。端数はリサンプラ 内部と accumulator が次へ持ち越す。

PTS は出力チャンク先頭サンプルに対応する device_pts を、入力→出力サンプルオフセット の比で追跡して割り当てる。seq はストリーム層が付与する。

Structs§

Normalizer
入力デバイスフレームを内部正規形(48k/stereo/960frame)へ正規化し、さらに 出力フォーマット(output.sample_rate / output.channels / 時間ベース 20ms) へ再変換するステートフルな 2 段変換器。

Constants§

CHUNK_FRAMES
内部正規形 1 チャンクのフレーム数(20ms @ 48kHz)。第 1 段の切り出し境界。