123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- if __name__ == "__main__":
- import threading
- import pyaudio
- from RealtimeSTT import AudioToTextRecorder
- CHUNK = 1024
- FORMAT = pyaudio.paInt16
- CHANNELS = 1
- RATE = 16000
- recorder = AudioToTextRecorder(
- use_microphone=False,
- spinner=False
- )
- stop_event = threading.Event()
- def feed_audio_thread():
- p = pyaudio.PyAudio()
- stream = p.open(
- format=FORMAT,
- channels=CHANNELS,
- rate=RATE,
- input=True,
- frames_per_buffer=CHUNK
- )
- try:
- print("Speak now")
- while not stop_event.is_set():
- data = stream.read(CHUNK)
- recorder.feed_audio(data)
- except Exception as e:
- print(f"feed_audio_thread encountered an error: {e}")
- finally:
- stream.stop_stream()
- stream.close()
- p.terminate()
- print("Audio stream closed.")
- def recorder_transcription_thread():
- def process_text(full_sentence):
- print("Transcribed text:", full_sentence)
- if "stop recording" in full_sentence.lower():
- print("Stop command detected. Stopping threads...")
- stop_event.set()
- recorder.abort()
- try:
- while not stop_event.is_set():
- recorder.text(process_text)
- except Exception as e:
- print(f"transcription_thread encountered an error: {e}")
- finally:
- print("Transcription thread exiting.")
- audio_thread = threading.Thread(target=feed_audio_thread)
- audio_thread.daemon = False
- audio_thread.start()
- transcription_thread = threading.Thread(target=recorder_transcription_thread)
- transcription_thread.daemon = False
- transcription_thread.start()
- audio_thread.join()
- transcription_thread.join()
- print("Recording and transcription have stopped.")
- recorder.shutdown()
|