Запись с Pyaudio непрерывно и сохранение файла WAV, только если выше определенного децибела - PullRequest
0 голосов
/ 16 апреля 2020

Я хотел обнаружить кашель и чихать аудио образцы. Поэтому я хотел написать код со следующими шагами

1) Постоянно записывать аудио с mi c

2), только если звук идет выше определенных децибел (кашель, чихание или что-то еще). ), сохраните аудио (.wav) в течение 5 секунд. Сохранение аудио может быть вызвано операцией со значением децибела.

3) Позже я могу использовать сохраненный аудио файл, чтобы проанализировать, является ли он кашлем, чихать или нет!

Примечание: запись звука с mi c должна продолжаться до конца.

Возможно ли запустить событие сохранения звука с определенной высотой?

import pyaudio
import audioop
import wave
import time
import math

FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024
RECORD_SECONDS = 6
WAVE_OUTPUT_FILENAME = "D:/Python36/Sound_datatest/file.wav"

audio = pyaudio.PyAudio()

# start Recording
stream = audio.open(format=FORMAT, channels=CHANNELS,
            rate=RATE, input=True,
            frames_per_buffer=CHUNK)

stream.start_stream()
frames = []
db = 0
data = 0


while True:
   data = stream.read(CHUNK)
   print("recording...")
   rms = audioop.rms(data, 2) 
   print("rms:{}".format(rms))
   try:
       db = 20 * (math.log(rms,10))
       print("db:{}".format(db))
   except:
        pass

if(db > 80):
   for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
       frames.append(data1)

print("finished recording")
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()

# stop Recording
#stream.stop_stream()

while stream.is_active():
   time.sleep(0.25)

stream.close()
audio.terminate()

В этом примере записывается 5-секундное аудио и останавливается, но я попытался включить rms и db, чтобы я мог определить уровень аудио db. Может ли кто-нибудь помочь мне с этим?

...