누군가 말할 때만 오디오를 녹음하는 것은 음성 인식 비서부터 묵음 시간을 없애 저장 공간을 절약하는 것까지 다양한 애플리케이션에서 사용할 수 있는 강력한 기능입니다. 이 튜토리얼에서는 음성을 감지하면 녹음을 시작하고 침묵이 감지되면 중지하는 Python 코드를 작성하는 방법을 알아봅니다.
들어가기 전에 다음 사항을 확인하세요.
우리는 다음 라이브러리를 사용할 예정입니다:
pip를 사용하여 설치할 수 있습니다.
pip install pyaudio webrtcvad numpy
먼저 마이크에서 입력되는 오디오를 캡처하도록 오디오 스트림을 설정해 보겠습니다.
import pyaudio # Audio configuration FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 CHUNK = 1024 # Initialize PyAudio audio = pyaudio.PyAudio() # Open stream stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
webrtcvad 라이브러리를 사용하여 누군가가 말할 때를 감지합니다. 라이브러리는 오디오 프레임을 음성 또는 비음성으로 분류할 수 있습니다.
import webrtcvad # Initialize VAD vad = webrtcvad.Vad() vad.set_mode(1) # 0: Aggressive filtering, 3: Less aggressive def is_speech(frame, sample_rate): return vad.is_speech(frame, sample_rate)
이제 오디오 프레임을 연속적으로 캡처하여 음성이 포함되어 있는지 확인해 보겠습니다.
def record_audio(): frames = [] recording = False print("Listening for speech...") while True: frame = stream.read(CHUNK) if is_speech(frame, RATE): if not recording: print("Recording started.") recording = True frames.append(frame) else: if recording: print("Silence detected, stopping recording.") break # Stop and close the stream stream.stop_stream() stream.close() audio.terminate() return frames
마지막으로 녹음된 오디오를 .wav 파일로 저장해 보겠습니다.
import wave def save_audio(frames, filename="output.wav"): wf = wave.open(filename, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(audio.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() # Example usage frames = record_audio() save_audio(frames) print("Audio saved as output.wav")
단 몇 줄의 코드만으로 음성을 감지하고 침묵을 무시하고 말하는 부분만 녹음하는 Python 프로그램을 구현했습니다. 이 기술은 효율적인 음성 활성화 시스템을 만드는 데 특히 유용합니다.
귀하의 특정 요구에 맞게 VAD 공격성과 오디오 설정을 자유롭게 실험해 보세요. 즐거운 코딩하세요! ????
위 내용은 Python에서 오디오를 녹음하는 방법: 음성 및 침묵을 자동으로 감지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!