圧縮されたオーディオ入力を使用する方法

リファレンス ドキュメント | パッケージ (NuGet) | GitHub 上のその他のサンプル

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech SDK では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech SDK では GStreamer バイナリはコンパイルおよびリンクされません。 いくつかの依存関係とプラグインをインストールする必要があります。

GStreamer バイナリは、Speech SDK の実行時に読み込まれるように、システム パス内に存在する必要があります。 たとえば Windows では、Speech SDK が実行時に 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 ディストリビューションとターゲット アーキテクチャに関する記事を参照してください。

圧縮オーディオ入力を受け入れるように Speech SDK を構成するには、PullAudioInputStream または PushAudioInputStream を作成します。 次に、ストリームの圧縮形式を指定するストリーム クラスのインスタンスから AudioConfig を作成します。 関連するサンプル コード スニペットについては、「Speech SDK のオーディオ入力ストリーム API について」を参照してください。

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 上のその他のサンプル

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech SDK では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech SDK では GStreamer バイナリはコンパイルおよびリンクされません。 いくつかの依存関係とプラグインをインストールする必要があります。

GStreamer バイナリは、Speech SDK の実行時に読み込まれるように、システム パス内に存在する必要があります。 たとえば Windows では、Speech SDK が実行時に 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 ディストリビューションとターゲット アーキテクチャに関する記事を参照してください。

圧縮オーディオ入力を受け入れるように Speech SDK を構成するには、PullAudioInputStream または PushAudioInputStream を作成します。 次に、ストリームの圧縮形式を指定するストリーム クラスのインスタンスから AudioConfig を作成します。 Speech 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 上のその他のサンプル

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech SDK では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech SDK では 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 ディストリビューションとターゲット アーキテクチャに関する記事を参照してください。

圧縮オーディオ入力を受け入れるように Speech 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 上のその他のサンプル

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech SDK では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech SDK では GStreamer バイナリはコンパイルおよびリンクされません。 いくつかの依存関係とプラグインをインストールする必要があります。

GStreamer バイナリは、Speech SDK の実行時に読み込まれるように、システム パス内に存在する必要があります。 たとえば Windows では、Speech SDK が実行時に libgstreamer-1.0-0.dll または gstreamer-1.0-0.dll (最新の GStreamer 用) を見つける場合、その GStreamer バイナリがシステム パスにあることを意味します。

インストールの手順については、プラットフォームを選択してください。

圧縮オーディオの処理は、GStreamer を使用して実装されます。 ライセンスの理由から、Speech SDK では GStreamer バイナリはコンパイルおよびリンクされません。 代わりに、Android では事前構築済みのバイナリを使用する必要があります。 事前構築済みライブラリをダウンロードするには、「Android 開発用のインストール」を参照してください。

libgstreamer_android.so オブジェクトが必要です。 すべての GStreamer プラグイン (次の Android.mk ファイルからのもの) が libgstreamer_android.so でリンクされていることを確認します。 GStreamer バージョン 1.18.3 で Speech SDK を使用する場合、android ndk からの libc++_shared.so も存在している必要があります。

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

Ubuntu 18.04 または 20.04 で次のコマンドを使用して、libgstreamer_android.so を構築できます。 次のコマンド ラインは、Android NDK b16b での [GStreamer Android バージョン 1.14.4] に対してテストされています。

# 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) が構築されたら、Speech SDK で読み込めるように、その共有オブジェクトを Android アプリに配置します。

圧縮オーディオ入力を受け入れるように Speech SDK を構成するには、PullAudioInputStream または PushAudioInputStream を作成します。 次に、ストリームの圧縮形式を指定するストリーム クラスのインスタンスから AudioConfig を作成します。 Speech 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 上のその他のサンプル | ライブラリのソース コード

Speech SDK for JavaScript では、圧縮オーディオはサポートされていません。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 圧縮されたオーディオ ファイル (mp3 など) を入力するには、最初に既定の入力形式で WAV ファイルに変換する必要があります。 圧縮されたオーディオをストリーミングするには、まずオーディオ バッファーを既定の入力形式にデコードする必要があります。 詳細については、「音声入力ストリームの使用方法」を参照してください。

リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル

Speech SDK for Objective-C では、圧縮オーディオはサポートされていません。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 圧縮されたオーディオ ファイル (mp3 など) を入力するには、最初に既定の入力形式で WAV ファイルに変換する必要があります。 圧縮されたオーディオをストリーミングするには、まずオーディオ バッファーを既定の入力形式にデコードする必要があります。 詳細については、「音声入力ストリームの使用方法」を参照してください。

リファレンス ドキュメント | パッケージ (ダウンロード) | GitHub 上のその他のサンプル

Speech SDK for Swift では、圧縮オーディオはサポートされていません。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 圧縮されたオーディオ ファイル (mp3 など) を入力するには、最初に既定の入力形式で WAV ファイルに変換する必要があります。 圧縮されたオーディオをストリーミングするには、まずオーディオ バッファーを既定の入力形式にデコードする必要があります。 詳細については、「音声入力ストリームの使用方法」を参照してください。

リファレンス ドキュメント | パッケージ (PyPi) | GitHub 上のその他のサンプル

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech SDK では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech SDK では GStreamer バイナリはコンパイルおよびリンクされません。 いくつかの依存関係とプラグインをインストールする必要があります。

GStreamer バイナリは、Speech SDK の実行時に読み込まれるように、システム パス内に存在する必要があります。 たとえば Windows では、Speech SDK が実行時に 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 ディストリビューションとターゲット アーキテクチャに関する記事を参照してください。

圧縮オーディオ入力を受け入れるように Speech SDK を構成するには、PullAudioInputStream または PushAudioInputStream を作成します。 次に、ストリームの圧縮形式を指定するストリーム クラスのインスタンスから AudioConfig を作成します。

このユース ケースでは MP3 ファイルに PullStream を使用するとします。 コードは次のようになります。


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)

Speech to Text REST API リファレンス | Speech to Text REST API for short audio リファレンス | GitHub 上のその他のサンプル

圧縮オーディオには REST API を使用できますが、こちらにはまだガイドが掲載されていません。 使用を開始し、概念について学ぶには、別のプログラミング言語を選択してください。

Speech SDK や Speech CLI では、GStreamer を使用して、さまざまな種類の入力オーディオ形式をサポートしています。 GStreamer によってオーディオの圧縮が解除された後、ネットワークを介して RAW PCM として Speech サービスに送信されます。

既定のオーディオ ストリーミング形式は WAV (16 KHz または 8 KHz、16 ビット、およびモノ PCM) です。 WAV と PCM 以外では、次の圧縮入力形式も GStreamer を介してサポートされます。

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV コンテナー内の ALAW
  • WAV コンテナー内の MULAW
  • MP4 コンテナーまたは不明なメディア形式の場合は ANY

GStreamer の構成

Speech CLI では、GStreamer を使用して圧縮オーディオを処理できます。 ライセンスの理由から、Speech CLI では GStreamer バイナリはコンパイルおよびリンクされません。 いくつかの依存関係とプラグインをインストールする必要があります。

GStreamer バイナリは、Speech CLI の実行時に読み込まれるように、システム パス内に存在する必要があります。 たとえば Windows では、Speech CLI が実行時に 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

次のステップ