Используйте (Python) Gstreamer для декодирования аудио (в данные PCM) - PullRequest
8 голосов
/ 18 августа 2010

Я пишу приложение, которое использует привязки Python Gstreamer для воспроизведения аудио, но сейчас я пытаюсь также просто декодировать аудио - то есть я хотел бы читать данные, используя decodebin и получите необработанный буфер PCM.В частности, я хочу читать порции файла пошагово, а не читать весь файл в память.

Некоторые конкретные вопросы: Как я могу сделать это с помощью Gstreamer?С пигстом конкретно?Есть ли какой-то конкретный элемент-приемник, который мне нужно использовать для чтения данных из потока?Есть ли предпочтительный способ чтения данных из pygst Buffer объекта ?Как мне контролировать скорость, с которой я потребляю данные (а не просто входить в «основной цикл»)?

1 Ответ

5 голосов
/ 18 августа 2010

Чтобы вернуть данные в ваше приложение, рекомендуется использовать appsink .

На основе простого аудиоплеера, такого как этот (и заменить oggdemux/ vorbisdec by decodebin & capsfilter with caps = "audio / x-raw-int"), изменить autoaudiosink на appsink и подключить "new-buffer" сигнал к функции python + установить "emit-signal"к Истине.Функция будет получать декодированные порции данных PCM / int.Скорость декодирования будет зависеть от скорости, с которой вы можете декодировать и потреблять.Поскольку сигнал нового буфера находится в контексте потока Gstreamer, вы можете просто спать / ждать в этой функции, чтобы контролировать или замедлять скорость декодирования.

...