51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
"""Test STT with mic"""
|
|
from jarvis.audio.capture import AudioCapture
|
|
from jarvis.stt.faster_whisper_engine import FasterWhisperSTT
|
|
from jarvis.audio.vad import create_vad
|
|
from jarvis.config import load_config
|
|
import numpy as np, time, collections
|
|
|
|
cfg = load_config(None)
|
|
vad = create_vad(cfg)
|
|
stt = FasterWhisperSTT(model=cfg.get('stt',{}).get('model','base'), device='cpu', compute_type='int8')
|
|
cap = AudioCapture()
|
|
cap.start()
|
|
|
|
print("Speak, with 1.5s silence to trigger transcription. Ctrl+C to exit")
|
|
buffer = []
|
|
silence_start = None
|
|
recording = False
|
|
|
|
try:
|
|
while True:
|
|
chunk = cap.read(timeout=0.1)
|
|
if chunk is None:
|
|
continue
|
|
is_speech = vad.is_speech(chunk)
|
|
if is_speech:
|
|
if not recording:
|
|
print("Speech start")
|
|
recording = True
|
|
buffer.append(chunk)
|
|
silence_start = None
|
|
else:
|
|
if recording:
|
|
if silence_start is None:
|
|
silence_start = time.time()
|
|
buffer.append(chunk)
|
|
if time.time() - silence_start > 1.2:
|
|
# transcribe
|
|
audio = np.concatenate(buffer)
|
|
print(f"Transcribing {len(audio)/16000:.2f}s...")
|
|
res = stt.transcribe(audio)
|
|
print(f" => {res.get('text')}")
|
|
buffer = []
|
|
recording = False
|
|
silence_start = None
|
|
print("Listening again...")
|
|
# else silence, continue
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
cap.stop()
|