2010-04-19 6 views

Répondre

4

La détection de l'absence de silence se fait généralement en utilisant le root mean square (RMS) d'une partie du son et en le comparant à une certaine valeur de seuil que vous définissez (la valeur dépend de la sensibilité de votre micro et d'autres les choses de sorte que vous devrez l'ajuster). En outre, en fonction de la rapidité avec laquelle le micro doit détecter le son à enregistrer, vous pouvez réduire la taille du segment ou calculer le RMS en cas de chevauchement de blocs de données.

11

Vous pouvez essayer quelque chose comme ceci:

basé sur 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 

Vous aurez probablement envie de jouer avec votre taille chunk et des valeurs seuil jusqu'à ce que vous obtenez le comportement souhaité.

Edit:

Vous pouvez utiliser le package intégré audioop pour trouver les-racine carrée moyenne (RMS) d'un échantillon, qui est généralement la façon dont vous obtiendrez le niveau.

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

comment le faire est indiqué dans le lien vous donner:

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 

Vous devez définir la variable de seuil et comparer avec la valeur moyenne (l'amplitude) ou d'autres paramètres connexes dans les données chaque l'heure est lue dans la boucle.

Vous pouvez avoir deux boucles imbriquées, la première pour déclencher l'enregistrement et l'autre pour enregistrer en continu les chuncks de données audio après cela.

Questions connexes