เสียงที่ออกแบบเอง
เสียงที่ออกแบบเองคือเสียงที่คุณบรรยายเป็นคำพูดแล้วบันทึกไว้ในบัญชี ผ่าน API หรือ Console ใช้พูดบน Paxa TTS Flash v2 ด้วย id ของตัวเอง คิดอัตราของตัวเอง และใช้ได้เฉพาะบัญชีของคุณ
เสียงที่ออกแบบเองคือเสียงที่คุณบรรยายเป็นคำพูดแล้วบันทึกไว้ในบัญชี ผ่าน API หรือเครื่องมือออกแบบเสียงใน Console เสียงที่บันทึกแล้วจะมี id ที่ขึ้นต้นด้วย voice_ ส่ง id นี้เป็น voice พร้อมตั้ง model เป็น paxa-tts-flash-v2 ใน POST /v1/tts เอนด์พอยต์เสียงแบบ OpenAI หรือการเชื่อมต่อสด
ออกแบบเสียง#
- บรรยายเสียงส่งคำบรรยายว่าเสียงนี้เป็นใครและควรฟังเป็นแบบไหนเป็น
descriptionไปที่ POST /v1/voices/design คำตอบคือเสียงหนึ่งเสียง พร้อมชื่อ บทบาท คำอธิบายสั้น ๆ ประโยคที่พูดด้วยเสียงนั้นเป็น MP3 และdraft - ปรับเสียงส่ง
draftกลับมาพร้อมinstructionที่บอกสิ่งที่อยากเปลี่ยนเป็นคำพูด ทุกคำตอบมีเสียงที่ปรับแล้วและ draft ใหม่ - บันทึกเสียงส่ง draft ที่ต้องการไปที่ POST /v1/voices/designed พร้อม
nameถ้าอยากตั้งชื่อใหม่ เสียงจะได้ id ตอนบันทึก
curl -X POST https://api.paxalabs.com/v1/voices/design \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"description": "A calm Bangkok pharmacist in her thirties who explains dosages slowly and kindly, speaking Thai"
}' \
-o design.json
jq -r .audio design.json | base64 --decode > line.mp3import { writeFile } from "node:fs/promises";
const headers = {
Authorization: `Bearer ${process.env.PAXA_API_KEY}`,
"Content-Type": "application/json",
};
// Design, then refine the draft with an instruction.
let response = await fetch("https://api.paxalabs.com/v1/voices/design", {
method: "POST",
headers,
body: JSON.stringify({
description: "A calm Bangkok pharmacist in her thirties who explains dosages slowly and kindly, speaking Thai",
}),
});
if (!response.ok) throw new Error(`Design failed: ${response.status}`);
let turn = await response.json();
response = await fetch("https://api.paxalabs.com/v1/voices/design", {
method: "POST",
headers,
body: JSON.stringify({
draft: turn.draft,
instruction: "A little slower, with a softer ending",
}),
});
if (!response.ok) throw new Error(`Refine failed: ${response.status}`);
turn = await response.json();
await writeFile("line.mp3", Buffer.from(turn.audio, "base64"));import base64
import os
import requests
URL = "https://api.paxalabs.com/v1/voices/design"
HEADERS = {"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"}
# Design, then refine the draft with an instruction.
turn = requests.post(
URL,
headers=HEADERS,
json={"description": "A calm Bangkok pharmacist in her thirties who explains dosages slowly and kindly, speaking Thai"},
)
turn.raise_for_status()
turn = requests.post(
URL,
headers=HEADERS,
json={
"draft": turn.json()["draft"],
"instruction": "A little slower, with a softer ending",
},
)
turn.raise_for_status()
with open("line.mp3", "wb") as f:
f.write(base64.b64decode(turn.json()["audio"]))การออกแบบหรือปรับเสียงแต่ละคำขอคิด 5 เครดิต รวมประโยคตัวอย่างแล้ว คำขอที่ล้มเหลวโดยไม่ได้เสียงจะได้เครดิตคืน ส่วนคำขอที่ยกเลิกกลางทางจะไม่ได้เครดิตคืน เครื่องมือออกแบบเสียงใน Console ทำขั้นตอนเดียวกันได้โดยไม่ต้องเขียนโค้ด และให้เสียงพูดประโยคของคุณเองยาวไม่เกิน 120 ตัวอักษรได้ด้วย โดยคิดตามจำนวนตัวอักษรในอัตราเสียงที่ออกแบบเองด้านล่าง
ใช้ id#
id ใช้ได้เฉพาะบัญชีที่บันทึกเสียงไว้ จากคีย์ API ใดก็ได้ของบัญชีนั้น และใช้ได้กับ paxa-tts-flash-v2 เท่านั้น ตัวพิมพ์เล็กใหญ่ไม่มีผล GET /v1/voices/designed แสดงเสียงที่ออกแบบเองของบัญชีพร้อม id ส่วน GET /v1/voices แสดงเฉพาะเสียงในแคตตาล็อก บัญชีอื่น โมเดลอื่น หรือเสียงที่ลบไปแล้ว จะตอบ 400 unknown_voice เสียงที่ออกแบบเองอ่านแท็กคำกำกับได้เหมือนทุกเสียงของ Paxa TTS Flash v2
หมายเหตุ
เสียงที่ออกแบบเองใช้ได้ผ่านคีย์ API ของคุณและ Console เท่านั้น มาร์เก็ตเพลสโมเดลที่ขายต่อเสียงของ Paxa Labs และเดโมเสียงบนเว็บไซต์นี้ ใช้ได้เฉพาะเสียงในแคตตาล็อก
ค่าบริการ#
เสียงที่ออกแบบเองคิด 1.25 เท่าของอัตราตามตัวอักษรของโมเดล ส่วนเพิ่มนี้บวกกับส่วนเพิ่มของไทม์สแตมป์ คำขอที่มีไทม์สแตมป์ด้วยเสียงที่ออกแบบเองจึงคิด 1.5 เท่า คำขอยาว 36 ตัวอักษรคิด 0.36 เครดิตด้วยเสียงในแคตตาล็อก 0.45 เครดิตด้วยเสียงที่ออกแบบเอง และ 0.54 เครดิตเมื่อใช้เสียงที่ออกแบบเองพร้อมไทม์สแตมป์ การเชื่อมต่อสดคิดข้อความสะสมด้วยอัตราเดียวกัน การปัดเศษและขั้นต่ำต่อคำขอเป็นไปตามเครดิตและการเรียกเก็บเงิน
จำนวนเสียงตามแพ็กเกจ#
แพ็กเกจกำหนดจำนวนเสียงที่ออกแบบเองที่บัญชีเก็บไว้ได้ เมื่อครบจำนวนแล้ว การบันทึกเสียงใหม่จะถูกปฏิเสธจนกว่าจะลบเสียงเดิมออก หากลดแพ็กเกจจนจำนวนเสียงที่บันทึกไว้เกินลิมิต ทุกเสียงยังใช้ได้ตามเดิม แต่บันทึกเสียงใหม่ไม่ได้ ปัจจุบันคือ
| แพ็กเกจ | เสียงที่ออกแบบเอง |
|---|---|
| Free | 1 |
| Starter | 3 |
| Standard | 10 |
| Pro | 50 |
เปลี่ยนชื่อและลบ#
เสียงที่บันทึกแล้วแก้ไขไม่ได้ เปลี่ยนชื่อหรือลบได้ผ่าน API หรือในเครื่องมือออกแบบเสียง และถ้าอยากได้เสียงแบบอื่นให้ออกแบบเสียงใหม่ การเปลี่ยนชื่อไม่เปลี่ยน id
การลบเสียงย้อนกลับไม่ได้ และคืนที่ว่างในลิมิตของแพ็กเกจ คำขอหลังจากนั้นที่ระบุ id ของเสียงนั้นจะตอบ 400 unknown_voice ทุกครั้ง รวมถึงการส่งซ้ำด้วย Idempotency-Key เดิม และเครดิตที่คิดไปแล้วของคำขอเดิมไม่ถูกคืน การเชื่อมต่อสดที่เปิดด้วยเสียงนั้นอยู่แล้วยังพูดด้วยเสียงนั้นต่อไปจนกว่าการเชื่อมต่อจะปิด