REST API преобразования текста в речь

Служба "Речь" позволяет преобразовывать текст в синтезированную речь и получать список поддерживаемых голосов для региона с помощью интерфейсов REST API. В этой статье вы узнаете о параметрах авторизации, параметрах запросов, структуре запроса и интерпретации ответа.

Совет

Варианты использования текста для REST API речи ограничены. Используйте его только в тех случаях, когда нельзя использовать пакет SDK Речи. Например, с помощью пакета SDK службы "Речь" можно подписаться на события для получения дополнительных сведений о тексте для обработки речи и результатов.

Текст для речи REST API поддерживает нейронный текст для речи голоса во многих языковых стандартах. Каждая доступная конечная точка связана с регионом. Требуется ключ ресурса службы "Речь" для конечной точки или региона, который планируется использовать. Далее приведены ссылки для получения дополнительных сведений:

Важно!

Затраты зависят от предварительно созданных нейронных голосов (называемых нейронными на странице цен) и пользовательских нейронных голосов (которые называются настраиваемыми нейронными на странице цен). Дополнительные сведения см. в разделе Цены на службы "Речь".

Прежде чем использовать текст для распознавания речи REST API, необходимо выполнить обмен маркерами в рамках проверки подлинности для доступа к службе. Дополнительные сведения см. в разделе Authenticate to the Speech API (Аутентификация в API речи).

Получение списка голосов

Вы можете использовать конечную точку tts.speech.microsoft.com/cognitiveservices/voices/list для получения полного списка голосов для определенного региона или конечной точки. Префикс конечной точки списка голосов с регионом, чтобы получить список голосов для этого региона. Например, чтобы получить список голосов для westus региона, используйте конечную точку https://westus.tts.speech.microsoft.com/cognitiveservices/voices/list . Список всех поддерживаемых регионов см. в документации по регионам.

Примечание.

Голоса и стили в предварительной версии доступны только в трех регионах службы: восточная часть США, Западная Европа и Юго-Восточная Азия.

Заголовки запросов

В этой таблице перечислены обязательные и необязательные заголовки для текстовых запросов речи:

Верхний колонтитул Description Обязательно или необязательно
Ocp-Apim-Subscription-Key Ключ ресурса службы "Речь". Обязательный, если не предоставлен заголовок Authorization.
Authorization Маркеру авторизации предшествует слово Bearer. Дополнительные сведения см. в разделе Authenticate to the Speech API (Аутентификация в API речи). Обязательный, если не предоставлен заголовок Ocp-Apim-Subscription-Key.

Текст запроса

Для запросов GET к этой конечной точке текст запроса не требуется.

Образец запроса

Для этого запроса требуется только заголовок авторизации.

GET /cognitiveservices/voices/list HTTP/1.1

Host: westus.tts.speech.microsoft.com
Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY

Ниже приведен пример команды curl:

curl --location --request GET 'https://YOUR_RESOURCE_REGION.tts.speech.microsoft.com/cognitiveservices/voices/list' \
--header 'Ocp-Apim-Subscription-Key: YOUR_RESOURCE_KEY'

Пример ответа

Вы должны получить ответ с текстом JSON, который включает все поддерживаемые языковые стандарты, голоса, пол, стили и другие сведения. Свойство WordsPerMinute для каждого голоса можно использовать для оценки длины выходной речи. В этом примере JSON показаны частичные результаты для иллюстрации структуры ответа:

[  
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
        "DisplayName": "Jenny",
        "LocalName": "Jenny",
        "ShortName": "en-US-JennyNeural",
        "Gender": "Female",
        "Locale": "en-US",
        "LocaleName": "English (United States)",
        "StyleList": [
          "assistant",
          "chat",
          "customerservice",
          "newscast",
          "angry",
          "cheerful",
          "sad",
          "excited",
          "friendly",
          "terrified",
          "shouting",
          "unfriendly",
          "whispering",
          "hopeful"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "ExtendedPropertyMap": {
          "IsHighQuality48K": "True"
        },
        "WordsPerMinute": "152"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (en-US, JennyMultilingualNeural)",
        "DisplayName": "Jenny Multilingual",
        "LocalName": "Jenny Multilingual",
        "ShortName": "en-US-JennyMultilingualNeural",
        "Gender": "Female",
        "Locale": "en-US",
        "LocaleName": "English (United States)",
        "SecondaryLocaleList": [
          "de-DE",
          "en-AU",
          "en-CA",
          "en-GB",
          "es-ES",
          "es-MX",
          "fr-CA",
          "fr-FR",
          "it-IT",
          "ja-JP",
          "ko-KR",
          "pt-BR",
          "zh-CN"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "WordsPerMinute": "190"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (ga-IE, OrlaNeural)",
        "DisplayName": "Orla",
        "LocalName": "Orla",
        "ShortName": "ga-IE-OrlaNeural",
        "Gender": "Female",
        "Locale": "ga-IE",
        "LocaleName": "Irish (Ireland)",
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "WordsPerMinute": "139"
    },
    // Redacted for brevity
    {
        "Name": "Microsoft Server Speech Text to Speech Voice (zh-CN, YunxiNeural)",
        "DisplayName": "Yunxi",
        "LocalName": "云希",
        "ShortName": "zh-CN-YunxiNeural",
        "Gender": "Male",
        "Locale": "zh-CN",
        "LocaleName": "Chinese (Mandarin, Simplified)",
        "StyleList": [
          "narration-relaxed",
          "embarrassed",
          "fearful",
          "cheerful",
          "disgruntled",
          "serious",
          "angry",
          "sad",
          "depressed",
          "chat",
          "assistant",
          "newscast"
        ],
        "SampleRateHertz": "24000",
        "VoiceType": "Neural",
        "Status": "GA",
        "RolePlayList": [
          "Narrator",
          "YoungAdultMale",
          "Boy"
        ],
        "WordsPerMinute": "293"
    },
    // Redacted for brevity
]

Коды состояния HTTP

Код состояния HTTP для каждого ответа указывает на успешное выполнение или возникновение распространенных ошибок.

Код состояния HTTP Description Возможная причина
200 OK Запрос выполнен успешно.
400 Недопустимый запрос Обязательный параметр отсутствует, пустой или его значение равно нулю. Или переданное либо обязательному, либо необязательному параметру значение является недопустимым. Часто это связано с тем, что заголовок слишком длинный.
401 Не авторизовано Запрос не авторизован. Убедитесь, что ключ ресурса или маркер действителен и в правильном регионе.
429 Слишком много запросов Превышена квота или скорость запросов, разрешенных для ресурса.
502 Недопустимый шлюз Существует проблема с сетью или на стороне сервера. Это состояние может также указывать на недопустимые заголовки.

Преобразование текста в речь

Конечная точка cognitiveservices/v1 позволяет преобразовать текст в речь с помощью Языка разметки синтеза речи (SSML).

Регионы и конечные точки

Эти регионы поддерживаются для преобразования текста в речь через REST API. Обязательно выберите конечную точку, соответствующую региону ресурса службы "Речь".

Предварительно созданные нейронные голоса

Используйте эту таблицу, чтобы определить доступность нейронных голосов по регионам и конечным точкам.

Регион Конечная точка
Восточная Австралия https://australiaeast.tts.speech.microsoft.com/cognitiveservices/v1
Южная Бразилия https://brazilsouth.tts.speech.microsoft.com/cognitiveservices/v1
Центральная Канада https://canadacentral.tts.speech.microsoft.com/cognitiveservices/v1
Центральная часть США https://centralus.tts.speech.microsoft.com/cognitiveservices/v1
Восточная Азия https://eastasia.tts.speech.microsoft.com/cognitiveservices/v1
Восточная часть США https://eastus.tts.speech.microsoft.com/cognitiveservices/v1
Восточная часть США 2 https://eastus2.tts.speech.microsoft.com/cognitiveservices/v1
Центральная Франция https://francecentral.tts.speech.microsoft.com/cognitiveservices/v1
Центрально-Западная Германия https://germanywestcentral.tts.speech.microsoft.com/cognitiveservices/v1
Центральная Индия https://centralindia.tts.speech.microsoft.com/cognitiveservices/v1
Восточная Япония https://japaneast.tts.speech.microsoft.com/cognitiveservices/v1
Западная Япония https://japanwest.tts.speech.microsoft.com/cognitiveservices/v1
Западная Индия Jio https://jioindiawest.tts.speech.microsoft.com/cognitiveservices/v1
Республика Корея, центральный регион https://koreacentral.tts.speech.microsoft.com/cognitiveservices/v1
Центрально-северная часть США https://northcentralus.tts.speech.microsoft.com/cognitiveservices/v1
Северная Европа https://northeurope.tts.speech.microsoft.com/cognitiveservices/v1
Восточная Норвегия; https://norwayeast.tts.speech.microsoft.com/cognitiveservices/v1
Центрально-южная часть США https://southcentralus.tts.speech.microsoft.com/cognitiveservices/v1
Юго-Восточная Азия https://southeastasia.tts.speech.microsoft.com/cognitiveservices/v1
Центральная Швеция https://swedencentral.tts.speech.microsoft.com/cognitiveservices/v1
Северная Швейцария https://switzerlandnorth.tts.speech.microsoft.com/cognitiveservices/v1
Западная Швейцария https://switzerlandwest.tts.speech.microsoft.com/cognitiveservices/v1
Северная часть ОАЭ; https://uaenorth.tts.speech.microsoft.com/cognitiveservices/v1
US Gov (Аризона) https://usgovarizona.tts.speech.azure.us/cognitiveservices/v1
US Gov (Вирджиния) https://usgovvirginia.tts.speech.azure.us/cognitiveservices/v1
Южная часть Соединенного Королевства https://uksouth.tts.speech.microsoft.com/cognitiveservices/v1
центрально-западная часть США https://westcentralus.tts.speech.microsoft.com/cognitiveservices/v1
Западная Европа https://westeurope.tts.speech.microsoft.com/cognitiveservices/v1
Западная часть США https://westus.tts.speech.microsoft.com/cognitiveservices/v1
западная часть США 2 https://westus2.tts.speech.microsoft.com/cognitiveservices/v1
Западная часть США — 3 https://westus3.tts.speech.microsoft.com/cognitiveservices/v1

Совет

Голоса в предварительной версии доступны только в следующих трех регионах: Восточная часть США, Западная Европа и Юго-Восточная Азия.

Пользовательские нейронные голоса

Если вы создали пользовательский нейронный голос, используйте созданную для него конечную точку. Также можно использовать следующие конечные точки. Замените {deploymentId} на идентификатор развертывания для модели нейронных голосов.

Регион Обучение Развертывание Конечная точка
Восточная Австралия Да Да https://australiaeast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Южная Бразилия No Да https://brazilsouth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центральная Канада No Да https://canadacentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центральная часть США No Да https://centralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Восточная Азия No Да https://eastasia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Восточная часть США Да Да https://eastus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Восточная часть США 2 Да Да https://eastus2.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центральная Франция No Да https://francecentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центрально-Западная Германия No Да https://germanywestcentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центральная Индия Да Да https://centralindia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Восточная Япония Да Да https://japaneast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная Япония No Да https://japanwest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная Индия Jio No Да https://jioindiawest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Республика Корея, центральный регион Да Да https://koreacentral.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центрально-северная часть США No Да https://northcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Северная Европа Да Да https://northeurope.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Восточная Норвегия; No Да https://norwayeast.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Северная часть ЮАР No Да https://southafricanorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центрально-южная часть США Да Да https://southcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Юго-Восточная Азия Да Да https://southeastasia.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Северная Швейцария No Да https://switzerlandnorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная Швейцария No Да https://switzerlandwest.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Северная часть ОАЭ; No Да https://uaenorth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Южная часть Соединенного Королевства Да Да https://uksouth.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Центрально-западная часть США No Да https://westcentralus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная Европа Да Да https://westeurope.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная часть США Да Да https://westus.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная часть США 2 Да Да https://westus2.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}
Западная часть США 3 No Да https://westus3.voice.speech.microsoft.com/cognitiveservices/v1?deploymentId={deploymentId}

Примечание.

Предыдущие регионы доступны для размещения модели нейронной речи и синтеза в режиме реального времени. Обучение пользовательских нейронных голосов доступно только в некоторых регионах. Однако пользователи могут легко скопировать модель нейронной речи из этих регионов в другие регионы в приведенном выше списке.

API длинного звука

API длинных аудиоматериалов доступен в нескольких регионах с уникальными конечными точками.

Регион Конечная точка
Восточная Австралия https://australiaeast.customvoice.api.speech.microsoft.com
Восточная часть США https://eastus.customvoice.api.speech.microsoft.com
Центральная Индия https://centralindia.customvoice.api.speech.microsoft.com
Центрально-южная часть США https://southcentralus.customvoice.api.speech.microsoft.com
Юго-Восточная Азия https://southeastasia.customvoice.api.speech.microsoft.com
южная часть Соединенного Королевства https://uksouth.customvoice.api.speech.microsoft.com
Западная Европа https://westeurope.customvoice.api.speech.microsoft.com

Заголовки запросов

В этой таблице перечислены обязательные и необязательные заголовки для текстовых запросов речи:

Верхний колонтитул Description Обязательно или необязательно
Authorization Маркеру авторизации предшествует слово Bearer. Дополнительные сведения см. в разделе Authenticate to the Speech API (Аутентификация в API речи). Обязательное поле
Content-Type Указывает тип контента для предоставленного текста. Допустимое значение: application/ssml+xml. Обязательное поле
X-Microsoft-OutputFormat Указывает формат аудиосигнала. Полный список допустимых значений см. в разделе Аудиосигналы. Обязательное поле
User-Agent Имя приложения. Указанное значение должно содержать менее 255 символов. Обязательное поле

Текст запроса

Если применяется пользовательская нейронная модель речи, основной текст запроса можно отправить в формате обычного текста (ASCII или UTF-8). В противном случае текст каждого запроса POST отправляется как SSML. SSML позволяет выбрать голос и язык синтезируемой речи, возвращаемой функцией преобразования текста в речь. Полный список поддерживаемых голосов см. в разделе Поддержка языков и голосов в службе "Речь".

Образец запроса

В этом HTTP-запросе используется SSML для указания голоса и языка. Если длина текста слишком велика и длительность полученной аудиодорожки превышает 10 минут, она усекается до 10 минут. Иными словами, длина аудиодорожки не может превышать 10 минут.

POST /cognitiveservices/v1 HTTP/1.1

X-Microsoft-OutputFormat: riff-24khz-16bit-mono-pcm
Content-Type: application/ssml+xml
Host: westus.tts.speech.microsoft.com
Content-Length: <Length>
Authorization: Bearer [Base64 access_token]
User-Agent: <Your application name>

<speak version='1.0' xml:lang='en-US'><voice xml:lang='en-US' xml:gender='Male'
    name='en-US-ChristopherNeural'>
        I'm excited to try text to speech!
</voice></speak>

* Для Content-Length следует использовать собственную длину содержимого. В большинстве случаев это значение вычисляется автоматически.

Коды состояния HTTP

Код состояния HTTP для каждого ответа указывает на успешное выполнение или возникновение распространенных ошибок.

Код состояния HTTP Description Возможная причина
200 OK Запрос выполнен успешно. Текст ответа представляет собой аудиофайл.
400 Недопустимый запрос Обязательный параметр отсутствует, пустой или его значение равно нулю. Или переданное либо обязательному, либо необязательному параметру значение является недопустимым. Часто это связано с тем, что заголовок слишком длинный.
401 Не авторизовано Запрос не авторизован. Убедитесь, что ключ ресурса службы "Речь" или токен действителен и в правильном регионе.
415 Неподдерживаемый тип мультимедиа Возможно, указано неверное значение Content-Type. Для Content-Type необходимо задать application/ssml+xml.
429 Слишком много запросов Превышена квота или скорость запросов, разрешенных для ресурса.
502 Недопустимый шлюз Существует проблема с сетью или на стороне сервера. Это состояние может также указывать на недопустимые заголовки.

Если состояние HTTP — 200 OK, текст ответа содержит звуковой файл в затребованном формате. Этот файл можно воспроизводить при передаче, сохранении в буфер или сохранении в файл.

Аудиосигналы

Поддерживаемые форматы потоковой передачи и непотоковых звуковых форматов отправляются в каждом запросе в качестве заголовка X-Microsoft-OutputFormat . Каждый формат включает значение скорости и типа кодирования. Служба "Речь" поддерживает выходные аудиоданные с частотой дискретизации 48, 24, 16 и 8 кГц. Каждая предварительно созданная нейронная голосовая модель доступна в 24 кбГц и высокой точности 48kГц.

amr-wb-16000hz
audio-16khz-16bit-32kbps-mono-opus
audio-16khz-32kbitrate-mono-mp3
audio-16khz-64kbitrate-mono-mp3
audio-16khz-128kbitrate-mono-mp3
audio-24khz-16bit-24kbps-mono-opus
audio-24khz-16bit-48kbps-mono-opus
audio-24khz-48kbitrate-mono-mp3
audio-24khz-96kbitrate-mono-mp3
audio-24khz-160kbitrate-mono-mp3
audio-48khz-96kbitrate-mono-mp3
audio-48khz-192kbitrate-mono-mp3
ogg-16khz-16bit-mono-opus
ogg-24khz-16bit-mono-opus
ogg-48khz-16bit-mono-opus
raw-8khz-8bit-mono-alaw
raw-8khz-8bit-mono-mulaw
raw-8khz-16bit-mono-pcm
raw-16khz-16bit-mono-pcm
raw-16khz-16bit-mono-truesilk
raw-22050hz-16bit-mono-pcm
raw-24khz-16bit-mono-pcm
raw-24khz-16bit-mono-truesilk
raw-44100hz-16bit-mono-pcm
raw-48khz-16bit-mono-pcm
webm-16khz-16bit-mono-opus
webm-24khz-16bit-24kbps-mono-opus
webm-24khz-16bit-mono-opus

Примечание.

Если выбрать формат выходных данных 48kHz, модель голосовой связи с высокой точностью с 48kГц будет вызываться соответствующим образом. Частоты выборки, отличные от 24 кГц и 48kГц, можно получить путем повышения или уменьшения скорости при синтезе, например, 44,1 кГц сокращается с 48 кГц.

Если у выбранного голоса и формата вывода будет разная скорость передачи звука, то при необходимости звук будет обработан повторно. Формат ogg-24khz-16bit-mono-opus можно декодировать с помощью кодека Opus.

Проверка подлинности

Для каждого запроса требуется заголовок авторизации. В этой таблице показано, какие заголовки поддерживаются для каждого компонента.

Поддерживаемые заголовки авторизации Преобразование речи в текст Преобразование текста в речь
Ocp-Apim-Subscription-Key Да Да
Authorization: Bearer Да Да

Если вы используете Ocp-Apim-Subscription-Key заголовок, вам потребуется предоставить ключ ресурса. Например:

'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'

При использовании заголовка Authorization: Bearer необходимо выполнять запрос к конечной точке issueToken. В этом запросе вы обменяете ключом ресурса для маркера доступа, допустимого в течение 10 минут.

Как получить маркер доступа

Чтобы получить маркер доступа, необходимо запросить issueToken конечную точку с помощью Ocp-Apim-Subscription-Key ключа ресурса.

Конечная точка issueToken имеет следующий формат:

https://<REGION_IDENTIFIER>.api.cognitive.microsoft.com/sts/v1.0/issueToken

Замените <REGION_IDENTIFIER> идентификатором, соответствующим региону подписки.

Используйте эти примеры, чтобы создать запрос на получение маркера доступа.

Пример HTTP

Это простой HTTP-запрос для получения маркера. Замените YOUR_SUBSCRIPTION_KEY ключом ресурса для службы "Речь". Если ваша подписка не находится в регионе "Западная часть США", замените заголовок Host на имя узла в вашем регионе.

POST /sts/v1.0/issueToken HTTP/1.1
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
Host: eastus.api.cognitive.microsoft.com
Content-type: application/x-www-form-urlencoded
Content-Length: 0

Тело ответа содержит маркер доступа в формате JSON Web Token (JWT).

Пример для PowerShell

Это простой сценарий PowerShell для получения маркера доступа. Замените YOUR_SUBSCRIPTION_KEY ключом ресурса для службы "Речь". Обязательно используйте правильную конечную точку для региона, который соответствует вашей подписке. В этом примере используется конечная точка для западной части США.

$FetchTokenHeader = @{
  'Content-type'='application/x-www-form-urlencoded';
  'Content-Length'= '0';
  'Ocp-Apim-Subscription-Key' = 'YOUR_SUBSCRIPTION_KEY'
}

$OAuthToken = Invoke-RestMethod -Method POST -Uri https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken
 -Headers $FetchTokenHeader

# show the token received
$OAuthToken

Пример cURL

cURL — это программа командной строки, доступная в Linux (и в подсистеме Windows для Linux). Эта команда cURL показывает, как получить маркер доступа. Замените YOUR_SUBSCRIPTION_KEY ключом ресурса для службы "Речь". Обязательно используйте правильную конечную точку для региона, который соответствует вашей подписке. В этом примере используется конечная точка для западной части США.

curl -v -X POST \
 "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken" \
 -H "Content-type: application/x-www-form-urlencoded" \
 -H "Content-Length: 0" \
 -H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY"

Пример на языке C#

Этот класс C# показывает, как получить маркер доступа. Передайте ключ ресурса для службы "Речь" при создании экземпляра класса. Если регион вашей подписки — не западная часть США, измените значение FetchTokenUri в соответствии с регионом своей подписки.

public class Authentication
{
    public static readonly string FetchTokenUri =
        "https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken";
    private string subscriptionKey;
    private string token;

    public Authentication(string subscriptionKey)
    {
        this.subscriptionKey = subscriptionKey;
        this.token = FetchTokenAsync(FetchTokenUri, subscriptionKey).Result;
    }

    public string GetAccessToken()
    {
        return this.token;
    }

    private async Task<string> FetchTokenAsync(string fetchUri, string subscriptionKey)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            UriBuilder uriBuilder = new UriBuilder(fetchUri);

            var result = await client.PostAsync(uriBuilder.Uri.AbsoluteUri, null);
            Console.WriteLine("Token Uri: {0}", uriBuilder.Uri.AbsoluteUri);
            return await result.Content.ReadAsStringAsync();
        }
    }
}

Пример для Python

# Request module must be installed.
# Run pip install requests if necessary.
import requests

subscription_key = 'REPLACE_WITH_YOUR_KEY'


def get_token(subscription_key):
    fetch_token_url = 'https://eastus.api.cognitive.microsoft.com/sts/v1.0/issueToken'
    headers = {
        'Ocp-Apim-Subscription-Key': subscription_key
    }
    response = requests.post(fetch_token_url, headers=headers)
    access_token = str(response.text)
    print(access_token)

Как использовать маркер доступа

Маркер доступа должен отправляться в службу в виде заголовка Authorization: Bearer <TOKEN>. Каждый маркер доступа действителен в течение 10 минут. Вы можете получить новый маркер в любое время, но, чтобы уменьшить сетевой трафик и задержку, мы рекомендуем использовать один маркер в течение девяти минут.

Ниже приведен пример HTTP-запроса к API преобразования речи в текст REST API для короткого звука:

POST /cognitiveservices/v1 HTTP/1.1
Authorization: Bearer YOUR_ACCESS_TOKEN
Host: westus.stt.speech.microsoft.com
Content-type: application/ssml+xml
Content-Length: 199
Connection: Keep-Alive

// Message body here...

Следующие шаги