Как использовать сжатые входные аудиофайлы

Справочная документация | Пакет (NuGet) | Дополнительные примеры в GitHub

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

Пакет SDK службы "Речь" может использовать GStreamer для обработки сжатого аудио-сигнала. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вам нужно установить несколько зависимостей и подключаемых модулей.

Двоичные файлы GStreamer должны находиться в системном пути, чтобы их можно было загрузить с помощью пакета SDK службы "Речь" во время выполнения. Например, если для пакета SDK службы "Речь" в Windows удается найти libgstreamer-1.0-0.dll или gstreamer-1.0-0.dll (для последней версии GStreamer) во время выполнения, значит двоичные файлы GStreamer находятся в системной папке.

Выберите платформу для указания инструкций по установке.

Вам необходимо установить несколько зависимостей и подключаемых модулей.

sudo apt install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly

Дополнительные сведения см. в разделах Инструкции по установке (Linux) и Поддерживаемые дистрибутивы Linux и целевые архитектуры.

Пример

Чтобы настроить пакет SDK службы "Речь" для приема сжатых аудиоданных, следует создать класс PullAudioInputStream или PushAudioInputStream. Затем создайте объект AudioConfig из экземпляра класса потока данных, указывающий формат сжатия этого потока. Соответствующие примеры фрагментов кода см. в статье об API входного потока аудио для пакета SDK службы "Речь".

Предположим, что имеется класс входного потока с именем pullStream и используется формат сжатия OPUS/OGG. Код может выглядеть следующим образом:

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

// ... omitted for brevity

var speechConfig =
    SpeechConfig.FromSubscription(
        "YourSubscriptionKey",
        "YourServiceRegion");

// Create an audio config specifying the compressed
// audio format and the instance of your input stream class.
var pullStream = AudioInputStream.CreatePullStream(
    AudioStreamFormat.GetCompressedFormat(AudioStreamContainerFormat.OGG_OPUS));
var audioConfig = AudioConfig.FromStreamInput(pullStream);

using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
var result = await recognizer.RecognizeOnceAsync();

var text = result.Text;

Справочная документация | Пакет (NuGet) | Дополнительные примеры в GitHub

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

Пакет SDK службы "Речь" может использовать GStreamer для обработки сжатого аудио-сигнала. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вам нужно установить несколько зависимостей и подключаемых модулей.

Двоичные файлы GStreamer должны находиться в системном пути, чтобы их можно было загрузить с помощью пакета SDK службы "Речь" во время выполнения. Например, если для пакета SDK службы "Речь" в Windows удается найти libgstreamer-1.0-0.dll или gstreamer-1.0-0.dll (для последней версии GStreamer) во время выполнения, значит двоичные файлы GStreamer находятся в системной папке.

Выберите платформу для указания инструкций по установке.

Вам необходимо установить несколько зависимостей и подключаемых модулей.

sudo apt install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly

Дополнительные сведения см. в разделах Инструкции по установке (Linux) и Поддерживаемые дистрибутивы Linux и целевые архитектуры.

Пример

Чтобы настроить пакет SDK службы "Речь" для приема сжатых аудиоданных, следует создать класс PullAudioInputStream или PushAudioInputStream. Затем создайте объект AudioConfig из экземпляра класса потока данных, указывающий формат сжатия этого потока. Соответствующий пример кода можно найти в примерах из пакета SDK для службы "Речь".

Предположим, что имеется класс входного потока с именем pushStream и используется формат сжатия OPUS/OGG. Код может выглядеть следующим образом:

using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;

// ... omitted for brevity

 auto config =
    SpeechConfig::FromSubscription(
        "YourSubscriptionKey",
        "YourServiceRegion"
    );

// Create an audio config specifying the compressed
// audio format and the instance of your input stream class.
auto pullStream = AudioInputStream::CreatePullStream(
    AudioStreamFormat::GetCompressedFormat(AudioStreamContainerFormat::OGG_OPUS));
auto audioConfig = AudioConfig::FromStreamInput(pullStream);

auto recognizer = SpeechRecognizer::FromConfig(config, audioConfig);
auto result = recognizer->RecognizeOnceAsync().get();

auto text = result->Text;

Справочная документация | Пакет (Go) | Дополнительные примеры в GitHub

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

Пакет SDK службы "Речь" может использовать GStreamer для обработки сжатого аудио-сигнала. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вам нужно установить несколько зависимостей и подключаемых модулей.

Вам необходимо установить несколько зависимостей и подключаемых модулей.

sudo apt install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly

Дополнительные сведения см. в разделах Инструкции по установке (Linux) и Поддерживаемые дистрибутивы Linux и целевые архитектуры.

Пример

Чтобы настроить пакет SDK службы "Речь" для приема сжатых аудиоданных, следует создать класс PullAudioInputStream или PushAudioInputStream. Затем создайте объект AudioConfig из экземпляра класса потока данных, указывающий формат сжатия этого потока.

В следующем примере предположим, что ваш вариант использования предназначен для использования PushStream в сжатом файле.


package recognizer

import (
  "fmt"
  "time"
    "strings"

  "github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
  "github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
  "github.com/Microsoft/cognitive-services-speech-sdk-go/samples/helpers"
)

func RecognizeOnceFromCompressedFile(subscription string, region string, file string) {
  var containerFormat audio.AudioStreamContainerFormat
  if strings.Contains(file, ".mulaw") {
    containerFormat = audio.MULAW
  } else if strings.Contains(file, ".alaw") {
    containerFormat = audio.ALAW
  } else if strings.Contains(file, ".mp3") {
    containerFormat = audio.MP3
  } else if strings.Contains(file, ".flac") {
    containerFormat = audio.FLAC
  } else if strings.Contains(file, ".opus") {
    containerFormat = audio.OGGOPUS
  } else {
    containerFormat = audio.ANY
  }
  format, err := audio.GetCompressedFormat(containerFormat)
  if err != nil {
    fmt.Println("Got an error: ", err)
    return
  }
  defer format.Close()
  stream, err := audio.CreatePushAudioInputStreamFromFormat(format)
  if err != nil {
    fmt.Println("Got an error: ", err)
    return
  }
  defer stream.Close()
  audioConfig, err := audio.NewAudioConfigFromStreamInput(stream)
  if err != nil {
    fmt.Println("Got an error: ", err)
    return
  }
  defer audioConfig.Close()
  config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
  if err != nil {
    fmt.Println("Got an error: ", err)
    return
  }
  defer config.Close()
  speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
  if err != nil {
    fmt.Println("Got an error: ", err)
    return
  }
  defer speechRecognizer.Close()
  speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
    defer event.Close()
    fmt.Println("Session Started (ID=", event.SessionID, ")")
  })
  speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
    defer event.Close()
    fmt.Println("Session Stopped (ID=", event.SessionID, ")")
  })
  helpers.PumpFileIntoStream(file, stream)
  task := speechRecognizer.RecognizeOnceAsync()
  var outcome speech.SpeechRecognitionOutcome
  select {
  case outcome = <-task:
  case <-time.After(40 * time.Second):
    fmt.Println("Timed out")
    return
  }
  defer outcome.Close()
  if outcome.Error != nil {
    fmt.Println("Got an error: ", outcome.Error)
  }
  fmt.Println("Got a recognition!")
  fmt.Println(outcome.Result.Text)
}

Справочная документация | Дополнительные примеры в GitHub

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

Пакет SDK службы "Речь" может использовать GStreamer для обработки сжатого аудио-сигнала. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вам нужно установить несколько зависимостей и подключаемых модулей.

Двоичные файлы GStreamer должны находиться в системном пути, чтобы их можно было загрузить с помощью пакета SDK службы "Речь" во время выполнения. Например, если для пакета SDK службы "Речь" в Windows удается найти libgstreamer-1.0-0.dll или gstreamer-1.0-0.dll (для последней версии GStreamer) во время выполнения, значит двоичные файлы GStreamer находятся в системной папке.

Выберите платформу для указания инструкций по установке.

Обработка сжатого аудио-сигнала реализуется с помощью GStreamer. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вместо этого вам нужно использовать готовые двоичные файлы для Android. Чтобы скачать готовые библиотеки, см. статью Установка для разработки в Android.

libgstreamer_android.soОбъект является обязательным. Убедитесь, что все подключаемые модули GStreamer (из файла Android.mk ниже) связаны в файле libgstreamer_android.so. При использовании пакета SDK службы "Речь" с GStreamer версии 1.18.3 также должен присутствовать файл libc++_shared.so из NDK для Android.

GSTREAMER_PLUGINS := coreelements app audioconvert mpg123 \
    audioresample audioparsers ogg opusparse \
    opus wavparse alaw mulaw flac

Примеры файлов Android.mk и Application.mk приведены здесь. Выполните эти шаги, чтобы создать общий объект gstreamer:libgstreamer_android.so.

# Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := dummy
LOCAL_SHARED_LIBRARIES := gstreamer_android
include $(BUILD_SHARED_LIBRARY)

ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif

ifndef APP_BUILD_SCRIPT
$(error APP_BUILD_SCRIPT is not defined!)
endif

ifndef TARGET_ARCH_ABI
$(error TARGET_ARCH_ABI is not defined!)
endif

ifeq ($(TARGET_ARCH_ABI),armeabi)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm
else ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/armv7
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm64
else ifeq ($(TARGET_ARCH_ABI),x86)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86
else ifeq ($(TARGET_ARCH_ABI),x86_64)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86_64
else
$(error Target arch ABI not supported: $(TARGET_ARCH_ABI))
endif

GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS         :=  $(GSTREAMER_PLUGINS_CORE) \ 
                              $(GSTREAMER_PLUGINS_CODECS) \ 
                              $(GSTREAMER_PLUGINS_PLAYBACK) \
                              $(GSTREAMER_PLUGINS_CODECS_GPL) \
                              $(GSTREAMER_PLUGINS_CODECS_RESTRICTED)
GSTREAMER_EXTRA_LIBS      := -liconv -lgstbase-1.0 -lGLESv2 -lEGL
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
# Application.mk
APP_STL = c++_shared
APP_PLATFORM = android-21
APP_BUILD_SCRIPT = Android.mk

Вы можете выполнить сборку libgstreamer_android.so с помощью следующей команды в Ubuntu 18.04 или 20.04. Следующие командные строки были проверены для [GStreamer Android версии 1.14.4] с Android NDK b16b.

# Assuming wget and unzip are already installed on the system
mkdir buildLibGstreamer
cd buildLibGstreamer
wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
unzip -q -o android-ndk-r16b-linux-x86_64.zip
export PATH=$PATH:$(pwd)/android-ndk-r16b
export NDK_PROJECT_PATH=$(pwd)/android-ndk-r16b
wget https://gstreamer.freedesktop.org/download/
mkdir gstreamer_android
tar -xjf gstreamer-1.0-android-universal-1.14.4.tar.bz2 -C $(pwd)/gstreamer_android/
export GSTREAMER_ROOT_ANDROID=$(pwd)/gstreamer_android

mkdir gstreamer
# Copy the Application.mk and Android.mk from the documentation above and put it inside $(pwd)/gstreamer

# Enable only one of the following at one time to create the shared object for the targeted ABI
echo "building for armeabi-v7a. libgstreamer_android.so will be placed in $(pwd)/armeabi-v7a"
ndk-build -C $(pwd)/gstreamer "NDK_APPLICATION_MK=Application.mk" APP_ABI=armeabi-v7a NDK_LIBS_OUT=$(pwd)

#echo "building for arm64-v8a. libgstreamer_android.so will be placed in $(pwd)/arm64-v8a"
#ndk-build -C $(pwd)/gstreamer "NDK_APPLICATION_MK=Application.mk" APP_ABI=arm64-v8a NDK_LIBS_OUT=$(pwd)

#echo "building for x86_64. libgstreamer_android.so will be placed in $(pwd)/x86_64"
#ndk-build -C $(pwd)/gstreamer "NDK_APPLICATION_MK=Application.mk" APP_ABI=x86_64 NDK_LIBS_OUT=$(pwd)

#echo "building for x86. libgstreamer_android.so will be placed in $(pwd)/x86"
#ndk-build -C $(pwd)/gstreamer "NDK_APPLICATION_MK=Application.mk" APP_ABI=x86 NDK_LIBS_OUT=$(pwd)

После создания общего объекта (libgstreamer_android.so) поместите его в приложение Android, чтобы пакет SDK для службы "Речь" мог его загрузить.

Пример

Чтобы настроить пакет SDK службы "Речь" для приема сжатых аудиоданных, следует создать класс PullAudioInputStream или PushAudioInputStream. Затем создайте объект AudioConfig из экземпляра класса потока данных, указывающий формат сжатия этого потока. Соответствующий пример кода можно найти в примерах из пакета SDK для службы "Речь".

Предположим, что у вас есть класс pullAudio входного потока и используется MP3. Код может выглядеть следующим образом:

String filePath = "whatstheweatherlike.mp3";
PullAudioInputStream pullAudio = AudioInputStream.createPullStream(new BinaryAudioStreamReader(filePath),
    AudioStreamFormat.getCompressedFormat(AudioStreamContainerFormat.MP3));
AudioConfig audioConfig = AudioConfig.fromStreamInput(pullAudio);

Справочная документация | Пакет (npm) | Дополнительные примеры в GitHub | Исходный код библиотеки

Пакет SDK службы "Речь" для JavaScript не поддерживает сжатый аудио-сигнал.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Чтобы ввести сжатый звуковой файл (например, mp3), необходимо сначала преобразовать его в WAV-файл в формате входных данных по умолчанию. Для потоковой передачи сжатого аудио-сигнала нужно сначала декодировать звуковые буферы в формат входных данных по умолчанию. Дополнительные сведения см. в разделе Использование входного потока аудио.

Справочная документация | Пакет (скачивание) | Дополнительные примеры в GitHub

Пакет SDK службы "Речь" для Objective-C не поддерживает сжатый аудио-сигнал.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Чтобы ввести сжатый звуковой файл (например, mp3), необходимо сначала преобразовать его в WAV-файл в формате входных данных по умолчанию. Для потоковой передачи сжатого аудио-сигнала нужно сначала декодировать звуковые буферы в формат входных данных по умолчанию. Дополнительные сведения см. в разделе Использование входного потока аудио.

Справочная документация | Пакет (скачивание) | Дополнительные примеры в GitHub

Пакет SDK службы "Речь" для Swift не поддерживает сжатый аудио-сигнал.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Чтобы ввести сжатый звуковой файл (например, mp3), необходимо сначала преобразовать его в WAV-файл в формате входных данных по умолчанию. Для потоковой передачи сжатого аудио-сигнала нужно сначала декодировать звуковые буферы в формат входных данных по умолчанию. Дополнительные сведения см. в разделе Использование входного потока аудио.

Справочная документация | Пакет (PyPi) | Дополнительные примеры в GitHub

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

Пакет SDK службы "Речь" может использовать GStreamer для обработки сжатого аудио-сигнала. В соответствии с требованиями лицензирования двоичные файлы GStreamer не компилируются и не связываются с пакетом SDK службы "Речь". Вам нужно установить несколько зависимостей и подключаемых модулей.

Двоичные файлы GStreamer должны находиться в системном пути, чтобы их можно было загрузить с помощью пакета SDK службы "Речь" во время выполнения. Например, если для пакета SDK службы "Речь" в Windows удается найти libgstreamer-1.0-0.dll или gstreamer-1.0-0.dll (для последней версии GStreamer) во время выполнения, значит двоичные файлы GStreamer находятся в системной папке.

Выберите платформу для указания инструкций по установке.

Вам необходимо установить несколько зависимостей и подключаемых модулей.

sudo apt install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly

Дополнительные сведения см. в разделах Инструкции по установке (Linux) и Поддерживаемые дистрибутивы Linux и целевые архитектуры.

Пример

Чтобы настроить пакет SDK службы "Речь" для приема сжатых аудиоданных, следует создать класс PullAudioInputStream или PushAudioInputStream. Затем создайте объект AudioConfig из экземпляра класса потока данных, указывающий формат сжатия этого потока.

Предположим, что вы используете PullStream для файла MP3. Код может выглядеть следующим образом:


import azure.cognitiveservices.speech as speechsdk

class BinaryFileReaderCallback(speechsdk.audio.PullAudioInputStreamCallback):
    def __init__(self, filename: str):
        super().__init__()
        self._file_h = open(filename, "rb")

    def read(self, buffer: memoryview) -> int:
        print('trying to read {} frames'.format(buffer.nbytes))
        try:
            size = buffer.nbytes
            frames = self._file_h.read(size)

            buffer[:len(frames)] = frames
            print('read {} frames'.format(len(frames)))

            return len(frames)
        except Exception as ex:
            print('Exception in `read`: {}'.format(ex))
            raise

    def close(self) -> None:
        print('closing file')
        try:
            self._file_h.close()
        except Exception as ex:
            print('Exception in `close`: {}'.format(ex))
            raise

def compressed_stream_helper(compressed_format,
        mp3_file_path,
        default_speech_auth):
    callback = BinaryFileReaderCallback(mp3_file_path)
    stream = speechsdk.audio.PullAudioInputStream(stream_format=compressed_format, pull_stream_callback=callback)

    speech_config = speechsdk.SpeechConfig(**default_speech_auth)
    audio_config = speechsdk.audio.AudioConfig(stream=stream)

    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    done = False

    def stop_cb(evt):
        """callback that signals to stop continuous recognition upon receiving an event `evt`"""
        print('CLOSING on {}'.format(evt))
        nonlocal done
        done = True

    # Connect callbacks to the events fired by the speech recognizer
    speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
    speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
    speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
    speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
    speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
    # stop continuous recognition on either session stopped or canceled events
    speech_recognizer.session_stopped.connect(stop_cb)
    speech_recognizer.canceled.connect(stop_cb)

    # Start continuous speech recognition
    speech_recognizer.start_continuous_recognition()
    while not done:
        time.sleep(.5)

    speech_recognizer.stop_continuous_recognition()

def pull_audio_input_stream_compressed_mp3(mp3_file_path: str,
        default_speech_auth):
    # Create a compressed format
    compressed_format = speechsdk.audio.AudioStreamFormat(compressed_stream_format=speechsdk.AudioStreamContainerFormat.MP3)
    compressed_stream_helper(compressed_format, mp3_file_path, default_speech_auth)

Преобразование речи в текстовый REST API ссылки на | речь на текстовый REST API для краткой ссылки на звуковые ссылки | на Дополнительные примеры на GitHub

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

Речевой пакет SDK и речевой интерфейс командной строки используют GStreamer для поддержки различных типов входных аудио форматов. GStreamer распаковывает звук перед его отправкой по сети в службу "Речь" в виде необработанного PCM.

По умолчанию используется формат потоковой передачи звука WAV (16 или 8 кГц, 16 бит, моно PCM). Кроме WAV и PCM также поддерживаются следующие сжатые форматы входных данных через GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW в контейнере WAV
  • MULAW в контейнере WAV
  • ANY для контейнера MP4 или неизвестного формата мультимедиа

Конфигурация GStreamer

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

Двоичные файлы GStreamer должны находиться в системном пути, чтобы их можно было загрузить с помощью CLI службы "Речь" во время выполнения. Например, если для CLI службы "Речь" в Windows удается найти libgstreamer-1.0-0.dll или gstreamer-1.0-0.dll (для последней версии GStreamer) во время выполнения, значит двоичные файлы GStreamer находятся в системной папке.

Выберите платформу для указания инструкций по установке.

Вам необходимо установить несколько зависимостей и подключаемых модулей.

sudo apt install libgstreamer1.0-0 \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly

Дополнительные сведения см. в разделах Инструкции по установке (Linux) и Поддерживаемые дистрибутивы Linux и целевые архитектуры.

Пример

Параметр --format задает формат контейнера для распознаваемого аудиофайла. Для MP4-файла задайте формат any, как показано в следующей команде:

spx recognize --file YourAudioFile.mp4 --format any

Чтобы получить список поддерживаемых форматов звука, выполните следующую команду:

spx help recognize format

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