在不同情况下播放多声道音频时出错?

问题描述:

我正试图播放其中一个音频和另一个频道中的静音正在播放的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来开发流的顺序播放。这将重用现有的音频接收器。

+0

gnonlin将不会满足我的要求,因为它在实时情况下不确定,在什么时候应该播放第二个管道。它随机出现的情况可能是需要用于播放另一个音频的无声通道。以及如何在PC端使用相同的管道,同时在目标板上丢掷错误。 – Minion 2012-04-04 12:17:15

+0

好吧,所以用例更像是一个无线电流,你想在其中公布一个配音? – ensonic 2012-04-05 07:46:35

+0

yes.Its喜欢如果只有一个音频在第一个频道上播放,我们希望通过第二个声音开始另一个声音,这个声音到现在为止一直保持沉默,那么我得到的错误是“设备繁忙”。 – Minion 2012-04-08 06:53:49