Uzun ses API 'SI

Uzun ses API 'SI, okuma için zaman uyumsuz sen, uzun biçimli metin sağlar (örneğin, ses kitapları, haber makaleleri ve belgeler). Bu API gerçek zamanlı olarak birleştirilmiş ses döndürmüyor. Bunun yerine, yanıtları yoklayın ve bu hizmetleri kullanılabilir hale getiren çıktıyı tüketin. Konuşma SDK 'Sı tarafından kullanılan metinden konuşmaya API 'sinin aksine, uzun ses API 'SI 10 dakikadan daha uzun bir birleştirilmiş ses oluşturabilir. Bu, yayımcıların ve ses içeriği platformlarının bir toplu iş içindeki ses kitapları gibi uzun ses içeriği oluşturmasını sağlar.

Uzun ses API 'sinin daha fazla avantajı:

  • Hizmet tarafından döndürülen sentezlenmiş konuşma en iyi sinir sesleri kullanır.
  • Ses uç noktası dağıtmaya gerek yoktur.

Not

Uzun ses API 'SI hem genel sinir seslerini hem de özel sinir seslerinidestekler.

İş akışı

Uzun ses API 'SI kullanılırken, genellikle birleştirme yapılacak bir metin dosyası ya da dosya, durum için yoklama gönderir ve durum başarı ' ı gösteriyorsa ses çıkışını indirebilirsiniz.

Bu diyagram, iş akışına üst düzey bir genel bakış sağlar.

Uzun ses API iş akışı diyagramı

Birleştirme için içerik hazırlama

Metin dosyanızı hazırlarken şunları yaptığınızdan emin olun:

Örnek kod

bu sayfanın geri kalanı Python 'a odaklanır, ancak şu programlama dilleri için GitHub uzun ses apı 'sine yönelik örnek kod kullanılabilir:

Python örneği

Bu bölüm, uzun ses API 'sinin temel kullanımını gösteren Python örnekleri içerir. Favori IDE ortamınızda veya düzenleyicide yeni bir Python projesi oluşturun. Sonra bu kod parçacığını adlı bir dosyaya kopyalayın long_audio_synthesis_client.py .

import json
import ntpath
import requests

Bu kitaplıklar, HTTP isteğini oluşturmak için kullanılır ve metin okuma uzun ses senku REST API.

Desteklenen seslerin listesini al

Desteklenen seslerin listesini almak için öğesine bir GET isteği gönderin https://<endpoint>/api/texttospeech/v3.0/longaudiosynthesis/voices .

Bu kod, belirli bir bölgede/uç noktada kullanabileceğiniz seslerin tam listesini alır.

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

Aşağıdaki değerleri değiştirin:

  • <your_key>Konuşma hizmeti abonelik anahtarınızla değiştirin. Bu bilgiler, Azure Portalkaynağınızın genel bakış sekmesinde bulunabilir.
  • <region>Konuşma kaynağınızın oluşturulduğu bölgeyle değiştirin (örneğin: eastus veya westus ). Bu bilgiler, Azure Portalkaynağınızın genel bakış sekmesinde bulunabilir.

Aşağıdakine benzer bir çıktı görürsünüz:

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

Properties. publicAvailable değeri true ise, Voice ortak bir sinir sestir. Aksi takdirde, özel bir sinir sestir.

Metni konuşmaya Dönüştür

Bir giriş metin dosyasını düz metin veya SSML metninde hazırlayın ve ardından aşağıdaki kodu ekleyin long_audio_synthesis_client.py :

Not

concatenateResult isteğe bağlı bir parametredir. Bu parametre ayarlanmamışsa, her paragraf için ses çıkışları oluşturulacaktır. Ayrıca, parametresini ekleyerek, audios 'ı tek bir çıkışa de birleştirebilirsiniz. outputFormat Ayrıca isteğe bağlıdır. Varsayılan olarak, ses çıkışı olarak ayarlanır riff-16khz-16bit-mono-pcm . Desteklenen ses çıkış biçimleri hakkında daha fazla bilgi için bkz. ses çıkış biçimleri.

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

Aşağıdaki değerleri değiştirin:

  • <your_key>Konuşma hizmeti abonelik anahtarınızla değiştirin. Bu bilgiler, Azure Portalkaynağınızın genel bakış sekmesinde bulunabilir.
  • <region>Konuşma kaynağınızın oluşturulduğu bölgeyle değiştirin (örneğin: eastus veya westus ). Bu bilgiler, Azure Portalkaynağınızın genel bakış sekmesinde bulunabilir.
  • <input_file_path>Metin okuma için hazırladığınız metin dosyasının yoluyla değiştirin.
  • <locale>İstenen çıkış yerel ayarıyla değiştirin. Daha fazla bilgi için bkz. dil desteği.

Önceki uç noktaya yapılan çağrılarınızın döndürdüğü sesden birini kullanın /voices .

  • Genel sinir Voice kullanıyorsanız, <voice_name> istenen çıkış sesiyle değiştirin.
  • Özel bir sinir sesi kullanmak için, voice_identities değişkeni aşağıdaki ile değiştirin ve <voice_id> id özel sinir sesinizin ile değiştirin.
voice_identities = [
    {
        'id': '<voice_id>'
    }
]

Aşağıdakine benzer bir çıktı görürsünüz:

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

Not

Birden fazla giriş dosyanız varsa, birden fazla istek göndermeniz ve göz önünde bulundurulması gereken sınırlamalar vardır.

  • İstemci her bir Azure abonelik hesabı için saniyede en fazla 5 istek gönderebilir. Sınırlamayı aşarsa 429 hata kodu (çok fazla istek) döndürülür. Bu sınırdan kaçınmak için gönderimler oranını azaltın.
  • Sunucu, her bir Azure abonelik hesabı için en fazla 120 istek sıraya alabilir. Sıra bu sınırlamayı aşarsa, sunucu 429 hata kodu döndürür (çok fazla istek). Ek istekler göndermeden önce tamamlanan istekleri bekle.

İstek durumunu almak için çıktıda URL 'YI kullanabilirsiniz.

Gönderilen istek hakkındaki ayrıntıları alın

Gönderilen bir senmu isteğinin durumunu almak için, önceki adımda döndürülen URL 'ye bir GET isteği gönderin.


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

Çıktı şöyle olacaktır:

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

statusÖzelliği NotStarted durum, Running , ve son olarak ile veya arasında değişir Succeeded Failed . Durum veya haline gelene kadar bu API 'YI bir döngüde yoklayabilmeniz gerekir Succeeded Failed .

Ses sonucunu indir

Birleştirme isteği başarılı olduktan sonra GET API 'sini çağırarak ses sonucunu indirebilirsiniz /files .

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

<request_id>Sonucu indirmek istediğiniz ISTEĞIN kimliğiyle değiştirin. Bu, önceki adımın yanıtında bulunabilir.

Çıktı şöyle olacaktır:

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

Bu örnek çıkış, iki dosya için bilgi içerir. Bu, "kind": "LongAudioSynthesisScript" giriş betiğinizin gönderildiği bir. Diğeri, "kind": "LongAudioSynthesisResult" Bu isteğin sonucudur.

Sonuç, giriş metninin bir kopyasıyla birlikte oluşturulan ses çıkış dosyalarını içeren zip olur.

Her iki dosya da özelliğindeki URL 'den indirilebilir links.contentUrl .

Tüm sensıs isteklerini al

Aşağıdaki kod gönderilen tüm istekleri listeler:

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

Çıkış şöyle olacaktır:

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

valuesÖzelliği sensıs isteklerinizi listeler. Liste, en fazla 100 sayfa boyutuna sahip sayfalandırılır. 100 ' den fazla istek varsa, "@nextLink" sayfalandırılmış listenin bir sonraki sayfasını almak için bir özellik sağlanır.

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

Ayrıca, URL parametresi sağlayarak sayfa boyutunu özelleştirebilir ve sayıyı atlayabilirsiniz skip top .

Önceki istekleri kaldır

Hizmet, her bir Azure aboneliği hesabı için en fazla 20.000 istek tutar. İstek miktarınız bu sınırlamayı aşarsa, yeni istekler eklemeden önce önceki istekleri kaldırın. Mevcut istekleri kaldırsanız bir hata bildirimi alırsınız.

Aşağıdaki kodda belirli bir sentez isteğinin nasıl kaldır olduğu gösterilir.

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)

İstek başarıyla kaldırılırsa yanıt durumu kodu HTTP 204 (İçerik Yok) olur.

response.status_code: 204

Not

Durumu veya durumu olan NotStarted istekler Running kaldırılamaz veya silinemez.

Tamamlandı, long_audio_synthesis_client.py üzerinde GitHub.

HTTP durum kodu

Aşağıdaki tabloda, veri tablosundaki HTTP yanıt kodları ve iletileri REST API.

API HTTP durum kodu Açıklama Çözüm
Oluştur 400 Ses sentezi bu bölgede etkin değildir. Konuşma abonelik anahtarını desteklenen bir bölgeyle değiştirme.
400 Bu bölge için yalnızca Standart konuşma aboneliği geçerlidir. Konuşma abonelik anahtarını "Standart" fiyatlandırma katmanı olarak değiştirme.
400 Azure hesabı için 20.000 istek sınırını aştınız. Yeni istekler göndermeden önce bazı istekleri kaldırın. Sunucu her Azure hesabı için en fazla 20.000 istek tutacak. Yeni istekler göndermeden önce bazı istekleri silin.
400 Bu model, {modelID} ses sentezinde kullanılamaz. {modelID} öğesinin durumunun doğru olduğundan emin olun.
400 İsteğin bölgesi modelin bölgesiyle eşleşemiyor: {modelID}. {modelID} öğesinin bölgesiyle isteğin bölgesiyle eşleşi olduğundan emin olun.
400 Ses sentezi yalnızca UTF-8 kodlaması içinde yer alan metin dosyasını bayt sırası işaretçisi ile destekler. Giriş dosyalarının, bayt sırası işaretçisi ile UTF-8 kodlaması içinde olduğundan emin olun.
400 Ses sentezi isteğinde yalnızca geçerli SSML girişlerine izin verilir. Giriş SSML ifadeleri doğru olduğundan emin olun.
400 {voiceName} ses adı giriş dosyasında bulunamadı. Giriş SSML ses adı model kimliğiyle hizalanmamıştır.
400 Giriş dosyasındaki paragraf sayısı 10.000'den az olabilir. Dosyada paragraf sayısının 10.000'den az olduğundan emin olun.
400 Giriş dosyası 400 karakterden fazla olmalıdır. Giriş dosyanız 400 karakterden uzun olmalıdır.
404 Ses sentezi tanımında bildirilen model bulunamadı: {modelID}. {modelID} öğesinin doğru olduğundan emin olun.
429 Etkin ses sentezi sınırını aş. Bazı istekler bitene kadar bekleyin. Sunucunun her Azure hesabı için en fazla 120 isteği çalıştırmasına ve kuyruğa adede kadar kuyruğa girmesine izin verilir. Bazı istekler tamamlanana kadar bekleyin ve yeni istekler göndermeden kaçının.
Tümü 429 Çok fazla istek var. İstemcinin her Azure hesabı için sunucuya saniye başına en fazla 5 istek göndermesine izin verilir. Saniye başına istek miktarını azaltma.
Sil 400 Ses sentezi görevi hala kullanılır. Yalnızca Tamamlandı veya Başarısız olan istekleri silebilirsiniz.
GetByID 404 Belirtilen varlık bulunamıyor. Sentez kimliğinin doğru olduğundan emin olun.

Bölgeler ve uç noktalar

Uzun ses API'si benzersiz uç noktalara sahip birden çok bölgede kullanılabilir.

Bölge Uç Nokta
Doğu ABD https://eastus.customvoice.api.speech.microsoft.com
Hindistan Orta https://centralindia.customvoice.api.speech.microsoft.com
Güneydoğu Asya https://southeastasia.customvoice.api.speech.microsoft.com
Güney Birleşik Krallık https://uksouth.customvoice.api.speech.microsoft.com
West Europe https://westeurope.customvoice.api.speech.microsoft.com

Ses çıkış biçimleri

Esnek ses çıkış biçimlerini destekliyoruz. Parametresini ayarerek her paragraf için ses çıkışı oluşturabilirsiniz veya ses çıkışlarını tek bir çıkışta bir arada concatenateResult kullanabilirsiniz. Uzun Ses API'si aşağıdaki ses çıkış biçimlerini destekler:

Not

Varsayılan ses biçimi riff-16khz-16bit-mono-pcm'dir.

  • riff-8khz-16bit-mono-pcm
  • riff-16khz-16bit-mono-pcm
  • riff-24khz-16bit-mono-pcm
  • riff-48khz-16bit-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