Compartir a través de


Uso del audio de entrada comprimido

Documentación de referencia | Paquete (NuGet) | Ejemplos adicionales en GitHub

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

El SDK de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. Debe instalar varias dependencias y complementos.

Los binarios de GStreamer deben estar en la ruta de acceso del sistema para que el SDK de Voz pueda cargarlos en tiempo de ejecución. Por ejemplo, en Windows, si el SDK de Voz encuentra libgstreamer-1.0-0.dll o gstreamer-1.0-0.dll (en la versión más reciente de GStreamer) durante el tiempo de ejecución, significa que los archivos binarios de GStreamer se encuentran en la ruta de acceso del sistema.

Elija una plataforma para obtener instrucciones de instalación.

Debe instalar varias dependencias y complementos.

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

Para obtener más información, consulte las instrucciones de instalación de Linux y Distribuciones y arquitecturas de destino de Linux admitidas.

Ejemplo

Para configurar el SDK de Voz para que acepte entradas de audio comprimidas, cree PullAudioInputStream o PushAudioInputStream. A continuación, cree un objeto AudioConfig a partir de una instancia de la clase de secuencia que especifique el formato de compresión de la secuencia. Busque fragmentos de código de ejemplo relacionados en Acerca de Audio Input Stream API del SDK de Voz.

Supongamos que tiene una clase de flujo de entrada llamada pullStream y que usa OPUS/OGG. Es posible que el código sea similar a este:

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;

Documentación de referencia | Paquete (NuGet) | Ejemplos adicionales en GitHub

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

El SDK de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. Debe instalar varias dependencias y complementos.

Los binarios de GStreamer deben estar en la ruta de acceso del sistema para que el SDK de Voz pueda cargarlos en tiempo de ejecución. Por ejemplo, en Windows, si el SDK de Voz encuentra libgstreamer-1.0-0.dll o gstreamer-1.0-0.dll (en la versión más reciente de GStreamer) durante el tiempo de ejecución, significa que los archivos binarios de GStreamer se encuentran en la ruta de acceso del sistema.

Elija una plataforma para obtener instrucciones de instalación.

Debe instalar varias dependencias y complementos.

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

Para obtener más información, consulte las instrucciones de instalación de Linux y Distribuciones y arquitecturas de destino de Linux admitidas.

Ejemplo

Para configurar el SDK de Voz para que acepte entradas de audio comprimidas, cree PullAudioInputStream o PushAudioInputStream. A continuación, cree un objeto AudioConfig a partir de una instancia de la clase de secuencia que especifique el formato de compresión de la secuencia. Busque código de ejemplo relacionado en Ejemplos del SDK de Voz.

Supongamos que tiene una clase de flujo de entrada llamada pushStream y que usa OPUS/OGG. Es posible que el código sea similar a este:

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;

Documentación de referencia | Paquete (Go) | Ejemplos adicionales en GitHub

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

El SDK de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. Debe instalar varias dependencias y complementos.

Debe instalar varias dependencias y complementos.

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

Para obtener más información, consulte las instrucciones de instalación de Linux y Distribuciones y arquitecturas de destino de Linux admitidas.

Ejemplo

Para configurar el SDK de Voz para que acepte entradas de audio comprimidas, cree PullAudioInputStream o PushAudioInputStream. A continuación, cree un objeto AudioConfig a partir de una instancia de la clase de secuencia que especifique el formato de compresión de la secuencia.

En el ejemplo siguiente supongamos que su caso de uso es la utilización de PushStream para un archivo comprimido.


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

Documentación de referencia | Ejemplos adicionales en GitHub

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

El SDK de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. Debe instalar varias dependencias y complementos.

Los binarios de GStreamer deben estar en la ruta de acceso del sistema para que el SDK de Voz pueda cargarlos en tiempo de ejecución. Por ejemplo, en Windows, si el SDK de Voz encuentra libgstreamer-1.0-0.dll o gstreamer-1.0-0.dll (en la versión más reciente de GStreamer) durante el tiempo de ejecución, significa que los archivos binarios de GStreamer se encuentran en la ruta de acceso del sistema.

Elija una plataforma para obtener instrucciones de instalación.

El control del audio comprimido se implementa mediante GStreamer. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. En su lugar, tiene que usar los archivos binarios compilados previamente para Android. Para descargar las bibliotecas compiladas previamente, consulte Instalación para el desarrollo de Android.

El objeto libgstreamer_android.so es obligatorio. Asegúrese de que todos los complementos de GStreamer (del archivo Android.mk que encontrará a continuación) estén vinculados en libgstreamer_android.so. Si se usa el SDK de Voz con la versión 1.18.3 de GStreamer, también se requiere que libc++_shared.so esté presente en Android NDK.

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

Aquí se proporcionan los archivos Android.mk y Application.mk de ejemplo. Siga estos pasos para crear el objeto compartido de 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

Puede compilar libgstreamer_android.so con el siguiente comando en Ubuntu 18.04 o 20.04. Las siguientes líneas de comandos solo se han probado para la [versión GStreamer de Android 1.14.4] con 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)

Una vez creado el objeto compartido (libgstreamer_android.so), colóquelo en la aplicación Android para que el SDK de Voz pueda cargarlo.

Ejemplo

Para configurar el SDK de Voz para que acepte entradas de audio comprimidas, cree PullAudioInputStream o PushAudioInputStream. A continuación, cree un objeto AudioConfig a partir de una instancia de la clase de secuencia que especifique el formato de compresión de la secuencia. Busque código de ejemplo relacionado en Ejemplos del SDK de Voz.

Supongamos que tiene una clase de flujo de entrada llamada pullAudio y que usa MP3. Es posible que el código sea similar a este:

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

Documentación de referencia | Paquete (npm) | Ejemplos adicionales en GitHub | Código fuente de la biblioteca

El SDK de Voz para JavaScript no admite el audio comprimido.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Para introducir un archivo de audio comprimido (por ejemplo, mp3), primero debe convertirlo en archivo WAV en el formato de entrada predeterminado. Para hacer streaming de audio comprimido, primero debe descodificar los búferes de audio en el formato de entrada predeterminado. Para obtener más información, consulte Uso del flujo de entrada de audio.

Documentación de referencia | Paquete (descarga) | Ejemplos adicionales en GitHub

El SDK de Voz para Objective-C no admite el audio comprimido.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Para introducir un archivo de audio comprimido (por ejemplo, mp3), primero debe convertirlo en archivo WAV en el formato de entrada predeterminado. Para hacer streaming de audio comprimido, primero debe descodificar los búferes de audio en el formato de entrada predeterminado. Para obtener más información, consulte Uso del flujo de entrada de audio.

Documentación de referencia | Paquete (descarga) | Ejemplos adicionales en GitHub

El SDK de Voz para Swift no admite el audio comprimido.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Para introducir un archivo de audio comprimido (por ejemplo, mp3), primero debe convertirlo en archivo WAV en el formato de entrada predeterminado. Para hacer streaming de audio comprimido, primero debe descodificar los búferes de audio en el formato de entrada predeterminado. Para obtener más información, consulte Uso del flujo de entrada de audio.

Documentación de referencia | Paquete (PyPi) | Ejemplos adicionales en GitHub

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

El SDK de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con el SDK de Voz. Debe instalar varias dependencias y complementos.

Los binarios de GStreamer deben estar en la ruta de acceso del sistema para que el SDK de Voz pueda cargarlos en tiempo de ejecución. Por ejemplo, en Windows, si el SDK de Voz encuentra libgstreamer-1.0-0.dll o gstreamer-1.0-0.dll (en la versión más reciente de GStreamer) durante el tiempo de ejecución, significa que los archivos binarios de GStreamer se encuentran en la ruta de acceso del sistema.

Elija una plataforma para obtener instrucciones de instalación.

Debe instalar varias dependencias y complementos.

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

Para obtener más información, consulte las instrucciones de instalación de Linux y Distribuciones y arquitecturas de destino de Linux admitidas.

Ejemplo

Para configurar el SDK de Voz para que acepte entradas de audio comprimidas, cree PullAudioInputStream o PushAudioInputStream. A continuación, cree un objeto AudioConfig a partir de una instancia de la clase de secuencia que especifique el formato de compresión de la secuencia.

Supongamos que el caso de uso es usar PullStream para un archivo MP3. Es posible que el código sea similar a este:


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)

Referencia de la API de REST de conversión de voz en texto | Referencia de la API de REST de conversión de voz en texto para audios de corta duración | Ejemplos adicionales sobre GitHub

Puede usar la API de REST para audio comprimido, aunque no tenemos ninguna guía disponible aún. Seleccione otro lenguaje de programación para empezar a trabajar y conocer los conceptos.

El SDK de Voz y la CLI de Voz usan GStreamer para admitir diferentes tipos de formatos de audio de entrada. GStreamer descomprime el audio antes de enviarlo mediante la conexión del servicio de Voz como PCM sin procesar.

El formato de streaming de audio predeterminado es WAV (16 KHz o 8 KHz, 16 bits y PCM mono). Además de WAV y PCM, también se admiten los siguientes formatos de entrada comprimidos a través de GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW en un contenedor WAV
  • MULAW en un contenedor WAV
  • CUALQUIERA para un contenedor MP4 o un formato multimedia desconocido

Configuración de GStreamer

La CLI de Voz puede usar GStreamer para controlar el audio comprimido. Por motivos de licencia, los archivos binarios de GStreamer no se compilan ni se vinculan con la CLI de Voz. Debe instalar varias dependencias y complementos.

Los binarios de GStreamer deben estar en la ruta de acceso del sistema para que la CLI de Voz pueda cargarlos en tiempo de ejecución. Por ejemplo, en Windows, si la CLI de Voz encuentra libgstreamer-1.0-0.dll o gstreamer-1.0-0.dll (en la versión más reciente de GStreamer) durante el tiempo de ejecución, significa que los archivos binarios de GStreamer se encuentran en la ruta de acceso del sistema.

Elija una plataforma para obtener instrucciones de instalación.

Debe instalar varias dependencias y complementos.

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

Para obtener más información, consulte las instrucciones de instalación de Linux y Distribuciones y arquitecturas de destino de Linux admitidas.

Ejemplo

La opción --format especifica el formato de contenedor para el archivo de audio que se reconoce. Para un archivo mp4, establezca el formato en any tal y como se muestra en el comando siguiente:

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

Para obtener una lista de los formatos de audio admitidos, ejecute el comando siguiente:

spx help recognize format

Pasos siguientes