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.

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.
- Voor tekst zonder tekst zonder tekst wordt elke alinea gescheiden door enter/return te gebruiken. Zie voorbeeld van invoer in tekst zonder tekst.
- Voor SSML-tekst wordt elk SSML-onderdeel beschouwd als een alinea. Scheid SSML-onderdelen op verschillende alinea's. Zie voorbeeld van SSML-tekstinvoer.
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: ofeastuswestus). 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: ofeastuswestus). 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_identitiesen vervangt u door de van uw aangepaste<voice_id>idneurale 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