압축된 입력 오디오를 사용하는 방법

참조 설명서 | 패키지(NuGet) | GitHub의 추가 샘플

Speech SDK 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

Speech SDK는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech SDK로 연결되지 않습니다. 일부 종속성과 플러그 인을 설치해야 합니다.

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 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

Speech SDK는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech SDK로 연결되지 않습니다. 일부 종속성과 플러그 인을 설치해야 합니다.

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 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

Speech SDK는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech 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 배포판 및 대상 아키텍처를 참조하세요.

예시

압축된 오디오 입력을 허용하도록 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 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

Speech SDK는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech SDK로 연결되지 않습니다. 일부 종속성과 플러그 인을 설치해야 합니다.

GStreamer 이진 파일은 런타임 시 Speech SDK에서 로드할 수 있도록 시스템 경로에 있어야 합니다. 예를 들어 Windows에서 Speech SDK가 런타임 중에 libgstreamer-1.0-0.dll 또는 gstreamer-1.0-0.dll(최신 GStreamer의 경우)을 찾으면 GStreamer 이진 파일이 시스템 경로에 있음을 의미합니다.

설치 지침에 대한 플랫폼을 선택합니다.

압축된 오디오 처리는 GStreamer를 사용하여 구현됩니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech SDK로 연결되지 않습니다. 대신, Android용으로 미리 빌드된 이진 파일을 사용해야 합니다. 미리 빌드된 라이브러리를 다운로드하려면 Android 개발용 설치를 참조하세요.

libgstreamer_android.so 개체가 필요합니다. 다음 Android.mk 파일에서 모든 GStreamer 플러그 인이 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.mkApplication.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의 추가 샘플 | 라이브러리 소스 코드

JavaScript용 Speech SDK는 압축된 오디오를 지원하지 않습니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. 압축된 오디오 파일(예: mp3)을 입력하려면 먼저 기본 입력 형식의 WAV 파일로 변환해야 합니다. 압축된 오디오를 스트리밍하려면 먼저 오디오 버퍼를 기본 입력 형식으로 디코딩해야 합니다. 자세한 내용은 오디오 입력 스트림 사용 방법을 참조하세요.

참조 설명서 | 패키지(다운로드) | GitHub의 추가 샘플

Objective-C용 Speech SDK는 압축된 오디오를 지원하지 않습니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. 압축된 오디오 파일(예: mp3)을 입력하려면 먼저 기본 입력 형식의 WAV 파일로 변환해야 합니다. 압축된 오디오를 스트리밍하려면 먼저 오디오 버퍼를 기본 입력 형식으로 디코딩해야 합니다. 자세한 내용은 오디오 입력 스트림 사용 방법을 참조하세요.

참조 설명서 | 패키지(다운로드) | GitHub의 추가 샘플

Swift용 Speech SDK는 압축된 오디오를 지원하지 않습니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. 압축된 오디오 파일(예: mp3)을 입력하려면 먼저 기본 입력 형식의 WAV 파일로 변환해야 합니다. 압축된 오디오를 스트리밍하려면 먼저 오디오 버퍼를 기본 입력 형식으로 디코딩해야 합니다. 자세한 내용은 오디오 입력 스트림 사용 방법을 참조하세요.

참조 설명서 | 패키지(PyPi) | GitHub의 추가 샘플

Speech SDK 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

Speech SDK는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech SDK로 연결되지 않습니다. 일부 종속성과 플러그 인을 설치해야 합니다.

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)

음성을 텍스트로 변환하는 REST API 참조 | 짧은 오디오 참조를 위한 음성을 텍스트로 변환하는 REST API | GitHub의 추가 샘플

압축 오디오에 REST API를 사용할 수 있지만 여기에는 아직 가이드가 포함되어 있지 않습니다. 다른 프로그래밍 언어를 선택하여 작업을 시작하고 개념에 대해 알아보세요.

Speech SDK 및 음성 CLI는 GStreamer를 사용하여 다양한 종류의 입력 오디오 형식을 지원합니다. GStreamer는 원시 PCM으로 유선을 통해 Speech Service에 전송되기 전에 오디오의 압축을 해제합니다.

기본 오디오 스트리밍 형식은 WAV(16kHz 또는 8kHz, 16비트 및 mono PCM)입니다. WAV 및 PCM 외부에서 다음 압축 입력 형식도 GStreamer를 통해 지원됩니다.

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV 컨테이너의 ALAW
  • WAV 컨테이너의 MULAW
  • MP4 컨테이너 또는 알 수 없는 미디어 형식의 경우 ANY

GStreamer 구성

음성 CLI는 GStreamer를 사용하여 압축된 오디오를 처리할 수 있습니다. 라이선스 때문에 GStreamer 이진 파일이 컴파일되지 않고 Speech CLI로 연결되지 않습니다. 일부 종속성과 플러그 인을 설치해야 합니다.

GStreamer 이진 파일은 런타임 시 음성 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

다음 단계