Запись звука в OSS (Linux)
От: sang150189  
Дата: 02.06.12 08:47
Оценка:
Здравствуйте!

Я пытаюсь реализовать запись звука посредством OSS под линуксом. вот моя простая тестовая программа :

http://pastebin.com/mhSYhYMr

Прблема в том, что когда я пытаюсь использоват 16-битный формат (AFMT_S16_LE/AFMT_S16_NE/AFMT_S16_BE), звук записывается некорректно — фрагменты аудио пропадают/пропускаются. Но если поставить 8-битный формат (AFMT_U8), то всё работает без проблем — записывается отлично.

Я проверял эту тестовую программу на Ubuntu Linux 11.10 :

g++ main.c
padsp ./a.out

Я пробовал разные пути решения проблемы — использование select() для определения доступности данных для чтения, изменение частты сэмплирования, использование SNDCTL_DSP_GETISPACE для определения сколько данных доступно для чтения, использование SNDCTL_DSP_GETBLKSIZE для чтения рекомендованного размера фрагмента, но ничего из этого не помогло.

Я заметил что read() часто возвращает меньше данных, чем было запрошено, я думаю это также может быть причиной проблемы.

Кто-нибудь может что-нибудь сказать по поводу этой проблемы, или указать что неверно в моём коде, или предоставить работающий OSS код? В интернете что-то с этим совсем туго.
oss audio linux c
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.