Freigeben über


Verwenden von komprimierten Eingabeaudiodaten

Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Das Speech SDK kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

GStreamer-Binärdateien müssen sich im Systempfad befinden, damit sie vom Speech SDK zur Laufzeit geladen werden können. Wenn beispielsweise unter Windows das Speech SDK libgstreamer-1.0-0.dll oder gstreamer-1.0-0.dll (für die neueste Version von GStreamer) zur Laufzeit finden kann, bedeutet dies, dass sich die GStreamer-Binärdateien im Systempfad befinden.

Wählen Sie eine Plattform für Installationsanweisungen aus.

Sie müssen mehrere Abhängigkeiten und Plug-Ins installieren.

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

Weitere Informationen finden Sie unter Linux-Installationsanweisungen und Unterstützte Linux-Distributionen und Zielarchitekturen.

Beispiel

Um das Speech SDK so zu konfigurieren, dass es komprimierte Audioeingaben akzeptiert, erstellen Sie einen PullAudioInputStream oder PushAudioInputStream. Erstellen Sie dann eine AudioConfig aus einer Instanz Ihrer Streamklasse, die das Komprimierungsformat des Streams angibt. Entsprechende Beispielcodeausschnitte finden Sie unter Informationen zur API für Audioeingabestreams des Speech SDK.

Angenommen, Sie verfügen über die Eingabestreamklasse pullStream und verwenden OPUS/OGG. Ihr Code kann etwa so aussehen:

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;

Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Das Speech SDK kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

GStreamer-Binärdateien müssen sich im Systempfad befinden, damit sie vom Speech SDK zur Laufzeit geladen werden können. Wenn beispielsweise unter Windows das Speech SDK libgstreamer-1.0-0.dll oder gstreamer-1.0-0.dll (für die neueste Version von GStreamer) zur Laufzeit finden kann, bedeutet dies, dass sich die GStreamer-Binärdateien im Systempfad befinden.

Wählen Sie eine Plattform für Installationsanweisungen aus.

Sie müssen mehrere Abhängigkeiten und Plug-Ins installieren.

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

Weitere Informationen finden Sie unter Linux-Installationsanweisungen und Unterstützte Linux-Distributionen und Zielarchitekturen.

Beispiel

Um das Speech SDK so zu konfigurieren, dass es komprimierte Audioeingaben akzeptiert, erstellen Sie einen PullAudioInputStream oder PushAudioInputStream. Erstellen Sie dann eine AudioConfig aus einer Instanz Ihrer Streamklasse, die das Komprimierungsformat des Streams angibt. Verwandten Beispielcode finden Sie in den Beispielen zum Speech SDK.

Angenommen, Sie verfügen über die Eingabestreamklasse pushStream und verwenden OPUS/OGG. Ihr Code kann etwa so aussehen:

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;

Referenzdokumentation | Paket (Go) | Zusätzliche Beispiele auf GitHub

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Das Speech SDK kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

Sie müssen mehrere Abhängigkeiten und Plug-Ins installieren.

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

Weitere Informationen finden Sie unter Linux-Installationsanweisungen und Unterstützte Linux-Distributionen und Zielarchitekturen.

Beispiel

Um das Speech SDK so zu konfigurieren, dass es komprimierte Audioeingaben akzeptiert, erstellen Sie eine PullAudioInputStream oder PushAudioInputStream. Erstellen Sie dann eine AudioConfig aus einer Instanz Ihrer Streamklasse, die das Komprimierungsformat des Streams angibt.

Im folgenden Beispiel gehen wir davon aus, dass Ihr Anwendungsfall darin besteht, PushStream für eine komprimierte Datei zu verwenden.


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

Referenzdokumentation | Zusätzliche Beispiele auf GitHub

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Das Speech SDK kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

GStreamer-Binärdateien müssen sich im Systempfad befinden, damit sie vom Speech SDK zur Laufzeit geladen werden können. Wenn beispielsweise unter Windows das Speech SDK libgstreamer-1.0-0.dll oder gstreamer-1.0-0.dll (für die neueste Version von GStreamer) zur Laufzeit finden kann, bedeutet dies, dass sich die GStreamer-Binärdateien im Systempfad befinden.

Wählen Sie eine Plattform für Installationsanweisungen aus.

Die Verarbeitung komprimierter Audiodaten wird mithilfe von GStreamer implementiert. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen stattdessen die vorkonfigurierten Binärdateien für Android verwenden. Informationen zum Herunterladen der vorkonfigurierten Bibliotheken finden Sie unter Installieren für die Android-Entwicklung.

Das libgstreamer_android.so-Objekt ist erforderlich. Vergewissern Sie sich, dass alle GStreamer-Plug-Ins (aus der folgenden Android.mk-Datei) in libgstreamer_android.so verknüpft sind. Wenn Sie das neueste Sprach-SDK (1.18.3 und höher) mit GStreamer Version 1.18.3 verwenden, muss auch libc++_shared.so von android ndk vorhanden sein.

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

Hier sehen Sie ein Beispiel für die Dateien Android.mk und Application.mk. Führen Sie diese Schritte aus, um das freigegebene gstreamer-Objekt zu erstellen: 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

Sie können libgstreamer_android.so mit dem folgenden Befehl unter Ubuntu 18.04 oder 20.04 erstellen. Die folgenden Befehlszeilen wurden für [GStreamer (Android-Version 1.14.4)] mit Android NDK b16b getestet.

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

Nachdem das freigegebene Objekt (libgstreamer_android.so) erstellt wurde, platzieren Sie das freigegebene Objekt in der Android-App, damit es vom Speech SDK geladen werden kann.

Beispiel

Um das Speech SDK so zu konfigurieren, dass es komprimierte Audioeingaben akzeptiert, erstellen Sie eine PullAudioInputStream oder PushAudioInputStream. Erstellen Sie dann eine AudioConfig aus einer Instanz Ihrer Streamklasse, die das Komprimierungsformat des Streams angibt. Verwandten Beispielcode finden Sie in den Beispielen zum Speech SDK.

Angenommen, Sie verfügen über die Eingabestreamklasse pullAudio und verwenden MP3. Ihr Code kann etwa so aussehen:

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

Referenzdokumentation | Paket (npm) | Zusätzliche Beispiele auf GitHub | Quellcode der Bibliothek

Das Speech SDK für JavaScript unterstützt keine komprimierten Audiodaten.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Um eine komprimierte Audiodatei (z. B. MP3) einzugeben, müssen Sie sie zuerst in eine WAV-Datei im Standardeingabeformat konvertieren. Um komprimierte Audiodaten zu streamen, müssen Sie zuerst die Audiopuffer in das Standardeingabeformat decodieren. Weitere Informationen finden Sie unter Verwenden des Audioeingabestreams.

Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub

Das Speech SDK für Objective-C unterstützt keine komprimierten Audiodaten.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Um eine komprimierte Audiodatei (z. B. MP3) einzugeben, müssen Sie sie zuerst in eine WAV-Datei im Standardeingabeformat konvertieren. Um komprimierte Audiodaten zu streamen, müssen Sie zuerst die Audiopuffer in das Standardeingabeformat decodieren. Weitere Informationen finden Sie unter Verwenden des Audioeingabestreams.

Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub

Das Speech SDK für Swift unterstützt keine komprimierten Audiodaten.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Um eine komprimierte Audiodatei (z. B. MP3) einzugeben, müssen Sie sie zuerst in eine WAV-Datei im Standardeingabeformat konvertieren. Um komprimierte Audiodaten zu streamen, müssen Sie zuerst die Audiopuffer in das Standardeingabeformat decodieren. Weitere Informationen finden Sie unter Verwenden des Audioeingabestreams.

Referenzdokumentation | Paket (PyPi) | Zusätzliche Beispiele auf GitHub

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Das Speech SDK kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit dem Speech SDK verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

GStreamer-Binärdateien müssen sich im Systempfad befinden, damit sie vom Speech SDK zur Laufzeit geladen werden können. Wenn beispielsweise unter Windows das Speech SDK libgstreamer-1.0-0.dll oder gstreamer-1.0-0.dll (für die neueste Version von GStreamer) zur Laufzeit finden kann, bedeutet dies, dass sich die GStreamer-Binärdateien im Systempfad befinden.

Wählen Sie eine Plattform für Installationsanweisungen aus.

Sie müssen mehrere Abhängigkeiten und Plug-Ins installieren.

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

Weitere Informationen finden Sie unter Linux-Installationsanweisungen und Unterstützte Linux-Distributionen und Zielarchitekturen.

Beispiel

Um das Speech SDK so zu konfigurieren, dass es komprimierte Audioeingaben akzeptiert, erstellen Sie einen PullAudioInputStream oder PushAudioInputStream. Erstellen Sie dann eine AudioConfig aus einer Instanz Ihrer Streamklasse, die das Komprimierungsformat des Streams angibt.

Angenommen, Sie verwenden in Ihrem Anwendungsfall PullStream für eine MP3-Datei. Ihr Code kann etwa so aussehen:


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-Referenz für die Spracherkennung | REST-API-Referenz für die Spracherkennung für kurze Audiodateien | Zusätzliche Beispiele auf GitHub

Sie können zwar die REST-API für komprimierte Audiodaten verwenden, aber wir haben hier noch keinen Leitfaden aufgenommen. Wählen Sie eine andere Programmiersprache aus, um loszulegen und sich über die Konzepte zu informieren.

Das Speech SDK und die Speech CLI verwenden GStreamer, um verschiedene Arten von Eingabeaudioformaten zu unterstützen. Die Audiodaten werden von GStreamer dekomprimiert, bevor sie als unformatiertes PCM an den Speech-Dienst gesendet werden.

Das Standardformat für Audiostreaming ist WAV (16 kHz oder 8 kHz, 16 Bit und Mono-PCM). Neben WAV und PCM werden auch folgende komprimierte Eingabeformate über GStreamer unterstützt:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW im WAV-Container
  • MULAW im WAV-Container
  • ALLE für MP4-Container oder unbekannte Medienformate

GStreamer-Konfiguration

Die Speech CLI kann GStreamer verwenden, um komprimierte Audiodaten zu verarbeiten. Aus Lizenzierungsgründen sind die GStreamer-Binärdateien nicht kompiliert und mit der Speech CLI verknüpft. Sie müssen einige Abhängigkeiten und Plug-Ins installieren.

GStreamer-Binärdateien müssen sich im Systempfad befinden, damit sie vom CLI SDK zur Laufzeit geladen werden können. Wenn beispielsweise unter Windows die Speech CLI libgstreamer-1.0-0.dll oder gstreamer-1.0-0.dll (für die neueste Version von GStreamer) zur Laufzeit finden kann, bedeutet dies, dass sich die GStreamer-Binärdateien im Systempfad befinden.

Wählen Sie eine Plattform für Installationsanweisungen aus.

Sie müssen mehrere Abhängigkeiten und Plug-Ins installieren.

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

Weitere Informationen finden Sie unter Linux-Installationsanweisungen und Unterstützte Linux-Distributionen und Zielarchitekturen.

Beispiel

Die Option --format gibt das Containerformat für die Audiodatei an, die gerade erkannt wird. Legen Sie für eine MP4-Datei das Format auf any fest, wie im folgenden Befehl zu sehen:

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

Um eine Liste der unterstützten Audioformate abzurufen, führen Sie den folgenden Befehl aus:

spx help recognize format

Nächste Schritte