alsa を使用して 2 つの wav ファイルを同時に再生しようとしています。wav ファイルのサンプルレートが異なることに注意してください。これは可能であり、オーディオ ストリームが混合されてオーディオ チップに送信されます。(私は組み込み Linux デバイスで開発しています。) しかし、1 つのストリームが通常より数倍速く再生されています。だから、リサンプリングに問題があると思います。
/etc/asound.conf で dmix プラグインが有効になっているデフォルトのデバイスがあり、サンプルレートを 44100Hz に設定しています。しかし、私の理解では、ALSA はすべてのストリームを内部で 48khz にリサンプリングし、それらを混合してから、希望する出力レート (私の場合は 44.1khz) に再度ダウンサンプリングします。
これは正しいです?
alsa-lib を使用してオーディオ ファイルを再生する場合、その特定の wav ファイルのすべてのパラメータを設定する必要がありますか?
例: 8000hz モノラル 16 ビット
- snd_pcm_hw_params_set_rate() を 8000hz に設定
- snd_pcm_hw_params_set_format を 16bits LE/BE/signed/unsigned に
- モノの snd_pcm_hw_params_set_channels
これにより、デバイスのハードウェア設定が変更されますか?それとも、この特定のオーディオ ストリームに対してのみ変更されますか?
明確化をいただければ幸いです。
編集:
以下を誤解している可能性があります: [ALSA]
ソフトウェア ミキシングが有効な場合、ALSA はすべてを同じ周波数 (サポートされている場合はデフォルトで 48000) に再サンプリングすることを強制されます。dmix は、顕著な音質の低下をもたらす貧弱なリサンプリング アルゴリズムを使用します。
明確にするために、dmix デバイスの asound.conf でレートを 44100 に変更すると、すべてが自動的に 44100 にリサンプリングされてミックスされるはずですか?
したがって、私の 2 つのミックスされたオーディオ ファイルの 1 つが正しくない速度になっている理由は、おそらく alsa-lib を使用したストリーム設定が正しくないことが原因でしょうか?
一度に 1 つの wav ファイルを再生すると、両方のストリームが正しいように見えるためです。最初のファイルが再生されているときにのみ、ストリームで別のファイルをミックスすると、最初の wav ファイルの速度が変更されます。この時点でハードウェア設定は同じであることに注意してください。stream2 のハードウェア パラメータを設定 (および再生) すると、stream1 で何かが変わるのはなぜですか?