human/render/voice_render.py

37 lines
991 B
Python

#encoding = utf8
import logging
import time
from queue import Empty
import numpy as np
from audio_render import AudioRender
from base_render import BaseRender
logger = logging.getLogger(__name__)
class VoiceRender(BaseRender):
def __init__(self, play_clock):
super().__init__(play_clock)
self._audio_render = AudioRender()
def __run_step(self):
try:
audio_frames, ps = self._queue.get(block=True, timeout=0.01)
except Empty:
return
self._play_clock.update_display_time()
self._play_clock.current_time = ps
for audio_frame in audio_frames:
frame, type_ = audio_frame
frame = (frame * 32767).astype(np.int16)
if self._audio_render is not None:
try:
self._audio_render.write(frame.tobytes(), int(frame.shape[0] * 2))
except Exception as e:
logging.error(f'Error writing audio frame: {e}')