私は1つのオーディオと他のチャンネルの無音が再生されている2つのチャンネルを再生しようとしています。マルチチャネルオーディオを異なるインスタンスで再生する際にエラーが発生しましたか?
$ gst-launch \
interleave name=i ! alsasink
filesrc location=/home/test1.mp3 \
! decodebin ! audioconvert \
! audio/x-raw-int,channels=1 ! i. \
audiotestsrc wave=silence \
! decodebin ! audioconvert \
! audio/x-raw-int,channels=1 ! volume volume=1.0 ! i.
10秒後には、最初に無音を再生し、2番目のチャンネルで一部の音声を再生したい。
$ gst-launch \
interleave name=i ! alsasink \
audiotestsrc wave=silence \
! decodebin ! audioconvert \
! audio/x-raw-int,channels=1 ! i. \
filesrc location=/home/test2.mp3 \
! decodebin ! audioconvert \
! audio/x-raw-int,channels=1 ! volume volume=1.0 ! i.
これは、2つの異なる端末でこれらのパイプラインを再生するか、1つをバックグラウンドで実行しながら、PC側で行うことができます。我々はgstalsasink.cでチェックするとき、それは非ブロックモードでsnd_pcm_openを呼び出している
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstAlsaSink:alsasink0: Could not open audio device for playback.
Device is being used by another application.
Additional debug info:
gstalsasink.c(697): gst_alsasink_open(): /GstPipeline:pipeline0/GstAlsaSink:alsasink0:
Device 'default' is busy
Setting pipeline to NULL ...
Freeing pipeline ...
:しかし、とき、私は、このようにその何かをam335xボード上の1つのパイプラインを演奏し、他の1を再生しようとしています。
CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_PLAYBACK,
SND_PCM_NONBLOCK), open_error);
なぜ、他のイベントがオーディオデバイスを使用するのをブロックするのですか?
PCサイドのalsasinkが完璧なので、誰も私の目標を達成するために何をすべきかを教えてもらえますか?
gnonlinは、時間がたつと2番目のパイプラインを再生する必要があるというリアルタイムのシナリオでは明確でないため、私の要件を満たしません。サイレントチャンネルが別のオーディオを再生するために使用される必要があります。そして、その罰金がどのようにPC側で同じパイプラインを使用している間、ターゲットボード上での投げエラー。 – Minion
大丈夫なので、ユースケースはラジオストリームのようになり、アナウンスをオーバーダビングしたいのですか? – ensonic
はい。最初のチャンネルで1つのオーディオだけが放送されているような場合は、今まではサイレントだった2番目のチャンネルで別のアナウンスを開始したいと思います。 – Minion