Я пытаюсь воспроизвести 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);
Тогда зачем блокировать другие события для использования аудиоустройства?
Может кто-нибудь подсказать мне, что делать для целевой стороны, так как alsasink со стороны ПК идеален.