Je crois que le module WAVE ne prend pas en charge l'enregistrement, mais uniquement le traitement des fichiers existants. Vous pouvez consulter PyAudio pour l'enregistrement proprement dit. Le WAV est à peu près le format de fichier le plus simple au monde. Dans paInt16, vous obtenez simplement un entier signé représentant un niveau, et plus on se rapproche de 0, plus le son est faible. Je ne me souviens pas si les fichiers WAV sont précédés de l'octet de poids fort ou de l'octet de poids faible, mais quelque chose comme ceci devrait fonctionner (désolé, je ne suis pas vraiment un programmeur python :
from array import array
# you'll probably want to experiment on threshold
# depends how noisy the signal
threshold = 10
max_value = 0
as_ints = array('h', data)
max_value = max(as_ints)
if max_value > threshold:
# not silence
Code PyAudio pour l'enregistrement conservé à titre de référence :
import pyaudio
import sys
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=chunk)
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
print "* done"
stream.stop_stream()
stream.close()
p.terminate()