में फ्रीक्वेंसी विश्लेषण मैं लाइव ऑडियो इनपुट की प्रमुख आवृत्तियों को पुनः प्राप्त करने के लिए पायथन का उपयोग करने की कोशिश कर रहा हूं। फिलहाल मैं अपने लैपटॉप के माइक्रोफ़ोन में निर्मित ऑडियो स्ट्रीम का उपयोग कर प्रयोग कर रहा हूं, लेकिन निम्न कोड का परीक्षण करते समय, मुझे बहुत खराब परिणाम मिल रहे हैं।पायथन
# 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()
कोड this question है, जो एक लहर फ़ाइल के फूरियर विश्लेषण के साथ सौदों से cannibalized है। यह वर्तमान मॉड्यूलर संरचना में है क्योंकि मैं इसे ब्लेंडर गेम एनवायरनमेंट (इसलिए शीर्ष पर आयात बर्ज) के साथ कार्यान्वित कर रहा हूं, लेकिन मुझे यकीन है कि मेरी समस्या एनालिसस्ट्रीम मॉड्यूल के भीतर है।
कोई भी सलाह जो आप पेश कर सकते हैं उसकी सराहना की जाएगी।
अद्यतन: मुझे हर बार सही मूल्य मिल रहे हैं, लेकिन वे गलत मानों (< 10Hz) के बीच अक्सर पाए जाते हैं। वह और कार्यक्रम वास्तव में धीरे-धीरे चलता है।
1920 की नमूना दर फिश लगती है। अधिक सामान्य ऑडियो नमूना दर 8000 या 44100 हैं। आप अपनी शुद्धता परीक्षण के लिए किस प्रकार की आवाज का उपयोग कर रहे हैं? यदि यह साइन लहर जनरेटर से नहीं है, तो आप जो पिच सुनते हैं और आवृत्ति शिखर बहुत अलग हो सकता है। – hotpaw2