Acredito que o módulo WAVE não suporta gravação, apenas processamento de arquivos existentes. Você pode querer dar uma olhada no PyAudio para realmente gravar. WAV é o formato de arquivo mais simples do mundo. No paInt16, você obtém apenas um número inteiro com sinal que representa um nível, e mais perto de 0 é mais silencioso. Não me lembro se os arquivos WAV são de byte alto primeiro ou byte baixo, mas algo assim deve funcionar (desculpe, não sou realmente um programador de 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
Código PyAudio para gravação mantido para referência:
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()