gpt4 book ai didi

python - 如何使用 Python 正确解码 .wav

转载 作者:太空狗 更新时间:2023-10-30 01:13:52 25 4
gpt4 key购买 nike

我正在对 WAVE 音频文件的基本频率分析进行编码,但在将 WAVE 帧转换为整数时遇到了麻烦。

这是我的代码的相关部分:

import wave
track = wave.open('/some_path/my_audio.wav', 'r')

byt_depth = track.getsampwidth() #Byte depth of the file in BYTES
frame_rate = track.getframerate()
buf_size = 512

def byt_sum (word):
#convert a string of n bytes into an int in [0;8**n-1]
return sum( (256**k)*word[k] for k in range(len(word)) )

raw_buf = track.readframes(buf_size)
'''
One frame is a string of n bytes, where n = byt_depth.
For instance, with a 24bits-encoded file, track.readframe(1) could be:
b'\xff\xfe\xfe'.
raw_buf[n] returns an int in [0;255]
'''

sample_buf = [byt_sum(raw_buf[byt_depth*k:byt_depth*(k+1)])
- 2**(8*byt_depth-1) for k in range(buf_size)]

问题是:当我为单个正弦信号绘制 sample_buf 时,我得到 an alternative, wrecked sine signal .我不明白为什么信号上下重叠。

有什么想法吗?

P.S.:因为我是法国人,所以我的英语很犹豫。如果有丑陋的错误,请随时编辑。

最佳答案

这可能是因为您需要使用无符号值来表示 16 位样本。参见 https://en.wikipedia.org/wiki/Pulse-code_modulation

尝试将 32767 添加到每个样本。

您还应该使用 python struct module解码缓冲区。

import struct
buff_size = 512
# 'H' is for unsigned 16 bit integer, try 'h' also
sample_buff = struct.unpack('H'*buf_size, raw_buf)

关于python - 如何使用 Python 正确解码 .wav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com