Как передать аудиоданные с CD, считанные cdparanoia, на проигрыватель ALSA? - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь воспроизвести аудио-CD с помощью cd_paranoia (из пакета cdio) и передать считанные данные на звуковой выход ALSA. Буферизован, конечно. Моя проблема теперь заключается в следующем: Как указано в этой программе примера , вызов paranoia_read () возвращает int16_t*, содержащий один сектор (2352 байта) аудиоданных, которые затем могут быть преобразованы в char*.

Метод ALSA snd_pcm_writei (), с другой стороны, нуждается в фрагменте аудиоданных в char*, длина которого должна быть определена с помощью метода snd_pcm_hw_params_get_period_size (), который в основном возвращает количество байтов, отправленных в звуковое устройство, пока не сработает прерывание. Продайте также этот пример исходного кода .

Два метода почти наверняка вернут разные значения, потому что кадр ALSA имеет другой размер, чем сектор CD. Это означало бы, что мне придется как-то разделить данные, которые cd-paranoia доставляет мне, чтобы они вписывались в структуру кадра ALSA. Или было бы достаточно просто передать аудиоданные с компакт-диска в большой байтовый массив (std::queue<char>), а затем, шаг за шагом, прочитать как можно больше байтов из этого массива, чтобы я получил полный «кадр» ALSA?

Есть намеки? Спасибо.

1 Ответ

0 голосов
/ 10 июля 2019

snd_pcm_writei() обрабатывает любое количество кадров.

...