libsox转换wav文件采样率等

时间:2009-02-05 00:45:02

标签: c audio

编辑:我想使用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.

2 个答案:

答案 0 :(得分:1)

我建议使用libsndfile和libsamplerate

的组合

http://www.mega-nerd.com/SRC

  

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

希望它有所帮助。