Как захватить голосовые данные PCM через последовательный порт и обработать?

У меня есть телефонный модем (SIM5320EVB), который передает голосовые данные на ttyUSB0 в формате PCM с 1600 байтами каждые 100 мс. Я могу видеть данные на minicom. Как захватить данные PCM в Linux (я использую Ubuntu) и прослушать их вживую на лету или хотя бы сохранить и воспроизвести данные? Доступно ли какое-либо приложение или API? Если подход хотя бы будет предложен, я попытаюсь разработать его.


person kishoreinme    schedule 15.12.2011    source источник


Ответы (2)


cat /dev/ttyUSB0 > my_cap_file
# make some noise for 5s for example, then hit ^C

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

person zed_0xff    schedule 15.12.2011
comment
Это сработало отлично. Спасибо. он был подписан 16-битным PCM на частоте 8000 Гц. как сделать это в реальном времени, т.е. как воспроизводить необработанные данные по мере их поступления через tty. Мое намерение состоит в том, чтобы направить эти аудиоданные модема на аудиоинтерфейс сопряженной основной прикладной платы. - person kishoreinme; 15.12.2011
comment
что-то вроде cat /dev/ttyUSB0 > /dev/pcm0. Я не знаю, как установить PCM0 на 8 кГц - person zed_0xff; 15.12.2011
comment
мне нужно создать устройство PCM для этой цели. ? или мои небольшие знания говорят о том, что нужно написать драйвер, который считывает последовательные данные и создает устройства PCM на верхнем уровне из ядра. является ли этот подход действительным. Я попытался погуглить, чтобы создать устройство PCM, но не смог, так как мне не хватает терминологии. - person kishoreinme; 16.12.2011
comment
/dev/pcmX создаются драйвером ядра для вашей звуковой карты AFAIK - person zed_0xff; 16.12.2011
comment
Вы также можете использовать svox или aplay с нужными параметрами. - person xryl669; 17.02.2014

Установите sox для команды play и используйте: play -r 8000 -c 1 -t raw -e signed-integer -b 16 /dev/ttyUSB0. То есть: битрейт 8 кГц, 1 канал (моно), необработанные данные (PCM), формат — целое число со знаком шириной 16 бит, и данные могут быть прочитаны с ttyUSB0.

Для этого требуется sox, чтобы иметь возможность воспроизводить аудио в вашей системе; У меня был успех с pulseaudio для базовой звуковой системы.

Возможно, вам потребуется изменить размер буфера для play. По умолчанию он буферизует данные, что создает небольшую, но очень заметную задержку.

person Clay    schedule 25.03.2016