Как использовать сжатые входные аудиофайлы
Справочные примеры пакета документации | (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