【发布时间】:2018-04-29 10:48:12
【问题描述】:
我在过去 2 周内搜索了这个问题,但找不到算法或解决方案。我有一些简短的 .wav 文件,但它具有 MULAW 压缩,并且 python 在 wave.py 中似乎没有可以成功解压缩它的功能。所以我开始自己用python构建一个解码器。
我在基本元素中找到了一些关于 MULAW 的信息:
所以我需要一些指导,因为我不知道如何处理从有符号短整数到全波信号。这是我迄今为止收集到的初步想法:
所以从 wiki 我得到了一个 u-law 压缩和解压缩方程:
所以从压缩方程来看,看起来输出被限制在 -1 到 +1 的 float 范围内,并且带有从 –32,768 到 32,767 的有符号短整数,所以看起来我需要将它从short int 到 float 在特定范围内。
现在,老实说,我以前听说过量化,但我不确定我是否应该先尝试去量化,然后再解压缩,或者以其他方式,或者即使在这种情况下也是一样的。 .. 教程/文档的术语可能有点棘手。
我正在使用的波形文件应该包含类似于语音合成的“A”声音,我可以通过比较某些音频软件和自定义波形分析器中的 2 个波形来验证成功,但我真的想减少反复试验这个过程的一部分。
所以我的想法是:
u = 0xff
data_chunk = b'\xe7\xe7' # -6169
data_to_r1 = unpack('h',data_chunk)[0]/0xffff # I suspect this is wrong,
# # but I don't know what else
u_law = ( -1 if data_chunk<0 else 1 )*( pow( 1+u, abs(data_to_r1)) -1 )/u
那么,我是否需要采取某种算法或关键步骤,形式为 first: decompression, second: 量化 : 第三 ?
由于我在谷歌上找到的所有内容都是如何读取.wav PCM 调制的文件类型,而不是在出现野压缩时如何管理它。
【问题讨论】:
-
查看G.711,了解基于此的编解码器的实际示例。
-
什么是lseg、linbuf、logbuf?
标签: python pcm waveform mu-law