เสียง AI ภาษาไทยสำหรับพอดแคสต์
ผลิตพอดแคสต์ภาษาไทยจากสคริปต์ จะโฮสต์เดียวหรือสองคนก็ได้ ลงได้ทุกวัน ทำแชปเตอร์จาก timestamp และคิดเงินตามตัวอักษร
ไอเดียให้ลองเล่น
ทุกการ์ดเล่นคลิปจริงที่สร้างจากสคริปต์นั้น ๆ ด้วยเสียงนมเย็น เปิดในหน้าเสียงพูดเพื่อให้พูดข้อความของคุณเองได้
คนทำพอดแคสต์ใช้ API อย่างไร
พอดแคสต์ไทยส่วนใหญ่คือคนหนึ่งหรือสองคนคุยกัน และคนที่พูดก็คือกระบวนการผลิตทั้งหมด รายการออกอากาศเมื่อโฮสต์อัดเสียง ด้วยพลังเท่าที่โฮสต์มีในวันนั้น และรายการที่ลงทุกวันก็หมายถึงต้องอัดทุกวัน ไม่ว่าจะเหลือเสียงพอหรือไม่ Text-to-Speech API ทำให้โฮสต์กลายเป็นคุณสมบัติหนึ่งของสคริปต์ รหัสเสียงหนึ่งตัวอ่านทั้งรายการ รหัสเสียงตัวที่สองคือโฮสต์คนที่สอง และทั้งคู่ฟังเหมือนเดิมในตอนที่ 118 เท่ากับตอนที่ 1 ช่วงที่เขียนใหม่คิดเงินตามตัวอักษรของช่วงนั้น ส่วนที่เหลือของตอนยังอยู่เหมือนเดิม ชื่อภาษาอังกฤษและศัพท์เฉพาะที่อยู่ในประโยคไทยอ่านด้วยเสียงเดียวกัน ช่วงเวลาระดับประโยคที่ส่งกลับมาพร้อมเสียงกลายเป็นแชปเตอร์และทรานสคริปต์สำหรับโน้ตของรายการ และไฟล์ที่ได้กลับมาก็คือไฟล์ที่ฟีดชี้ไป
- แบ่งสคริปต์ตามผู้พูดบทพูดต่อเนื่องของโฮสต์แต่ละคนคือหนึ่งช่วง และแต่ละช่วงคือหนึ่งคำขอที่ส่งรหัสเสียงของโฮสต์คนนั้น ช่วงที่ยาวเกินเพดานต่อคำขอแบ่งอีกครั้งที่ย่อหน้า รายการโฮสต์เดียวใช้รหัสเสียงเดียวตลอดทั้งตอน
- สร้างเสียงแล้วต่อไฟล์แต่ละช่วงกลับมาเป็นไฟล์ MP3 ที่ต่อกันตามลำดับได้ใน ffmpeg หรือโปรแกรมตัดต่อที่รายการใช้อยู่ วางเพลงประกอบและเสียงคั่นเหมือนเดิม หากรายการต้องการแชปเตอร์หรือทรานสคริปต์ ให้ขอช่วงเวลาระดับประโยคในคำขอเดียวกัน
- เผยแพร่ตามปกติไฟล์ที่ต่อเสร็จส่งขึ้นบริการโฮสต์เป็น enclosure ของตอนนั้น รายการรายวันทำสามขั้นตอนนี้ซ้ำจากสคริปต์ทุกเช้า การแก้ไขสร้างใหม่เพียงช่วงเดียว ส่วนที่เหลือของตอนยังอยู่เหมือนเดิม
ความยาวตอนกับค่าใช้จ่าย
| รายการ | ตัวอักษร | คำขอ | ค่าใช้จ่าย |
|---|---|---|---|
| หนึ่งตอน 20 นาที | 12,120 | 3 | $0.18 |
| รายการรายสัปดาห์ ต่อเดือน | 48,480 | 12 | $0.73 |
| รายการรายวันตอนละ 20 นาที ต่อเดือน | ประมาณ $5.45 | ||
คำนวณจาก 606 ตัวอักษรต่อเสียงหนึ่งนาที ที่อัตรา $15 ต่อหนึ่งล้านตัวอักษร นับ 30 ตอนต่อเดือน เพลงประกอบ อินโทร และการตัดต่ออยู่นอกตัวเลขนี้ ช่วงที่เขียนใหม่คิดเงินตามตัวอักษรของช่วงนั้นเท่านั้น
สองโฮสต์จากสคริปต์เดียว
script.txt 12,120 ตัวอักษร (ราว 20 นาที) 01 โฮสต์ A oliang เปิดรายการ สรุปข่าว 02 โฮสต์ B sanaechan ช่วงคำถามจากผู้ฟัง 03 โฮสต์ A oliang ปิดรายการ → POST /v1/tts หนึ่งคำขอต่อหนึ่งช่วง ใช้รหัสเสียงของช่วงนั้น → part-01.mp3 part-02.mp3 part-03.mp3 → episode-118.mp3 (ต่อไฟล์ตามลำดับ วางเพลงประกอบไว้ข้างใต้)
หนึ่งช่วงคือบทพูดต่อเนื่องของโฮสต์คนเดียว แต่ละช่วงเป็นหนึ่งคำขอที่ส่งรหัสเสียงของโฮสต์คนนั้น แล้วนำทุกช่วงมาต่อกันตามลำดับ โฮสต์ A ใช้รหัสเสียงเดิมทุกตอน นั่นคือสิ่งที่ทำให้รายการฟังเป็นรายการเดิม
สิ่งที่ฟีดชี้ไป
<item> <title>ตอนที่ 118</title> <enclosure url="https://cdn.example.com/ep118.mp3" type="audio/mpeg"/> <itunes:duration>20:00</itunes:duration> <podcast:chapters url="https://cdn.example.com/ep118.chapters.json"/> </item>
enclosure คือไฟล์ MP3 ที่ต่อเสร็จแล้ว ไฟล์แชปเตอร์เขียนจากช่วงเวลาระดับประโยคที่ API ส่งกลับมาพร้อมแต่ละช่วง โดยเลื่อนตามตำแหน่งที่ช่วงนั้นเริ่มในตอน บริการโฮสต์พอดแคสต์ที่ใช้อยู่ยังเป็นผู้เผยแพร่ฟีดเหมือนเดิม ไม่มีอะไรเปลี่ยน
สำหรับนักพัฒนา
ส่งแต่ละช่วงพร้อมรหัสเสียงของโฮสต์ และขอช่วงเวลาระดับประโยคในคำขอเดียวกันเมื่อรายการต้องการแชปเตอร์หรือทรานสคริปต์
curl -X POST https://api.paxalabs.com/v1/tts \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
"voice": "khanomkrok",
"model": "paxa-tts-flash-v1",
"timestamps": "word"
}' \
-o response.json
jq -r .audio response.json | base64 -d > speech.mp3
jq .timing.spans response.jsonimport { 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: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
voice: "khanomkrok",
model: "paxa-tts-flash-v1",
timestamps: "word",
}),
});
if (!response.ok) throw new Error(`TTS failed: ${response.status}`);
const { audio, timing } = await response.json();
await writeFile("speech.mp3", Buffer.from(audio, "base64"));
for (const span of timing.spans) {
console.log(`${span.start.toFixed(2)}s ${span.text}`);
}{
"audio": "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjYy...",
"timing": {
"granularity": "word",
"spans": [
{
"text": "สวัสดี",
"start": 0,
"end": 0.51
},
{
"text": "ครับ",
"start": 0.51,
"end": 0.85
},
{
"text": "ยินดี",
"start": 0.85,
"end": 1.27
},
{
"text": "ต้อนรับ",
"start": 1.27,
"end": 1.87
},
{
"text": "สู่",
"start": 1.87,
"end": 2.12
},
{
"text": "Paxa",
"start": 2.12,
"end": 2.46
},
{
"text": "Labs",
"start": 2.46,
"end": 2.8
}
]
}
}ฟังเสียงจริง
โอเลี้ยงชาย0:03
เสียงทุ้มสบาย ๆ เหมาะกับรายการชิล ๆ และวิทยุยามดึก
ดึกแล้วนะครับ ชงกาแฟดำสักแก้ว แล้วฟังเพลงเบา ๆ ไปด้วยกันครับ
ขนมครกชาย0:03
เสียงผู้ใหญ่ใจเย็น ไม่เร่งรีบ เสียงชายหลักของทั้งชุด เหมาะกับสารคดี เรื่องเล่าย้อนวัน และงานบรรยาย
สมัยผมยังหนุ่ม แถวนี้ยังเป็นทุ่งนา เดินไปตลาดทีหนึ่งก็ค่อนวันแล้วครับ
นมเย็นหญิง0:06
เสียงสดใสมีพลัง เสียงหญิงหลักของทั้งชุด เหมาะกับโปรโมต คลิปโซเชียล และเสียงพูดในผลิตภัณฑ์ทั่วไป
ยินดีต้อนรับสู่ Paxa Labs ค่ะ เสียงภาษาไทยที่สลับเป็น English ได้กลางประโยค อย่างเป็นธรรมชาติ
ตะโก้หญิง0:05
เสียงสาวเป็นกันเอง เหมาะกับหนังสือเสียง สรุปข่าว และคลิปอธิบาย
ยามเช้าในกรุงเทพฯ แสงแดดอ่อน ๆ ทาบลงบนถนนที่เริ่มคึกคัก
เสียงบางส่วนจากทั้งหมด 26 เสียง สร้างจาก API ด้วยรหัสเสียงที่เปิดให้ใช้งานจริง ฟังครบทุกเสียงได้ที่หน้า Text-to-Speech
สองโฮสต์ คนละหนึ่งคำขอ
Paxa TTS Flash อ่านหนึ่งเสียงต่อหนึ่งคำขอ รายการสองโฮสต์จึงเป็นรหัสเสียงสองตัวสลับกันไปตามสคริปต์ และโฮสต์แต่ละคนฟังเหมือนเดิมทุกตอน โมเดลอ่านบทสนทนายาวตามที่เขียน รวมถึงคำลงท้ายประโยค และอ่านชื่อภาษาอังกฤษในประโยคไทยโดยไม่เปลี่ยนผู้พูด
คำถามที่พบบ่อย
- ให้โฮสต์สองคนคุยกันในตอนเดียวได้ไหม
- ได้ หนึ่งคำขอใช้หนึ่งเสียง สคริปต์สองโฮสต์จึงสลับรหัสเสียงสองตัว หนึ่งคำขอต่อหนึ่งรอบพูดหรือหลายรอบต่อเนื่อง แล้วนำช่วงมาต่อกันตามลำดับ โฮสต์แต่ละคนใช้รหัสเสียงเดิมทุกตอน
- ตอนหนึ่งยาวได้แค่ไหน
- หนึ่งคำขอรับได้ถึง 5,000 ตัวอักษร ตอนความยาว 20 นาทีจึงสร้างด้วย 3 คำขอ ตัวรายการไม่มีขีดจำกัดความยาว ส่วนขีดจำกัดอัตราต่อแพลนอยู่ในหน้าราคา
- ทำแชปเตอร์และทรานสคริปต์ได้ไหม
- ได้ ขอช่วงเวลาระดับประโยคหรือระดับคำในคำขอเดียวกัน ระบบจะส่งเสียงพร้อมเวลาของทุกช่วงกลับมา ด้วยตัวคูณที่ระบุไว้บนอัตราต่อตัวอักษร เลื่อนเวลาของแต่ละช่วงตามตำแหน่งที่ช่วงนั้นเริ่มในไฟล์ที่ต่อแล้ว ก็จะได้แชปเตอร์และทรานสคริปต์
- อ่านชื่อและศัพท์ภาษาอังกฤษในประโยคไทยได้ไหม
- ได้ ข้อความไทยปนอังกฤษในคำขอเดียวอ่านด้วยเสียงเดียว ชื่อสินค้า ชื่อแขกรับเชิญ และวลีภาษาอังกฤษในประโยคไทยจึงฟังเป็นโฮสต์คนเดิม
- รายการที่ทำแบบนี้หารายได้ได้ไหม
- หากใช้เครดิตฟรีเพียงอย่างเดียว เสียงที่สร้างใช้ได้เฉพาะส่วนตัวและเพื่อทดลอง เมื่อซื้อแพลนหรือเครดิตแล้ว เสียงนั้นเป็นของคุณสำหรับทุกการใช้งาน รวมถึงรายการที่มีสปอนเซอร์หรือโฆษณา และครอบคลุมตอนที่สร้างก่อนการซื้อครั้งแรกด้วย
เริ่มต้นด้วยเครดิตฟรี
เข้าสู่ระบบด้วย Google, GitHub หรือ Hugging Face แล้วใช้เครดิตฟรี 100 เครดิตกับข้อความของคุณเอง
ตัวอย่างการใช้งานอื่น