c++ - 如何将 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>
(
有什么提示吗?谢谢你。
解决方案
snd_pcm_writei()
处理任意数量的帧。
推荐阅读
- javascript - WordPress InnerBlocks Gutenberg 不正确保存
- opencv - 使用带有烧瓶的网络摄像头
- r - 如何计算两个变量(Var1=boys,Var2=girls)中一个变量(Variable=boys)在行中进行 10 次左右观察的比例
- python - 为熊猫数据框中的行和列设置“元名称”
- swift - 将 PassthroughSubject<[Int], Never> 映射到 AnyPublisher
- javascript - PayPal支付成功后显示HTML按钮
- python-3.x - 如何在python中的数组中创建多个范围?
- python - 使用 pandas 对一列中的文本数据进行分类,并在下一列中说明相应的类别
- c# - C#打开文本文件,如双击
- dart - 通过 http 请求(或类似)获取 dart 版本列表