เลือกหัวข้ออ่าน
แปลงข้อความเป็นเสียงพูดคุณภาพสูงด้วย AI อย่างง่ายดาย
ระบบ TTS ของ Gemini API ทำงานตามขั้นตอนต่อไปนี้:
ส่งข้อความที่ต้องการแปลงเป็นเสียงผ่าน HTTP Request
API ส่งกลับข้อมูลเสียงในรูปแบบ PCM Base64
ใช้ Function Node แปลงข้อมูล PCM เป็นไฟล์ WAV ที่เปิดได้
บันทึกไฟล์ WAV ลงในระบบหรือส่งต่อไปใช้งาน
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent?key=YOUR_API_KEY
ตัวอย่าง Request Body:
{ "contents": [{ "parts":[{ "text": "สวัสดีครับ ยินดีต้อนรับสู่ระบบ Text-to-Speech ของ Gemini" }] }], "generationConfig": { "responseModalities": ["AUDIO"], "speechConfig": { "voiceConfig": { "prebuiltVoiceConfig": { "voiceName": "Kore" } } } }, "model": "gemini-2.5-flash-preview-tts" }
// ดึงข้อมูล base64 จาก response const base64Audio = $input.first().json.candidates[0].content.parts[0].inlineData.data; // แปลง base64 เป็น Buffer (PCM data) const pcmData = Buffer.from(base64Audio, 'base64'); // สร้าง WAV header function createWavHeader(dataLength, sampleRate = 24000, channels = 1, bitsPerSample = 16) { const header = Buffer.alloc(44); // RIFF header header.write('RIFF', 0); header.writeUInt32LE(36 + dataLength, 4); header.write('WAVE', 8); // fmt subchunk header.write('fmt ', 12); header.writeUInt32LE(16, 16); header.writeUInt16LE(1, 20); header.writeUInt16LE(channels, 22); header.writeUInt32LE(sampleRate, 24); header.writeUInt32LE(sampleRate * channels * bitsPerSample / 8, 28); header.writeUInt16LE(channels * bitsPerSample / 8, 32); header.writeUInt16LE(bitsPerSample, 34); // data subchunk header.write('data', 36); header.writeUInt32LE(dataLength, 40); return header; } // สร้าง WAV file const wavHeader = createWavHeader(pcmData.length); const wavFile = Buffer.concat([wavHeader, pcmData]); // ส่งคืนข้อมูล return [{ json: { fileName: `tts_${new Date().getTime()}.wav`, fileSize: wavFile.length, duration: pcmData.length / (24000 * 2), timestamp: new Date().toISOString() }, binary: { audio: { data: wavFile, mimeType: 'audio/wav', fileName: `tts_${new Date().getTime()}.wav` } } }];
Voice Name | ลักษณะเสียง | Voice Name | ลักษณะเสียง |
---|---|---|---|
Zephyr | Bright - สดใส | Puck | Upbeat - ร่าเริง |
Charon | Informative - ให้ข้อมูล | Kore | Corporate - บริษัท |
Fenrir | Excitable - ตื่นเต้นง่าย | Leda | Youthful - อ่อนเยาว์ |
Orus | Firm - มั่นคง | Aoede | Breezy - สบายๆ |
Callirrhoe | Casual - สบายๆ | Autonoe | Bright - สดใส |
Enceladus | Breathy - หายใจ | Iapetus | Clear - ชัดเจน |
Umbriel | Casual - สบายๆ | Algieba | Smooth - นุ่มนวล |
Despina | Smooth - นุ่มนวล | Erinome | Clear - ชัดเจน |
Algenib | Gravelly - ห้าว | Rasalgethi | Informative - ให้ข้อมูล |
Laomedeia | Rhythmic - จังหวะสนุก | Achernar | Soft - นุ่ม |
Alnilam | Firm - มั่นคง | Schedar | Even - สม่ำเสมอ |
Gacrux | Mature - ผู้ใหญ่ | Pulcherrima | Forward - ส่งต่อ |
Achird | Friendly - เป็นมิตร | Zubenelgenubi | Casual - สบายๆ |
Vindemiatrix | Gentle - อ่อนโยน | Sadachbia | Lively - มีชีวิตชีวา |
Sadaltager | Knowledgeable - มีความรู้ | Sulafat | Warm - อบอุ่น |
ประเภทคำสั่ง | ตัวอย่างการใช้ |
---|---|
อารมณ์ | พูดด้วยความตื่นเต้น:, พูดอย่างเศร้า:, พูดอย่างสนุกสนาน: |
ระดับเสียง | พูดเสียงเบาๆ:, กระซิบ:, ตะโกน: |
ความเร็ว | พูดช้าๆ:, พูดเร็ว:, พูดช้าและชัดเจน: |
น้ำเสียง | พูดอย่างเป็นทางการ:, พูดแบบเป็นกันเอง:, พูดแบบมืออาชีพ: |
{ "contents": [{ "parts":[{ "text": "TTS the following conversation between พิธีกร and แขกรับเชิญ:\nพิธีกร: สวัสดีครับ วันนี้เรามีแขกรับเชิญพิเศษ\nแขกรับเชิญ: สวัสดีค่ะ ยินดีที่ได้มาร่วมรายการ" }] }], "generationConfig": { "responseModalities": ["AUDIO"], "speechConfig": { "multiSpeakerVoiceConfig": { "speakerVoiceConfigs": [{ "speaker": "พิธีกร", "voiceConfig": { "prebuiltVoiceConfig": { "voiceName": "Kore" } } }, { "speaker": "แขกรับเชิญ", "voiceConfig": { "prebuiltVoiceConfig": { "voiceName": "Puck" } } }] } } }, "model": "gemini-2.5-flash-preview-tts" }
// เพิ่มใน Function Node เพื่อตรวจสอบข้อมูล console.log('PCM Data Length:', pcmData.length); console.log('Duration (seconds):', pcmData.length / (24000 * 2)); console.log('File Size (KB):', wavFile.length / 1024);
32,000 tokens ต่อ request
24 ภาษา รวมถึงภาษาไทย
Mono 16-bit 24kHz PCM
ใช้ Set Node เตรียมข้อความที่ซับซ้อนก่อนส่ง
ใช้ IF Node ตรวจสอบความยาวข้อความไม่เกิน limit
ใช้ Wait Node เว้นระยะหากประมวลผลหลายรายการ
เก็บข้อมูลไฟล์เสียงไว้ใน Database
ใช้ Webhook รับข้อความจากแอปอื่น
ใช้ Try-Catch สำหรับจัดการ error
เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า
คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น
ยอมรับทั้งหมดประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
คุกกี้ประเภทนี้จะทำการเก็บข้อมูลการใช้งานเว็บไซต์ของคุณ เพื่อเป็นประโยชน์ในการวัดผล ปรับปรุง และพัฒนาประสบการณ์ที่ดีในการใช้งานเว็บไซต์ ถ้าหากท่านไม่ยินยอมให้เราใช้คุกกี้นี้ เราจะไม่สามารถวัดผล ปรับปรุงและพัฒนาเว็บไซต์ได้
รายละเอียดคุกกี้
คุกกี้ประเภทนี้จะเก็บข้อมูลต่าง ๆ รวมทั้งข้อมูลส่วนบุคคลเกี่ยวกับตัวคุณเพื่อเราสามารถนำมาวิเคราะห์ และนำเสนอเนื้อหา ให้ตรงกับความเหมาะสมกับความสนใจของคุณ ถ้าหากคุณไม่ยินยอมเราจะไม่สามารถนำเสนอเนื้อหาและโฆษณาได้ไม่ตรงกับความสนใจของคุณ
รายละเอียดคุกกี้