Вы можете реализовать простое обнаружение входного звука, используя PyAudio
. Вам просто нужно решить, что вы имеете в виду под существованием звука.
В следующем примере кода я использовал простой root среднеквадратичный расчет с пороговым значением. Другой вариант - пиковый тест, просто сравнивающий амплитуду каждого аудиосэмпла с пороговым значением амплитуды пика. Что наиболее полезно для вас, зависит от приложения.
Вы можете поиграться с пороговым значением (т. Е. Минимальной амплитудой или громкостью звука) и размером порции (т. Е. Задержкой обнаружения звука), чтобы получить поведение, которое вы хотите.
import pyaudio
import math
RATE = 44100
CHUNK = 1024
AUDIO_EXISTENCE_THRESHOLD = 1000
def detect_input_audio(data, threshold):
if not data:
return False
rms = math.sqrt(sum([x**2 for x in data]) / len(data))
if rms > threshold:
return True
return False
audio = pyaudio.PyAudio()
stream = audio.open(format=pyaudio.paInt16, channels=1, input=True,
rate=RATE, frames_per_buffer=CHUNK)
data = []
while detect_input_audio(data, AUDIO_EXISTENCE_THRESHOLD):
data = stream.read(CHUNK)
# Do something when input audio exists
# ...
stream.stop_stream()
stream.close()
audio.terminate()