首页 > 解决方案 > 如何将 cdparanoia 读取的 CD 音频数据交给 ALSA 播放器?

问题描述

cd_paranoia我正在尝试使用(从包中)播放音频 CD,cdio并将读取的数据移交给 ALSA 声音输出。当然是缓冲的。我现在的问题如下:如本示例程序中所述,调用paranoia_read ()返回int16_t*包含一个扇区(2,352 字节)的音频数据,然后可以将其转换为char*.

snd_pcm_writei ()另一方面,ALSA方法需要 a 中的一大块音频数据char*,其长度将通过使用该snd_pcm_hw_params_get_period_size ()方法确定,该方法基本上返回发送到声音设备的字节数,直到它触发中断。还出售此示例源代码

这两种方法几乎肯定会返回不同的值,因为 ALSA 帧的大小与 CD 扇区的大小不同。这意味着我必须以cd-paranoia某种方式划分数据,以便它们适合 ALSA 的框架结构。或者将 CD 音频数据流式传输到一个大字节数组std::queue<char>

有什么提示吗?谢谢你。

标签: c++alsacdda

解决方案


snd_pcm_writei()处理任意数量的帧。


推荐阅读