Paxa Labs

กำกับน้ำเสียงด้วยแท็ก

แท็กคำกำกับคือคำกำกับในวงเล็บเหลี่ยมอย่าง [whispering] เสียงอย่าง [laughs] คำอุทาน และเครื่องหมาย <emph> กับ <whisper> ที่เขียนไว้ในข้อความของคำขอถึง Paxa TTS Flash v2 รวมวิธีอ่านแท็กแต่ละแบบ น้ำหนัก การผสม ค่าบริการ และแท็กทุกแบบที่ API ปฏิเสธ

ดูเป็น Markdown

บน Paxa TTS Flash v2 ทุกเสียงอ่านแท็กที่เขียนไว้ใน text ของ POST /v1/tts ได้ คำกำกับในวงเล็บเหลี่ยม เช่น [whispering] กำหนดน้ำเสียงของข้อความที่ตามมา เสียงอย่าง [laughs] ดังตรงตำแหน่งที่เขียน คำอุทานอย่าง [um] ถูกพูดออกมาเป็นคำ และ <emph> กับ <whisper> ครอบช่วงข้อความ API อ่านแท็กทุกตัวก่อนตัดเครดิต และแท็กที่โมเดลปฏิเสธตอบ 400 tag_invalid ส่วนบน Paxa TTS Flash (paxa-tts-flash-v1) มีเพียงเสียงรุ่นทดลองที่อ่านแท็กอารมณ์ และเสียงอื่นทุกเสียงจะข้ามแท็ก

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.mp3

คำกำกับ#

คำกำกับเขียนเป็นภาษาธรรมชาติ บอกว่าอยากให้ข้อความหลังแท็กฟังเป็นอย่างไร เป็นภาษาไทย อังกฤษ หรือจีนก็ได้ แล้วเสียงจะพูดแบบนั้นจนถึงคำกำกับถัดไป คำใดก็ได้ในวงเล็บเหลี่ยมที่ไม่ใช่เสียง คำอุทาน ช่วงหยุด หรือการตั้งค่าที่ถูกปฏิเสธ จะอ่านเป็นคำกำกับ ตัวอย่างที่ใช้เริ่มต้นได้:

  • [อบอุ่น พูดช้า ๆ], [เขินอาย พูดเบา ๆ], [ค่อย ๆ ตื่นเต้นขึ้น]
  • [whispering], [calm, measured], [building excitement], [barely awake, at three in the morning]
  • [害羞地,小声], [冷冷地,带着笑意], [像是等这一刻等了十年]

ข้อความก่อนคำกำกับแรกใช้น้ำเสียงเดิมของเสียงนั้น และ [neutral] พากลับสู่น้ำเสียงเดิม เสียงและคำอุทานไม่เปลี่ยนคำกำกับที่มีผลอยู่

  • ข้อความในวงเล็บเหลี่ยมไม่ถูกพูดออกเสียง ยกเว้นคำอุทาน แท็กหนึ่งตัวเริ่มจาก [ ถึง ] ตัวถัดไป โดยไม่มี [ อื่นหรือการขึ้นบรรทัดใหม่คั่น และวงเล็บแบบเต็มความกว้าง [ ] ใช้ได้เหมือนกัน
  • ตัวพิมพ์เล็กหรือใหญ่ไม่มีผล ตัวอักษรและตัวเลขแบบเต็มความกว้างอ่านเป็น ASCII และช่องว่างหลายช่องอ่านเป็นช่องเดียว [Sad] [SAD] และ [ sad ] จึงเป็น [sad] ทั้งหมด
  • วงเล็บที่ไม่มีตัวอักษร เช่น [1] หรือ [...] ได้คำตอบ tag_invalid

น้ำหนักและการผสม#

น้ำหนักเขียนต่อหลังโคลอน เช่น [sad:0.5] หรือ [laughs:0.3] เขียนเป็นตัวเลขอย่าง 0.5 .5 หรือ 0,5 หรือเป็นเปอร์เซ็นต์อย่าง 50% ก็ได้ เลขไทยและตัวเลขแบบเต็มความกว้างก็อ่านได้ น้ำหนักที่ต่ำกว่า 0 อ่านเป็น 0 และไม่มีเพดานด้านบน [excited:2] จึงใช้ได้ บน [neutral] บนคำอารมณ์จากรายการแท็กอารมณ์ เช่น [sad] และบนเสียง น้ำหนักที่ไม่ใช่ตัวเลข เช่น [sad:half] ได้คำตอบ tag_invalid ส่วนคำกำกับอื่น โคลอนเป็นส่วนหนึ่งของคำ [note: see below] จึงเป็นคำกำกับหนึ่งตัว

+ รวมคำกำกับหลายตัวเป็นการผสม แต่ละส่วนมีน้ำหนักของตัวเอง เช่น [happy+sad] หรือ [happy:0.7+sad:0.3] การผสมรับเฉพาะคำกำกับ [happy+laughs] และ [sad+um] จึงได้คำตอบ tag_invalid

เสียง#

เสียงดังตรงตำแหน่งที่เขียน เขียนเสียงใดก็ได้ด้านล่างด้วยชื่อหรือคำสะกดแบบอื่นของมัน และใส่น้ำหนักได้ เช่น [soft laugh:0.8] เสียงที่น้ำหนัก 0 จะถูกละไว้

เสียงเขียนแบบอื่นได้
[sighs]sigh, a sigh, deep sigh, heavy sigh, long sigh, sighs deeply, sighs heavily, soft sigh, sighs softly, ถอนหายใจ, ถอนใจ, ถอนหายใจยาว, 叹气, 叹息, 唉
[laughs]laugh, laughter, a laugh, short laugh, big laugh, soft laugh, laughs softly, quiet laugh, เสียงหัวเราะ, 笑声, 大笑
[chuckles]chuckle, a chuckle, soft chuckle, small chuckle, light chuckle, chuckles softly, หัวเราะหึๆ, หัวเราะหึ ๆ, หัวเราะในลำคอ, 轻笑, 窃笑
[exhales sharply]exhale sharply, sharp exhale, huff, huffs, พ่นลมหายใจแรงๆ, พ่นลมหายใจแรง ๆ, 猛地呼气
[gasps]gasp, a gasp, sharp gasp, soft gasp, หายใจเฮือก, 倒吸一口气, 倒抽一口冷气
[inhales deeply]inhale deeply, deep inhale, deep breath, a deep breath, takes a deep breath, breathes in deeply, หายใจเข้าลึกๆ, หายใจเข้าลึก ๆ, สูดหายใจลึกๆ, สูดหายใจลึก ๆ, 深吸一口气, 深呼吸
[giggles]giggle, a giggle, soft giggle, หัวเราะคิกคัก, คิกคัก, 咯咯笑, 嘻嘻
[sobs]sob, a sob, soft sob, sobs quietly, เสียงสะอื้น, 抽泣, 啜泣, 呜咽
[yawns]yawn, a yawn, หาว, 打哈欠, 哈欠
[clears throat]clear throat, clears his throat, clears her throat, clears their throat, throat clear, ahem, กระแอม, กระแอมไอ, 清嗓子, 清了清嗓子
[inhales]inhale, breathes in, quick inhale, หายใจเข้า, 吸气
[breath]a breath, takes a breath, quick breath, หายใจ, 呼吸
[exhales]exhale, breathes out, หายใจออก, 呼气
[whimpers]whimper, a whimper, soft whimper, เสียงหงิงๆ, เสียงหงิง ๆ, เสียงครางหงิงๆ, เสียงครางหงิง ๆ, 嘤嘤, 嘤咛, 呜呜
[scoffs]scoff, a scoff, pfft, pff, psh, pshh, soft scoff, แค่นเสียง, หึ, เสียงหึ, 嗤, 嗤了一声, 冷哼, 冷哼一声, 哼

เสียงต่อไปนี้ได้คำตอบ tag_invalid ไม่ว่าเขียนสะกดแบบใด

เสียงเขียนแบบอื่นได้
[sniffs]sniff, sniffle, sniffles, สูดจมูก, 吸鼻子, 抽鼻子
[gulps]gulp, a gulp, กลืนน้ำลาย, 咽口水, 吞口水
[coughs]cough, a cough, dry cough, coughing fit, soft cough, small cough, coughs softly, ไอ, เสียงไอ, ไอแค่กๆ, ไอแค่ก ๆ, ไอค่อกแค่ก, 咳嗽, 咳, 咳了一声, 干咳
[sneezes]sneeze, a sneeze, achoo, ah-choo, atchoo, small sneeze, soft sneeze, จาม, เสียงจาม, ฮัดชิ่ว, ฮัดเช้ย, 打喷嚏, 喷嚏, 阿嚏
[groans]groan, a groan, soft groan, groans softly, เสียงคราง, เสียงครางเบาๆ, เสียงครางเบา ๆ, 呻吟声, 一声呻吟
[grunts]grunt, a grunt, soft grunt, ฮึ่ม, เสียงฮึ่ม, อึ๊บ, เสียงอึ๊บ, 闷哼, 闷哼一声, 低哼
[snorts]snort, a snort, soft snort, พ่นลมจมูก, พ่นลมทางจมูก, เสียงพ่นลมจมูก, 喷鼻息, 鼻哼, 鼻子哼了一声
[pants]pant, pants heavily, pants softly, เสียงหอบ, เสียงหอบหายใจ, 喘气声, 喘息声, 大口喘气
[shushes]shush, a shush, shh, shhh, จุ๊ๆ, จุ๊ ๆ, ชู่ว, ชู่ว์, เสียงชู่ว, 嘘, 嘘了一声
[tsks]tsk, tsk tsk, tut, tuts, tut tut, tut-tut, tongue click, clicks tongue, clicks her tongue, clicks his tongue, clicks their tongue, จิ๊, จิ๊ปาก, จุ๊ปาก, เดาะลิ้น, 啧, 啧啧, 咂嘴
[hums]hum, a hum, soft hum, hums softly, ฮัม, เสียงฮัม, ฮัมเพลง, 哼歌, 哼小曲, 哼曲子
[screams]scream, a scream, shriek, shrieks, a shriek, small shriek, กรี๊ด, เสียงกรี๊ด, เสียงกรีดร้อง, 尖叫声, 一声尖叫, 惊叫声

คำอุทาน#

[um] และ [hmm] คือคำอุทาน ซึ่งถูกพูดออกมาเป็นคำที่เขียนไว้ในวงเล็บ ข้อความที่มีคำอุทานจึงมีสิ่งที่จะพูดเสมอ คำอุทานไม่รับน้ำหนัก [um:0.5] จึงได้คำตอบ tag_invalid

คำอุทานเขียนแบบอื่นได้
[hmm]hm, hmmm, mmm, อืม, 嗯
[um]umm, uh, uhh, er, เอ่อ, เอ่อๆ, เอ่อ ๆ, อ่า, 呃, 呃呃, 额

คำสะกด [uhm], [erm], [อืมม] ได้คำตอบ tag_invalid

ช่วงหยุด#

[short pause] [pause] [long pause] และความยาวที่กำหนดเอง เช่น [pause 300ms] เพิ่มความเงียบตรงตำแหน่งที่เขียนไว้ ดูความยาวและขีดจำกัด 500 ms ได้ที่ช่วงหยุด

การเน้นและการกระซิบ#

<emph> และ <whisper> ครอบช่วงข้อความ <emph>...</emph> เน้นคำที่อยู่ข้างใน และ <whisper>...</whisper> กระซิบคำเหล่านั้น

  • น้ำหนักเขียนหลังโคลอนเหมือนในวงเล็บ เช่น <emph:0.5> หรือ <whisper:0.3> เครื่องหมายที่น้ำหนักอ่านเป็นตัวเลขไม่ได้ เช่น <emph:half> จะถูกข้ามไปพร้อมตัวปิด
  • ตัวปิดคืนคำกำกับที่มีผลอยู่ก่อนเครื่องหมายนั้น หรือคืนน้ำเสียงเดิมของเสียงเมื่อก่อนหน้าไม่มีคำกำกับ คำกำกับที่เขียนไว้ในช่วงนั้นจะแทนที่สิ่งที่ตัวปิดคืนให้
  • ตัวปิดหนึ่งตัวปิดเครื่องหมายชนิดเดียวกันที่เปิดอยู่ด้านในสุด ตัวปิดที่ไม่มีเครื่องหมายเปิดจะถูกข้าม และเครื่องหมายที่ไม่ได้ปิดมีผลต่อไปเหมือนคำกำกับ
  • ตัวพิมพ์และช่องว่างในเครื่องหมายไม่มีผล < EMPH > และ </ emph > อ่านได้ทั้งคู่
  • การเน้นเขียนเป็นคำกำกับได้ด้วย เป็น [เน้นเสียง] หรือ [เน้น], [เน้นคำ], [เน้นคำนี้], [เน้นย้ำ], [ลงน้ำหนัก], [emphasize], [emphasise], [emphasized], [emphasised], [emphasis], [with emphasis], [强调], [強調], [重读], [重讀], [加重语气], [加重語氣]

แท็กที่ API ปฏิเสธ#

แท็กแต่ละแบบต่อไปนี้ได้คำตอบ 400 tag_invalid ก่อนตัดเครดิต แม้ข้อความจะไม่มีอะไรอื่นเลย

แท็กตัวอย่าง
วงเล็บที่ไม่มีตัวอักษร[1], [...]
เสียงที่ไม่อยู่ในรายการเสียง[sniffs], [gulps], [coughs], [sneezes], [groans], [grunts], [snorts], [pants], [shushes], [tsks], [hums], [screams]
คำสะกดคำอุทานที่โมเดลอ่านไม่ได้[uhm], [erm], [อืมม]
น้ำหนักบนคำอุทาน[um:0.5]
น้ำหนักที่ไม่ใช่ตัวเลขบน [neutral] คำอารมณ์ หรือเสียง[sad:half], [laughs:lots]
ส่วนของการผสมที่ไม่ใช่คำกำกับ[happy+laughs], [sad+um]
การตั้งค่าของคำขอที่เขียนเป็นแท็ก[voice], [language]
สำเนียง[british accent], [สำเนียงอีสาน], [北京口音]
เสียงแบบอื่น[robotic], [old man voice], [เสียงเด็ก], [机器人]
การร้องเพลง[singing], [ร้องเพลง], [唱歌] ส่วน [sing-song] เป็นคำกำกับ
เสียงประกอบ[door slams], [applause], [sound effect], [เสียงประกอบ]
ภาษา[in thai], [english], [ภาษาไทย], [中文]

ค่าบริการ#

แท็กคือข้อความ ทุกตัวอักษรของแท็ก รวมวงเล็บและเครื่องหมาย นับรวมในความยาวคำขอและค่าบริการตามอัตราต่อตัวอักษรของโมเดล ตัวอย่างด้านบนยาว 126 ตัวอักษร คิด 1.26 เครดิต ข้อความที่มีแต่แท็กและไม่มีคำอุทานได้คำตอบ 422 unspeakable_text โดยยังไม่คิดเครดิต เครดิตและการคิดค่าบริการ อธิบายการปัดเศษและค่าขั้นต่ำ

แท็กบนการเชื่อมต่อสด#

บนการเชื่อมต่อสด เฟรม text ที่มีแท็กซึ่งโมเดลปฏิเสธจะได้อีเวนต์ error พร้อม tag_invalid และบัฟเฟอร์คงข้อความเดิมก่อนเฟรมนั้นไว้ การส่งอัตโนมัติจะเก็บแท็กหรือเครื่องหมายที่ยังเปิดค้างท้ายบัฟเฟอร์ไว้ก่อน แท็กที่ถูกแบ่งข้ามเฟรมจึงถูกอ่านครบทั้งตัว ส่วนแท็กที่เปิดค้างเกินเกณฑ์ความยาวที่ใช้ส่งข้อความทั่วไปจะถูกอ่านเป็นข้อความ โดยไม่ถูกตรวจสอบในฐานะแท็ก แท็กที่ยังไม่มีคำตามมาจะรอคำเหล่านั้นอยู่ในบัฟเฟอร์ การสังเคราะห์แต่ละช่วงเริ่มด้วยคำกำกับและเครื่องหมายที่ช่วงก่อนหน้าจบไว้ แท็กที่ยกมานี้ไม่คิดค่าบริการแต่นับรวมใน max_chars และใช้ได้ไม่เกินครึ่งหนึ่งของค่านี้ เฟรมที่ทำให้แท็กที่ยกมายาวเกินครึ่งหนึ่ง หรือทำให้แท็กที่รออยู่ในบัฟเฟอร์รวมกับแท็กที่ยกมาเกิน max_chars จะได้ text_too_long ส่วน cancel พาการเชื่อมต่อกลับสู่น้ำเสียงเดิมของเสียงนั้น

หมายเหตุ

เอนด์พอยต์ที่เข้ากันได้กับ OpenAI อ่านแท็กใน input ตามกฎเดียวกัน