2 つの独立した wavefile を重ねて再生するために必要な API 設定/呼び出しは何ですか? そうしようとしましたが、リソースビジーエラーが発生しています。問題を解決するためのいくつかの指針は非常に役立ちます。
snd_pcm_prepare()
以下は、2 番目の wavefileのエラー メッセージです。
"Device or resource busy"
dmix
複数のアプリケーションが入出力デバイスを共有できるように、 ALSA のプラグインを構成できます。
これを行うための構成例を以下に示します。
pcm.dmixed {
type dmix
ipc_key 1024
ipc_key_add_uid 0
slave.pcm "hw:0,0"
}
pcm.dsnooped {
type dsnoop
ipc_key 1025
slave.pcm "hw:0,0"
}
pcm.duplex {
type asym
playback.pcm "dmixed"
capture.pcm "dsnooped"
}
# Instruct ALSA to use pcm.duplex as the default device
pcm.!default {
type plug
slave.pcm "duplex"
}
ctl.!default {
type hw
card 0
}
これにより、次のことが行われます。
dmix
プラグインを使用して新しいデバイスを作成し、複数のアプリが出力ストリームを共有できるようにしますdsnoop
入力ストリームに対して同じことを行う別の using を作成しますduplex
を使用して入力と出力をサポートする新しいデバイスにこれらをマージしますasym
duplex
新しいデバイスをデフォルト デバイスとして使用するように ALSA に指示するhw:0
デフォルトのデバイス (alsamixer など) を制御するために使用するように ALSA に指示します。これを または のいずれかに貼り付けれ~/.asoundrc
ば、準備完了/etc/asound.conf
です。
詳細については、http://www.alsa-project.org/main/index.php/Asoundrc#Software_mixingを参照してください。
ALSA はミキサーを提供しません。複数のオーディオ ストリームを同時に再生する必要がある場合は、それらを独自にミックスする必要があります。
これを実現する最も簡単な方法は、WAV ファイルをfloat
サンプルにデコードして追加し、整数サンプルに戻すときにクリップすることです。
または、デフォルトのオーディオ デバイス ("hw:0" のようなハードウェア デバイスではない) を、再生したいストリームごとに 1 回、複数回開いてみて、dmix ALSA プラグインが読み込まれ、ミキシングが提供されることを期待することもできます。機能。
この構成も使用できます
pcm.dmix_stream
{
type dmix
ipc_key 321456
ipc_key_add_uid true
slave.pcm "hw:0,0"
}
pcm.mix_stream
{
type plug
slave.pcm dmix_stream
}
~/.asoundrc または /etc/asound.conf で更新します
コマンドを使用できます
wavファイルの場合
aplay -D mix_stream "ファイル名"
raw または pcmfile の場合
aplay -D mix_stream -c "チャンネル" -r "レート" -f "フォーマット" "ファイル名"
オーディオ ファイルに従って、チャンネル、レート、フォーマット、およびファイル名の値を入力します。