fix(elevenlabs tts): Fix message paramter naming and make use of contexts to send out TTSStoppedFrames()
This commit is contained in:
@@ -276,8 +276,16 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
|||||||
|
|
||||||
async def flush_audio(self):
|
async def flush_audio(self):
|
||||||
if self._websocket and self._context_id:
|
if self._websocket and self._context_id:
|
||||||
msg = {"context_id": self._context_id, "flush": True}
|
self._context_id_to_close = self._context_id
|
||||||
|
msg = {"context_id": self._context_id, "flush": True, "xi_api_key": self._api_key}
|
||||||
await self._websocket.send(json.dumps(msg))
|
await self._websocket.send(json.dumps(msg))
|
||||||
|
msg = {
|
||||||
|
"context_id": self._context_id,
|
||||||
|
"close_context": True,
|
||||||
|
"xi_api_key": self._api_key,
|
||||||
|
}
|
||||||
|
await self._websocket.send(json.dumps(msg))
|
||||||
|
self._context_id = None
|
||||||
|
|
||||||
async def push_frame(self, frame: Frame, direction: FrameDirection = FrameDirection.DOWNSTREAM):
|
async def push_frame(self, frame: Frame, direction: FrameDirection = FrameDirection.DOWNSTREAM):
|
||||||
await super().push_frame(frame, direction)
|
await super().push_frame(frame, direction)
|
||||||
@@ -386,7 +394,7 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
|||||||
msg = json.loads(message)
|
msg = json.loads(message)
|
||||||
# Check if this message belongs to the current context
|
# Check if this message belongs to the current context
|
||||||
# The default context may return null/None for context_id
|
# The default context may return null/None for context_id
|
||||||
received_ctx_id = msg.get("context_id")
|
received_ctx_id = msg.get("contextId")
|
||||||
if (
|
if (
|
||||||
self._context_id is not None
|
self._context_id is not None
|
||||||
and received_ctx_id is not None
|
and received_ctx_id is not None
|
||||||
@@ -406,12 +414,17 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
|||||||
word_times = calculate_word_times(msg["alignment"], self._cumulative_time)
|
word_times = calculate_word_times(msg["alignment"], self._cumulative_time)
|
||||||
await self.add_word_timestamps(word_times)
|
await self.add_word_timestamps(word_times)
|
||||||
self._cumulative_time = word_times[-1][1]
|
self._cumulative_time = word_times[-1][1]
|
||||||
if msg.get("is_final"):
|
if msg.get("isFinal"):
|
||||||
logger.trace(f"Received final message for context {received_ctx_id}")
|
logger.trace(f"Received final message for context {received_ctx_id}")
|
||||||
# Context has finished
|
# Context has finished
|
||||||
if self._context_id == received_ctx_id:
|
if (
|
||||||
|
self._context_id == received_ctx_id
|
||||||
|
or self._context_id_to_close == received_ctx_id
|
||||||
|
):
|
||||||
self._context_id = None
|
self._context_id = None
|
||||||
|
self._context_id_to_close = None
|
||||||
self._started = False
|
self._started = False
|
||||||
|
await self.push_frame(TTSStoppedFrame())
|
||||||
|
|
||||||
async def _keepalive_task_handler(self):
|
async def _keepalive_task_handler(self):
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
Reference in New Issue
Block a user