Я хотел обнаружить кашель и чихать аудио образцы. Поэтому я хотел написать код со следующими шагами
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. Может ли кто-нибудь помочь мне с этим?