
File name
Commit message
Commit date
01-12
01-12
File name
Commit message
Commit date
from collections.abc import Generator
import logging
import time
from piper.voice import PiperVoice
from speaches.audio import resample_audio
logger = logging.getLogger(__name__)
# TODO: async generator https://github.com/mikeshardmind/async-utils/blob/354b93a276572aa54c04212ceca5ac38fedf34ab/src/async_utils/gen_transform.py#L147
def generate_audio(
piper_tts: PiperVoice, text: str, *, speed: float = 1.0, sample_rate: int | None = None
) -> Generator[bytes, None, None]:
if sample_rate is None:
sample_rate = piper_tts.config.sample_rate
start = time.perf_counter()
for audio_bytes in piper_tts.synthesize_stream_raw(text, length_scale=1.0 / speed):
if sample_rate != piper_tts.config.sample_rate:
audio_bytes = resample_audio(audio_bytes, piper_tts.config.sample_rate, sample_rate) # noqa: PLW2901
yield audio_bytes
logger.info(f"Generated audio for {len(text)} characters in {time.perf_counter() - start}s")