6

2 つの独立した wavefile を重ねて再生するために必要な API 設定/呼び出しは何ですか? そうしようとしましたが、リソースビジーエラーが発生しています。問題を解決するためのいくつかの指針は非常に役立ちます。

snd_pcm_prepare()以下は、2 番目の wavefileのエラー メッセージです。

"Device or resource busy"
4

5 に答える 5

22

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を参照してください。

于 2013-01-18T12:25:32.400 に答える
5

ALSA はミキサーを提供しません。複数のオーディオ ストリームを同時に再生する必要がある場合は、それらを独自にミックスする必要があります。

これを実現する最も簡単な方法は、WAV ファイルをfloatサンプルにデコードして追加し、整数サンプルに戻すときにクリップすることです。

または、デフォルトのオーディオ デバイス ("hw:0" のようなハードウェア デバイスではない) を、再生したいストリームごとに 1 回、複数回開いてみて、dmix ALSA プラグインが読み込まれ、ミキシングが提供されることを期待することもできます。機能。

于 2013-01-18T12:10:10.300 に答える
0

この構成も使用できます

   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 "フォーマット" "ファイル名"

オーディオ ファイルに従って、チャンネル、レート、フォーマット、およびファイル名の値を入力します。

于 2016-09-02T07:18:47.057 に答える