将麦克风数据转换为频谱
我正在尝试创建一个声谱图程序(用Python),这个程序可以实时分析和显示麦克风输入的频率谱。我使用了一个模板程序来录音,链接在这里:http://people.csail.mit.edu/hubert/pyaudio/#examples(录音示例)
这个模板程序运行得很好,但我不太确定从data = stream.read(CHUNK)
这一行返回的数据格式是什么。我对这个程序使用的.wav格式做了一些研究,但找不到实际数据字节的含义,只能找到关于.wav文件中元数据的定义。
我知道这个程序使用的是16位样本,而这些“块”是存储在Python字符串中的。我希望有人能帮我理解每个样本中的数据到底代表什么。即使只是一个指向相关信息的链接也会很有帮助。我试着在网上搜索,但我觉得我对相关术语的理解还不够,无法准确搜索。
1 个回答
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()