// https://platform.minimax.io/docs/api-reference/speech-t2a-async-create/ // // // const text = `สำนักข่าวต่างประเทศรายงานเมื่อ 18 พ.ย. 2568 ว่า เจ้าหน้าที่กู้ภัยของประเทศชิลี กำลังดำเนินการค้นหากลุ่มนักท่องเที่ยวที่สูญหายไปในพายุหิมะรุนแรงซึ่งเกิดขึ้นที่ อุทยานแห่งชาติ “ตอร์เรส เดล ไพเน” ในภูมิภาคปาตาโกเนีย ทางตอนใต้ของชิลี หลังพายุทำให้มีผู้เสียชีวิตแล้วอย่างน้อย 5 ศพ`; // const text = `So I start using it for my project and after about 20 mins - oh, no. Out of credits. // I didn't even get to try a single Gemini 3 prompt. I was out of credits before my first had completed. I guess I've burned through the free tier in some other app but the error message gave me no clues. As far as I can tell there's no link to give Google my money in the app. Maybe they think they have enough. // After switching to gpt-oss:120b it did some things quite well, and the annotation feature in the plan doc is really nice. It has potential but I suspect it's suffering from Google's typical problem that it's only really been tested on Googlers.`; const model = "speech-2.6-hd"; const voice1 = "Thai_male_1_sample8"; const voice2 = "Thai_male_2_sample2"; const voice3 = "Thai_female_1_sample1"; const voice4 = "Thai_female_2_sample2"; const params = { model, language_boost: "auto", voice_setting: { voice_id: voice1, speed: 1, vol: 1, pitch: 1 }, pronunciation_dct: { tone: ["lol, lmao"] }, audio_setting: { audio_sample_rate: 32000, bitrate: 128_000, format: "mp3", channel: 2, }, voice_modify: { pitch: 0, intensity: 0, timbre: 0, sound_Effects: "spacious_echo", }, }; async function getVoices() { const endpoint = "/get_voice"; const body = { voice_type: "all" }; return await post(endpoint, body); } async function tts() { const endpoint = "/t2a_v2"; const body = { text, stream: false, ...params }; return await post(endpoint, body); } async function ws() { const url = "wss://api.minimax.io/ws/v1/t2a_v2"; const event = "task_start"; const headers = { Authorization: `Bearer ${Bun.env.MINIMAX_API_KEY!}`, }; const socket = new WebSocket(url, { headers }); const body = { event, ...params }; const body2 = { event: "task_continue", text }; socket.send(JSON.stringify(body)); // const event = "task_continue"; // const event = "task_finish"; } async function tts_async() { const body = { text, ...params, }; return await post("/t2a_async_v2", body); } async function post(path: string, body: any) { const url = "https://api.minimax.io/v1" + path; const options = { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${Bun.env.MINIMAX_API_KEY2!}`, }, body: JSON.stringify(body), }; try { const response = await fetch(url, options); const data = await response.json(); return data; } catch (error) { console.error(error); } } async function get(path: string) { const url = "https://api.minimax.io/v1" + path; const options = { headers: { Authorization: `Bearer ${Bun.env.MINIMAX_API_KEY!}`, }, }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } } import fs from "node:fs"; const res = await tts(); const audio = res.data.audio; const audioBuffer = Buffer.from(audio, "hex"); const filename = "output.mp3"; fs.writeFileSync(filename, audioBuffer);