как сделать playback pcm с частотой, отличной от 48 кГц
Есть плата SK-AT91SAM9G45 с кодеком AC97. Нужно считывать звук (pcm S16_LE) с микрофона и писать звук в аудио-выход (т.е. дуплекс). При использовании частоты 48 кГц все работает нормально. Если указать другую частоту (необходимы другие, меньшие частоты, например, 8 кГц), то возникают проблемы с воспроизведением (playback) звука. Создается впечатление, что на вход звук идет с нужной частотой, а на выход 48 кГц, не зависимо от выставленной частоты.
Такая же проблема возникает, если вместо моей программы использовать «стандартные» arecord и aplay. Т.е. при 48000 Гц все нормально, а при 8000 Гц в stdout пишутся строки underrun!!!
(Пример запуска arecord -r 8000 -f S16_LE | aplay -r 8000 -f S16_LE)
Версия библиотеки alsa 1.0.24.1
Версия ядра 3.2.23
dmesg пишет про аудио
atmel_ac97c atmel_ac97c.0: Atmel AC97 Controller at 0xc4830000, irq = 24
В своей программе я пытаюсь установить частоту 8 кГц через snd_pcm_set_params
(например, snd_pcm_set_params(playback, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 1, 8000, 1, 25000). Функция отрабатывает успешно.
snd_pcm_dump выдает среди прочего
exact rate : 8000 (8000/1)