Api voor lange audio

De Long Audio-API biedt asynchrone synthese van tekst-naar-spraak in lange vorm (bijvoorbeeld audioboeken, nieuwsartikelen en documenten). Deze API retourneert geen gesynthetiseerde audio in realtime. In plaats daarvan pollt u naar de antwoorden en verbruikt u de uitvoer(en) wanneer de service ze beschikbaar maakt. In tegenstelling tot de Tekst-naar-spraak-API die wordt gebruikt door de Speech SDK, kan de Api voor lange audio gesynthetiseerde audio langer dan 10 minuten maken. Hierdoor is het ideaal voor uitgevers en platforms voor audio-inhoud om lange audio-inhoud zoals audioboeken in een batch te maken.

Meer voordelen van de Api voor lange audio:

  • Gesynthetiseerde spraak die door de service wordt geretourneerd, maakt gebruik van de beste neurale stemmen.
  • U hoeft geen spraak-eindpunt te implementeren.

Notitie

De Long Audio-API ondersteunt zowel openbare neurale stemmen als aangepaste neurale stemmen.

Werkstroom

Wanneer u de API voor lange audio gebruikt, verstuurt u doorgaans een tekstbestand of bestanden die moeten worden gesynthetiseerd, peilt u de status en downloadt u de audio-uitvoer wanneer de status aangeeft dat de aanvraag is geslaagd.

Dit diagram biedt een overzicht op hoog niveau van de werkstroom.

Werkstroomdiagram voor lange audio-API

Inhoud voorbereiden voor synthese

Zorg er bij het voorbereiden van het tekstbestand voor dat het:

  • Is tekst zonder tekst (.txt) of SSML-tekst (.txt).
  • Is gecodeerd als UTF-8 met Byte Order Mark (BOM).
  • Is één bestand, geen zip-bestand.
  • Bevat meer dan 400 tekens voor tekst zonder tekst of 400 factureerbare tekens voor SSML-tekst en minder dan 10.000 alinea's.

Voorbeeldcode

De rest van deze pagina is gericht op Python, maar voorbeeldcode voor de API voor lange audio is beschikbaar op GitHub voor de volgende programmeertalen:

Python-voorbeeld

Deze sectie bevat Python-voorbeelden die het basisgebruik van de API voor lange audio laten zien. Maak een nieuw Python-project met uw favoriete IDE of editor. Kopieer dit codefragment vervolgens naar een bestand met de naam long_audio_synthesis_client.py .

import json
import ntpath
import requests

Deze bibliotheken worden gebruikt voor het maken van de HTTP-aanvraag en het aanroepen van de lange tekst-naar-spraak-audiosynthese REST API.

Een lijst met ondersteunde stemmen op halen

Verzend een GET-aanvraag naar om een lijst met ondersteunde stemmen op te https://<endpoint>/api/texttospeech/v3.0/longaudiosynthesis/voices halen.

Deze code haalt een volledige lijst met stemmen op die u op een specifieke regio/eindpunt kunt gebruiken.

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()

Vervang de volgende waarden:

  • Vervang <your_key> door de abonnementssleutel van uw Speech-service. Deze informatie is beschikbaar op het tabblad Overzicht voor uw resource in Azure Portal.
  • Vervang <region> door de regio waar uw Spraak-resource is gemaakt (bijvoorbeeld: of eastus westus ). Deze informatie is beschikbaar op het tabblad Overzicht voor uw resource in Azure Portal.

U ziet uitvoer die er als de volgende uitziet:

{
  "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
      }
    }
  ]
}

Als properties.publicAvailable waar is, is de stem een openbare neurale stem. Anders is het een aangepaste neurale stem.

Tekst naar spraak converteren

Bereid een invoertekstbestand voor in tekst zonder tekst of SSML-tekst en voeg vervolgens de volgende code toe aan long_audio_synthesis_client.py :

Notitie

concatenateResult is een optionele parameter. Als deze parameter niet is ingesteld, wordt de audio-uitvoer gegenereerd per alinea. U kunt de audio's ook samenvoegen tot één uitvoer door de parameter op te geven. outputFormat is ook optioneel. De audio-uitvoer is standaard ingesteld op riff-16khz-16bit-mono-pcm . Zie Audio-uitvoerindelingen voor meer informatie over ondersteunde audio-uitvoerindelingen.

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()

Vervang de volgende waarden:

  • Vervang <your_key> door de abonnementssleutel van uw Speech-service. Deze informatie is beschikbaar op het tabblad Overzicht voor uw resource in Azure Portal.
  • Vervang <region> door de regio waar uw Spraak-resource is gemaakt (bijvoorbeeld: of eastus westus ). Deze informatie is beschikbaar op het tabblad Overzicht voor uw resource in Azure Portal.
  • Vervang <input_file_path> door het pad naar het tekstbestand dat u hebt voorbereid voor tekst-naar-spraak.
  • Vervang <locale> door de gewenste uitvoer locale. Zie taalondersteuning voor meer informatie.

Gebruik een van de stemmen die door uw vorige aanroep naar het /voices eindpunt zijn geretourneerd.

  • Als u openbare neurale spraak gebruikt, vervangt u <voice_name> door de gewenste uitvoerstem.
  • Als u een aangepaste neurale stem wilt gebruiken, vervangt u de variabele door het volgende voice_identities en vervangt u door de van uw aangepaste <voice_id> id neurale stem.
voice_identities = [
    {
        'id': '<voice_id>'
    }
]

U ziet uitvoer die er als de volgende uitziet:

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

Notitie

Als u meer dan één invoerbestand hebt, moet u meerdere aanvragen indienen en moet u rekening houden met beperkingen.

  • De client kan maximaal 5 aanvragen per seconde indienen voor elk Azure-abonnementsaccount. Als deze de beperking overschrijdt, wordt er een 429-foutcode (te veel aanvragen) geretourneerd. Verlaag het aantal inzendingen om deze limiet te vermijden.
  • De server kan maximaal 120 aanvragen voor elk Azure-abonnementsaccount in de wachtrij zetten. Als de wachtrij deze beperking overschrijdt, retourneert de server 429-foutcode (te veel aanvragen). Wacht op voltooide aanvragen voordat u aanvullende aanvragen indient.

U kunt de URL in de uitvoer gebruiken om de aanvraagstatus op te halen.

Details over een ingediende aanvraag op halen

Als u de status van een ingediende syntheseaanvraag wilt op halen, verzendt u een GET-aanvraag naar de URL die in de vorige stap is geretourneerd.


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()

De uitvoer ziet er als volgende uit:

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"
}

De status eigenschap verandert van status in en ten slotte in of NotStarted Running Succeeded Failed . U kunt deze API in een lus peilen totdat de status Succeeded of Failed wordt.

Audioresultaat downloaden

Zodra een syntheseaanvraag is geslaagd, kunt u het audioresultaat downloaden door de GET-API aan te /files roepen.

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()

Vervang <request_id> door de id van de aanvraag die u wilt downloaden van het resultaat. Deze vindt u in het antwoord van de vorige stap.

De uitvoer ziet er als volgende uit:

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"
      }
    }
  ]
}

Deze voorbeelduitvoer bevat informatie voor twee bestanden. Het script met "kind": "LongAudioSynthesisScript" is het invoerscript dat is verzonden. De andere met "kind": "LongAudioSynthesisResult" is het resultaat van deze aanvraag.

Het resultaat is zip die de gegenereerde audio-uitvoerbestanden bevat, samen met een kopie van de invoertekst.

Beide bestanden kunnen worden gedownload van de URL in hun links.contentUrl eigenschap.

Alle syntheseaanvragen opvragen

Met de volgende code worden alle ingediende aanvragen vermeld:

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()

De uitvoer ziet er als de volgende uit:

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"
    }
  ]
}

De values eigenschap vermeldt uw syntheseaanvragen. De lijst is ge pagineerd, met een maximale paginagrootte van 100. Als er meer dan 100 aanvragen zijn, wordt er een eigenschap opgegeven om de volgende pagina van de ge pagineerde "@nextLink" lijst op te halen.

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

U kunt ook de paginagrootte aanpassen en het nummer overslaan door de skip top URL-parameter en op te geven.

Vorige aanvragen verwijderen

De service houdt maximaal 20.000 aanvragen bij voor elk Azure-abonnementsaccount. Als het aantal aanvragen deze beperking overschrijdt, verwijdert u eerdere aanvragen voordat u nieuwe aanvragen maakt. Als u bestaande aanvragen niet verwijdert, ontvangt u een foutmelding.

De volgende code laat zien hoe u een specifieke syntheseaanvraag verwijdert.

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)

Als de aanvraag is verwijderd, is de antwoordstatuscode HTTP 204 (geen inhoud).

response.status_code: 204

Notitie

Aanvragen met de status of NotStarted kunnen niet worden verwijderd of Running verwijderd.

De long_audio_synthesis_client.py voltooide is beschikbaar op GitHub.

HTTP-statuscode

In de volgende tabel worden de HTTP-antwoordcodes en -berichten van de REST API.

API HTTP-statuscode Beschrijving Oplossing
Maken 400 De spraaksynthese is niet ingeschakeld in deze regio. Wijzig de sleutel van het spraakabonnement met een ondersteunde regio.
400 Alleen het Standard-spraakabonnement voor deze regio is geldig. Wijzig de sleutel van het spraakabonnement in de prijscategorie Standard.
400 De limiet van 20.000 aanvragen voor het Azure-account overschrijden. Verwijder enkele aanvragen voordat u nieuwe indient. De server houdt maximaal 20.000 aanvragen bij voor elk Azure-account. Verwijder enkele aanvragen voordat u nieuwe indient.
400 Dit model kan niet worden gebruikt in de spraaksynthese: {modelID}. Zorg ervoor dat de status van {modelID} juist is.
400 De regio voor de aanvraag komt niet overeen met de regio voor het model: {modelID}. Zorg ervoor dat de regio van {modelID} overeenkomen met de regio van de aanvraag.
400 De spraaksynthese ondersteunt alleen het tekstbestand in de UTF-8-codering met de byte-ordermarkering. Zorg ervoor dat de invoerbestanden UTF-8-codering hebben met de byte-ordermarkering.
400 Alleen geldige SSML-invoer is toegestaan in de aanvraag voor spraaksynthese. Zorg ervoor dat de invoer-SSML-expressies juist zijn.
400 De spraaknaam {voiceName} is niet gevonden in het invoerbestand. De SSML-spraaknaam voor invoer wordt niet uitgelijnd met de model-id.
400 Het aantal alinea's in het invoerbestand moet kleiner zijn dan 10.000. Zorg ervoor dat het aantal alinea's in het bestand kleiner is dan 10.000.
400 Het invoerbestand moet meer dan 400 tekens bevatten. Zorg ervoor dat uw invoerbestand langer is dan 400 tekens.
404 Het model dat is gedeclareerd in de definitie van spraaksynthese kan niet worden gevonden: {modelID}. Zorg ervoor dat de {modelID} juist is.
429 De limiet voor actieve spraaksynthese overschrijden. Wacht totdat sommige aanvragen zijn voltooien. De server mag maximaal 120 aanvragen voor elk Azure-account uitvoeren en in de wachtrij zetten. Wacht en vermijd het indienen van nieuwe aanvragen totdat sommige aanvragen zijn voltooid.
Alles 429 Er zijn te veel aanvragen. De client mag maximaal vijf aanvragen per seconde verzenden naar de server voor elk Azure-account. Verminder het aantal aanvragen per seconde.
Verwijderen 400 De spraaksynthesetaak wordt nog steeds gebruikt. U kunt alleen aanvragen verwijderen die Voltooid of Mislukt zijn.
GetByID 404 De opgegeven entiteit kan niet worden gevonden. Zorg ervoor dat de synthese-id juist is.

Regio's en eindpunten

De Api voor lange audio is beschikbaar in meerdere regio's met unieke eindpunten.

Regio Eindpunt
VS - oost https://eastus.customvoice.api.speech.microsoft.com
India - centraal https://centralindia.customvoice.api.speech.microsoft.com
Azië - zuidoost https://southeastasia.customvoice.api.speech.microsoft.com
Verenigd Koninkrijk Zuid https://uksouth.customvoice.api.speech.microsoft.com
Europa -west https://westeurope.customvoice.api.speech.microsoft.com

Audio-uitvoerindelingen

We ondersteunen flexibele audio-uitvoerindelingen. U kunt audio-uitvoer per alinea genereren of de audio-uitvoer samenvoegen tot één uitvoer door de parameter in te concatenateResult stellen. De volgende audio-uitvoerindelingen worden ondersteund door de Api voor lange audio:

Notitie

De standaard audio-indeling is :16 khz-16-bit-mono-pcm.

  • nvf-8khz-16bit-mono-pcm
  • nvf-16 khz-16bit-mono-pcm
  • nvf-24 khz-16bit-mono-pcm
  • nvf-48 khz-16bit-mono-pcm
  • audio-16khz-32kbitrate-mono-mp3
  • audio-16khz-64kbitrate-mono-mp3
  • audio-16khz-128kbitrate-mono-mp3
  • audio-24khz-48kbitrate-mono-mp3
  • audio-24 khz-96kbitrate-mono-mp3
  • audio-24 khz-160kbitrate-mono-mp3