Ошибка воспроизведения многоканального звука в разных случаях? - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь воспроизвести 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 со стороны ПК идеален.

1 Ответ

1 голос
/ 04 апреля 2012

может быть небольшая задержка для закрытия устройства alsa на встроенном оборудовании.Проверьте с помощью термоэлемента, какой процесс все еще открыт.Также рассмотрите возможность использования gnonlin для разработки последовательного воспроизведения потоков.Это позволит повторно использовать существующий приемник звука.

...