Здравствуйте!
Я пытаюсь реализовать запись звука посредством 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 код? В интернете что-то с этим совсем туго.