Rozhraní API pro dlouhé zvuky

Rozhraní LONG Audio API poskytuje asynchronní syntézu dlouhého formátu textu na řeč (například zvukové knihy, zpravodajské články a dokumenty). Toto rozhraní API nevrací syntetizovaný zvuk v reálném čase. Místo toho se dotazujete na odpovědi a spotřebováváte výstupy, jakmile je služba z dostupných. Na rozdíl od rozhraní API pro převod textu na řeč používaného sadou Speech SDK může rozhraní API pro dlouhý zvuk vytvořit syntetizovaný zvuk delší než 10 minut. Díky tomu je ideální pro vydavatele a platformy zvukového obsahu, aby v dávce vytvářely dlouhý zvukový obsah, jako jsou zvukové knihy.

Další výhody rozhraní Long Audio API:

  • Syntetizovaná řeč vrácená službou používá nejlepší neurální hlasy.
  • Není potřeba nasazovat hlasový koncový bod.

Poznámka

Rozhraní API Long Audio podporuje veřejné neurální hlasy i vlastní neurální hlasy.

Pracovní postup

Při použití rozhraní Long Audio API obvykle odešlete textový soubor nebo soubory, které se mají syntetizovat, dotazovat se na stav a stáhnout zvukový výstup, když stav značí úspěch.

Tento diagram poskytuje základní přehled pracovního postupu.

Diagram pracovního postupu rozhraní Long Audio API

Příprava obsahu pro syntézu

Při přípravě textového souboru se ujistěte, že:

  • Je prostý text (.txt) nebo text SSML (.txt).
  • Je kódováno jako UTF-8 s byte Order Mark (BOM).
  • Je to jeden soubor, ne zip.
  • Obsahuje více než 400 znaků pro prostý text nebo 400 fakturovatelných znaků pro text SSML a méně než 10 000 odstavců.

Ukázka kódu

Zbytek této stránky se zaměřuje na Python, ale ukázkový kód pro rozhraní LONG Audio API je k dispozici GitHub pro následující programovací jazyky:

Příklad Pythonu

Tato část obsahuje příklady Pythonu, které ukazují základní využití rozhraní Long Audio API. Vytvořte nový projekt v jazyce Python v oblíbeném integrovaném vývojovém prostředí nebo editoru. Pak tento fragment kódu zkopírujte do souboru s názvem long_audio_synthesis_client.py .

import json
import ntpath
import requests

Tyto knihovny se používají k vytvoření požadavku HTTP a volání dlouhé syntézy zvuku pro převod textu na REST API.

Získání seznamu podporovaných hlasů

Pokud chcete získat seznam podporovaných hlasů, odešlete požadavek GET na https://<endpoint>/api/texttospeech/v3.0/longaudiosynthesis/voices .

Tento kód získá úplný seznam hlasů, které můžete použít v konkrétní oblasti nebo koncovém bodu.

def get_voices():
    region = '<region>'
    key = '<your_key>'
    url = 'https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/voices'.format(region)
    header = {
        'Ocp-Apim-Subscription-Key': key
    }

    response = requests.get(url, headers=header)
    print(response.text)

get_voices()

Nahraďte následující hodnoty:

  • Nahraďte <your_key> klíčem předplatného služby Speech. Tyto informace jsou k dispozici na kartě Přehled pro váš prostředek v Azure Portal.
  • Nahraďte <region> oblastí, ve které jste vytvořili prostředek služby Speech (například nebo eastus westus ). Tyto informace jsou k dispozici na kartě Přehled pro váš prostředek v Azure Portal.

Zobrazí se výstup, který vypadá jako tento:

{
  "values": [
    {
      "locale": "en-US",
      "voiceName": "en-US-AriaNeural",
      "description": "",
      "gender": "Female",
      "createdDateTime": "2020-05-21T05:57:39.123Z",
      "properties": {
        "publicAvailable": true
      }
    },
    {
      "id": "8fafd8cd-5f95-4a27-a0ce-59260f873141"
      "locale": "en-US",
      "voiceName": "my custom neural voice",
      "description": "",
      "gender": "Male",
      "createdDateTime": "2020-05-21T05:25:40.243Z",
      "properties": {
        "publicAvailable": false
      }
    }
  ]
}

Pokud má properties.publicAvailable hodnotu true, hlas je veřejný neurální hlas. Jinak se jedná o vlastní neurální hlas.

Převod textu na řeč

Připravte vstupní textový soubor v prostém textu nebo v textu SSML a pak do souboru přidejte následující long_audio_synthesis_client.py kód:

Poznámka

concatenateResult je volitelný parametr. Pokud tento parametr není nastavený, vygenerují se zvukové výstupy pro každý odstavec. Zvuky můžete také zřetězit do jednoho výstupu zahrnutím parametru . outputFormat je také nepovinné. Ve výchozím nastavení je zvukový výstup nastavený na riff-16khz-16bit-mono-pcm . Další informace o podporovaných formátech zvukového výstupu najdete v tématu Formáty zvukového výstupu.

def submit_synthesis():
    region = '<region>'
    key = '<your_key>'
    input_file_path = '<input_file_path>'
    locale = '<locale>'
    url = 'https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis'.format(region)
    header = {
        'Ocp-Apim-Subscription-Key': key
    }

    voice_identities = [
        {
            'voicename': '<voice_name>'
        }
    ]

    payload = {
        'displayname': 'long audio synthesis sample',
        'description': 'sample description',
        'locale': locale,
        'voices': json.dumps(voice_identities),
        'outputformat': 'riff-16khz-16bit-mono-pcm',
        'concatenateresult': True,
    }

    filename = ntpath.basename(input_file_path)
    files = {
        'script': (filename, open(input_file_path, 'rb'), 'text/plain')
    }

    response = requests.post(url, payload, headers=header, files=files)
    print('response.status_code: %d' % response.status_code)
    print(response.headers['Location'])

submit_synthesis()

Nahraďte následující hodnoty:

  • Nahraďte <your_key> klíčem předplatného služby Speech. Tyto informace jsou k dispozici na kartě Přehled pro váš prostředek v Azure Portal.
  • Nahraďte <region> oblastí, ve které jste vytvořili prostředek služby Speech (například nebo eastus westus ). Tyto informace jsou k dispozici na kartě Přehled pro váš prostředek v Azure Portal.
  • Nahraďte <input_file_path> cestou k textovému souboru, který jste připravili pro převod textu na řeč.
  • Nahraďte <locale> požadovaným výstupním národního prostředím. Další informace najdete v tématu podpora jazyků.

Použijte jeden z hlasů vrácených předchozím voláním do koncového /voices bodu.

  • Pokud používáte veřejný neurální hlas, nahraďte <voice_name> požadovaným hlasem výstupu.
  • Pokud chcete použít vlastní neurální hlas, nahraďte proměnnou následujícím kódem a voice_identities <voice_id> nahraďte vlastním id neurálním hlasem.
voice_identities = [
    {
        'id': '<voice_id>'
    }
]

Zobrazí se výstup, který vypadá jako tento:

response.status_code: 202
https://<endpoint>/api/texttospeech/v3.0/longaudiosynthesis/<guid>

Poznámka

Pokud máte více než jeden vstupní soubor, budete muset odeslat více žádostí a je potřeba zvážit určitá omezení.

  • Klient může odeslat až 5 požadavků za sekundu pro každý účet předplatného Azure. Pokud toto omezení překročí, vrátí se kód chyby 429 (příliš mnoho požadavků). Snižte počet odeslání, abyste se tomuto limitu vyhnuli.
  • Server může zařadit do fronty až 120 požadavků pro každý účet předplatného Azure. Pokud fronta toto omezení překročí, server vrátí kód chyby 429 (příliš mnoho požadavků). Před odesláním dalších žádostí počkejte na dokončené žádosti.

Adresu URL ve výstupu můžete použít k získání stavu požadavku.

Získání podrobností o odeslané žádosti

Pokud chcete získat stav odeslaného požadavku na syntézu, odešlete požadavek GET na adresu URL vrácenou v předchozím kroku.


def get_synthesis():
    url = '<url>'
    key = '<your_key>'
    header = {
        'Ocp-Apim-Subscription-Key': key
    }
    response = requests.get(url, headers=header)
    print(response.text)

get_synthesis()

Výstup bude vypadat takhle:

response.status_code: 200
{
  "models": [
    {
      "voiceName": "en-US-AriaNeural"
    }
  ],
  "properties": {
    "outputFormat": "riff-16khz-16bit-mono-pcm",
    "concatenateResult": false,
    "totalDuration": "PT5M57.252S",
    "billableCharacterCount": 3048
  },
  "id": "eb3d7a81-ee3e-4e9a-b725-713383e71677",
  "lastActionDateTime": "2021-01-14T11:12:27.240Z",
  "status": "Succeeded",
  "createdDateTime": "2021-01-14T11:11:02.557Z",
  "locale": "en-US",
  "displayName": "long audio synthesis sample",
  "description": "sample description"
}

Vlastnost status se změní ze stavu na a nakonec na nebo NotStarted Running Succeeded Failed . Toto rozhraní API můžete dotazovat ve smyčce, dokud stav nebude Succeeded nebo Failed .

Stažení zvukového výsledku

Jakmile je požadavek na syntézu úspěšný, můžete si stáhnout zvukový výsledek voláním rozhraní GET /files API.

def get_files():
    id = '<request_id>'
    region = '<region>'
    key = '<your_key>'
    url = 'https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/{}/files'.format(region, id)
    header = {
        'Ocp-Apim-Subscription-Key': key
    }

    response = requests.get(url, headers=header)
    print('response.status_code: %d' % response.status_code)
    print(response.text)

get_files()

Nahraďte <request_id> ID požadavku, který chcete stáhnout. Najdete ji v odpovědi předchozího kroku.

Výstup bude vypadat takhle:

response.status_code: 200
{
  "values": [
    {
      "name": "2779f2aa-4e21-4d13-8afb-6b3104d6661a.txt",
      "kind": "LongAudioSynthesisScript",
      "properties": {
        "size": 4200
      },
      "createdDateTime": "2021-01-14T11:11:02.410Z",
      "links": {
        "contentUrl": "https://customvoice-usw.blob.core.windows.net/artifacts/input.txt?st=2018-02-09T18%3A07%3A00Z&se=2018-02-10T18%3A07%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=e05d8d56-9675-448b-820c-4318ae64c8d5"
      }
    },
    {
      "name": "voicesynthesis_waves.zip",
      "kind": "LongAudioSynthesisResult",
      "properties": {
        "size": 9290000
      },
      "createdDateTime": "2021-01-14T11:12:27.226Z",
      "links": {
        "contentUrl": "https://customvoice-usw.blob.core.windows.net/artifacts/voicesynthesis_waves.zip?st=2018-02-09T18%3A07%3A00Z&se=2018-02-10T18%3A07%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=e05d8d56-9675-448b-820c-4318ae64c8d5"
      }
    }
  ]
}

Tento příklad výstupu obsahuje informace pro dva soubory. Ten s "kind": "LongAudioSynthesisScript" parametrem je odeslaná vstupní skript. Druhý s "kind": "LongAudioSynthesisResult" je výsledkem tohoto požadavku.

Výsledkem je soubor zip, který obsahuje vygenerované zvukové výstupní soubory spolu s kopií vstupního textu.

Oba soubory je možné stáhnout z adresy URL ve své links.contentUrl vlastnosti.

Získání všech žádostí o syntézu

Následující kód vypíše všechny odeslané žádosti:

def get_synthesis():
    region = '<region>'
    key = '<your_key>'
    url = 'https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/'.format(region)    
    header = {
        'Ocp-Apim-Subscription-Key': key
    }

    response = requests.get(url, headers=header)
    print('response.status_code: %d' % response.status_code)
    print(response.text)

get_synthesis()

Výstup bude vypadat třeba takhle:

response.status_code: 200
{
  "values": [
    {
      "models": [
        {
          "id": "8fafd8cd-5f95-4a27-a0ce-59260f873141",
          "voiceName": "my custom neural voice"
        }
      ],
      "properties": {
        "outputFormat": "riff-16khz-16bit-mono-pcm",
        "concatenateResult": false,
        "totalDuration": "PT1S",
        "billableCharacterCount": 5
      },
      "id": "f9f0bb74-dfa5-423d-95e7-58a5e1479315",
      "lastActionDateTime": "2021-01-05T07:25:42.433Z",
      "status": "Succeeded",
      "createdDateTime": "2021-01-05T07:25:13.600Z",
      "locale": "en-US",
      "displayName": "Long Audio Synthesis",
      "description": "Long audio synthesis sample"
    },
    {
      "models": [
        {
          "voiceName": "en-US-AriaNeural"
        }
      ],
      "properties": {
        "outputFormat": "riff-16khz-16bit-mono-pcm",
        "concatenateResult": false,
        "totalDuration": "PT5M57.252S",
        "billableCharacterCount": 3048
      },
      "id": "eb3d7a81-ee3e-4e9a-b725-713383e71677",
      "lastActionDateTime": "2021-01-14T11:12:27.240Z",
      "status": "Succeeded",
      "createdDateTime": "2021-01-14T11:11:02.557Z",
      "locale": "en-US",
      "displayName": "long audio synthesis sample",
      "description": "sample description"
    }
  ]
}

Vlastnost values obsahuje seznam vašich žádostí o syntézu. Seznam je stránkovaný s maximální velikostí stránky 100. Pokud existuje více než 100 požadavků, je k dispozici vlastnost pro získání další stránky "@nextLink" stránkovaného seznamu.

  "@nextLink": "https://<endpoint>/api/texttospeech/v3.0/longaudiosynthesis/?top=100&skip=100"

Velikost stránky a číslo přeskočit můžete také přizpůsobit tak, že v skip parametru top adresy URL zadáte a .

Odebrání předchozích požadavků

Služba bude pro každý účet předplatného Azure udržovat až 20 000 požadavků. Pokud vaše žádost překračuje toto omezení, odeberte předchozí požadavky, než začnete vytvářet nové. Pokud neodeberete stávající žádosti, obdržíte oznámení o chybě.

Následující kód ukazuje, jak odebrat konkrétní požadavek syntézy.

def delete_synthesis():
    id = '<request_id>'
    region = '<region>'
    key = '<your_key>'
    url = 'https://{}.customvoice.api.speech.microsoft.com/api/texttospeech/v3.0/longaudiosynthesis/{}/'.format(region, id)
    header = {
        'Ocp-Apim-Subscription-Key': key
    }

    response = requests.delete(url, headers=header)
    print('response.status_code: %d' % response.status_code)

Pokud je žádost úspěšně odebrána, bude kód stavu odpovědi HTTP 204 (žádný obsah).

response.status_code: 204

Poznámka

Žádosti se stavem NotStarted nebo Running nejde odebrat ani odstranit.

Dokončeno long_audio_synthesis_client.py je k dispozici na GitHub.

Stavové kódy HTTP

Následující tabulka podrobně popisuje kódy a zprávy odpovědi HTTP z REST API.

rozhraní API Stavový kód HTTP Popis Řešení
Vytvořit 400 Funkce Voice syntézy není v této oblasti povolena. Změňte klíč předplatného řeči s podporovanou oblastí.
400 Platný je jenom standardní odběr řeči pro tuto oblast. Změňte klíč předplatného řeči na cenovou úroveň Standard.
400 Překročil limit počtu požadavků 20 000 pro účet Azure. Před odesláním nových požadavků odeberte některé žádosti. Server bude pro každý účet Azure uchovávat až 20 000 požadavků. Před odesláním nových požadavků odstraňte nějaké žádosti.
400 Tento model se nedá použít ve shrnutí hlasu: {modelID}. Ujistěte se, že stav {modelID} je správný.
400 Oblast pro požadavek se neshoduje s oblastí pro model: {modelID}. Ujistěte se, že se oblast {modelID} shoduje s oblastí žádosti.
400 Funkce Voice syntézy podporuje pouze textový soubor v kódování UTF-8 se značkou pořadí bajtů. Ujistěte se, že vstupní soubory jsou v kódování UTF-8 se značkou pořadí bajtů.
400 V požadavku na Shrnutí hlasu jsou povolené jenom platné vstupy SSML. Ujistěte se, že vstupní výrazy SSML jsou správné.
400 Hlasový název {Voice} nebyl ve vstupním souboru nalezen. Vstupní název vstupu SSML není zarovnán s identifikátorem ID modelu.
400 Počet odstavců ve vstupním souboru by měl být menší než 10 000. Ujistěte se, že počet odstavců v souboru je menší než 10 000.
400 Vstupní soubor by měl být delší než 400 znaků. Ujistěte se, že vstupní soubor překračuje 400 znaků.
404 Model deklarovaný v definici hlasové syntézy nejde najít: {modelID}. Ujistěte se, že je {modelID} správné.
429 Překročil aktivní limit pro syntézu hlasu. Počkejte na dokončení některých požadavků. Server může spouštět a zařadit do fronty až 120 požadavků pro každý účet Azure. Počkejte a vyhněte se odesílání nových požadavků do dokončení některých požadavků.
Vše 429 Existuje příliš mnoho požadavků. Klient může pro každý účet Azure odeslat až 5 požadavků na server za sekundu. Snižte částku žádosti za sekundu.
Odstranit 400 Úkol syntézy hlasu se pořád používá. Je možné odstranit pouze žádosti, které jsou dokončené nebo neúspěšné.
GetByID 404 Zadanou entitu nelze nalézt. Ujistěte se, že je ID syntézy správné.

Oblasti a koncové body

Rozhraní API pro dlouhé zvukové rozhraní je k dispozici ve více oblastech s jedinečnými koncovými body.

Oblast Koncový bod
East US https://eastus.customvoice.api.speech.microsoft.com
Indie – střed https://centralindia.customvoice.api.speech.microsoft.com
Southeast Asia https://southeastasia.customvoice.api.speech.microsoft.com
Spojené království – jih https://uksouth.customvoice.api.speech.microsoft.com
West Europe https://westeurope.customvoice.api.speech.microsoft.com

Formáty zvukového výstupu

Podporujeme flexibilní formáty zvukového výstupu. Nastavením parametru můžete vygenerovat zvukové výstupy na jeden odstavec nebo zřetězit výstupy zvuku do jednoho výstupu concatenateResult . Rozhraní API pro dlouhé zvukové rozhraní podporuje následující formáty zvukového výstupu:

Poznámka

Výchozí formát zvuku je RIFF-16khz-16bitový-mono-PCM.

  • RIFF-8KHz-16bitový-mono-PCM
  • RIFF-16khz-16bitový-mono-PCM
  • RIFF-24khz-16bitový-mono-PCM
  • RIFF-48kHz-16bitový-mono-PCM
  • Audio-16khz-32kbitrate-mono-MP3
  • Audio-16khz-64kbitrate-mono-MP3
  • Audio-16khz-128kbitrate-mono-MP3
  • Audio-24khz-48kbitrate-mono-MP3
  • Audio-24khz-96kbitrate-mono-MP3
  • Audio-24khz-160kbitrate-mono-MP3