Как передать необработанные PCM-данные из / dev / ttyUSB0 на звуковую карту? - PullRequest
0 голосов
/ 01 декабря 2009

Я работаю в настоящее время на небольшом микро-хиппоне, подключенном к ПК через FPGA. ПЛИС подает сырой поток данных через UART / USB в мой компьютер. Я могу записывать, воспроизводить и анализировать данные.

Но я не могу воспроизвести «живой» аудиопоток напрямую.

То, что работает, - это сохранение потока данных в необработанном формате PCM с помощью специальной C-программы и передача содержимого файла в aplay. Но это добавляет задержку в 10 секунд в поток данных ... Не очень хорошо для демонстрации или тестирования.

tail -f snd.raw | aplay -t raw -f S16_LE -r 9000

У кого-то есть другая идея, как быстрее получить аудиопоток в мои уши? Почему

cat /dev/ttyUSB0 | aplay

не работает? (ничего не происходит)

Спасибо до сих пор
Марвин

Ответы [ 2 ]

0 голосов
/ 26 февраля 2017

Казалось бы, это домен программы alsaloop. Однако для работы этой программы требуются два устройства ALSA, и по ее параметрам вы можете видеть, что она прилагает значительные усилия для согласования потока данных устройств, что вам не обязательно делать самостоятельно.

В этой теме Stackoverflow рассказывается о том, как создать виртуальное устройство пользовательского пространства, доступное для ALSA: возможно, этот путь стоит того.

0 голосов
/ 02 декабря 2009

Вам нужен API, который позволит вам передавать аудиобуферы прямо на звуковую карту. Я не делал этого на Linux, но я использовал для этой цели FMOD . Вы можете найти другой API в этом вопросе . SDL кажется популярным.

Общая идея заключается в том, что вы устанавливаете потоковый буфер, а затем ваша программа c помещает входящие байты в массив. Размер выбирается так, чтобы сбалансировать отставание от джиттера во входящем потоке. Когда массив заполнен, вы передаете его в API и начинаете заполнять другой, пока проигрывается первый.

...