บทพากย์บอกนักพากย์เสมอว่าแต่ละประโยคต้องพูดอย่างไร จะกระซิบหรือพูดทั้งน้ำตา โมเดลเสียงพูดที่อ่านทุกประโยคด้วยน้ำเสียงเรียบเท่ากันหมดทิ้งโน้ตเหล่านั้นไว้บนกระดาษ งานแสดงจึงต้องไปจบที่ห้องอัด
วันนี้เราเปิดตัว Paxa TTS Flash v2 ในแล็บเราเรียกโมเดลนี้ว่า Pixie และชื่อเล่นนี้อยู่ข้างชื่อโมเดลในเครื่องมือเสียงพูดของ Console ด้วย Pixie พูดตามโน้ตที่บทเขียนไว้ คำกำกับในวงเล็บเหลี่ยมที่เขียนเป็นภาษาไทย อังกฤษ หรือจีน กำหนดวิธีพูดของข้อความที่ตามมา และน้ำเสียงเปลี่ยนได้หลายครั้งในประโยคเดียว
Paxa TTS Flash v2 เปิดให้ใช้งานแล้วผ่านทุกช่องทางเสียงพูดของ API และใน Console ในราคา $10 ต่อหนึ่งล้านตัวอักษร เท่ากับ Paxa TTS Flash และคำขอที่ส่งถึง Paxa TTS Flash ยังทำงานเหมือนเดิม
อะไรเปลี่ยนไปจาก Paxa TTS Flash#
| Paxa TTS Flash | Paxa TTS Flash v2 | |
|---|---|---|
| การกำกับน้ำเสียง | แท็กอารมณ์อย่าง [happy] บนเสียงทดลอง 2 เสียง | คำกำกับเป็นคำใดก็ได้ ใช้ได้ทุกเสียง |
| เสียงอย่างหัวเราะหรือถอนหายใจ | ไม่มี | เสียงอย่าง [laughs] ดังตรงที่เขียน |
| คำอุทาน | ไม่มี | [um] และ [hmm] พูดออกมาเป็นคำ |
| การเน้นคำ | ไม่มี | ช่วงข้อความ <emph> และ <whisper> |
| ภาษา | แต่ละเสียงทำมาสำหรับไทย อังกฤษ หรือจีนกลางภาษาเดียว | ทุกเสียงพูดได้ทั้งสามภาษา |
| จำนวนเสียง | 34 | 50 |
| mp3 | 24 kHz, 64 kbps | 44.1 kHz, 128 kbps |
| opus | 48 kHz, 48 kbps | 48 kHz, 64 kbps |
| ราคาต่อ 1,000 ตัวอักษร | 10 เครดิต | 10 เครดิต |
ประโยคเดียวกัน สองโมเดล#
ฝอยทอง อ่านประโยคเดียวกันสองครั้ง คำขอบน Paxa TTS Flash มีแค่ข้อความ ส่วนคำขอบน Paxa TTS Flash v2 มีคำกำกับสองคำ คือ [whispering] หน้าครึ่งแรก และ [ecstatic] หน้าครึ่งหลัง
-
Paxa TTS Flash0:02 - [whispering] [ecstatic] Paxa TTS Flash v20:03
คำกำกับเขียนเป็นคำพูดธรรมดา#
คำกำกับคือคำใดก็ได้ในวงเล็บเหลี่ยม เช่น [เสียงสดใส] [sad] หรือ [speaking slowly, close to the microphone] จะเขียนแค่คำเดียวหรือบรรยายวิธีอ่านทั้งประโยคก็ได้ เช่น [ผู้ประกาศข่าว น้ำเสียงเป็นทางการ] หรือ [product advertisement, punchy and upbeat] ตัวคำกำกับไม่ถูกพูดออกมา
คำกำกับมีผลไปจนถึงคำกำกับถัดไป ข้อความก่อนคำกำกับแรกใช้น้ำเสียงปกติของเสียงนั้น และ [neutral] พากลับไปที่น้ำเสียงปกติ ตัวพิมพ์ใหญ่เล็ก ช่องว่างที่เกิน และวงเล็บแบบเต็มความกว้างไม่มีผล [Sad] [ sad ] และ [sad] คือคำกำกับเดียวกัน
ประโยคภาษาไทยด้านล่างกำกับด้วยคำภาษาไทย น้ำเสียงสั่น กลั้นน้ำตา หัวเราะทั้งน้ำตา และประกาศข่าวอย่างเป็นทางการ บรรทัดสุดท้ายเปลี่ยนน้ำเสียงสี่ครั้งในประโยคเดียว เริ่มจากกระซิบ ตื่นเต้นด้วยน้ำหนัก 2 ร้องไห้ แล้วจบด้วยเสียงหัวเราะ
- [เสียงสั่น]
[กลั้นน้ำตา] เสน่ห์จันทน์0:04 - [หัวเราะทั้งน้ำตา]
เสน่ห์จันทน์0:04 - [ผู้ประกาศข่าว น้ำเสียงเป็นทางการ]
ทองเอก0:04 - [whispering] [excited:2] [crying] [laughs]ฝอยทอง0:07
น้ำหนักและการผสม#
ตัวเลขหลังโคลอนกำหนดว่าคำกำกับหรือเสียงจะมีผลแรงแค่ไหน เขียนเป็นตัวเลขหรือเปอร์เซ็นต์ก็ได้ เช่น [sad:0.5] [sad:50%] [laughs:0.3] เครื่องหมายบวกใช้ผสมคำกำกับหลายคำ แต่ละคำมีน้ำหนักของตัวเอง เช่น [happy:0.7+sad:0.3]
เสียง คำอุทาน และการเน้นคำ#
เสียงดังขึ้นตรงตำแหน่งที่เขียน ได้แก่ [sighs] [laughs] [chuckles] [exhales sharply] [gasps] [inhales deeply] [giggles] [sobs] [yawns] และ [clears throat] และตัวสะกดอย่าง [inhales] และ [scoffs]
[um] และ [hmm] คือคำอุทาน ถูกพูดออกมาเป็นคำที่อยู่ในวงเล็บ ตัวสะกดภาษาไทยอย่าง [เอ่อ] ก็อ่านแบบเดียวกัน
<emph> ทำให้คำข้างในเป็นคำที่ถูกเน้นในประโยค และ <whisper> ทำให้คำข้างในเป็นเสียงกระซิบ แท็กปิดพาประโยคกลับไปที่น้ำเสียงก่อนหน้า การเน้นคำเขียนเป็นวงเล็บได้ด้วย เช่น [เน้นเสียง] หรือ [emphasize]
- [firm] <emph>
</emph>คุกกี้0:01
สิ่งที่โมเดลไม่ทำ#
แท็กที่โมเดลทำตามไม่ได้จะถูกปฏิเสธด้วย 400 tag_invalid ก่อนตัดเครดิตใด ๆ ข้อความที่มีแต่แท็กโดยไม่มีคำให้พูดจะได้คำตอบ 422 unspeakable_text ก่อนตัดเครดิตเช่นกัน
| สิ่งที่ขอ | ตัวอย่าง |
|---|---|
| สำเนียง | [สำเนียงอีสาน], [british accent], [北京口音] |
| เสียงอื่น | [เสียงเด็ก], [robotic], [old man voice] |
| การร้องเพลง | [ร้องเพลง], [singing], [唱歌] |
| เสียงประกอบ | [door slams], [applause] |
| ภาษา | [ภาษาไทย], [english], [中文] |
| เสียงที่ไม่อยู่ในรายการ | [sniffs] [gulps] [coughs] และ [sneezes] |
คู่มือคำกำกับ รวมเสียง ตัวสะกด และแท็กที่ระบบไม่รับไว้ครบทุกตัว
50 เสียง ทุกเสียงพูดได้สามภาษา#
Paxa TTS Flash v2 มีเสียงทั้งหมด 50 เสียง 26 เสียงมาจาก Paxa TTS Flash โดยใช้รหัสเดิม และอีก 24 เสียงเป็นเสียงใหม่ บน Paxa TTS Flash แต่ละเสียงทำมาสำหรับภาษาเดียว ส่วนบน Paxa TTS Flash v2 ทุกเสียงพูดได้ทั้งไทย อังกฤษ และจีนกลาง เสียงเดียวจึงพูดถึงสินค้าได้ครบทั้งสามตลาด
Pixie อ่านข้อความหลายภาษาปนกันได้ด้วยเสียงเดียว แต่ละคำถูกอ่านตามภาษาของตัวอักษรที่เขียน ประโยคภาษาไทยที่มีชื่อสินค้าภาษาอังกฤษ หรือประกาศภาษาจีนที่มีเลขเที่ยวบินอยู่ข้างใน ส่งเป็นคำขอเดียวได้ ฟิลด์ language ที่ใส่หรือไม่ใส่ก็ได้ กำหนดวิธีอ่านรหัส ตัวเลข และสัญลักษณ์ เช่น ตั้งเป็น "th" แล้ว AB2039 จะอ่านชื่อตัวอักษรแบบไทย
- [โฆษณาสินค้า น้ำเสียงกระฉับกระเฉง]
ขนมครก0:03 - [product advertisement, punchy and upbeat] ขนมครก0:03
- [广告配音,热情洋溢]
ขนมครก0:03 - [apologetic, sincere] คุกกี้0:07
- [亲切的客服语气]
คุกกี้0:07
เสียงใหม่ 24 เสียง#
| เสียง | เหมาะกับบท |
|---|---|
| สาคู | ผู้ช่วย AI |
| สะเต๊ะ | พระเอกอนิเมะ |
| ทองหยอด | นางเอกอนิเมะ |
| ใบเตย | ผู้ให้คำปรึกษา |
| กล้วยทอด | ตัวการ์ตูนคู่หู |
| มะตูม | สารคดี |
| ห่อหมก | อัศวินแฟนตาซี |
| น้ำมะนาว | โค้ชฟิตเนส |
| ข้าวต้ม | คุณพ่อใจดี |
| ซ่าหริ่ม | สาวข้างบ้าน |
| กระยาสารท | คุณตา |
| เมี่ยงคำ | คุณยาย |
| ทอดมัน | พิธีกร |
| น้ำพริก | เสียงทุ้มแหบ |
| ไข่เจียว | นักพากย์เร้าใจ |
| ฉู่ฉี่ | อาจารย์ |
| ครองแครง | หุ่นยนต์ |
| ช่อม่วง | ขี้อาย |
| ข้าวหลาม | หนุ่มโรแมนติก |
| ปลาทู | นักศึกษา |
| แกงเผ็ด | เสียงหนังตัวอย่าง |
| แกงป่า | ตัวร้าย |
| มะขาม | นางร้าย |
| ปุยฝ้าย | ไอดอลเสมือน |
ฟังตัวอย่างของแต่ละเสียงได้ที่หน้ารวมเสียง และมีอีก 25 หน้าที่เล่นฉากเต็มด้วยเสียงเหล่านี้ ตั้งแต่เสียงพากย์อนิเมะและนิทานก่อนนอน ไปจนถึงพากย์กีฬาและเสียงหุ่นยนต์
ฉากจากวิดีโอเปิดตัว#
สายลูกค้า#
ลูกค้าหงุดหงิดเพราะรอสายนาน เจ้าหน้าที่ขอโทษและเปลี่ยนเที่ยวบินให้ แล้วลูกค้าขอให้แจ้งภรรยาเป็นภาษาจีน คุกกี้ ตอบเป็นภาษาอังกฤษแล้วต่อด้วยภาษาจีนกลางด้วยเสียงเดียวกัน
- [frustrated, tense] เอสเพรสโซ0:04
- [apologetic, sincere] คุกกี้0:07
- [relieved] เอสเพรสโซ0:04
- [亲切的客服语气]
คุกกี้0:07
ละครเสียง#
โจรสองคนเริ่มจากกระซิบนับเวลา แล้วตื่นตระหนก ตะโกนให้หนี และโล่งใจจนหายใจไม่ทัน แต่ละประโยคมีคำกำกับหนึ่งคำ และประโยคสุดท้ายจบด้วยเสียงหัวเราะ
- [whispering] มอคค่า0:02
- [panicked, fast] ลาเต้0:01
- [shouting urgently] มอคค่า0:01
- [out of breath, relieved] [laughs]ลาเต้0:03
นิยายเสียงภาษาไทย#
ฉากพบกันอีกครั้ง พูดเป็นภาษาไทยและกำกับเป็นภาษาไทย เสียงสั่น กลั้นน้ำตา แล้วหัวเราะทั้งน้ำตา
- [เสียงสั่น]
[กลั้นน้ำตา] เสน่ห์จันทน์0:04 - [อบอุ่น]
มัสมั่น0:02 - [หัวเราะทั้งน้ำตา]
เสน่ห์จันทน์0:04
Timestamp ระดับคำ#
ตั้ง timestamps เป็น "word" แล้วคำตอบจะมีเวลาเริ่มและเวลาจบของทุกคำเป็นวินาที ใช้ทำคำบรรยายหรือไฮไลต์คำตามเสียงที่พูดได้เหมือนในหน้านี้ ส่วน "sentence" และ "utterance" ให้ช่วงเวลาที่ยาวกว่า ช่วงเวลาครอบเฉพาะข้อความที่พูด แท็กไม่มีช่วงเวลาของตัวเอง
คำขอแบบรอครบที่ขอ Timestamp จะได้ JSON ที่มีเสียงเป็น base64 คู่กับ timing.spans ส่วนคำขอแบบสตรีมจะได้ JSON ทีละบรรทัดต่อหนึ่งช่วงเสียง แต่ละบรรทัดมีเสียงและช่วงเวลาที่จบในช่วงนั้น คำขอที่ขอ Timestamp คิดค่าบริการ 125 เปอร์เซ็นต์ของอัตราเสียงพูด ดูทั้งสองรูปแบบได้ในคู่มือ Timestamp
ความเร็วและการสตรีม#
จากการวัดของเราเองที่สิงคโปร์ เสียงแรกของคำขอกลับมาเร็วสุดภายใน 90 มิลลิวินาที เมื่อตั้ง stream เป็น true เสียงจะเริ่มเล่นได้ระหว่างที่ส่วนที่เหลือของประโยคยังสังเคราะห์อยู่
ซ็อกเก็ตสด พูดข้อความออกมาได้ตั้งแต่โมเดลภาษายังเขียนไม่เสร็จ และใช้คำกำกับได้เหมือนกัน แท็กที่ยังพิมพ์ไม่จบตอนซ็อกเก็ตส่งข้อความไปสังเคราะห์จะรอจนปิดวงเล็บ และแต่ละรอบเริ่มด้วยคำกำกับที่รอบก่อนหน้าจบไว้ เฟรม cancel หยุดคำตอบได้ทันทีเมื่อปลายสายพูดแทรก ดูการทำงานทีละเฟรมได้ที่หน้าเสียงพูดแบบเรียลไทม์
ราคาเท่าเดิม#
Paxa TTS Flash v2 คิด 10 เครดิตต่อ 1,000 ตัวอักษร หรือ $10 ต่อหนึ่งล้านตัวอักษร เท่ากับ Paxa TTS Flash แท็กคิดตามจำนวนตัวอักษรที่เขียน รวมวงเล็บด้วย ส่วนคำขอที่ขอ Timestamp รวมถึงการเชื่อมต่อสดที่ขอ Timestamp คิด 125 เปอร์เซ็นต์ของอัตรานี้ เหมือนกันทั้งสองโมเดล
| ประโยคที่ส่ง | ตัวอักษร | เครดิต |
|---|---|---|
| I can't believe it. We actually did it! | 39 | 0.39 |
| [whispering] I can't believe it. [ecstatic] We actually did it! | 63 | 0.63 |
| [whispering] I was not going to tell anyone, [excited:2] but we got the house, [crying] after three years of saving. [laughs] | 125 | 1.25 |
| [โฆษณาสินค้า น้ำเสียงกระฉับกระเฉง] ซีซันใหม่ สีใหม่ วางขายวันศุกร์นี้ | 69 | 0.69 |
| [广告配音,热情洋溢] 新一季,新色彩,本周五上市。 | 26 | 0.26 |
เครดิตฟรี 100 เครดิตของบัญชีใหม่แปลงเป็นเสียงพูดได้ 10,000 ตัวอักษร หรือประมาณ 16 นาทีของเสียงพูดภาษาไทย
เริ่มใช้งาน#
POST /v1/ttsส่งเสียงกลับมาแบบรอครบหรือแบบสตรีม ตั้งmodelเป็นpaxa-tts-flash-v2POST /v1/audio/speechที่ใช้ร่วมกับ OpenAI ได้ อ่านแท็กในinputตามกฎเดียวกัน OpenAI SDK ที่ชี้มาที่ Paxa API ส่งคำกำกับได้ตามที่เขียน- ซ็อกเก็ตสด
/v1/tts/liveระบุโมเดลในเฟรมstart - ใน Console เครื่องมือเสียงพูดมี Paxa TTS Flash v2 ให้เลือก โดยมีชื่อ Pixie อยู่ข้างชื่อโมเดล
curl -X POST https://api.paxalabs.com/v1/tts \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>",
"voice": "khanomkrok",
"model": "paxa-tts-flash-v2"
}' \
--output speech.mp3import { writeFile } from "node:fs/promises";
const response = await fetch("https://api.paxalabs.com/v1/tts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAXA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
text: "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>",
voice: "khanomkrok",
model: "paxa-tts-flash-v2",
}),
});
if (!response.ok) throw new Error(`TTS failed: ${response.status}`);
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));import os
import requests
response = requests.post(
"https://api.paxalabs.com/v1/tts",
headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"},
json={"text": "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>", "voice": "khanomkrok", "model": "paxa-tts-flash-v2"},
)
response.raise_for_status()
with open("speech.mp3", "wb") as f:
f.write(response.content)คำขอหนึ่งครั้งรับข้อความได้สูงสุด 5,000 ตัวอักษร และส่งเสียงกลับมาเป็น mp3 opus wav และ pcm โดย wav และ pcm เป็นเสียง 24 kHz ส่วน speed ตั้งได้ตั้งแต่ 0.5 ถึง 1.5 โดยไม่เปลี่ยนค่าบริการ
ย้ายจาก Paxa TTS Flash#
- Paxa TTS Flash ยังใช้งานได้ตามเดิมด้วย
paxa-tts-flash-v1และคำขอเดิมทำงานเหมือนเดิมทุกอย่าง - ย้ายคำขอได้ด้วยการเปลี่ยน
modelเป็นpaxa-tts-flash-v2เสียง 26 เสียงที่มีบนทั้งสองโมเดลใช้รหัสเดิม - ผัดไทย โยโย่ ส้มตำ ลาบ ข้าวซอย โรตี โดนัท และ โทสต์ ยังอยู่บน Paxa TTS Flash เท่านั้น
- บน Paxa TTS Flash มีเพียงเสียงทดลองที่อ่านแท็กอารมณ์อย่าง
[happy]ได้ ส่วนบน Paxa TTS Flash v2 ทุกเสียงอ่านแท็กได้ และ[happy]ก็เป็นคำกำกับคำหนึ่งเหมือนคำอื่น
คำถามที่พบบ่อย#
Paxa TTS Flash v2 ยังเป็นรุ่นพรีวิวอยู่ไหม#
Paxa TTS Flash v2 เปิดให้ใช้งานเต็มรูปแบบแล้ว ทั้งผ่าน API และใน Console
Paxa TTS Flash v2 แพงกว่า Paxa TTS Flash ไหม#
ไม่แพงกว่า ทั้งสองโมเดลคิด 10 เครดิตต่อ 1,000 ตัวอักษร
ต้องเรียกโมเดลว่า Pixie ในคำขอไหม#
ไม่ต้อง Pixie เป็นชื่อเล่นของโมเดล ในคำขอให้ระบุด้วยรหัส paxa-tts-flash-v2
คำกำกับเขียนว่าอะไรได้บ้าง#
เขียนวิธีพูดแบบไหนก็ได้ เป็นคำภาษาไทย อังกฤษ หรือจีน เช่น [ผู้ประกาศข่าว น้ำเสียงเป็นทางการ] หรือ [tired, exhausted] คำกำกับที่ขอสำเนียง ขอเปลี่ยนเป็นเสียงอื่น ขอให้ร้องเพลง ขอเสียงประกอบ หรือขอให้พูดภาษาใดภาษาหนึ่ง จะได้คำตอบ tag_invalid
โคลนเสียงได้ไหม#
ไม่ได้ Paxa TTS Flash v2 มีเสียงในชุดเสียง 50 เสียง และไม่รับไฟล์เสียงตัวอย่าง ส่วนเสียงใหม่มาจากการออกแบบเสียงซึ่งสร้างจากคำบรรยาย