2010-04-19 21 views
11

के साथ एक ध्वनि रिकॉर्ड मैं अजगर में एक ध्वनि रिकॉर्ड करने के लिए इस कार्यक्रम का उपयोग कर रहा:का पता लगाने और अजगर

Detect & Record Audio in Python

मैं जब ध्वनि साउंड कार्ड इनपुट से पता चला है कार्यक्रम की रिकॉर्डिंग शुरू करने को बदलना चाहते हैं । संभवतः इनपुट ध्वनि स्तर की तुलना में तुलना करना चाहिए, लेकिन यह कैसे करें?

उत्तर

4

का पता लगा रहा जब वहाँ नहीं चुप्पी आमतौर पर root mean square ध्वनि से कुछ हिस्सा के (RMS) का उपयोग करते हुए और कुछ सीमा मूल्य आपके द्वारा सेट किए साथ तुलना करके किया जाता है (मूल्य पर कितनी संवेदनशील अपनी माइक है और अन्य निर्भर करेगा चीजें ताकि आपको इसे समायोजित करना पड़े)। साथ ही, इस बात पर निर्भर करता है कि आप कितनी जल्दी माइक्रो को रिकॉर्ड करने के लिए ध्वनि का पता लगाने के लिए चाहते हैं, तो आप डेटा के ओवरलैपिंग हिस्सों के लिए रंक आकार को कम करना चाहते हैं या आरएमएस की गणना करना चाहते हैं।

11

आप कुछ इस तरह की कोशिश कर सकते:

पर this question/answer

# this is the threshold that determines whether or not sound is detected 
THRESHOLD = 0 

#open your audio stream  

# wait until the sound data breaks some level threshold 
while True: 
    data = stream.read(chunk) 
    # check level against threshold, you'll have to write getLevel() 
    if getLevel(data) > THRESHOLD: 
     break 

# record for however long you want 
# close the stream 

आप शायद जब तक आप वांछित व्यवहार मिलता है अपने हिस्सा आकार और सीमा मूल्यों के साथ खेलने के लिए चाहता हूँ आधारित।

संपादित करें:

आप उपयोग कर सकते हैं में निर्मित audioop पैकेज रूट मतलब वर्ग एक नमूना है, जो आम तौर पर है कि कैसे आप स्तर मिलेगा की (RMS) खोजने के लिए।

import audioop 
import pyaudio 

chunk = 1024 

p = pyaudio.PyAudio() 

stream = p.open(format=pyaudio.paInt16, 
       channels=1, 
       rate=44100, 
       input=True, 
       frames_per_buffer=chunk) 

data = stream.read(chunk) 

rms = audioop.rms(data, 2) #width=2 for format=paInt16 
1

कैसे करना है यह कड़ी में इंगित किया गया है आप दे:

print "* recording" 
for i in range(0, 44100/chunk * RECORD_SECONDS): 
    data = stream.read(chunk) 
    # check for silence here by comparing the level with 0 (or some threshold) for 
    # the contents of data. 
    # then write data or not to a file 

आप सीमा चर सेट और औसत मूल्य (आयाम) या डेटा प्रत्येक में अन्य संबंधित पैरामीटर के साथ तुलना करने के लिए है लूप में यह पढ़ा जाता है।

आपके पास दो नेस्टेड लूप हो सकते हैं, रिकॉर्डिंग ट्रिगर करने वाला पहला और दूसरा उसके बाद ध्वनि डेटा चंक्स को लगातार सहेजने के लिए।

संबंधित मुद्दे