Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Проиграть бинарный аудио файл |
Автор: Vicul 21.10.2010, 11:25 |
Всем привет, я хочу получать инфу с микрофона. Здесь проблем нет, подключаюсь к /dev/audio и и все записываю в бинарный файл, скажем data.au. Теперь надо бы переслать его на динамики, сделать на прямую (типа cat ./data.au > /dev/audio)не могу, ОС выдает, что устройство занято. Что приходит на ум, это надо этот файл преобразовать в какой-нибудь звуковой формат и юзать его через штатный плеер. Вообщем любые идеи, как прослушать полученный файл. |
Автор: bsa 21.10.2010, 13:06 |
Причем тут C/C++? Если тебе нужно написать программу, которая будет это делать, то посмотри формат WAV файла. Там ничего сложного, просто заполнишь правильно структуру, запишешь ее перед блоком аудио данных и все. Если же ты ищешь готовое программное решение, то проще использовать уже готовые программы аудиозахвата, например, Audacity. |
Автор: Vicul 21.10.2010, 13:13 |
>Причем тут C/C++? потому как все написано у меня на С. И мне нужно решение на нем. За WAV спасибо, сейчас попробую |
Автор: Vicul 21.10.2010, 16:45 |
Cделал на WAV, но когда запускаю на плеер - некачественный звук, это так должно быть если напрямую забираешь инфу с /dev/audio ?? |
Автор: djamshud 21.10.2010, 16:50 |
А заголовки wav выставлены правильно и соответствуют записанному потоку? ЗЫ. Раньше можно было просто направить дамп в /dev/dsp, сейчас это тоже можно сделать, но с бубном. Может быть проще будет нагуглить такой бубен? |
Автор: Vicul 21.10.2010, 17:18 | ||
С дампом не получается, вот даю все коды, закомнтированные коды в main() это вариант с дампом
|
Автор: Vicul 21.10.2010, 17:45 | ||
добавил канал в заголовок, стало лучше
Шумы ушли, но до идеала далеко. Может у меня чтото с микрофоном? Хотя в скайпе работает. |
Автор: Vicul 21.10.2010, 18:50 |
Вообщем поменял /dev/audio на /dev/dsp заработало! Всем спасибо! |
Автор: bsa 21.10.2010, 23:40 |
Почитай про PulseAudio, может стоит воспользоваться его API. |
Автор: xvr 22.10.2010, 10:54 | ||
Ошибка в строке 46, должно быть
PS. Ваша AddRcvBuffer - это мясорубка для динамической памяти ![]() |
Автор: Vicul 24.10.2010, 09:23 |
Конечно там лажа, за несколько секунд дамп возрастает до 500К, на боевой проге там нужно делать свопинг. Кусок я привел показать, как я формирую WAV заголовок. Ладно, проблема не в динамическом буфере, проблема в другом - как передать дамп обратно на /dev/dsp пока без левых библиотек? ОC не даст открыть его для записи. У вас есть идеи коллега? |
Автор: xvr 24.10.2010, 11:33 |
Поменять права на /dev/dsp |
Автор: Vicul 25.10.2010, 07:48 |
запустил с рутом - не пошло sudo cat data.au > /dev/dsp bash: /dev/dsp: Устройство или ресурс занято |
Автор: bsa 25.10.2010, 09:44 |
Vicul, конечно работать не будет. Так как во всех современных дистрибутивах в качестве системного микшера используется pulseaudio и именно она "занимает" все устройства ввода и вывода звука. Поэтому, я лично, рекомендую использовать именно ее. Ну или что-то, что позволит работать через нее с более простым API (например, OpenAL). |
Автор: Vicul 25.10.2010, 10:39 | ||
Спасибо, надо переворить это. |