0

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

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

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

4

1 回答 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()
于 2014-08-05T07:43:11.043 回答