Tôi đang cố gắng sử dụng Python để truy xuất tần số chi phối của đầu vào âm thanh trực tiếp. Hiện tại, tôi đang thử nghiệm bằng cách sử dụng luồng âm thanh mà micrô của Máy tính xách tay tích hợp trong micrô, nhưng khi kiểm tra mã sau, tôi nhận được kết quả rất kém.Phân tích tần số trong Python
# Read from Mic Input and find the freq's
import pyaudio
import numpy as np
import bge
import wave
chunk = 2048
# use a Blackman window
window = np.blackman(chunk)
# open stream
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 1920
p = pyaudio.PyAudio()
myStream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = chunk)
def AnalyseStream(cont):
data = myStream.read(chunk)
# unpack the data and times by the hamming window
indata = np.array(wave.struct.unpack("%dh"%(chunk), data))*window
# Take the fft and square each value
fftData=abs(np.fft.rfft(indata))**2
# find the maximum
which = fftData[1:].argmax() + 1
# use quadratic interpolation around the max
if which != len(fftData)-1:
y0,y1,y2 = np.log(fftData[which-1:which+2:])
x1 = (y2 - y0) * .5/(2 * y1 - y2 - y0)
# find the frequency and output it
thefreq = (which+x1)*RATE/chunk
print("The freq is %f Hz." % (thefreq))
else:
thefreq = which*RATE/chunk
print("The freq is %f Hz." % (thefreq))
# stream.close()
# p.terminate()
Mã được phân tách từ this question, liên quan đến Phân tích Fourier của tệp sóng. Đó là trong cấu trúc mô-đun hiện tại khi tôi đang triển khai nó với Môi trường Trò chơi Máy xay sinh tố (do đó việc nhập khẩu ở đầu trang), nhưng tôi chắc chắn vấn đề của tôi nằm trong mô-đun AnalyseStream.
Bất kỳ lời khuyên nào bạn có thể cung cấp sẽ được đánh giá cao.
CẬP NHẬT: Tôi nhận được các giá trị chính xác từ bây giờ đến lần khác, nhưng chúng được tìm thấy không thường xuyên giữa các giá trị không chính xác (< 10Hz). Điều đó và chương trình chạy REALLY từ từ.
Tốc độ lấy mẫu năm 1920 trông có vẻ tanh. Tỷ lệ mẫu âm thanh điển hình hơn là 8000 hoặc 44100. Bạn đang sử dụng loại âm thanh nào cho kiểm tra tính chính xác của mình? Nếu nó không phải từ một máy phát sóng sin, sân bạn nghe và đỉnh tần số có thể rất khác nhau. – hotpaw2