【发布时间】:2020-09-22 09:29:25
【问题描述】:
我已经使用音频频谱分析仪https://github.com/markjay4k/Audio-Spectrum-Analyzer-in-Python/blob/master/audio%20spectrum_pt2_spectrum_analyzer.ipynb 的代码位设置了 python 音频流和 fft(我删除了所有绘图代码),我想从我的 fft 中找到最突出的频率。
import numpy as np
import pyaudio
import struct
from scipy.fftpack import fft
import sys
import time
class AudioStream(object):
def __init__(self):
# stream constants
self.CHUNK = 1024 * 2
self.FORMAT = pyaudio.paInt16
self.CHANNELS = 1
self.RATE = 44100
self.pause = False
# stream object
self.p = pyaudio.PyAudio()
self.stream = self.p.open(
format=self.FORMAT,
channels=self.CHANNELS,
rate=self.RATE,
input=True,
output=True,
frames_per_buffer=self.CHUNK,
)
self.start_recording()
def start_recording(self):
print('stream started')
while True:
#Get data from stream and unpack to data_int
data = self.stream.read(self.CHUNK)
data_int = struct.unpack(str(2 * self.CHUNK) + 'B', data)
# compute FFT
yf = fft(data_int)
# find the most prominent frequency from this fft
if __name__ == '__main__':
AudioStream()
下面是 github 上未适配的音频频谱分析仪输出的屏幕截图,显示了我想从 fft(最突出的频率)获得的值。在本例中,该值约为 1555Hz。
【问题讨论】:
-
这里有一个简洁的例子,说明 FFT 的含义以及如何处理其输出 youtube.com/watch?v=mkGsMWi_j4Q
标签: python scipy fft frequency-analysis audio-analysis