servceis(cartesia,elevenlabs): use word start times instead
This commit is contained in:
@@ -177,7 +177,7 @@ class CartesiaTTSService(AsyncWordTTSService):
|
|||||||
await self.add_word_timestamps([("LLMFullResponseEndFrame", 0)])
|
await self.add_word_timestamps([("LLMFullResponseEndFrame", 0)])
|
||||||
elif msg["type"] == "timestamps":
|
elif msg["type"] == "timestamps":
|
||||||
await self.add_word_timestamps(
|
await self.add_word_timestamps(
|
||||||
list(zip(msg["word_timestamps"]["words"], msg["word_timestamps"]["end"]))
|
list(zip(msg["word_timestamps"]["words"], msg["word_timestamps"]["start"]))
|
||||||
)
|
)
|
||||||
elif msg["type"] == "chunk":
|
elif msg["type"] == "chunk":
|
||||||
await self.stop_ttfb_metrics()
|
await self.stop_ttfb_metrics()
|
||||||
|
|||||||
@@ -51,22 +51,17 @@ def sample_rate_from_output_format(output_format: str) -> int:
|
|||||||
def calculate_word_times(
|
def calculate_word_times(
|
||||||
alignment_info: Mapping[str, Any], cumulative_time: float
|
alignment_info: Mapping[str, Any], cumulative_time: float
|
||||||
) -> List[Tuple[str, float]]:
|
) -> List[Tuple[str, float]]:
|
||||||
end_times = [
|
zipped_times = list(zip(alignment_info["chars"], alignment_info["charStartTimesMs"]))
|
||||||
s + d for s,
|
|
||||||
d in zip(
|
|
||||||
alignment_info["charStartTimesMs"],
|
|
||||||
alignment_info["charDurationsMs"])]
|
|
||||||
zipped_end_times = list(zip(alignment_info["chars"], end_times))
|
|
||||||
|
|
||||||
words = "".join(alignment_info["chars"]).split(" ")
|
words = "".join(alignment_info["chars"]).split(" ")
|
||||||
|
|
||||||
# Calculate end time for each word. We do this by finding a space character
|
# Calculate start time for each word. We do this by finding a space character
|
||||||
# and using the previous word time, also taking into account there might not
|
# and using the previous word time, also taking into account there might not
|
||||||
# be a space at the end.
|
# be a space at the end.
|
||||||
times = []
|
times = []
|
||||||
for (i, (a, b)) in enumerate(zipped_end_times):
|
for (i, (a, b)) in enumerate(zipped_times):
|
||||||
if a == " " or i == len(zipped_end_times) - 1:
|
if a == " " or i == len(zipped_times) - 1:
|
||||||
t = cumulative_time + (zipped_end_times[i - 1][1] / 1000.0)
|
t = cumulative_time + (zipped_times[i - 1][1] / 1000.0)
|
||||||
times.append(t)
|
times.append(t)
|
||||||
|
|
||||||
word_times = list(zip(words, times))
|
word_times = list(zip(words, times))
|
||||||
|
|||||||
Reference in New Issue
Block a user