2010-04-19 16 views

Antwort

4

Das Erkennen, wenn keine Stille vorhanden ist, wird normalerweise durch Verwendung des root mean square (RMS) eines Klumpens des Klangs und Vergleichen mit einem von Ihnen eingestellten Schwellenwert ausgeführt (der Wert hängt davon ab, wie empfindlich Ihr Mikrofon ist und anderes) Dinge, so müssen Sie es anpassen). Je nachdem, wie schnell das Mikrofon den Ton aufzeichnen soll, können Sie die Chunk-Größe verringern oder den RMS-Wert für überlappende Datenblöcke berechnen.

11

Man könnte so etwas wie dies versuchen:

basierend auf 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 

Sie werden wahrscheinlich mit Ihrem Chunkgröße und Schwellwerten spielen wollen, bis Sie das gewünschte Verhalten zu bekommen.

Edit:

Sie können die audioop Paket-in gebaut verwenden, um den root mean square (rms) eine Probe zu finden, die in der Regel ist, wie Sie das Niveau bekommen würden.

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

, wie es zu tun in der Verbindung angezeigt wird Ihnen:

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 

Sie haben die Schwellenvariablen setzen und mit dem Mittelwert (die Amplitude) oder andere verwandte Parameter in Daten zu vergleichen, die jeweils Zeit wird es in der Schleife gelesen.

Sie könnten zwei verschachtelte Loops haben, die erste, um die Aufnahme auszulösen und die andere, um danach Sounddaten-Chuncks zu speichern.

Verwandte Themen