编辑:我想使用libsox以编程方式转换wav文件的采样率,音频格式,频道等。
在libsox手册页中,有一些我可以使用的函数,但我对于该做什么一无所知。任何人都可以给我一些关于如何做的步骤?
帮助?
有人可以解释一下吗?
The function sox_write writes len samples from buf using the format
handler specified by ft. Data in buf must be 32-bit signed samples and
will be converted during the write process. The value of len is speci-
fied in total samples. If its value is not evenly divisable by the num-
ber of channels, undefined behavior will occur.
答案 0 :(得分:1)
我建议使用libsndfile和libsamplerate
的组合SRC提供一小组转换器 允许质量被交易 反对计算成本。目前 最佳转换器提供了 信噪比为145dB -3dB通带从DC延伸到理论最佳带宽的96% 一对给定的输入和输出 抽样率。
http://www.mega-nerd.com/libsndfile/
- 能够读写大量文件格式。
- 简单,优雅且易于使用的应用程序编程 接口
- 适用于Unix,Win32,MacOS等。
- 动态格式转换,包括endian-ness交换,类型 转换和位宽缩放。
- 从文件读取浮点数据时的可选规范化 包含整数数据。
- 能够以读/写模式打开文件。
- 能够在不关闭文件的情况下写入文件头(仅限 打开文件或写入 读/写)。
- 能够向库查询所有支持的格式和 检索描述每个的文本字符串 格式。
答案 1 :(得分:0)
嗯,我想你的问题与最后一句话有关。如果您有一个交错缓冲区,缓冲区中的样本数必须按通道数除以,因为这是您要写入的每个通道样本的数量。例如,假设您有L和R通道;你的数据在缓冲区上会是这样的:
[0] 1st sample - L
[1] 1st sample - R
[2] 2nd sample - L
[3] 2nd sample - R
...
[n-1] n/2-th sample - L
[n] n-th sample - R
希望它有所帮助。