Text to Speech และถอดเสียงที่เข้ากันได้กับ OpenAI
โค้ดที่เขียนบนคำสั่งเสียงของ OpenAI SDK ต้องเขียนใหม่ หากจะย้ายไปใช้ผู้ให้บริการที่มี SDK และรูปแบบคำขอของตัวเอง
Paxa รองรับคำขอรูปแบบเดียวกับ OpenAI ทั้งเสียงพูดและถอดเสียง รวมถึงชื่อโมเดลและชื่อของเสียง OpenAI เปลี่ยนแค่ Base URL และคีย์ คำสั่ง audio.speech.create และ audio.transcriptions.create ก็ทำงานต่อได้ด้วยชื่อเดิมที่ส่งอยู่ Paxa STT Lite ซึ่งเป็นโมเดลถอดเสียง อยู่ในสถานะพรีวิวงานวิจัย
SDK เดียว สองเอนด์พอยต์#
คำสั่งเรียกเสียงพูดและถอดเสียงที่เขียนด้วย OpenAI SDK ชี้มาที่ Paxa พร้อมคีย์ รหัสโมเดล และรหัสเสียงของ Paxa ตารางจับคู่ฟิลด์นำมาจากเอกสาร API
import os from openai import OpenAI client = OpenAI( base_url="https://api.paxalabs.com/v1", api_key=os.environ["PAXA_API_KEY"], ) with client.audio.speech.with_streaming_response.create( model="paxa-tts-flash-v2", voice="khanomkrok", input="สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs", ) as response: response.stream_to_file("speech.mp3")
import { writeFile } from "node:fs/promises"; import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.paxalabs.com/v1", apiKey: process.env.PAXA_API_KEY, }); const response = await client.audio.speech.create({ model: "paxa-tts-flash-v2", voice: "khanomkrok", input: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs", }); await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
curl -X POST https://api.paxalabs.com/v1/audio/speech \ -H "Authorization: Bearer $PAXA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "paxa-tts-flash-v2", "input": "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs", "voice": "khanomkrok" }' \ --output speech.mp3
การจับคู่ฟิลด์
| ฟิลด์ | พฤติกรรม |
|---|---|
| model | จำเป็นต้องระบุ เช่นเดียวกับบน /v1/tts ใช้รหัสโมเดลของ Paxa เช่น paxa-tts-flash-v2 ชื่อโมเดลของ OpenAI อย่าง tts-1 tts-1-hd gpt-4o-mini-tts gpt-4o-mini-tts-2025-03-20 gpt-4o-mini-tts-2025-12-15 ก็ใช้ได้ และทำงานบน paxa-tts-flash-v2 |
| input | ข้อความที่จะสังเคราะห์ ขีดจำกัด ราคา แท็กคำกำกับ และแท็กอารมณ์บน paxa-tts-flash-v1 เหมือนฟิลด์ text ของ /v1/tts |
| voice | รหัสเสียงจาก GET /v1/voices เช่น "khanomkrok" ไม่สนตัวพิมพ์ใหญ่เล็ก เช่นเดียวกับ voice ของ /v1/tts เอนด์พอยต์นี้ยังรับชื่อของเสียง OpenAI เช่น alloy โดยจับคู่กับเสียงของ Paxa และเฮดเดอร์ x-voice-id ในคำตอบบอกว่าเสียงใดเป็นผู้พูด |
| response_format | mp3 (ค่าเริ่มต้น) opus wav pcm (โมโน 16 บิต little-endian ที่ 24 kHz แบบเดียวกับของ OpenAI เว้นแต่ sample_rate จะกำหนดอัตราอื่น) mulaw หรือ alaw เหมือนฟิลด์ format ของ /v1/tts โดย Paxa TTS Flash ตอบ mulaw และ alaw ด้วย unsupported_format ส่วนฟอร์แมตอื่นของ OpenAI ตอบ 400 |
| sample_rate | ส่วนขยายของ Paxa ที่อ่านเฉพาะกับ pcm และ wav เหมือนบน /v1/tts และละเว้นเมื่อใช้ฟอร์แมตอื่น แต่ค่าที่ส่งต้องเป็นอัตราที่ Paxa TTS Flash v2 รองรับ กำหนดอัตราเป็น Hz โดย Paxa TTS Flash v2 รองรับ 8000, 16000, 22050, 24000, 32000, 44100, 48000 ส่วน Paxa TTS Flash รองรับเพียง 24000 ระบุเมื่อแพลตฟอร์มที่เล่นเสียงต้องการอัตราคงที่ |
| temperature | ส่วนขยายของ Paxa ที่อ่านเหมือนบน /v1/tts กำหนดว่าการอ่านแต่ละคำขอจะต่างกันมากแค่ไหน ตั้งแต่ 0 ถึง 2 บน Paxa TTS Flash v2 ดูรายละเอียดที่ Temperature |
| stream | ค่าเริ่มต้นคือ true ตามรูปแบบการส่งของ OpenAI ตั้ง false หากต้องการไฟล์เต็มพร้อม content-length |
การถอดเสียง
| ฟิลด์ | พฤติกรรม |
|---|---|
| file | ไฟล์เสียงในรูปส่วนไฟล์ รองรับ 7 ฟอร์แมต ระบบอ่านรูปแบบและความยาวจากไบต์ของไฟล์ เพดานและราคาเหมือนฟิลด์ audio ของ /v1/stt |
| model | จำเป็นต้องระบุ ใช้รหัสโมเดลของ Paxa เช่น paxa-stt-lite-v1-preview ชื่อโมเดลของ OpenAI อย่าง whisper-1 gpt-4o-transcribe gpt-4o-mini-transcribe gpt-4o-mini-transcribe-2025-03-20 gpt-4o-mini-transcribe-2025-12-15 ก็ใช้ได้ และทำงานบน paxa-stt-lite-v1-preview |
| language | แท็ก BCP 47 เป็นเพียงคำใบ้ ฟิลด์เดียวกับบน /v1/stt หากไม่ระบุ โมเดลจะตรวจภาษาเอง |
| response_format | json (ค่าเริ่มต้น) verbose_json text srt หรือ vtt โดย verbose_json เพิ่มความยาวของไฟล์ ช่วงข้อความ และรายการคำเมื่อ timestamp_granularities ระบุ word |
ย้ายมาในสามขั้นตอน#
SDK และคำสั่งเรียกเดิมยังใช้ได้ตามเดิม รวมถึงชื่อโมเดลและชื่อเสียง ทั้งสองเอนด์พอยต์ใช้ Base URL และคีย์ชุดเดียวกัน
ชี้ Base URL มาที่ Paxa
ตั้ง Base URL ของ SDK เป็น https://api.paxalabs.com/v1 แล้ว SDK จะเรียก /v1/audio/speech และ /v1/audio/transcriptions ของ Paxa
เปลี่ยนคีย์
ใช้ API key ของ Paxa จากแดชบอร์ดแทนคีย์ของ OpenAI และเก็บไว้ในตัวแปรสภาพแวดล้อม เช่น PAXA_API_KEY
ระบุโมเดลของ Paxa หากต้องการ
งานเสียงพูดใช้ชื่อโมเดลและชื่อของเสียง OpenAI ต่อได้ ซึ่งทำงานบน paxa-tts-flash-v2 หรือตั้ง model เป็น paxa-tts-flash-v2 หรือ paxa-tts-flash-v1 พร้อมรหัสเสียงที่โมเดลนั้นมีให้ งานถอดเสียงใช้ชื่อโมเดลของ OpenAI ต่อได้ หรือตั้ง model เป็น paxa-stt-lite-v1-preview ซึ่งเป็นพรีวิวงานวิจัย
Paxa TTS Flash v2 ราคา $10 ต่อ 1 ล้านตัวอักษร Paxa STT Lite ราคา $0.50 ต่อชั่วโมงเสียง คิดตามความยาวจริงละเอียดถึงมิลลิวินาที
คำถาม#
เอนด์พอยต์เสียงพูดรับอะไรบ้าง
สตรีมเสียงเป็น mp3 เป็นค่าเริ่มต้น หรือเลือก opus, wav, pcm, mulaw หรือ alaw ส่วน aac และ flac จะได้คำตอบ 400 ตั้ง stream เป็น false เพื่อรับไฟล์เต็ม ฟิลด์ speed ใช้ได้ในช่วงที่โมเดลรองรับ ค่านอกช่วงจะได้คำตอบ 400 ส่วนฟิลด์ language ระบบจะละเว้น และทุกคำขออ่านแบบ auto
เอนด์พอยต์ถอดเสียงรับอะไรบ้าง
ส่งไฟล์เสียงแบบ multipart ได้ 7 ฟอร์แมต ยาวไม่เกิน 60 นาทีและ 25 MiB คำตอบเป็น json เป็นค่าเริ่มต้น หรือเลือก verbose_json, text, srt หรือ vtt ฟิลด์ language เป็นคำใบ้ที่ไม่บังคับ หากไม่ระบุ โมเดลจะตรวจภาษาเอง Paxa STT Lite เป็นพรีวิวงานวิจัย
ฟิลด์ไหนของ OpenAI ที่ระบบละเว้น
เอนด์พอยต์เสียงพูดละเว้น instructions ส่วนเอนด์พอยต์ถอดเสียงละเว้น prompt และ temperature และอ่าน timestamp_granularities เมื่อใช้ verbose_json โค้ดที่ส่งฟิลด์เหล่านี้มายังทำงานได้ตามเดิม ส่วนการถอดเสียงที่ตั้ง stream เป็น true จะได้คำตอบ 400 ตัวเลือกเฉพาะของ Paxa อย่าง Timestamp และช่วงผู้พูด มีให้บน /v1/tts และ /v1/stt
เริ่มต้นด้วยเครดิตฟรี
เข้าสู่ระบบด้วย Google, GitHub หรือ Hugging Face แล้วใช้เครดิตฟรี 100 เครดิตกับข้อความของคุณเอง