我有一个WAV文件,该文件已经使用u-LAW编码进行了压缩,而且我需要它完全没有压缩,因为wavio不支持压缩文件。
我调查过audioop和声称支持这种压缩
该模块提供了对a-LAW、u-LAW和Intel/DVI ADPCM编码的支持.
显然,函数audioop.ulaw2lin()做的正是我所需要的,但我不知道如何读取我的文件以将它传递给该函数。
我尝试了以下几点:
import wave
wav_file = wave.open(PATH_TO_AUDIO_FILE)但是,正如我前面所说,由于音频采用u-LAW编码,这段代码引发了一个例外:
Error: unknown format: 7有人知道怎么做这个手术吗?
发布于 2020-12-18 16:50:46
audioloop将原始字节作为输入,因此您必须以原始二进制文件的形式打开wav文件,并且只提取数据,而不提取文件的头文件。
算法是:
wav头。通常wav头长为44个字节,因此要获得数据部分:
with open('input.wav') as f:
f.seek(44, os.SEEK_SET)
data = f.read # Caution here!为了避免内存异常,您可能必须以较小的块读取数据。
现在你可以转换数据了-
converted_data = audioloop.ulaw2lin(data, width)其中width是所需的输出宽度-1为8位,2为16位。
对于将数据写入有效的wav文件,我建议使用scipy --它有一个波模块。
发布于 2021-11-28 16:21:20
我已经处理这个问题很长时间了,但是我用ffmpeg解决了这个问题。
在Ubuntu上,可以通过以下方式安装ffmpeg:
sudo apt install ffmpeg然后,要将原始G.711μ-law转换为wav,只需使用以下命令(如果您想要另一个示例速率,只需在命令中替换μ):
ffmpeg -f mulaw -ar 44100 -i input_raw_g711u_file output_file.wav现在,您可以像普通的wav文件一样打开output_file.wav。
如果您想在Python中转换它,只需使用subprocess或os模块来调用这个命令。
https://stackoverflow.com/questions/65357764
复制相似问题