import base64import osfrom supertone import SupertoneVOICE_ID = "20160a4c5ba38967330c84" # replace with your voice IDwith Supertone(api_key=os.environ["SUPERTONE_API_KEY"]) as client: response = client.text_to_speech.create_speech( voice_id=VOICE_ID, text="Hello, world.", language="en", include_phonemes=True, ) result = response.result with open("speech.wav", "wb") as f: f.write(base64.b64decode(result.audio_base64)) for symbol, start, duration in zip( result.phonemes.symbols, result.phonemes.start_times_seconds, result.phonemes.durations_seconds, ): print(f"{symbol!r} at {start:.3f}s for {duration:.3f}s")
import { Supertone } from "@supertone/supertone";import * as fs from "node:fs";const VOICE_ID = "20160a4c5ba38967330c84"; // replace with your voice IDconst client = new Supertone({ apiKey: process.env.SUPERTONE_API_KEY });const response = await client.textToSpeech.createSpeech({ voiceId: VOICE_ID, apiConvertTextToSpeechUsingCharacterRequest: { text: "Hello, world.", language: "en", includePhonemes: true, },});const result = response.result as { audioBase64: string; phonemes?: { symbols?: string[]; startTimesSeconds?: number[]; durationsSeconds?: number[]; };};fs.writeFileSync("speech.wav", Buffer.from(result.audioBase64, "base64"));const symbols = result.phonemes?.symbols ?? [];const starts = result.phonemes?.startTimesSeconds ?? [];const durations = result.phonemes?.durationsSeconds ?? [];for (let i = 0; i < symbols.length; i++) { console.log(`${symbols[i]} at ${starts[i].toFixed(3)}s for ${durations[i].toFixed(3)}s`);}