Przejdź do głównej treści
Ten interfejs oferuje konwersję tekstu na mowę, wywoływanie zapisanych głosów oraz jednorazowe natychmiastowe klonowanie głosu, pod adresem POST https://api.acedata.cloud/fish/tts.

Proces składania wniosku

Aby korzystać z Fish TTS API, najpierw przejdź do konsoli Ace Data Cloud, aby uzyskać swój API Token i zachować go na później. Jeśli nie jesteś jeszcze zalogowany lub zarejestrowany, nastąpi automatyczne przekierowanie na stronę logowania z zaproszeniem do rejestracji i zalogowania się, a po zakończeniu automatycznie wrócisz na bieżącą stronę. Jeden API Token umożliwia wywoływanie wszystkich usług platformy, bez konieczności składania osobnego wniosku dla każdej usługi. Przy pierwszym wniosku otrzymasz bezpłatny limit, aby wypróbować usługę za darmo; gdy limit będzie niewystarczający, możesz doładować uniwersalne saldo w konsoli.
📘 Pełna dokumentacja: Fish TTS API →

Nagłówki żądania

Pola treści żądania

Jednorazowe klonowanie akceptuje wyłącznie adresy URL audio HTTPS, nie akceptuje MessagePack, Base64, data URI ani adresów URL z poświadczeniami. Zalecany czas trwania referencyjnego audio to 10–270 sekund; Studio używa bardziej konserwatywnego zakresu 10–60 sekund.

Przykład 1: minimalne żądanie (text + format=mp3)

Odpowiedź (testowana):
audio_url wskazuje na CDN tej platformy i można go bezpośrednio pobrać przez GET lub odtworzyć w <audio>. Końcowa pomyślna odpowiedź zwróci również najwyższego poziomu cost, gdzie amount to faktycznie odjęte Credits dla tego wywołania; jeśli istnieje zniżka na koncie, list_amount oznacza limit przed zniżką. Link jest dostępny przez długi czas, ale nadal zaleca się zachowanie kopii we własnej pamięci.

Przykład 2: użycie sklonowanego głosu reference_id

Poniżej użyto publicznego hiszpańskiego głosu na platformie Fish (_id można uzyskać przez wyszukiwanie w Fish Model Query):
Odpowiedź (testowana):

Przykład 3: jednorazowe natychmiastowe klonowanie głosu (references)

Umieść referencyjne audio pod publicznym adresem HTTPS i podaj dokładny oryginalny tekst faktycznie wypowiedziany w nim. Ten głos jest używany tylko do tej syntezy i nie utworzy trwałego modelu:
Pomyślna odpowiedź z testu rzeczywistego:

Przykład 3: Regulacja szybkości mowy / głośności (prosody)

Odpowiedź (test rzeczywisty):
speed większe niż 1 przyspiesza, mniejsze niż 1 zwalnia; jednostką volume jest dB, 0 oznacza brak zmian, liczba dodatnia oznacza wzmocnienie, a ujemna tłumienie.

Przykład 5: Przełączanie modelu + kontrola bitrate’u

Przełącz na stabilny model poprzez nagłówek HTTP model: s1, a w treści żądania dodaj mp3_bitrate: 128, aby kontrolować bitrate MP3:
Odpowiedź (test rzeczywisty):

Przykład 6: Surowa fala PCM

W scenariuszach, w których konieczne jest wykonywanie łączenia w czasie rzeczywistym w przeglądarce lub dalsze przetwarzanie po stronie klienta (miksowanie, zmiana prędkości), zaleca się użycie pcm:
Odpowiedź (test rzeczywisty):
Rozszerzenie linku jest zgodne z format w żądaniu: mp3 daje .mp3, a wav i pcm dają .wav (kontener WAV, 16-bit PCM).

Asynchroniczne wywołanie zwrotne (callback_url)

Jednorazowa synteza długiego tekstu może wymagać od kilkunastu do kilkudziesięciu sekund; jeśli połączenie zostanie przerwane, wymagane jest ponowienie próby. Po przekazaniu callback_url w treści żądania interfejs natychmiast zwróci {task_id, started_at}, a po rzeczywistym zakończeniu po stronie upstream pełny wynik zostanie wywołany zwrotnie do tego URL w formie POST JSON, z tym samym task_id i końcowym najwyższopoziomowym cost naliczonym za to wywołanie. Początkowe potwierdzenie zadania nie zakończyło jeszcze syntezy, dlatego nie zawiera cost.
Natychmiastowa odpowiedź (test rzeczywisty):
Nieco później callback_url otrzyma coś w formie:
Można również aktywnie pobrać wynik według task_id za pomocą Fish Tasks API; response.cost w rekordzie stanu końcowego jest zgodne z cost w wywołaniu zwrotnym, szczegóły znajdują się w tej dokumentacji.

Obsługa błędów

  • 400 token_mismatched: Parametry żądania są brakujące lub nieprawidłowe (najczęściej text jest puste albo format ma wartość inną niż mp3/wav/pcm).
  • 401 invalid_token: Token uwierzytelniający nie istnieje lub jest nieprawidłowy.
  • 429 too_many_requests: Został uruchomiony limit częstotliwości konta.
  • 500 api_error: Wewnętrzny błąd serwera.
Przykład odpowiedzi błędu:
Błędy walidacji parametrów opisują nieprawidłowe pole w polu message, na przykład:

Wnioski

Minimalny koszt integracji Fish TTS to: w istniejącym kodzie wywołującym api.fish.audio/v1/tts zastąpić uwierzytelnianie tokenem tej platformy oraz jawnie dodać format: "mp3" w treści żądania. W przypadku długiego tekstu zaleca się użycie asynchronicznego wywołania zwrotnego callback_url; aby znaleźć reference_id dla sklonowanego głosu, skorzystaj z Fish Model Query oraz Fish Model Get.