【问题标题】:Converting microphone data to frequency spectrum将麦克风数据转换为频谱
【发布时间】:2014-09-27 12:54:46
【问题描述】:
我正在尝试创建一个频谱图程序(在 python 中),它将实时分析和显示来自麦克风输入的频谱。我正在使用模板程序从这里录制音频:http://people.csail.mit.edu/hubert/pyaudio/#examples(录制示例)
此模板程序运行良好,但我不确定从data = stream.read(CHUNK) 行返回的数据的格式。我对这个程序中使用的 .wav 格式做了一些研究,但我找不到实际数据字节本身的含义,只是 .wav 文件中元数据的定义。
我知道这个程序使用 16 位样本,并且“块”存储在 python 字符串中。我希望有人可以帮助我准确理解每个样本中的数据代表什么。即使只是指向此信息来源的链接也会有所帮助。我尝试使用谷歌搜索,但我认为我对术语的了解不足以准确搜索。
【问题讨论】:
标签:
python
audio
wav
pyaudio
spectrogram
【解决方案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()