DEV Community

Cover image for วิธีใช้ Fish Audio S2 API ฉบับสมบูรณ์ พร้อม Apidog
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

วิธีใช้ Fish Audio S2 API ฉบับสมบูรณ์ พร้อม Apidog

Fish Audio S2 API เป็น REST API สำหรับ Text-to-Speech ระดับ Production ขับเคลื่อนด้วยโมเดล 4 พันล้านพารามิเตอร์ ฝึกด้วยเสียงกว่า 10 ล้านชั่วโมง รองรับการโคลนเสียง การสตรีม และมากกว่า 50 ภาษา หากคุณต้องการใช้งาน Fish Audio S2 API อย่างมีประสิทธิภาพ—ตั้งแต่การส่งคำขอ การจัดการข้อมูลอ้างอิง ไปจนถึงการรัน Unit Test—Apidog คือเครื่องมือที่เร็วที่สุดสำหรับการสำรวจ จัดทำเอกสาร และตรวจสอบทุกเอนด์พอยต์ ทดลองใช้ Apidog วันนี้

บทนำ

เสียงที่สร้างโดย AI ก้าวข้ามข้อจำกัดเดิมไปแล้ว โมเดล TTS สมัยใหม่ไม่ฟังดูเหมือนหุ่นยนต์อีกต่อไป—สามารถกระซิบ หัวเราะ และเปลี่ยนโทนเสียงกลางประโยคได้ Fish Audio S2 API คือโมเดล 4 พันล้านพารามิเตอร์ที่ฝึกด้วยเสียงหลากหลายภาษามากกว่า 10 ล้านชั่วโมง สร้างเสียงที่แทบจะแยกไม่ออกจากเสียงมนุษย์จริง

ไม่ว่าคุณจะสร้างระบบอัตโนมัติสำหรับพอดแคสต์ ผู้ช่วยเสียง หรือไปป์ไลน์พากย์เสียงแบบเรียลไทม์ การรวม Fish Audio S2 API ต้องเข้าใจการยืนยันตัวตน การจัดการเสียงอ้างอิง การสตรีม และที่สำคัญคือการเขียน Unit Test เพื่อให้การใช้งานจริงของคุณคงเสถียร

💡ก่อนเรียกใช้ Fish Audio S2 API ครั้งแรก ให้ดาวน์โหลด Apidog ฟรี ทดสอบแท็กอารมณ์ ชิ้นส่วนสตรีมมิ่ง เพย์โหลดการโคลนเสียง และเสียงตอบกลับไบนารีได้ทันที ไม่ต้องมีโค้ด จำลอง ตรวจสอบ และฟังผลได้จาก UI เพื่อให้ TTS integration ของคุณสมบูรณ์แบบตั้งแต่วันแรก

Fish Audio S2 API คืออะไร?

Fish Audio S2 API เป็น HTTP API สำหรับ Fish Speech S2-Pro (TTS แบบโอเพนซอร์ส) ใช้สถาปัตยกรรม Dual-Autoregressive แยกการสร้างความหมายและการสร้าง Codebook เพื่อประสิทธิภาพสูง สังเคราะห์เสียงคุณภาพเยี่ยมที่อัตรา real-time factor 0.195 (NVIDIA H200 เพียงเครื่องเดียว)

ความสามารถหลัก:

คุณสมบัติ รายละเอียด
ภาษา ประมาณ 50 ภาษา (อังกฤษ, จีน, ญี่ปุ่น, เกาหลี, อาหรับ, ฝรั่งเศส, เยอรมัน และอื่นๆ)
การโคลนเสียง เสียงอ้างอิง 10–30 วินาที ไม่ต้องปรับแต่ง
การควบคุมอารมณ์แบบอินไลน์ แท็กภาษาธรรมชาติ: [laugh], [whispers], [super happy]
การสร้างเสียงหลายลำโพง รองรับโทเค็น <|speaker:i|> แบบเนทีฟ
การสตรีม เสียงสตรีมแบบเรียลไทม์ด้วย "streaming": true
รูปแบบเอาต์พุต WAV, MP3, PCM
การยืนยันตัวตน Bearer Token (Authorization: Bearer YOUR_API_KEY)

URL พื้นฐานหลังติดตั้งในเครื่อง: http://127.0.0.1:8080 ทุกเอนด์พอยต์อยู่ภายใต้ /v1/

เริ่มต้นใช้งาน Fish Audio S2 API และ Apidog

ข้อกำหนดเบื้องต้นสำหรับ Fish Audio S2 API

เตรียมเซิร์ฟเวอร์ Fish Speech S2-Pro และไคลเอนต์ API ที่รองรับเสียงไบนารี

รันเซิร์ฟเวอร์:

python tools/api_server.py \
  --llama-checkpoint-path checkpoints/s2-pro \
  --decoder-checkpoint-path checkpoints/s2-pro/codec.pth \
  --listen 0.0.0.0:8080 \
  --compile \
  --half \
  --api-key YOUR_API_KEY \
  --workers 4
Enter fullscreen mode Exit fullscreen mode
  • --compile ใช้ torch.compile เพิ่มความเร็วการอนุมาน
  • --half ใช้ FP16 ลด RAM GPU

ตรวจสอบสถานะเซิร์ฟเวอร์

curl http://127.0.0.1:8080/v1/health
# {"status":"ok"}
Enter fullscreen mode Exit fullscreen mode

การตั้งค่า Fish Audio S2 API ใน Apidog

ดาวน์โหลด Apidog ฟรี สร้างโปรเจกต์ HTTP ใหม่ ใส่ URL พื้นฐาน http://127.0.0.1:8080 ใน Environments ตั้งค่า Global Header:

Authorization: Bearer YOUR_API_KEY
Enter fullscreen mode Exit fullscreen mode

Apidog จะใส่ Header นี้ให้กับทุกคำขอในโปรเจกต์โดยอัตโนมัติ เหมาะกับการสลับ environment เช่น dev/staging/prod

การส่งคำขอ Fish Audio S2 API ครั้งแรกใน Apidog

การทดสอบเอนด์พอยต์ Text-to-Speech ของ Fish Audio S2 API

สร้างคำขอใหม่ใน Apidog ไปที่ POST /v1/tts ใส่ JSON body:

{
  "text": "Hello! This is a test of the Fish Audio S2 API.",
  "format": "wav",
  "streaming": false,
  "temperature": 0.8,
  "top_p": 0.8,
  "repetition_penalty": 1.1,
  "max_new_tokens": 1024
}
Enter fullscreen mode Exit fullscreen mode

สคีมาคำขอ TTS:

... (คงตารางเดิม) ...

คลิก Send ใน Apidog ผลลัพธ์เป็น binary audio (เช่น audio/wav) Apidog แสดง inline audio player ให้ฟังเสียงได้ทันที ไม่ต้องเขียนโค้ด client

การโคลนเสียงด้วย Fish Audio S2 API

การอัปโหลดเสียงอ้างอิงไปยัง Fish Audio S2 API ผ่าน Apidog

โคลนเสียงด้วยฟิลด์ references ใน TTS request ส่งคลิปเสียง base64+transcription

อัปโหลดอ้างอิง:

{
  "id": "my-voice-clone",
  "text": "This is the reference transcription matching the audio.",
  "audio": "<base64-encoded-wav-bytes>"
}
Enter fullscreen mode Exit fullscreen mode

ใน Apidog เลือก body แบบ Binary หรือ Form Data ส่งไฟล์เสียงพร้อม text

ผลลัพธ์:

{
  "success": true,
  "message": "Reference added successfully",
  "reference_id": "my-voice-clone"
}
Enter fullscreen mode Exit fullscreen mode

นำไปใช้ใน TTS ได้ทันที:

{
  "text": "This sentence will be spoken in the cloned voice.",
  "reference_id": "my-voice-clone",
  "format": "mp3"
}
Enter fullscreen mode Exit fullscreen mode

Apidog Panel Reference Management บันทึก template คำขออ้างอิง เปลี่ยน reference_id ได้สะดวก ทดสอบเสียงโคลนหลายแบบกับสคริปต์เดียว

วิธีการ Unit Test การรวม Fish Audio S2 API

ทำไม Unit Test ถึงสำคัญ

การรวม Fish Audio S2 API อาจล้มเหลวโดยไม่รู้ตัว เช่น reference ID ผิด ค่าพารามิเตอร์ผิดช่วง การสตรีมผิดพลาด หรือ format ไม่ตรง Unit Test ช่วยจับข้อผิดพลาดเหล่านี้ก่อน production

ตัวอย่าง Unit Test ด้วย Python (pytest + httpx)

import pytest
import httpx
import base64

BASE_URL = "http://127.0.0.1:8080"
API_KEY = "YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

class TestFishAudioS2API:
    def test_health_check(self):
        response = httpx.get(f"{BASE_URL}/v1/health", headers=HEADERS)
        assert response.status_code == 200
        assert response.json()["status"] == "ok"

    def test_tts_basic_request(self):
        payload = {
            "text": "Unit test: verifying Fish Audio S2 API TTS output.",
            "format": "wav",
            "seed": 42
        }
        response = httpx.post(
            f"{BASE_URL}/v1/tts",
            json=payload,
            headers=HEADERS,
            timeout=60
        )
        assert response.status_code == 200
        assert response.headers["content-type"] == "audio/wav"
        assert len(response.content) > 1000

    def test_tts_invalid_temperature_raises_error(self):
        payload = {"text": "test", "temperature": 99.0}
        response = httpx.post(
            f"{BASE_URL}/v1/tts",
            json=payload,
            headers=HEADERS,
            timeout=30
        )
        assert response.status_code == 422

    def test_reference_add_and_list(self):
        with open("test_reference.wav", "rb") as f:
            audio_b64 = base64.b64encode(f.read()).decode()

        add_response = httpx.post(
            f"{BASE_URL}/v1/references/add",
            json={
                "id": "unit-test-voice",
                "text": "This is a unit test reference audio.",
                "audio": audio_b64
            },
            headers=HEADERS
        )
        assert add_response.json()["success"] is True

        list_response = httpx.get(
            f"{BASE_URL}/v1/references/list", headers=HEADERS
        )
        assert "unit-test-voice" in list_response.json()["reference_ids"]

        httpx.request(
            "DELETE",
            f"{BASE_URL}/v1/references/delete",
            json={"reference_id": "unit-test-voice"},
            headers=HEADERS
        )
Enter fullscreen mode Exit fullscreen mode

รัน Unit Test:

pytest test_fish_audio_s2_api.py -v
Enter fullscreen mode Exit fullscreen mode

การรัน Unit Test ของ Fish Audio S2 API ด้วย Apidog

Apidog มีฟีเจอร์ Test Scenarios สำหรับทดสอบอัตโนมัติได้โดยไม่ต้องเขียนโค้ด Python:

  1. เปิด Collection Fish Audio S2 API
  2. เลือก Test ScenariosNew Scenario
  3. เพิ่มคำขอ Health Check, TTS, Add Reference, List Reference
  4. ตั้ง Assertion: สถานะ 200, header มี audio, response time < 30000ms
  5. คลิก Run เพื่อรันชุด Unit Test ทั้งหมด

Apidog แสดงรายงานผ่าน/ไม่ผ่าน พร้อม response time และ diff view ส่งออกหรือรันบน CI ได้เลย

คุณสมบัติขั้นสูงของ Fish Audio S2 API

การสตรีมเสียงจาก Fish Audio S2 API

สำหรับแอปที่ต้องการเสียงแบบ real-time ให้ตั้ง "streaming": true ใน request body:

import httpx

with httpx.stream(
    "POST",
    "http://127.0.0.1:8080/v1/tts",
    json={
        "text": "Streaming audio from the Fish Audio S2 API in real time.",
        "format": "wav",
        "streaming": True,
    },
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    timeout=None,
) as response:
    with open("streamed_output.wav", "wb") as audio_file:
        for chunk in response.iter_bytes(chunk_size=4096):
            audio_file.write(chunk)
Enter fullscreen mode Exit fullscreen mode

API จะส่ง byte stream ทันที (เสียงแรกประมาณ 100ms) เหมาะกับ use case เสียงสด/interactive

การควบคุมอารมณ์แบบอินไลน์ผ่าน Fish Audio S2 API

ใส่แท็กอารมณ์ใน field text ได้เลย เช่น:

{
  "text": "[whispers] The secret is hidden here. [super happy] I found it!",
  "format": "wav"
}
Enter fullscreen mode Exit fullscreen mode

โมเดลจะตีความแท็กในวงเล็บเป็นคำสั่งเสียง เช่น [laugh], [cough], [pitch up], [professional broadcast tone], [whisper in small voice]

บทสรุป

Fish Audio S2 API คือ TTS Engine ระดับ Production ที่ใช้งานง่ายผ่าน REST API ตั้งแต่สังเคราะห์เสียง, โคลนเสียง, สตรีมแบบเรียลไทม์ ทุก endpoint ครอบคลุมการสร้างเสียงที่นักพัฒนาต้องการ หากต้องการ integration ที่เสถียร: ควรตั้งค่าพารามิเตอร์ sampling ให้เหมาะสม, จัดการ reference lifecycle อย่างถูกต้อง, และดูแล Unit Test ครบทุก endpoint

Apidog ช่วยลดเวลา onboarding ใช้เพื่อส่งคำขอ Fish Audio S2 API ฟังเสียงไบนารี สร้าง client code อัตโนมัติ และรัน Unit Test ทุก endpoint ได้ทันที—ไม่ต้อง setup test framework เมื่อจะส่งต่อ spec หรือเอกสารให้ทีม/ลูกค้า เอกสารอัตโนมัติของ Apidog จะช่วยให้การสื่อสารเป็นระบบ

ดาวน์โหลด Apidog ฟรี และนำเข้าคอลเลกชัน Fish Audio S2 API เพื่อเริ่มทดสอบได้ทันที

คำถามที่พบบ่อย

Fish Audio S2 API คืออะไร? เป็น REST API สำหรับ Fish Speech S2-Pro (TTS 4B parameter, ฝึกเสียง 10M ชั่วโมง) รองรับโคลนเสียง สตรีม ควบคุมอารมณ์ และ 50+ ภาษา ผ่าน /v1/

ยืนยันตัวตนอย่างไร? ใส่ Authorization: Bearer YOUR_API_KEY ทุกคำขอ กำหนด API Key ด้วย --api-key ตอนรันเซิร์ฟเวอร์ Apidog จัดเก็บ token ที่ environment ใช้กับทุก request โดยอัตโนมัติ

Unit Test โดยไม่ต้องเขียนโค้ดได้หรือไม่? ได้ Apidog มี Test Scenarios สร้างและรัน Unit Test Fish Audio S2 API ทุก endpoint ใน UI ระบุ assertion เช่น status code, response time, header แล้วคลิกรันหรือสั่ง schedule CI ได้เลย

รองรับ output format ใดบ้าง? WAV, MP3, PCM กำหนด format ได้ที่ field "format" ใน TTS body (WAV คือ default)

โคลนเสียงทำงานอย่างไร? อัปโหลดคลิปอ้างอิง 10–30 วินาที + transcript ที่ POST /v1/references/add แล้วใช้ reference_id ใน TTS API ไม่ต้อง fine-tune หรือ retrain

Real-time factor คืออะไร? NVIDIA H200 หนึ่งเครื่อง Fish Audio S2 API ทำ RTF 0.195 (สร้างเสียง 5 วินาที/วินาที) เสียงแรกเร็ว ~100ms

ทดสอบเสียงไบนารีใน Apidog ได้อย่างไร? Apidog แสดง audio player ทันทีเมื่อ API ส่งเสียงไบนารี ไม่ต้อง save file สามารถฟัง ตรวจ header และเพิ่ม assertion ใน panel เดียว

Top comments (0)