【问题标题】: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()

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    相关资源
    最近更新 更多