Как передать аудиоданные с CD, считанные cdparanoia, на проигрыватель ALSA?

Я пытаюсь воспроизвести аудио 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. Или было бы достаточно просто передать аудио данные CD в большой байтовый массив (std::queue<char>) и затем, шаг за шагом, прочитайте как можно больше байтов из этого массива, чтобы я получил полный "кадр" ALSA?

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

1 ответ

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

Другие вопросы по тегам