我正在使用PySoX转换为音频文件:
import pysox
tfm = sox.Transformer()
tfm.build('./abc/1.raw', './abc/2.flac')
这是我得到的错误: " sox.core.SoxError:标准输出: Stderr:sox FAIL格式:文件“./abc/1.raw'”的输入格式错误:未指定采样率"
如何构建函数以包含采样率并完成转换?
答案 0 :(得分:1)
原因是原始音频文件不包含有关文件中音频格式的信息,因此您需要提供这些信息。采样率只是一个这样的指标,因此您还需要为其他一些参数执行此操作。
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_type
:str
或None
,默认=None
输入音频文件的文件类型。应该与文件扩展名相同,例如。 'mp3'或'wav'。
rate
:float
或None
,默认=None
输入音频文件的采样率。如果
None
推断出采样率。[...]
因此,您应该按如下方式设置费率:
tfm.set_input_format(file_type='raw', rate=8000, bits=16, channels=1, encoding='signed-integer')
您必须将值调整为您在该原始文件中实际编码的值。此方法调用将应用于具有“原始”扩展名的所有文件,因此如果您要处理多个此类文件,则无需再次调用上述文件。只有当不同的“原始”文件中的特征不同时,您才需要使用适当的值再次调用它。