Fix XTTS loader compatibility and add default voice
This commit is contained in:
@ -1,19 +1,39 @@
|
||||
from pydub import AudioSegment
|
||||
import io
|
||||
import numpy as np
|
||||
|
||||
def convert_audio(raw_bytes: bytes, fmt: str):
|
||||
# raw mono 32-bit float fake waveform
|
||||
def convert_audio(audio_data, fmt: str, sample_rate: int = 24000):
|
||||
"""
|
||||
Converts raw audio data (numpy array or list of floats) to the target format.
|
||||
Assumes mono audio.
|
||||
"""
|
||||
# Ensure numpy array
|
||||
if not isinstance(audio_data, np.ndarray):
|
||||
audio_data = np.array(audio_data)
|
||||
|
||||
# Check if float and normalize/convert to int16
|
||||
if audio_data.dtype.kind == 'f':
|
||||
# Clip to Avoid wrap-around
|
||||
audio_data = np.clip(audio_data, -1.0, 1.0)
|
||||
# Convert to 16-bit PCM
|
||||
audio_data = (audio_data * 32767).astype(np.int16)
|
||||
|
||||
seg = AudioSegment(
|
||||
raw_bytes,
|
||||
frame_rate=22050,
|
||||
sample_width=4,
|
||||
audio_data.tobytes(),
|
||||
frame_rate=sample_rate,
|
||||
sample_width=2, # 16-bit
|
||||
channels=1
|
||||
)
|
||||
buf=io.BytesIO()
|
||||
|
||||
buf = io.BytesIO()
|
||||
seg.export(buf, format=fmt)
|
||||
mime={
|
||||
"wav":"audio/wav",
|
||||
"mp3":"audio/mpeg",
|
||||
"ogg":"audio/ogg"
|
||||
}.get(fmt,"audio/wav")
|
||||
return buf.getvalue(), mime
|
||||
|
||||
mime = {
|
||||
"wav": "audio/wav",
|
||||
"mp3": "audio/mpeg",
|
||||
"ogg": "audio/ogg",
|
||||
"flac": "audio/flac",
|
||||
"aac": "audio/aac"
|
||||
}.get(fmt, "audio/wav")
|
||||
|
||||
return buf.getvalue(), mime
|
||||
Reference in New Issue
Block a user