जो मैं प्राप्त करने का प्रयास कर रहा हूं वह निम्न है: मुझे विश्लेषण के लिए ध्वनि फ़ाइल (.wav) की आवृत्ति मानों की आवश्यकता है। मुझे पता है कि बहुत से कार्यक्रम मूल्यों के दृश्य ग्राफ (स्पेक्ट्रोग्राम) देंगे लेकिन मुझे कच्चे डेटा की आवश्यकता है। मुझे पता है कि यह एफएफटी के साथ किया जा सकता है और पाइथन में काफी आसानी से स्क्रिप्ट योग्य होना चाहिए, लेकिन यह सुनिश्चित नहीं है कि इसे बिल्कुल कैसे किया जाए। तो मान लीजिए कि फ़ाइल में एक सिग्नल .4s लंबा है, तो मैं प्रोग्राम के उपायों और प्रत्येक मूल्य (आवृत्ति) को प्राप्त करने के लिए एक सरणी के रूप में आउटपुट देने के लिए कई मापन करना चाहूंगा (और संभवतः पावर (डीबी) भी)। जटिल बात यह है कि मैं पक्षी गीतों का विश्लेषण करना चाहता हूं, और उनके पास अक्सर हार्मोनिक्स होता है या संकेत आवृत्ति की एक श्रृंखला (उदाहरण के लिए 1000-2000 हर्ट्ज) से अधिक होता है। मैं प्रोग्राम को इस जानकारी को आउटपुट करना चाहता हूं, क्योंकि विश्लेषण के लिए यह महत्वपूर्ण है कि मैं डेटा के साथ करना चाहता हूं :)ध्वनि फ़ाइल से आवृत्ति पहचान
अब कोड का एक टुकड़ा है जो मुझे बहुत पसंद आया था, लेकिन मैं मुझे लगता है कि यह मुझे उन सभी मूल्यों को नहीं देता है जो मुझे चाहिए .... (जस्टिन छील के लिए धन्यवाद यह एक अलग प्रश्न पर पोस्ट करने के लिए :) :) तो मैं इकट्ठा करता हूं कि मुझे सुस्त और पाय्योडियो चाहिए लेकिन दुर्भाग्य से मैं अजगर से परिचित नहीं हूं इसलिए मैं उम्मीद है कि एक पायथन विशेषज्ञ इस पर मेरी मदद कर सकता है?
स्रोत कोड:
# Read in a WAV and find the freq's
import pyaudio
import wave
import numpy as np
chunk = 2048
# open up a wave
wf = wave.open('test-tones/440hz.wav', 'rb')
swidth = wf.getsampwidth()
RATE = wf.getframerate()
# use a Blackman window
window = np.blackman(chunk)
# open stream
p = pyaudio.PyAudio()
stream = p.open(format =
p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = RATE,
output = True)
# read some data
data = wf.readframes(chunk)
# play stream and find the frequency of each chunk
while len(data) == chunk*swidth:
# write data out to the audio stream
stream.write(data)
# unpack the data and times by the hamming window
indata = np.array(wave.struct.unpack("%dh"%(len(data)/swidth),\
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)
# read some more data
data = wf.readframes(chunk)
if data:
stream.write(data)
stream.close()
p.terminate()
क्या आपने अभी तक "खोज" की कोशिश की है? यह सवाल पूछा गया है। उदाहरण के लिए http://stackoverflow.com/questions/2648151/python-frequency-detection। –
हां, यह कम से कम 5 वां समय है जब यह प्रश्न पिछले 2 हफ्तों में SO पर आया है। – Brad
हां मैंने खोज की और चारों ओर देखा .. लेकिन मुझे आवश्यक सटीक उत्तर नहीं मिला। लेकिन आगे खोज करते समय मुझे एक ऐसा प्रोग्राम मिला जो मुझे मुफ्त में करने की ज़रूरत है :) ध्वनि विश्लेषण समर्थक अगर कोई और इस प्रश्न को पढ़ता है और समान चीजों को करने की तलाश में है। आप एक्सेल या मैटलैब को निर्यात किए गए इस प्रोग्राम के साथ डेटा (आवृत्ति आदि) प्राप्त कर सकते हैं! –