将麦克风数据转换为频谱

时间:2014-08-04 23:23:27

标签: python audio wav pyaudio spectrogram

我正在尝试创建一个频谱图程序(在python中),它将实时分析和显示来自麦克风输入的频谱。我正在使用模板程序从这里录制音频:http://people.csail.mit.edu/hubert/pyaudio/#examples(录音示例)

此模板程序运行正常,但我不确定从data = stream.read(CHUNK)行返回的数据格式。我已经对这个程序中使用的.wav格式做了一些研究,但我找不到实际数据字节本身的含义,只是.wav文件中元数据的定义。

据我所知,这个程序使用了16位样本,以及' chunk'存储在python字符串中。我希望有人可以帮助我准确理解每个样本中的数据代表什么。即使只是链接到此信息的来源也会有所帮助。我尝试使用谷歌搜索,但我认为我不太了解术语,无法准确搜索。

1 个答案:

答案 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()
相关问题