我正在编写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.
我无法弄清楚为什么信号与udpside-down重叠.
任何的想法?
P.S.:因为我是法国人,我的英语非常犹豫.如果有丑陋的错误,请随时编辑.
解决方法:
尝试为每个样本添加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,int,byte,audio,wave
来源: https://codeday.me/bug/20190623/1270960.html
本文介绍了一种将WAVE音频文件转换为整数的方法,并针对出现的问题提供了解决方案。作者最初遇到的问题是在绘制转换后的样本时,得到的是一个失真的正弦信号。文中详细解释了如何通过调整每个样本值及采用Python的struct模块来正确地解码音频缓冲区。

被折叠的 条评论
为什么被折叠?



