2009-12-01 2 views
0

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

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

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

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

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

cat /dev/ttyUSB0 | aplay 

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

Благодаря до сих пор
Марвин

+0

делает ли пользовательская программа на C чем-либо, кроме открытия узла устройства и чтения из него? – hillu

+0

yep. он выполнен на заказ, только для этой цели. он регистрируется в raw, wav и matlab-стиле – marvin2k

+0

У вас есть исходный код для пользовательской программы? Если да, опишите, что он делает. В противном случае запустите его с помощью 'strace (1)' и опубликуйте журнал своей активности. – hillu

ответ

0

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

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

0

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

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