在不同情况下播放多声道音频时出错?
问题描述:
我正试图播放其中一个音频和另一个频道中的静音正在播放的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秒后我想在第一声道播放静音,在第二声道播放一些音频。
$ 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.
这可以在电脑端完成,而玩这些管道在两个不同的终端或使其中的一个后台运行。但是,当我在玩上am335x板上的一个管道,并试图打另外一个,它是这样的:
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 ...
当我们gstalsasink.c检查,便调用snd_pcm_open在非阻塞模式。
CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_PLAYBACK,
SND_PCM_NONBLOCK), open_error);
那么为什么它阻止其他活动使用的音频设备?
任何人都可以建议我为目标端做什么,因为PC端alsasink是完美的。
答
可能会有一些延迟关闭嵌入式硬件上的alsa设备。检查定影器哪个过程仍然打开。还可以考虑使用gnonlin来开发流的顺序播放。这将重用现有的音频接收器。
gnonlin将不会满足我的要求,因为它在实时情况下不确定,在什么时候应该播放第二个管道。它随机出现的情况可能是需要用于播放另一个音频的无声通道。以及如何在PC端使用相同的管道,同时在目标板上丢掷错误。 – Minion 2012-04-04 12:17:15
好吧,所以用例更像是一个无线电流,你想在其中公布一个配音? – ensonic 2012-04-05 07:46:35
yes.Its喜欢如果只有一个音频在第一个频道上播放,我们希望通过第二个声音开始另一个声音,这个声音到现在为止一直保持沉默,那么我得到的错误是“设备繁忙”。 – Minion 2012-04-08 06:53:49