设置"采样率"文件属性使用PySoX进行转换?

时间:2017-04-04 19:54:58

标签: python sox

我正在使用PySoX转换为音频文件:

import pysox
tfm = sox.Transformer()
tfm.build('./abc/1.raw', './abc/2.flac')

这是我得到的错误: " sox.core.SoxError:标准输出: Stderr:sox FAIL格式:文件“./abc/1.raw'”的输入格式错误:未指定采样率"

如何构建函数以包含采样率并完成转换?

1 个答案:

答案 0 :(得分:1)

原因是原始音频文件不包含有关文件中音频格式的信息,因此您需要提供这些信息。采样率只是一个这样的指标,因此您还需要为其他一些参数执行此操作。

引自sox.sourceforge.net

  

SoX可以使用'自描述'和'原始'音频文件。 “自描述”格式(例如WAV,FLAC,MP3)具有完整描述随后的音频数据的信号和编码属性的标题。 'raw'或'headerless'格式不包含此信息,因此必须在SoX命令行中描述这些信息的音频特征,或者从输入文件的那些信息中推断出这些信息。

     

以下四个特征用于描述音频数据的格式,以便可以使用SoX进行处理:

     
      
  • 采样率

         

    每秒样本的采样率('赫兹'或'赫兹')。数字电话传统上使用8000 Hz(8 kHz)的采样率,尽管如今,16甚至32 kHz变得越来越普遍。音频光盘使用44100 Hz(44.1 kHz)。数字音频磁带和许多计算机系统使用48 kHz。专业音频系统通常使用96 kHz。

  •   
  • 样本量[...]

  •   
  • 数据编码[...]
  •   
  • 频道[...]
  •   

pysox documentation描述了set_input_format方法:

  

set_input_format(file_type=None, rate=None, bits=None, channels=None, encoding=None, ignore_length=False)

     

设置输入文件格式参数。这在处理没有文件扩展名的音频文件时非常有用。覆盖任何先前设置的输入文件参数。

     

如果未明确调用此函数,则从文件扩展名或文件头中推断出输入格式。

     

<强>参数:

     
      
  • file_typestrNone,默认= None

         

    输入音频文件的文件类型。应该与文件扩展名相同,例如。 'mp3'或'wav'。

  •   
  • ratefloatNone,默认= None

         

    输入音频文件的采样率。如果None推断出采样率。

  •   
  • [...]

  •   

因此,您应该按如下方式设置费率:

tfm.set_input_format(file_type='raw', rate=8000, bits=16, channels=1, encoding='signed-integer')

您必须将值调整为您在该原始文件中实际编码的值。此方法调用将应用于具有“原始”扩展名的所有文件,因此如果您要处理多个此类文件,则无需再次调用上述文件。只有当不同的“原始”文件中的特征不同时,您才需要使用适当的值再次调用它。