首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取u-LAW编码的WAV文件,并以不压缩的方式保存它。

读取u-LAW编码的WAV文件,并以不压缩的方式保存它。
EN

Stack Overflow用户
提问于 2020-12-18 13:18:45
回答 2查看 1.1K关注 0票数 0

我有一个WAV文件,该文件已经使用u-LAW编码进行了压缩,而且我需要它完全没有压缩,因为wavio不支持压缩文件。

我调查过audioop声称支持这种压缩

该模块提供了对a-LAW、u-LAW和Intel/DVI ADPCM编码的支持.

显然,函数audioop.ulaw2lin()做的正是我所需要的,但我不知道如何读取我的文件以将它传递给该函数。

我尝试了以下几点:

代码语言:javascript
复制
import wave
wav_file = wave.open(PATH_TO_AUDIO_FILE)

但是,正如我前面所说,由于音频采用u-LAW编码,这段代码引发了一个例外:

代码语言:javascript
复制
Error: unknown format: 7

有人知道怎么做这个手术吗?

EN

回答 2

Stack Overflow用户

发布于 2020-12-18 16:50:46

audioloop将原始字节作为输入,因此您必须以原始二进制文件的形式打开wav文件,并且只提取数据,而不提取文件的头文件。

算法是:

  1. 打开压缩文件。
  2. 读取数据块。
  3. 转换为PCM。
  4. 添加wav头。

通常wav头长为44个字节,因此要获得数据部分:

代码语言:javascript
复制
with open('input.wav') as f:
    f.seek(44, os.SEEK_SET)
    data = f.read  # Caution here!

为了避免内存异常,您可能必须以较小的块读取数据。

现在你可以转换数据了-

代码语言:javascript
复制
converted_data = audioloop.ulaw2lin(data, width)

其中width是所需的输出宽度-1为8位,2为16位。

对于将数据写入有效的wav文件,我建议使用scipy --它有一个波模块

票数 0
EN

Stack Overflow用户

发布于 2021-11-28 16:21:20

我已经处理这个问题很长时间了,但是我用ffmpeg解决了这个问题。

在Ubuntu上,可以通过以下方式安装ffmpeg

代码语言:javascript
复制
sudo apt install ffmpeg

然后,要将原始G.711μ-law转换为wav,只需使用以下命令(如果您想要另一个示例速率,只需在命令中替换μ):

代码语言:javascript
复制
ffmpeg -f mulaw -ar 44100 -i input_raw_g711u_file output_file.wav

现在,您可以像普通的wav文件一样打开output_file.wav

如果您想在Python中转换它,只需使用subprocessos模块来调用这个命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65357764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档