Merakam audio hanya apabila seseorang sedang bercakap ialah ciri berkuasa yang boleh digunakan dalam pelbagai aplikasi, daripada pembantu yang diaktifkan suara kepada menjimatkan ruang storan dengan menghapuskan tempoh senyap. Dalam tutorial ini, anda akan belajar cara menulis kod Python yang mula merakam apabila ia mengesan pertuturan dan berhenti apabila senyap dikesan.
Sebelum menyelam, pastikan anda mempunyai perkara berikut:
Kami akan menggunakan perpustakaan berikut:
Anda boleh memasangnya menggunakan pip:
pip install pyaudio webrtcvad numpy
Mula-mula, mari sediakan strim audio untuk menangkap input audio daripada mikrofon anda.
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)
Kami akan menggunakan perpustakaan webrtcvad untuk mengesan apabila seseorang bercakap. Pustaka boleh mengklasifikasikan bingkai audio sebagai pertuturan atau bukan pertuturan.
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)
Sekarang, mari tangkap bingkai audio secara berterusan dan semak sama ada ia mengandungi pertuturan.
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
Akhir sekali, mari simpan audio yang dirakam ke fail .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")
Dengan hanya beberapa baris kod, anda telah melaksanakan program Python yang mengesan pertuturan dan merekodkan bahagian pertuturan sahaja, mengabaikan senyap. Teknik ini amat berguna untuk mencipta sistem diaktifkan suara yang cekap.
Jangan ragu untuk mencuba dengan keagresifan VAD dan tetapan audio untuk memenuhi keperluan khusus anda. Selamat mengekod! ?????
Atas ialah kandungan terperinci Cara Merakam Audio dalam Python: Mengesan Pertuturan dan Senyap Secara Automatik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!