{
  "aboutHtml": "<p>S1 เป็นโมเดลแปลงข้อความเป็นเสียงรุ่นก่อนหน้าของ Fish Audio สำหรับการบรรยายที่ถ่ายทอดอารมณ์และเอาต์พุตเสียงผู้พูดคนเดียว โมเดลอ่านบทที่ป้อนและคืนเสียง โดยใช้เสียงที่เลือกหรือเสียงที่กำหนดด้วยเงื่อนไขจากข้อมูลอ้างอิง โมเดล S1 เต็มรุ่นต่างจาก S1-mini ซึ่งเป็นโมเดลกลั่นความรู้ขนาดเล็กกว่า ผู้พัฒนาแนะนำทั้งสองเป็นรุ่นสี่พันล้านและห้าร้อยล้านพารามิเตอร์ตามลำดับ ข้อมูลนี้กล่าวถึงโมเดลชื่อ S1</p><p>สำหรับการบรรยาย ให้เตรียมคำที่ควรพูดจริงและทำเครื่องหมายจุดที่ควรเปลี่ยนวิธีถ่ายทอด บทอธิบายที่มีประโยชน์เริ่มจากประเด็นหลัก พัฒนาทีละแนวคิด และใช้เครื่องหมายวรรคตอนแบ่งวลีที่ต้องหยุดตามธรรมชาติ สำหรับคำแนะนำสั้น ๆ ให้ถ้อยคำชัดเจนเมื่อฟังโดยไม่มีหน้าจอ รักษาวิธีอ่านชื่อ คำย่อ และหน่วยตามตั้งใจ และตรวจตัวเลขในเสียงเอาต์พุต แทนการสมมติว่าข้อความที่อ่านด้วยตาได้มีการออกเสียงเพียงแบบเดียว</p><p>S1 ใช้คำบอกอารมณ์และวิธีถ่ายทอดในวงเล็บ เช่น (angry), (sad), (in a hurry) หรือ (chuckling) วางคำบอกก่อนประโยคหรือวลีที่ควรได้รับอิทธิพล แล้วตามด้วยคำพูดจริง วิธีถ่ายทอดเป็นของข้อความที่ตามมา จึงควรเปลี่ยนอารมณ์ตรงจุดที่การแสดงต้องเปลี่ยน ไวยากรณ์นี้ต่างจากคำสั่งวงเล็บเหลี่ยมของ S2 ควรเขียนบทตามรุ่นที่เลือก ไม่ใช่ถือว่ารูปแบบเครื่องหมายทั้งสองใช้แทนกันได้</p><p>เลือกเสียงผ่านรหัสเสียงที่บันทึกไว้ หรือกำหนดเงื่อนไขด้วยเสียงบันทึกอ้างอิงพร้อมข้อความถอดเสียงของมัน สำหรับเวิร์กโฟลว์อ้างอิงทันที คู่มือเสียงทั่วไปแนะนำตัวอย่างสะอาดยาว 10–30 วินาที เลือกตัวอย่างที่สไตล์การพูดและคุณภาพการบันทึกเหมาะกับผลที่ต้องการ และทำให้ข้อความถอดเสียงตรงกับคำในตัวอย่าง สำหรับผู้บรรยายที่ใช้ซ้ำ ให้ใช้เสียงอ้างอิงเดิมตลอดแต่ละย่อหน้า เพื่อไม่ให้การเปลี่ยนหัวข้อกลายเป็นการเปลี่ยนบุคลิกโดยไม่ตั้งใจ</p><p>ประกาศ S1 ระบุอังกฤษ จีน ญี่ปุ่น เยอรมัน ฝรั่งเศส สเปน เกาหลี อาหรับ รัสเซีย ดัตช์ อิตาลี โปแลนด์ และโปรตุเกสในภาษาที่รองรับ และอธิบายการผสมภาษาในบท ส่งถ้อยคำภาษาเป้าหมาย ไม่ใช่ถือว่าการสังเคราะห์เสียงเป็นขั้นแปล สำหรับย่อหน้าที่มีชื่อยืมหรือการสลับภาษา ให้การสะกดและบริบทประโยครอบข้างชัดเจน แล้วตรวจว่าเสียงที่เลือกจัดการจุดเปลี่ยนนั้นอย่างไร</p><p>อินเทอร์เฟซของผู้พัฒนา S1 รองรับผู้พูดหนึ่งคนต่อคำขอสังเคราะห์ สามารถเตรียมบทสนทนาเป็นเซกเมนต์แยกที่มีเสียงอ้างอิงของตัวเอง แล้วประกอบในแอปพลิเคชัน ความสามารถสังเคราะห์ผู้พูดหลายคนโดยตรงของตระกูล S2 เป็นอีกเรื่องหนึ่ง เก็บบทบาท เสียง และข้อความให้สัมพันธ์กับแต่ละเซกเมนต์เมื่อเตรียมบทตัวละคร ผลสังเคราะห์คือการแสดงบทด้วยเสียง ส่วนการกำหนดจังหวะถามตอบหรือรวมกับเพลงและวิดีโอเป็นขั้นแก้ไขภายหลัง</p><p>ตัวเลือกเอาต์พุตมี MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น เอาต์พุตตามเอกสารเป็นโมโน WAV และ PCM ใช้ตัวอย่างเสียง 16 บิต ส่วนตัวเลือกอัตราสุ่มตัวอย่างต่างกันตามรูปแบบ MP3 รองรับ 64, 128 และ 192 kbps ขณะที่ Opus ใช้ 48 kHz ปรับความเร็วได้ตั้งแต่ 0.5 ถึง 2.0 พร้อมการควบคุมระดับเสียง เลือกไฟล์ที่เข้ารหัสสำหรับผลงานพากย์ หรือสตรีมที่เหมาะสำหรับเล่น และเก็บเสียงผู้พูดที่เลือกกับบทไว้คู่กับผลลัพธ์</p><p>ผู้พัฒนาประมวลผลข้อความยาวเป็นชังก์ โดยระบุช่วงความยาวชังก์ 100–300 และงบโทเคนเสียงต่อชังก์ แทนการรับประกันระยะเวลาบันทึกรวม การปรับรูปแบบข้อความขยายตัวเลขอังกฤษและจีนเป็นการอ่านธรรมชาติได้ และ repetition penalty ของ S1 ลดรูปแบบเสียงซ้ำได้ การปรับความดังเอาต์พุตให้เป็นมาตรฐานเป็นการตั้งค่าอีกแบบและไม่มีผลต่อ S1 ตรวจการออกเสียง ขอบเขตวลี เสียงซ้ำ และการเปลี่ยนอารมณ์ตามตั้งใจ ก่อนประกอบย่อหน้าที่เสร็จแล้ว จากนั้นแก้ประโยคหรือข้อมูลอ้างอิงเฉพาะจุดที่ต้องปรับ</p>",
  "aboutText": "S1 เป็นโมเดลแปลงข้อความเป็นเสียงรุ่นก่อนหน้าของ Fish Audio สำหรับการบรรยายที่ถ่ายทอดอารมณ์และเอาต์พุตเสียงผู้พูดคนเดียว โมเดลอ่านบทที่ป้อนและคืนเสียง โดยใช้เสียงที่เลือกหรือเสียงที่กำหนดด้วยเงื่อนไขจากข้อมูลอ้างอิง โมเดล S1 เต็มรุ่นต่างจาก S1-mini ซึ่งเป็นโมเดลกลั่นความรู้ขนาดเล็กกว่า ผู้พัฒนาแนะนำทั้งสองเป็นรุ่นสี่พันล้านและห้าร้อยล้านพารามิเตอร์ตามลำดับ ข้อมูลนี้กล่าวถึงโมเดลชื่อ S1\n\nสำหรับการบรรยาย ให้เตรียมคำที่ควรพูดจริงและทำเครื่องหมายจุดที่ควรเปลี่ยนวิธีถ่ายทอด บทอธิบายที่มีประโยชน์เริ่มจากประเด็นหลัก พัฒนาทีละแนวคิด และใช้เครื่องหมายวรรคตอนแบ่งวลีที่ต้องหยุดตามธรรมชาติ สำหรับคำแนะนำสั้น ๆ ให้ถ้อยคำชัดเจนเมื่อฟังโดยไม่มีหน้าจอ รักษาวิธีอ่านชื่อ คำย่อ และหน่วยตามตั้งใจ และตรวจตัวเลขในเสียงเอาต์พุต แทนการสมมติว่าข้อความที่อ่านด้วยตาได้มีการออกเสียงเพียงแบบเดียว\n\nS1 ใช้คำบอกอารมณ์และวิธีถ่ายทอดในวงเล็บ เช่น (angry), (sad), (in a hurry) หรือ (chuckling) วางคำบอกก่อนประโยคหรือวลีที่ควรได้รับอิทธิพล แล้วตามด้วยคำพูดจริง วิธีถ่ายทอดเป็นของข้อความที่ตามมา จึงควรเปลี่ยนอารมณ์ตรงจุดที่การแสดงต้องเปลี่ยน ไวยากรณ์นี้ต่างจากคำสั่งวงเล็บเหลี่ยมของ S2 ควรเขียนบทตามรุ่นที่เลือก ไม่ใช่ถือว่ารูปแบบเครื่องหมายทั้งสองใช้แทนกันได้\n\nเลือกเสียงผ่านรหัสเสียงที่บันทึกไว้ หรือกำหนดเงื่อนไขด้วยเสียงบันทึกอ้างอิงพร้อมข้อความถอดเสียงของมัน สำหรับเวิร์กโฟลว์อ้างอิงทันที คู่มือเสียงทั่วไปแนะนำตัวอย่างสะอาดยาว 10–30 วินาที เลือกตัวอย่างที่สไตล์การพูดและคุณภาพการบันทึกเหมาะกับผลที่ต้องการ และทำให้ข้อความถอดเสียงตรงกับคำในตัวอย่าง สำหรับผู้บรรยายที่ใช้ซ้ำ ให้ใช้เสียงอ้างอิงเดิมตลอดแต่ละย่อหน้า เพื่อไม่ให้การเปลี่ยนหัวข้อกลายเป็นการเปลี่ยนบุคลิกโดยไม่ตั้งใจ\n\nประกาศ S1 ระบุอังกฤษ จีน ญี่ปุ่น เยอรมัน ฝรั่งเศส สเปน เกาหลี อาหรับ รัสเซีย ดัตช์ อิตาลี โปแลนด์ และโปรตุเกสในภาษาที่รองรับ และอธิบายการผสมภาษาในบท ส่งถ้อยคำภาษาเป้าหมาย ไม่ใช่ถือว่าการสังเคราะห์เสียงเป็นขั้นแปล สำหรับย่อหน้าที่มีชื่อยืมหรือการสลับภาษา ให้การสะกดและบริบทประโยครอบข้างชัดเจน แล้วตรวจว่าเสียงที่เลือกจัดการจุดเปลี่ยนนั้นอย่างไร\n\nอินเทอร์เฟซของผู้พัฒนา S1 รองรับผู้พูดหนึ่งคนต่อคำขอสังเคราะห์ สามารถเตรียมบทสนทนาเป็นเซกเมนต์แยกที่มีเสียงอ้างอิงของตัวเอง แล้วประกอบในแอปพลิเคชัน ความสามารถสังเคราะห์ผู้พูดหลายคนโดยตรงของตระกูล S2 เป็นอีกเรื่องหนึ่ง เก็บบทบาท เสียง และข้อความให้สัมพันธ์กับแต่ละเซกเมนต์เมื่อเตรียมบทตัวละคร ผลสังเคราะห์คือการแสดงบทด้วยเสียง ส่วนการกำหนดจังหวะถามตอบหรือรวมกับเพลงและวิดีโอเป็นขั้นแก้ไขภายหลัง\n\nตัวเลือกเอาต์พุตมี MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น เอาต์พุตตามเอกสารเป็นโมโน WAV และ PCM ใช้ตัวอย่างเสียง 16 บิต ส่วนตัวเลือกอัตราสุ่มตัวอย่างต่างกันตามรูปแบบ MP3 รองรับ 64, 128 และ 192 kbps ขณะที่ Opus ใช้ 48 kHz ปรับความเร็วได้ตั้งแต่ 0.5 ถึง 2.0 พร้อมการควบคุมระดับเสียง เลือกไฟล์ที่เข้ารหัสสำหรับผลงานพากย์ หรือสตรีมที่เหมาะสำหรับเล่น และเก็บเสียงผู้พูดที่เลือกกับบทไว้คู่กับผลลัพธ์\n\nผู้พัฒนาประมวลผลข้อความยาวเป็นชังก์ โดยระบุช่วงความยาวชังก์ 100–300 และงบโทเคนเสียงต่อชังก์ แทนการรับประกันระยะเวลาบันทึกรวม การปรับรูปแบบข้อความขยายตัวเลขอังกฤษและจีนเป็นการอ่านธรรมชาติได้ และ repetition penalty ของ S1 ลดรูปแบบเสียงซ้ำได้ การปรับความดังเอาต์พุตให้เป็นมาตรฐานเป็นการตั้งค่าอีกแบบและไม่มีผลต่อ S1 ตรวจการออกเสียง ขอบเขตวลี เสียงซ้ำ และการเปลี่ยนอารมณ์ตามตั้งใจ ก่อนประกอบย่อหน้าที่เสร็จแล้ว จากนั้นแก้ประโยคหรือข้อมูลอ้างอิงเฉพาะจุดที่ต้องปรับ",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "37e94e3ea40872c1ef348347dec85a78b87f5c50e20e8d061272e4ce7c19cf55",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "th",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: S1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"ปิด\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/s1</code><button type=\"button\" id=\"copy-id\">คัดลอก ID</button></div><nav class=\"card-jump-nav\" aria-label=\"ส่วนต่าง ๆ ของการ์ดโมเดล\"><button type=\"button\" data-card-jump=\"overview\">เริ่มต้น</button><button type=\"button\" data-card-jump=\"methods\">อินพุตและเมธอด</button><button type=\"button\" data-card-jump=\"pricing\">ราคา</button><button type=\"button\" data-card-jump=\"examples\">ตัวอย่าง</button><button type=\"button\" data-card-jump=\"results\">ผลลัพธ์</button><button type=\"button\" data-card-jump=\"aliases\">ชื่ออื่น</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"เมธอด API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|speech|/v1/audio/speech|fish-audio%2Fs1\">การสังเคราะห์เสียงพูด</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">เริ่มต้น</h3><p class=\"mdesc-full\">Fish Audio S1 เปลี่ยนบทหลายภาษาเป็นเสียงผู้พูดคนเดียวที่ถ่ายทอดอารมณ์ โดยใช้เสียงอ้างอิงและคำบอกอารมณ์ในวงเล็บ ใช้สำหรับการบรรยาย คำแนะนำแบบเสียงสั้น ๆ หรือบทตัวละคร พร้อมการควบคุมรูปแบบและทำนองเสียงของงานเสียงที่เสร็จแล้ว</p><dl class=\"card-io\" data-card-io><div><dt>อินพุตที่รองรับ</dt><dd>ข้อความ</dd></div><div><dt>ผลลัพธ์</dt><dd>เสียง</dd></div></dl><details class=\"card-about\"><summary>เกี่ยวกับโมเดล</summary><p class=\"note-s\" data-model-method-boundary>คำอธิบายนี้ครอบคลุมความสามารถของโมเดล อินพุต เอาต์พุต และตัวเลือกที่ใช้ได้ใน Ailoot แสดงด้านล่างตามเมธอดที่เลือก</p><div class=\"mabout\" id=\"m-about\"><p>S1 เป็นโมเดลแปลงข้อความเป็นเสียงรุ่นก่อนหน้าของ Fish Audio สำหรับการบรรยายที่ถ่ายทอดอารมณ์และเอาต์พุตเสียงผู้พูดคนเดียว โมเดลอ่านบทที่ป้อนและคืนเสียง โดยใช้เสียงที่เลือกหรือเสียงที่กำหนดด้วยเงื่อนไขจากข้อมูลอ้างอิง โมเดล S1 เต็มรุ่นต่างจาก S1-mini ซึ่งเป็นโมเดลกลั่นความรู้ขนาดเล็กกว่า ผู้พัฒนาแนะนำทั้งสองเป็นรุ่นสี่พันล้านและห้าร้อยล้านพารามิเตอร์ตามลำดับ ข้อมูลนี้กล่าวถึงโมเดลชื่อ S1</p><p>สำหรับการบรรยาย ให้เตรียมคำที่ควรพูดจริงและทำเครื่องหมายจุดที่ควรเปลี่ยนวิธีถ่ายทอด บทอธิบายที่มีประโยชน์เริ่มจากประเด็นหลัก พัฒนาทีละแนวคิด และใช้เครื่องหมายวรรคตอนแบ่งวลีที่ต้องหยุดตามธรรมชาติ สำหรับคำแนะนำสั้น ๆ ให้ถ้อยคำชัดเจนเมื่อฟังโดยไม่มีหน้าจอ รักษาวิธีอ่านชื่อ คำย่อ และหน่วยตามตั้งใจ และตรวจตัวเลขในเสียงเอาต์พุต แทนการสมมติว่าข้อความที่อ่านด้วยตาได้มีการออกเสียงเพียงแบบเดียว</p><p>S1 ใช้คำบอกอารมณ์และวิธีถ่ายทอดในวงเล็บ เช่น (angry), (sad), (in a hurry) หรือ (chuckling) วางคำบอกก่อนประโยคหรือวลีที่ควรได้รับอิทธิพล แล้วตามด้วยคำพูดจริง วิธีถ่ายทอดเป็นของข้อความที่ตามมา จึงควรเปลี่ยนอารมณ์ตรงจุดที่การแสดงต้องเปลี่ยน ไวยากรณ์นี้ต่างจากคำสั่งวงเล็บเหลี่ยมของ S2 ควรเขียนบทตามรุ่นที่เลือก ไม่ใช่ถือว่ารูปแบบเครื่องหมายทั้งสองใช้แทนกันได้</p><p>เลือกเสียงผ่านรหัสเสียงที่บันทึกไว้ หรือกำหนดเงื่อนไขด้วยเสียงบันทึกอ้างอิงพร้อมข้อความถอดเสียงของมัน สำหรับเวิร์กโฟลว์อ้างอิงทันที คู่มือเสียงทั่วไปแนะนำตัวอย่างสะอาดยาว 10–30 วินาที เลือกตัวอย่างที่สไตล์การพูดและคุณภาพการบันทึกเหมาะกับผลที่ต้องการ และทำให้ข้อความถอดเสียงตรงกับคำในตัวอย่าง สำหรับผู้บรรยายที่ใช้ซ้ำ ให้ใช้เสียงอ้างอิงเดิมตลอดแต่ละย่อหน้า เพื่อไม่ให้การเปลี่ยนหัวข้อกลายเป็นการเปลี่ยนบุคลิกโดยไม่ตั้งใจ</p><p>ประกาศ S1 ระบุอังกฤษ จีน ญี่ปุ่น เยอรมัน ฝรั่งเศส สเปน เกาหลี อาหรับ รัสเซีย ดัตช์ อิตาลี โปแลนด์ และโปรตุเกสในภาษาที่รองรับ และอธิบายการผสมภาษาในบท ส่งถ้อยคำภาษาเป้าหมาย ไม่ใช่ถือว่าการสังเคราะห์เสียงเป็นขั้นแปล สำหรับย่อหน้าที่มีชื่อยืมหรือการสลับภาษา ให้การสะกดและบริบทประโยครอบข้างชัดเจน แล้วตรวจว่าเสียงที่เลือกจัดการจุดเปลี่ยนนั้นอย่างไร</p><p>อินเทอร์เฟซของผู้พัฒนา S1 รองรับผู้พูดหนึ่งคนต่อคำขอสังเคราะห์ สามารถเตรียมบทสนทนาเป็นเซกเมนต์แยกที่มีเสียงอ้างอิงของตัวเอง แล้วประกอบในแอปพลิเคชัน ความสามารถสังเคราะห์ผู้พูดหลายคนโดยตรงของตระกูล S2 เป็นอีกเรื่องหนึ่ง เก็บบทบาท เสียง และข้อความให้สัมพันธ์กับแต่ละเซกเมนต์เมื่อเตรียมบทตัวละคร ผลสังเคราะห์คือการแสดงบทด้วยเสียง ส่วนการกำหนดจังหวะถามตอบหรือรวมกับเพลงและวิดีโอเป็นขั้นแก้ไขภายหลัง</p><p>ตัวเลือกเอาต์พุตมี MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น เอาต์พุตตามเอกสารเป็นโมโน WAV และ PCM ใช้ตัวอย่างเสียง 16 บิต ส่วนตัวเลือกอัตราสุ่มตัวอย่างต่างกันตามรูปแบบ MP3 รองรับ 64, 128 และ 192 kbps ขณะที่ Opus ใช้ 48 kHz ปรับความเร็วได้ตั้งแต่ 0.5 ถึง 2.0 พร้อมการควบคุมระดับเสียง เลือกไฟล์ที่เข้ารหัสสำหรับผลงานพากย์ หรือสตรีมที่เหมาะสำหรับเล่น และเก็บเสียงผู้พูดที่เลือกกับบทไว้คู่กับผลลัพธ์</p><p>ผู้พัฒนาประมวลผลข้อความยาวเป็นชังก์ โดยระบุช่วงความยาวชังก์ 100–300 และงบโทเคนเสียงต่อชังก์ แทนการรับประกันระยะเวลาบันทึกรวม การปรับรูปแบบข้อความขยายตัวเลขอังกฤษและจีนเป็นการอ่านธรรมชาติได้ และ repetition penalty ของ S1 ลดรูปแบบเสียงซ้ำได้ การปรับความดังเอาต์พุตให้เป็นมาตรฐานเป็นการตั้งค่าอีกแบบและไม่มีผลต่อ S1 ตรวจการออกเสียง ขอบเขตวลี เสียงซ้ำ และการเปลี่ยนอารมณ์ตามตั้งใจ ก่อนประกอบย่อหน้าที่เสร็จแล้ว จากนั้นแก้ประโยคหรือข้อมูลอ้างอิงเฉพาะจุดที่ต้องปรับ</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">ใช้งานได้ใน Ailoot · อินพุตและเมธอด</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · การสังเคราะห์เสียงพูด</b> <code>POST /v1/audio/speech</code></summary><dl class=\"method-capabilities\"><div><dt>ขาเข้า</dt><dd><code>text</code></dd></div><div><dt>ขาออก</dt><dd><code>audio</code></dd></div><div><dt>รูปแบบเอาต์พุต</dt><dd>เสียงไบนารีจริงตามที่ประกาศไว้</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th><th>ข้อกำหนด</th><th>ค่าและข้อจำกัด</th><th>ค่าเริ่มต้น</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>fish-audio/s1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">input</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>ความยาวขั้นต่ำ: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"saved_exact_supplier_example\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">voice</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>ตัวอย่าง: b347db033a6549378b48d00acb0d06cd</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>mp3, pcm</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"known\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>pcm</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>ชุดผสมของสื่ออินพุต</summary><p class=\"note-s\"><b>text_to_speech</b> · จำเป็น: actual UTF-8 script, exact supported voice</p></details><details class=\"note-s\" data-method-contract><summary>พารามิเตอร์และวงจรการทำงานของเมธอด</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>พารามิเตอร์</th><th>ข้อกำหนด</th></tr></thead><tbody><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>content_type</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>application/json</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>required</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>model, input, voice</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>material_types</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>text</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>voice_ids</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>b347db033a6549378b48d00acb0d06cd</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>voice_list_exhaustive</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>false</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>response_format</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>mp3, pcm</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>default_response_format</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>pcm</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>quantity</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไบต์ UTF-8 ของสตริงอินพุตเดียวที่ถอดรหัสแล้ว; ไม่มีการตัดช่องว่างหัวท้ายหรือการปรับให้เป็นรูปแบบมาตรฐาน</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>native_byte_quote_controls</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>เส้นทางเสนอราคาตามไบต์ที่ตรงตามที่กำหนดนี้ปฏิเสธ instructions ที่ไม่ว่างและข้อมูลขาเข้าแบบผลัดกันพูดหลายผู้พูด จนกว่าจะประกาศข้อความเพิ่มเติมที่ต้องคิดค่าบริการ</td></tr></tbody></table></div><p>วงจรการทำงาน: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · ค่า task_id ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">ใช้โมเดลที่ตรงตามที่กำหนดและฟิลด์ข้อมูลขาเข้าตามเอกสาร</p><p class=\"note-s\">เก็บการตอบกลับทั้งหมด ผลลัพธ์จริงทุกรายการ และ ID เดิมที่ส่งกลับ</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">ราคา</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก</p><dl data-price-conditions><dt>โหมดรวดเร็ว</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมดรวดเร็ว</span></dd><dt>โหมดยืดหยุ่น</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมด flex</span></dd><dt>ระดับการใช้เหตุผลสูงสุด</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด</span></dd></dl></div><div data-declared-tariff-pricing><h4>อัตราค่าบริการ Ailoot</h4><h4>ราคาตามการตั้งค่า</h4><p class=\"note-s\">เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>การตั้งค่า</th><th>ตารางอัตราค่าบริการ</th><th>หน่วยคิดค่าบริการ</th><th>ค่าบริการ</th></tr></thead><tbody><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>อัตราค่าบริการโทเคนพื้นฐาน</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>อัตราพื้นฐาน</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>—</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>Ultra</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"หน่วยคิดค่าบริการ\"><span class=\"card-cell-label\">หน่วยคิดค่าบริการ</span>ต่อไบต์ utf8 ของเสียงอินพุต</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · ไบต์ utf8 ของเสียงขาเข้า</span> <b>$0.00003</b> <span class=\"price-unit\">ต่อไบต์ utf8 ของเสียงอินพุต</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย <a href=\"/docs/th/billing/reserve/\">วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →</a></p><div data-declared-reference-pricing><h4>รายละเอียดอัตราอ้างอิง</h4><p class=\"note-s\">ตารางอัตราอ้างอิงระดับโมเดลไม่เปลี่ยนเมธอดที่เลือก ยอดประมาณการ หรือค่าบริการ การคิดค่าบริการจริงใช้อัตราของเมธอด Ailoot ที่เลือก</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Fish Audio: S1</summary><h4>ราคาตามการตั้งค่า</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>การตั้งค่า</th><th>เงื่อนไขคิดค่าบริการ</th><th>ค่าบริการ</th></tr></thead><tbody><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>Fish Audio: S1 · การตั้งค่าเริ่มต้น</th><td data-cell-label=\"เงื่อนไขคิดค่าบริการ\"><span class=\"card-cell-label\">เงื่อนไขคิดค่าบริการ</span>การตั้งค่าเริ่มต้น</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · ไบต์ UTF-8 ขาเข้า</span> <b>US$0.00003</b> <span class=\"price-unit\">ต่อไบต์ UTF-8 ของอินพุต</span></div></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">ตัวอย่างคำขอ</h3><h4>Ailoot Ultra · การสังเคราะห์เสียงพูด</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1354-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1354-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · เนื้อหาคำขอแบบเนทีฟที่ตรงตามต้นฉบับและผลลัพธ์ที่ครบถ้วน</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1354-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1354-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\nrequest={&#39;model&#39;: &#39;fish-audio/s1&#39;, &#39;input&#39;: &#39;Hello world&#39;, &#39;voice&#39;: &#39;b347db033a6549378b48d00acb0d06cd&#39;, &#39;response_format&#39;: &#39;mp3&#39;}\nPath(&#39;request.json&#39;).write_text(json.dumps(request,ensure_ascii=False),encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">รับและบันทึกผลลัพธ์</h3><h4>Ailoot Ultra · การสังเคราะห์เสียงพูด</h4><p class=\"note-s\">เสียงไบนารีจริงตามที่ประกาศไว้</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด</h5><p class=\"note-s\">เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน</p><p class=\"note-s\">บันทึกไบต์ไบนารีทั้งหมดและส่วนหัวต้นฉบับทั้งหมด เก็บ JSON ทั้งหมดหากมีการส่งกลับ คง ID การดำเนินการ/แอสเซ็ตจริงไว้</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ</h5><p class=\"note-s\">เก็บ operation_id/X-Client-Request-ID เดิมและการตอบกลับเดิม อ่านบันทึกงาน/แอสเซ็ตจริงที่เป็นของคุณโดยไม่ส่งซ้ำ ไม่มีการสร้าง URL ตรวจสอบสถานะเสียงเฉพาะ</p></div><details class=\"card-about\" data-output-fields><summary>ฟิลด์การตอบกลับ</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th></tr></thead><tbody><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">binary audio</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>bytes</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">response headers</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>headers</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">ชื่ออื่น</h3><h4>ชื่ออื่นของโมเดล</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Fs1&amp;route=Ultra&amp;caller=fish-audio%2Fs1&amp;fmt=speech\"><code>fish-audio/s1</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\">ใช้พาธเมธอดที่แสดงด้านบน</p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Fs1&amp;route=Ultra&amp;caller=fish-audio%2Fs1&amp;fmt=speech\"><code>fish-audio/s1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/s1",
        "fmt": "speech",
        "http": "POST",
        "path": "/v1/audio/speech",
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|speech|/v1/audio/speech|fish-audio%2Fs1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save all complete binary bytes and all original headers; keep full JSON if returned. Actual operation/asset IDs are preserved.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "เก็บ operation_id/X-Client-Request-ID เดิมและการตอบกลับเดิม อ่านบันทึกงาน/แอสเซ็ตจริงที่เป็นของคุณโดยไม่ส่งซ้ำ ไม่มีการสร้าง URL ตรวจสอบสถานะเสียงเฉพาะ"
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "actual UTF-8 script",
                  "exact supported voice"
                ]
              }
            ],
            "outputs": {
              "all_results": "บันทึกไบต์ไบนารีทั้งหมดและส่วนหัวต้นฉบับทั้งหมด เก็บ JSON ทั้งหมดหากมีการส่งกลับ คง ID การดำเนินการ/แอสเซ็ตจริงไว้",
              "family": "audio",
              "fields": [
                {
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "เสียงไบนารีจริงตามที่ประกาศไว้"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "fish-audio/s1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "input",
                "quantity_unit": "decoded input UTF-8 bytes",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_example",
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s1"
                  ],
                  "type": "string"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "Hello world",
                "model": "fish-audio/s1",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "ใช้โมเดลที่ตรงตามที่กำหนดและฟิลด์ข้อมูลขาเข้าตามเอกสาร",
            "เก็บการตอบกลับทั้งหมด ผลลัพธ์จริงทุกรายการ และ ID เดิมที่ส่งกลับ"
          ],
          "input": {
            "content_type": "application/json",
            "default_response_format": "pcm",
            "material_types": [
              "text"
            ],
            "native_byte_quote_controls": "เส้นทางเสนอราคาตามไบต์ที่ตรงตามที่กำหนดนี้ปฏิเสธ instructions ที่ไม่ว่างและข้อมูลขาเข้าแบบผลัดกันพูดหลายผู้พูด จนกว่าจะประกาศข้อความเพิ่มเติมที่ต้องคิดค่าบริการ",
            "quantity": "ไบต์ UTF-8 ของสตริงอินพุตเดียวที่ถอดรหัสแล้ว; ไม่มีการตัดช่องว่างหัวท้ายหรือการปรับให้เป็นรูปแบบมาตรฐาน",
            "required": [
              "model",
              "input",
              "voice"
            ],
            "response_format": [
              "mp3",
              "pcm"
            ],
            "voice_ids": [
              "b347db033a6549378b48d00acb0d06cd"
            ],
            "voice_list_exhaustive": false
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "ค่า task_id ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID and original response. Read actual owned task/asset records without resubmitting; no dedicated audio poll URL is constructed."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "all_results": true,
            "family": "audio",
            "format": "actual MP3 or PCM bytes and MIME",
            "response": "complete raw audio bytes plus response headers"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s1', 'input': 'Hello world', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n",
            "label": "curl · exact native body and complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/s1",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "83e899afb915760b7b2e8b7a2cb78675e5215f9922242ade5861616fdd098cd4",
    "input_html_sha256": "7f3cb82344829720a2427b48c849d469a6a13a0586fb6b691d7aca1d017ee0f3",
    "private_audit_sha256": "1fb93c45f78bbfbc5c04816d525c65287ae4896331ec92595ee08cf38a7d99c3",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/fish-audio-s1/",
    "description": "Fish Audio S1 เปลี่ยนบทหลายภาษาเป็นเสียงผู้พูดคนเดียวที่ถ่ายทอดอารมณ์ โดยใช้เสียงอ้างอิงและคำบอกอารมณ์ในวงเล็บ ใช้สำหรับการบรรยาย คำแนะนำแบบเสียงสั้น ๆ หรือบทตัวละคร พร้อมการควบคุมรูปแบบและทำนองเสียงของงานเสียงที่เสร็จแล้ว",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/fish-audio-s1/index.md",
    "title": "Fish Audio: S1 — Ailoot",
    "url": "https://ailoot.ai/models/th/fish-audio-s1/"
  },
  "rawModel": {
    "about": "S1 เป็นโมเดลแปลงข้อความเป็นเสียงรุ่นก่อนหน้าของ Fish Audio สำหรับการบรรยายที่ถ่ายทอดอารมณ์และเอาต์พุตเสียงผู้พูดคนเดียว โมเดลอ่านบทที่ป้อนและคืนเสียง โดยใช้เสียงที่เลือกหรือเสียงที่กำหนดด้วยเงื่อนไขจากข้อมูลอ้างอิง โมเดล S1 เต็มรุ่นต่างจาก S1-mini ซึ่งเป็นโมเดลกลั่นความรู้ขนาดเล็กกว่า ผู้พัฒนาแนะนำทั้งสองเป็นรุ่นสี่พันล้านและห้าร้อยล้านพารามิเตอร์ตามลำดับ ข้อมูลนี้กล่าวถึงโมเดลชื่อ S1\n\nสำหรับการบรรยาย ให้เตรียมคำที่ควรพูดจริงและทำเครื่องหมายจุดที่ควรเปลี่ยนวิธีถ่ายทอด บทอธิบายที่มีประโยชน์เริ่มจากประเด็นหลัก พัฒนาทีละแนวคิด และใช้เครื่องหมายวรรคตอนแบ่งวลีที่ต้องหยุดตามธรรมชาติ สำหรับคำแนะนำสั้น ๆ ให้ถ้อยคำชัดเจนเมื่อฟังโดยไม่มีหน้าจอ รักษาวิธีอ่านชื่อ คำย่อ และหน่วยตามตั้งใจ และตรวจตัวเลขในเสียงเอาต์พุต แทนการสมมติว่าข้อความที่อ่านด้วยตาได้มีการออกเสียงเพียงแบบเดียว\n\nS1 ใช้คำบอกอารมณ์และวิธีถ่ายทอดในวงเล็บ เช่น (angry), (sad), (in a hurry) หรือ (chuckling) วางคำบอกก่อนประโยคหรือวลีที่ควรได้รับอิทธิพล แล้วตามด้วยคำพูดจริง วิธีถ่ายทอดเป็นของข้อความที่ตามมา จึงควรเปลี่ยนอารมณ์ตรงจุดที่การแสดงต้องเปลี่ยน ไวยากรณ์นี้ต่างจากคำสั่งวงเล็บเหลี่ยมของ S2 ควรเขียนบทตามรุ่นที่เลือก ไม่ใช่ถือว่ารูปแบบเครื่องหมายทั้งสองใช้แทนกันได้\n\nเลือกเสียงผ่านรหัสเสียงที่บันทึกไว้ หรือกำหนดเงื่อนไขด้วยเสียงบันทึกอ้างอิงพร้อมข้อความถอดเสียงของมัน สำหรับเวิร์กโฟลว์อ้างอิงทันที คู่มือเสียงทั่วไปแนะนำตัวอย่างสะอาดยาว 10–30 วินาที เลือกตัวอย่างที่สไตล์การพูดและคุณภาพการบันทึกเหมาะกับผลที่ต้องการ และทำให้ข้อความถอดเสียงตรงกับคำในตัวอย่าง สำหรับผู้บรรยายที่ใช้ซ้ำ ให้ใช้เสียงอ้างอิงเดิมตลอดแต่ละย่อหน้า เพื่อไม่ให้การเปลี่ยนหัวข้อกลายเป็นการเปลี่ยนบุคลิกโดยไม่ตั้งใจ\n\nประกาศ S1 ระบุอังกฤษ จีน ญี่ปุ่น เยอรมัน ฝรั่งเศส สเปน เกาหลี อาหรับ รัสเซีย ดัตช์ อิตาลี โปแลนด์ และโปรตุเกสในภาษาที่รองรับ และอธิบายการผสมภาษาในบท ส่งถ้อยคำภาษาเป้าหมาย ไม่ใช่ถือว่าการสังเคราะห์เสียงเป็นขั้นแปล สำหรับย่อหน้าที่มีชื่อยืมหรือการสลับภาษา ให้การสะกดและบริบทประโยครอบข้างชัดเจน แล้วตรวจว่าเสียงที่เลือกจัดการจุดเปลี่ยนนั้นอย่างไร\n\nอินเทอร์เฟซของผู้พัฒนา S1 รองรับผู้พูดหนึ่งคนต่อคำขอสังเคราะห์ สามารถเตรียมบทสนทนาเป็นเซกเมนต์แยกที่มีเสียงอ้างอิงของตัวเอง แล้วประกอบในแอปพลิเคชัน ความสามารถสังเคราะห์ผู้พูดหลายคนโดยตรงของตระกูล S2 เป็นอีกเรื่องหนึ่ง เก็บบทบาท เสียง และข้อความให้สัมพันธ์กับแต่ละเซกเมนต์เมื่อเตรียมบทตัวละคร ผลสังเคราะห์คือการแสดงบทด้วยเสียง ส่วนการกำหนดจังหวะถามตอบหรือรวมกับเพลงและวิดีโอเป็นขั้นแก้ไขภายหลัง\n\nตัวเลือกเอาต์พุตมี MP3, WAV, PCM ดิบ และ Opus โดย MP3 เป็นค่าเริ่มต้น เอาต์พุตตามเอกสารเป็นโมโน WAV และ PCM ใช้ตัวอย่างเสียง 16 บิต ส่วนตัวเลือกอัตราสุ่มตัวอย่างต่างกันตามรูปแบบ MP3 รองรับ 64, 128 และ 192 kbps ขณะที่ Opus ใช้ 48 kHz ปรับความเร็วได้ตั้งแต่ 0.5 ถึง 2.0 พร้อมการควบคุมระดับเสียง เลือกไฟล์ที่เข้ารหัสสำหรับผลงานพากย์ หรือสตรีมที่เหมาะสำหรับเล่น และเก็บเสียงผู้พูดที่เลือกกับบทไว้คู่กับผลลัพธ์\n\nผู้พัฒนาประมวลผลข้อความยาวเป็นชังก์ โดยระบุช่วงความยาวชังก์ 100–300 และงบโทเคนเสียงต่อชังก์ แทนการรับประกันระยะเวลาบันทึกรวม การปรับรูปแบบข้อความขยายตัวเลขอังกฤษและจีนเป็นการอ่านธรรมชาติได้ และ repetition penalty ของ S1 ลดรูปแบบเสียงซ้ำได้ การปรับความดังเอาต์พุตให้เป็นมาตรฐานเป็นการตั้งค่าอีกแบบและไม่มีผลต่อ S1 ตรวจการออกเสียง ขอบเขตวลี เสียงซ้ำ และการเปลี่ยนอารมณ์ตามตั้งใจ ก่อนประกอบย่อหน้าที่เสร็จแล้ว จากนั้นแก้ประโยคหรือข้อมูลอ้างอิงเฉพาะจุดที่ต้องปรับ",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "available": null,
    "canonical_model": "fish-audio/s1",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text"
      ],
      "manufacturer_output": [
        "speech"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ],
        "summary": "ดูราคาตามการกำหนดค่าแบบครบถ้วนในรายละเอียด"
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "ca1892881aa6bc927745",
        "label": "Fish Audio: S1",
        "profiles": [
          {
            "basis": "",
            "dimensions": {
              "conditions": "การตั้งค่าเริ่มต้น"
            },
            "label": "Fish Audio: S1 · การตั้งค่าเริ่มต้น",
            "units": [
              {
                "amount": "0.000030",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "e7b3eb5a7636763feb8a9472",
                "label": "Input UTF-8 bytes",
                "public_unit_label": "per input UTF-8 byte",
                "quantity": "1",
                "rate_role": "declared_tariff_rate",
                "side": "in",
                "unit": "input_utf8_byte"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "speech"
    ],
    "id": "fish-audio/s1",
    "input": [
      "text"
    ],
    "kind": "speech",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Save all complete binary bytes and all original headers; keep full JSON if returned. Actual operation/asset IDs are preserved.",
            "lifecycle": {
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "เก็บ operation_id/X-Client-Request-ID เดิมและการตอบกลับเดิม อ่านบันทึกงาน/แอสเซ็ตจริงที่เป็นของคุณโดยไม่ส่งซ้ำ ไม่มีการสร้าง URL ตรวจสอบสถานะเสียงเฉพาะ"
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "text_to_speech",
                "required": [
                  "actual UTF-8 script",
                  "exact supported voice"
                ]
              }
            ],
            "outputs": {
              "all_results": "บันทึกไบต์ไบนารีทั้งหมดและส่วนหัวต้นฉบับทั้งหมด เก็บ JSON ทั้งหมดหากมีการส่งกลับ คง ID การดำเนินการ/แอสเซ็ตจริงไว้",
              "family": "audio",
              "fields": [
                {
                  "name": "binary audio",
                  "type": "bytes"
                },
                {
                  "name": "response headers",
                  "type": "headers"
                }
              ],
              "format": "เสียงไบนารีจริงตามที่ประกาศไว้"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "enum": [
                  "fish-audio/s1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "min_length": 1,
                "name": "input",
                "quantity_unit": "decoded input UTF-8 bytes",
                "required": true,
                "type": "string"
              },
              {
                "availability": "saved_exact_supplier_example",
                "enum": [
                  "b347db033a6549378b48d00acb0d06cd"
                ],
                "enum_exhaustive": false,
                "enum_known": true,
                "name": "voice",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": "pcm",
                "default_known": true,
                "enum": [
                  "mp3",
                  "pcm"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "request_schema": {
              "properties": {
                "input": {
                  "minLength": 1,
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "fish-audio/s1"
                  ],
                  "type": "string"
                },
                "response_format": {
                  "default": "pcm",
                  "enum": [
                    "mp3",
                    "pcm"
                  ],
                  "type": "string"
                },
                "voice": {
                  "minLength": 1,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input",
                "voice"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": false,
              "body": {
                "input": "Hello world",
                "model": "fish-audio/s1",
                "response_format": "mp3",
                "voice": "b347db033a6549378b48d00acb0d06cd"
              },
              "content_type": "application/json"
            }
          },
          "hints": [
            "ใช้โมเดลที่ตรงตามที่กำหนดและฟิลด์ข้อมูลขาเข้าตามเอกสาร",
            "เก็บการตอบกลับทั้งหมด ผลลัพธ์จริงทุกรายการ และ ID เดิมที่ส่งกลับ"
          ],
          "input": {
            "content_type": "application/json",
            "default_response_format": "pcm",
            "material_types": [
              "text"
            ],
            "native_byte_quote_controls": "เส้นทางเสนอราคาตามไบต์ที่ตรงตามที่กำหนดนี้ปฏิเสธ instructions ที่ไม่ว่างและข้อมูลขาเข้าแบบผลัดกันพูดหลายผู้พูด จนกว่าจะประกาศข้อความเพิ่มเติมที่ต้องคิดค่าบริการ",
            "quantity": "ไบต์ UTF-8 ของสตริงอินพุตเดียวที่ถอดรหัสแล้ว; ไม่มีการตัดช่องว่างหัวท้ายหรือการปรับให้เป็นรูปแบบมาตรฐาน",
            "required": [
              "model",
              "input",
              "voice"
            ],
            "response_format": [
              "mp3",
              "pcm"
            ],
            "voice_ids": [
              "b347db033a6549378b48d00acb0d06cd"
            ],
            "voice_list_exhaustive": false
          },
          "lifecycle": {
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "ค่า task_id ที่ส่งกลับมาจริง หรือระเบียนในคลังสื่อ",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID and original response. Read actual owned task/asset records without resubmitting; no dedicated audio poll URL is constructed."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/speech"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_speech"
          ],
          "output": {
            "all_results": true,
            "family": "audio",
            "format": "actual MP3 or PCM bytes and MIME",
            "response": "complete raw audio bytes plus response headers"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\nrequest={'model': 'fish-audio/s1', 'input': 'Hello world', 'voice': 'b347db033a6549378b48d00acb0d06cd', 'response_format': 'mp3'}\nPath('request.json').write_text(json.dumps(request,ensure_ascii=False),encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o response.bin\n# Keep the complete original response and headers. Read every returned segment, word and usage field.\n# Preserve actual operation/task/asset IDs; continue reads of the original result without resubmitting.\n",
            "label": "curl · exact native body and complete result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "speech",
        "hints": [
          "Use the exact model and documented input fields.",
          "Keep the complete response, every actual output and original returned IDs."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "text"
        ],
        "label": "Озвучка текста",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "audio"
        ],
        "path": "/v1/audio/speech",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_utf8_byte": 3e-05
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quantity_basis": "actual physical units",
              "quoted_unit": "per audio input utf8 byte"
            },
            "label": "Ultra",
            "units": [
              {
                "amount": "0.00003",
                "amount_unit": "usd_per_audio_input_utf8_byte",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_utf8_byte",
                "label": "audio input utf8 byte",
                "native_amount_usd_per_unit": "0.00003",
                "native_quantity": 1,
                "public_unit_label": "per audio input utf8 byte",
                "quantity": "1",
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_utf8_byte"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.00003",
            "amount_unit": "usd_per_audio_input_utf8_byte",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_utf8_byte",
            "label": "audio input utf8 byte",
            "native_amount_usd_per_unit": "0.00003",
            "native_quantity": 1,
            "public_unit_label": "per audio input utf8 byte",
            "quantity": "1",
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_utf8_byte"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/s1",
        "request_model_id": "fish-audio/s1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: S1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "not_character_or_token_count": true,
          "quoted_unit": "1000000_UTF8_bytes",
          "retirement_date": "2026-12-31"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.000030",
            "amount_unit": "usd_per_input_utf8_byte",
            "conditions": {
              "not_character_or_token_count": true,
              "quoted_unit": "1000000_UTF8_bytes",
              "retirement_date": "2026-12-31"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "in",
            "unit": "input_utf8_byte"
          }
        ]
      }
    ],
    "public_id": "fish-audio/s1",
    "short": "Fish Audio S1 เปลี่ยนบทหลายภาษาเป็นเสียงผู้พูดคนเดียวที่ถ่ายทอดอารมณ์ โดยใช้เสียงอ้างอิงและคำบอกอารมณ์ในวงเล็บ ใช้สำหรับการบรรยาย คำแนะนำแบบเสียงสั้น ๆ หรือบทตัวละคร พร้อมการควบคุมรูปแบบและทำนองเสียงของงานเสียงที่เสร็จแล้ว"
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Fish Audio S1 เปลี่ยนบทหลายภาษาเป็นเสียงผู้พูดคนเดียวที่ถ่ายทอดอารมณ์ โดยใช้เสียงอ้างอิงและคำบอกอารมณ์ในวงเล็บ ใช้สำหรับการบรรยาย คำแนะนำแบบเสียงสั้น ๆ หรือบทตัวละคร พร้อมการควบคุมรูปแบบและทำนองเสียงของงานเสียงที่เสร็จแล้ว",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e907da24db6a7d39453386817e5badf85d6212042c41867005241a08ee21e463",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "ca03f41e67742ec38a4820cee261d01c61363c8dbf347ae803ce5b5ae9ae247d"
}
