LINUX.ORG.RU

Не получается выхватить кусок записи с микрофона.


0

1

Идея такова: жму кнопку пишется wav файл, отпускаю запись прекращается
Сделал так:

arecord -q -f cd -r 16000 -N --channels=1 | ./kt -k 38 > file.wav
arecord пишет в stdout поток с моего микрофона,
а ./kt - приложение перенаправляющее поток stdin в stdout
когда нажата кнопка 0x38 (левый Alt).
Каждый раз когда жму кнопку kt записывает весь входящий поток,
пока не будет отпущена кнопка, далее формирует wav
заголовок и выбрасывает все что получилось в stdout.
Получившийся файл нормально воспроизводится, но с ним что-то
не так, т.к. не конвертируется он ни sox'ом ни flac'ом
Первый ругается на неожиданный конец файла, а второй
на «got partial sample»
Вот собственно сам файл, который получился: файл

Может кто-то делал уже и у него были похожие проблемы?
Может что-то не так с выравниваем битов, когда я читаю поток?
Может есть более удобный способ записать звук по нажатию клавиши?

Спасибо.



Последнее исправление: Glaciuse (всего исправлений: 1)

Ответ на: комментарий от lazyklimm

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

anonymous
()
Ответ на: комментарий от lazyklimm

Потому что нужно получать файл по нажатию,
а следовательно с каждым нажатием формировать
новый заголовок.

anonymous
()

-f cd подразумевает -r 44100 -c 2, а ты явно указываешь -r 16000 -c 1. Может там в результате не та частота дискретизации и не то количество каналов, которые ты ожидаешь?

float
()
Ответ на: комментарий от float

Да, arecord выдает именно 16000 и 1 канал, тоже самое
прописывается в хедер выходного файла прогой kt.
Вот что и странно, что vlc читает получившийся файл, а например,
на винде пробовал открыть WM Player'ом и он не хочет.

Glaciuse
() автор топика
Ответ на: комментарий от Glaciuse

Всем спасибо, проблема была оказывается в неправильном расчете длины блока данных :/

Glaciuse
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.