将麦克风数据转换为频谱

0 投票
1 回答
3938 浏览
提问于 2025-04-18 16:00

我正在尝试创建一个声谱图程序(用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()

撰写回答