我正在尝试创建一个频谱图程序(在python中),它将实时分析和显示来自麦克风输入的频谱。我正在使用模板程序从这里录制音频:http://people.csail.mit.edu/hubert/pyaudio/#examples(录音示例)
此模板程序运行正常,但我不确定从data = stream.read(CHUNK)
行返回的数据格式。我已经对这个程序中使用的.wav格式做了一些研究,但我找不到实际数据字节本身的含义,只是.wav文件中元数据的定义。
据我所知,这个程序使用了16位样本,以及' chunk'存储在python字符串中。我希望有人可以帮助我准确理解每个样本中的数据代表什么。即使只是链接到此信息的来源也会有所帮助。我尝试使用谷歌搜索,但我认为我不太了解术语,无法准确搜索。
答案 0 :(得分:1)
stream.read
为您提供二进制数据。要获取十进制音频样本,可以使用numpy.fromstring
将其转换为numpy数组,或者使用Python内置的struct.unpack
。
示例:
import pyaudio
import numpy
import struct
CHUNK = 128
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=CHUNK)
data = stream.read(CHUNK)
print numpy.fromstring(data, numpy.int16) # use external numpy module
print struct.unpack('h'*CHUNK, data) # use built-in struct module
stream.stop_stream()
stream.close()
p.terminate()