kritnatee's picture
download
raw
1.94 kB
import argparse, os, sys, wave, struct, json, math, re
from pathlib import Path
parser = argparse.ArgumentParser()
parser.add_argument('--text-file', required=True)
parser.add_argument('--output', required=True)
args = parser.parse_args()
with open(args.text_file, 'r', encoding='utf-8') as f:
text = f.read().strip()
if not text:
print("ERROR: Empty text file")
sys.exit(1)
print(f" Text: {len(text)} chars")
print(f" Output: {args.output}")
# Placeholder: Kokoro-82M integration
# kokoro = Kokoro("hexgrad/Kokoro-82M")
# audio = kokoro.generate(text)
# audio.export(args.output, format="wav")
# For now, check if Kokoro package is available
try:
from kokoro import KPipeline
pipeline = KPipeline(lang_code='a') # 'a' for American English / auto
generator = pipeline(text, voice='af_heart')
audio_chunks = []
for i, (gs, ps, audio) in enumerate(generator):
audio_chunks.append(audio)
if audio_chunks:
import numpy as np
import soundfile as sf
full_audio = np.concatenate(audio_chunks)
sf.write(args.output, full_audio, 24000)
print(f" -> Generated TTS: {args.output}")
else:
print(" WARNING: No audio generated")
except ImportError:
print(" WARNING: kokoro package not installed. Install with:")
print(" pip install kokoro>=0.9.2 soundfile")
print(" Creating placeholder...")
os.makedirs(os.path.dirname(args.output), exist_ok=True)
sample_rate = 24000
duration = int(len(text) * 0.15)
with wave.open(args.output, 'w') as wf:
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(sample_rate)
for i in range(sample_rate * duration):
t = i / sample_rate
val = int(16000 * math.sin(2 * math.pi * 220 * t) * max(0, 1 - t/duration))
wf.writeframes(struct.pack('<h', val))
print(f" -> Placeholder TTS: {args.output} ({duration}s)")

Xet Storage Details

Size:
1.94 kB
·
Xet hash:
bbf12cf230bf3a32bddac22eefe45317a38749afa25c940cd8e37d22e45df871

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.