Sıkıştırılmış giriş sesini kullanma

Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma SDK'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

GStreamer ikili dosyalarının çalışma zamanında Konuşma SDK'sı tarafından yüklenebilmesi için sistem yolunda olması gerekir. Örneğin, Windows'da Konuşma SDK'sı çalışma zamanı sırasında veya gstreamer-1.0-0.dll (en son GStreamer için) bulursalibgstreamer-1.0-0.dll, GStreamer ikili dosyalarının sistem yolunda olduğu anlamına gelir.

Yükleme yönergeleri için bir platform seçin.

Birkaç bağımlılık ve eklenti yüklemeniz gerekir.

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

Daha fazla bilgi için bkz . Linux yükleme yönergeleri ve desteklenen Linux dağıtımları ve hedef mimariler.

Örnek

Konuşma SDK'sını sıkıştırılmış ses girişini kabul etmek üzere yapılandırmak için veya PushAudioInputStreamoluşturunPullAudioInputStream. Ardından akış sınıfınızın bir örneğinden akışın sıkıştırma biçimini belirten bir AudioConfig oluşturun. İlgili örnek kod parçacıklarını Konuşma SDK'sı ses giriş akışı API'si hakkında bölümünde bulabilirsiniz.

adlı pullStream bir giriş akışı sınıfınız olduğunu ve OPUS/OGG kullandığını varsayalım. Kodunuz şu şekilde görünebilir:

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;

Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma SDK'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

GStreamer ikili dosyalarının çalışma zamanında Konuşma SDK'sı tarafından yüklenebilmesi için sistem yolunda olması gerekir. Örneğin, Windows'da Konuşma SDK'sı çalışma zamanı sırasında veya gstreamer-1.0-0.dll (en son GStreamer için) bulursalibgstreamer-1.0-0.dll, GStreamer ikili dosyalarının sistem yolunda olduğu anlamına gelir.

Yükleme yönergeleri için bir platform seçin.

Birkaç bağımlılık ve eklenti yüklemeniz gerekir.

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

Daha fazla bilgi için bkz . Linux yükleme yönergeleri ve desteklenen Linux dağıtımları ve hedef mimariler.

Örnek

Konuşma SDK'sını sıkıştırılmış ses girişini kabul etmek üzere yapılandırmak için veya PushAudioInputStreamoluşturunPullAudioInputStream. Ardından akış sınıfınızın bir örneğinden akışın sıkıştırma biçimini belirten bir AudioConfig oluşturun. Konuşma SDK'sı örneklerinde ilgili örnek kodu bulun.

adlı pushStream bir giriş akışı sınıfınız olduğunu ve OPUS/OGG kullandığını varsayalım. Kodunuz şu şekilde görünebilir:

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;

Başvuru belgeleri | Paketi (Go) | GitHub'da ek örnekler

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma SDK'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

Birkaç bağımlılık ve eklenti yüklemeniz gerekir.

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

Daha fazla bilgi için bkz . Linux yükleme yönergeleri ve desteklenen Linux dağıtımları ve hedef mimariler.

Örnek

Konuşma SDK'sını sıkıştırılmış ses girişini kabul etmek üzere yapılandırmak için veya PullAudioInputStream PushAudioInputStreamoluşturun. Ardından akış sınıfınızın bir örneğinden akışın sıkıştırma biçimini belirten bir AudioConfig oluşturun.

Aşağıdaki örnekte, kullanım örneğinizin sıkıştırılmış bir dosya için kullanılacağını PushStream varsayalım.


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

Başvuru belgeleri | GitHub'da ek örnekler

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma SDK'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

GStreamer ikili dosyalarının çalışma zamanında Konuşma SDK'sı tarafından yüklenebilmesi için sistem yolunda olması gerekir. Örneğin, Windows'da Konuşma SDK'sı çalışma zamanı sırasında veya gstreamer-1.0-0.dll (en son GStreamer için) bulursalibgstreamer-1.0-0.dll, GStreamer ikili dosyalarının sistem yolunda olduğu anlamına gelir.

Yükleme yönergeleri için bir platform seçin.

Sıkıştırılmış sesi işleme, GStreamer kullanılarak uygulanır. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bunun yerine, Android için önceden oluşturulmuş ikili dosyaları kullanmanız gerekir. Önceden oluşturulmuş kitaplıkları indirmek için bkz . Android geliştirme için yükleme.

libgstreamer_android.so Nesnesi gereklidir. Tüm GStreamer eklentilerinin (aşağıdaki Android.mk dosyasından) içinde libgstreamer_android.sobağlı olduğundan emin olun. Konuşma SDK'sını GStreamer sürüm 1.18.3 ile kullandığınızda, libc++_shared.so android ndk'den de mevcut olması gerekir.

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

Burada bir örnek Android.mk ve Application.mk dosya sağlanır. Paylaşılan nesneyi oluşturmak gstreamer için şu adımları izleyin: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 veya 20.04'te aşağıdaki komutu kullanarak oluşturabilirsiniz libgstreamer_android.so . Aşağıdaki komut satırları Android NDK b16b ile [GStreamer Android sürüm 1.14.4] için test edilmiştir.

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

Paylaşılan nesne (libgstreamer_android.so) oluşturulduktan sonra, Konuşma SDK'sının yükleyebilmesi için paylaşılan nesneyi Android uygulamasına yerleştirin.

Örnek

Konuşma SDK'sını sıkıştırılmış ses girişini kabul etmek üzere yapılandırmak için veya PullAudioInputStream PushAudioInputStreamoluşturun. Ardından akış sınıfınızın bir örneğinden akışın sıkıştırma biçimini belirten bir AudioConfig oluşturun. Konuşma SDK'sı örneklerinde ilgili örnek kodu bulun.

adlı pullAudio bir giriş akışı sınıfınız olduğunu ve MP3 kullandığınızı varsayalım. Kodunuz şu şekilde görünebilir:

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

Başvuru belgeleri | Paketi (npm) | GitHub | Kitaplığı kaynak kodundaki ek örnekler

JavaScript için Konuşma SDK'sı sıkıştırılmış sesi desteklemez.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). Sıkıştırılmış bir ses dosyasını (mp3 gibi) giriş yapmak için, önce bunu varsayılan giriş biçiminde bir WAV dosyasına dönüştürmeniz gerekir. Sıkıştırılmış ses akışı yapmak için önce ses arabelleklerinin kodunu varsayılan giriş biçimine çözmeniz gerekir. Daha fazla bilgi için bkz . Ses giriş akışını kullanma.

Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler

Objective-C için Konuşma SDK'sı sıkıştırılmış sesi desteklemez.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). Sıkıştırılmış bir ses dosyasını (mp3 gibi) giriş yapmak için, önce bunu varsayılan giriş biçiminde bir WAV dosyasına dönüştürmeniz gerekir. Sıkıştırılmış ses akışı yapmak için önce ses arabelleklerinin kodunu varsayılan giriş biçimine çözmeniz gerekir. Daha fazla bilgi için bkz . Ses giriş akışını kullanma.

Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler

Swift için Konuşma SDK'sı sıkıştırılmış sesi desteklemez.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). Sıkıştırılmış bir ses dosyasını (mp3 gibi) giriş yapmak için, önce bunu varsayılan giriş biçiminde bir WAV dosyasına dönüştürmeniz gerekir. Sıkıştırılmış ses akışı yapmak için önce ses arabelleklerinin kodunu varsayılan giriş biçimine çözmeniz gerekir. Daha fazla bilgi için bkz . Ses giriş akışını kullanma.

Başvuru belgeleri | Paketi (PyPi) | GitHub'da ek örnekler

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma SDK'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma SDK'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

GStreamer ikili dosyalarının çalışma zamanında Konuşma SDK'sı tarafından yüklenebilmesi için sistem yolunda olması gerekir. Örneğin, Windows'da Konuşma SDK'sı çalışma zamanı sırasında veya gstreamer-1.0-0.dll (en son GStreamer için) bulursalibgstreamer-1.0-0.dll, GStreamer ikili dosyalarının sistem yolunda olduğu anlamına gelir.

Yükleme yönergeleri için bir platform seçin.

Birkaç bağımlılık ve eklenti yüklemeniz gerekir.

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

Daha fazla bilgi için bkz . Linux yükleme yönergeleri ve desteklenen Linux dağıtımları ve hedef mimariler.

Örnek

Konuşma SDK'sını sıkıştırılmış ses girişini kabul etmek üzere yapılandırmak için veya PushAudioInputStreamoluşturunPullAudioInputStream. Ardından akış sınıfınızın bir örneğinden akışın sıkıştırma biçimini belirten bir AudioConfig oluşturun.

Kullanım örneğinizin bir MP3 dosya için kullanıldığını PullStream varsayalım. Kodunuz şu şekilde görünebilir:


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)

Metne konuşma REST API başvurusu | Kısa ses başvurusu için metin REST API'sine konuşma | GitHub'da ek örnekler

Rest API'yi sıkıştırılmış ses için kullanabilirsiniz, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin.

Konuşma SDK'sı ve Konuşma CLI'sı, farklı giriş ses biçimlerini desteklemek için GStreamer kullanır. GStreamer, konuşma hizmetine ham PCM olarak gönderilmeden önce sesi açmaz.

Varsayılan ses akışı biçimi WAV 'dir (16 kHz veya 8 kHz, 16 bit ve mono PCM). WAV ve PCM dışında aşağıdaki sıkıştırılmış giriş biçimleri GStreamer aracılığıyla da desteklenir:

  • MP3
  • OPUS/OGG
  • FLAC
  • WAV kapsayıcısında ALAW
  • WAV kapsayıcısında MULAW
  • MP4 kapsayıcısı veya bilinmeyen medya biçimi için ANY

GStreamer yapılandırması

Konuşma CLI'sı sıkıştırılmış sesi işlemek için GStreamer'ı kullanabilir. Lisanslama nedenleriyle GStreamer ikili dosyaları derlenmemiş ve Konuşma CLI'sı ile bağlantılı değildir. Bazı bağımlılıkları ve eklentileri yüklemeniz gerekir.

GStreamer ikili dosyalarının çalışma zamanında Konuşma CLI'sı tarafından yüklenebilmesi için sistem yolunda olması gerekir. Örneğin, Windows'da Konuşma CLI'sı çalışma zamanı sırasında veya gstreamer-1.0-0.dll (en son GStreamer için) bulursalibgstreamer-1.0-0.dll, GStreamer ikili dosyalarının sistem yolunda olduğu anlamına gelir.

Yükleme yönergeleri için bir platform seçin.

Birkaç bağımlılık ve eklenti yüklemeniz gerekir.

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

Daha fazla bilgi için bkz . Linux yükleme yönergeleri ve desteklenen Linux dağıtımları ve hedef mimariler.

Örnek

--format seçeneği, tanınmakta olan ses dosyasının kapsayıcı biçimini belirtir. Bir mp4 dosyası için, aşağıdaki komutta gösterildiği gibi biçimi any olarak ayarlayın:

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

Desteklenen ses biçimlerinin listesini almak için aşağıdaki komutu çalıştırın:

spx help recognize format

Sonraki adımlar