كيفية استخدام صوت الإدخال المضغوط

حزمة الوثائق المرجعية | (NuGet) | عينات إضافية على GitHub

يستخدم Speech SDK وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين GStreamer

يمكن لـ Speech SDK استخدام GStreamer لمعالجة الصوت المضغوط. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech SDK. تحتاج إلى تثبيت بعض التبعيات والمكونات الإضافية.

يجب أن تكون ثنائيات GStreamer في مسار النظام بحيث يمكن تحميلها بواسطة Speech SDK في وقت التشغيل. على سبيل المثال، في Windows، إذا عثر libgstreamer-1.0-0.dll على Speech SDK أو 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 audio stream API.

لنفترض أن لديك فئة دفق إدخال تسمى pullStream وتستخدم OPUS/OGG. قد يبدو الرمز الخاص بك كما يلي:

using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

// ... omitted for brevity

var speechConfig =
    SpeechConfig.FromSubscription(
        "YourSubscriptionKey",
        "YourServiceRegion");

// Create an audio config specifying the compressed
// audio format and the instance of your input stream class.
var pullStream = AudioInputStream.CreatePullStream(
    AudioStreamFormat.GetCompressedFormat(AudioStreamContainerFormat.OGG_OPUS));
var audioConfig = AudioConfig.FromStreamInput(pullStream);

using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);
var result = await recognizer.RecognizeOnceAsync();

var text = result.Text;

حزمة الوثائق المرجعية | (NuGet) | عينات إضافية على GitHub

يستخدم Speech SDK وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين GStreamer

يمكن لـ Speech SDK استخدام GStreamer لمعالجة الصوت المضغوط. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech SDK. تحتاج إلى تثبيت بعض التبعيات والمكونات الإضافية.

يجب أن تكون ثنائيات GStreamer في مسار النظام بحيث يمكن تحميلها بواسطة Speech SDK في وقت التشغيل. على سبيل المثال، في Windows، إذا عثر libgstreamer-1.0-0.dll على Speech SDK أو gstreamer-1.0-0.dll (لأحدث GStreamer) خلال وقت التشغيل، فهذا يعني أن ثنائيات GStreamer موجودة في مسار النظام.

اختر نظاما أساسيا لإرشادات التثبيت.

تحتاج إلى تثبيت العديد من التبعيات والمكونات الإضافية.

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

لمزيد من المعلومات، راجع إرشادات تثبيت Linux وتوزيعات Linux المدعومة والبنى المستهدفة.

مثال

لتكوين Speech SDK لقبول إدخال الصوت المضغوط، قم بإنشاء PullAudioInputStream أو PushAudioInputStream. بعد ذلك، قم بإنشاء AudioConfig من مثيل لفئة الدفق التي تحدد تنسيق ضغط الدفق. ابحث عن نموذج التعليمات البرمجية ذات الصلة في نماذجSpeech SDK.

لنفترض أن لديك فئة دفق إدخال تسمى pushStream وتستخدم OPUS/OGG. قد يبدو الرمز الخاص بك كما يلي:

using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;

// ... omitted for brevity

 auto config =
    SpeechConfig::FromSubscription(
        "YourSubscriptionKey",
        "YourServiceRegion"
    );

// Create an audio config specifying the compressed
// audio format and the instance of your input stream class.
auto pullStream = AudioInputStream::CreatePullStream(
    AudioStreamFormat::GetCompressedFormat(AudioStreamContainerFormat::OGG_OPUS));
auto audioConfig = AudioConfig::FromStreamInput(pullStream);

auto recognizer = SpeechRecognizer::FromConfig(config, audioConfig);
auto result = recognizer->RecognizeOnceAsync().get();

auto text = result->Text;

الوثائق المرجعية | حزمة (Go) | عينات إضافية على GitHub

يستخدم Speech SDK وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين 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 وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين GStreamer

يمكن لـ Speech SDK استخدام GStreamer لمعالجة الصوت المضغوط. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech SDK. تحتاج إلى تثبيت بعض التبعيات والمكونات الإضافية.

يجب أن تكون ثنائيات GStreamer في مسار النظام بحيث يمكن تحميلها بواسطة Speech SDK في وقت التشغيل. على سبيل المثال، في Windows، إذا عثر libgstreamer-1.0-0.dll على Speech SDK أو gstreamer-1.0-0.dll (لأحدث GStreamer) خلال وقت التشغيل، فهذا يعني أن ثنائيات GStreamer موجودة في مسار النظام.

اختر نظاما أساسيا لإرشادات التثبيت.

يتم تنفيذ معالجة الصوت المضغوط باستخدام GStreamer. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech SDK. بدلاً من ذلك، تحتاج إلى استخدام الثنائيات التي تم إنشاؤها مسبقا لنظام Android. لتنزيل المكتبات التي تم إنشاؤها مسبقا، راجع التثبيت لتطوير Android.

libgstreamer_android.so الكائن مطلوب. تأكد من ربط جميع المكونات الإضافية لـ GStreamer (من ملف Android.mk التالي) في libgstreamer_android.so. عند استخدام Speech SDK مع GStreamer الإصدار 1.18.3، libc++_shared.so مطلوب أيضاً أن يكون موجوداً من android ndk.

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

يتم توفير مثال Android.mk وملف Application.mk هنا. اتبع هذه الخطوات لإنشاء gstreamer الكائن المشترك:libgstreamer_android.so.

# Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := dummy
LOCAL_SHARED_LIBRARIES := gstreamer_android
include $(BUILD_SHARED_LIBRARY)

ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif

ifndef APP_BUILD_SCRIPT
$(error APP_BUILD_SCRIPT is not defined!)
endif

ifndef TARGET_ARCH_ABI
$(error TARGET_ARCH_ABI is not defined!)
endif

ifeq ($(TARGET_ARCH_ABI),armeabi)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm
else ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/armv7
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm64
else ifeq ($(TARGET_ARCH_ABI),x86)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86
else ifeq ($(TARGET_ARCH_ABI),x86_64)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86_64
else
$(error Target arch ABI not supported: $(TARGET_ARCH_ABI))
endif

GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS         :=  $(GSTREAMER_PLUGINS_CORE) \ 
                              $(GSTREAMER_PLUGINS_CODECS) \ 
                              $(GSTREAMER_PLUGINS_PLAYBACK) \
                              $(GSTREAMER_PLUGINS_CODECS_GPL) \
                              $(GSTREAMER_PLUGINS_CODECS_RESTRICTED)
GSTREAMER_EXTRA_LIBS      := -liconv -lgstbase-1.0 -lGLESv2 -lEGL
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
# Application.mk
APP_STL = c++_shared
APP_PLATFORM = android-21
APP_BUILD_SCRIPT = Android.mk

يمكنك الإنشاء libgstreamer_android.so باستخدام الأمر التالي على Ubuntu 18.04 أو 20.04. تم اختبار أسطر الأوامر التالية ل [GStreamer Android الإصدار 1.14.4] مع 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)

بعد إنشاء الكائن المشترك (libgstreamer_android.so)، ضع الكائن المشترك في تطبيق Android بحيث يمكن لـ Speech SDK تحميله.

مثال

لتكوين Speech SDK لقبول إدخال الصوت المضغوط، قم بإنشاء PullAudioInputStream أو PushAudioInputStream. بعد ذلك، قم بإنشاء AudioConfig من مثيل لفئة الدفق التي تحدد تنسيق ضغط الدفق. ابحث عن نموذج التعليمات البرمجية ذات الصلة في نماذجSpeech SDK.

لنفترض أن لديك فئة دفق إدخال تسمى pullAudio وتستخدم MP3. قد يبدو الرمز الخاص بك كما يلي:

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

حزمة | الوثائق المرجعية (npm) | عينات إضافية على GitHub | التعليمة البرمجية لمصدر المكتبة

لا يدعم Speech SDK لـ JavaScript الصوت المضغوط.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). لإدخال ملف صوتي مضغوط (مثل mp3)، يجب أولا تحويله إلى ملف WAV بتنسيق الإدخال الافتراضي. لدفق الصوت المضغوط، يجب أولا فك تشفير المخازن المؤقتة للصوت إلى تنسيق الإدخال الافتراضي. لمزيد من المعلومات بشأن الدفق، راجع كيفية استخدام دفق إدخال الصوت.

الوثائق المرجعية | حزمة (التنزيل) | نماذج إضافية على GitHub

لا يدعم Speech SDK لـ Objective-C الصوت المضغوط.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). لإدخال ملف صوتي مضغوط (مثل mp3)، يجب أولا تحويله إلى ملف WAV بتنسيق الإدخال الافتراضي. لدفق الصوت المضغوط، يجب أولا فك تشفير المخازن المؤقتة للصوت إلى تنسيق الإدخال الافتراضي. لمزيد من المعلومات بشأن الدفق، راجع كيفية استخدام دفق إدخال الصوت.

الوثائق المرجعية | حزمة (التنزيل) | نماذج إضافية على GitHub

لا يدعم Speech SDK لـ Swift الصوت المضغوط.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). لإدخال ملف صوتي مضغوط (مثل mp3)، يجب أولا تحويله إلى ملف WAV بتنسيق الإدخال الافتراضي. لدفق الصوت المضغوط، يجب أولا فك تشفير المخازن المؤقتة للصوت إلى تنسيق الإدخال الافتراضي. لمزيد من المعلومات بشأن الدفق، راجع كيفية استخدام دفق إدخال الصوت.

حزمة الوثائق المرجعية | (PyPi) | عينات إضافية على GitHub

يستخدم Speech SDK وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين GStreamer

يمكن لـ Speech SDK استخدام GStreamer لمعالجة الصوت المضغوط. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech SDK. تحتاج إلى تثبيت بعض التبعيات والمكونات الإضافية.

يجب أن تكون ثنائيات GStreamer في مسار النظام بحيث يمكن تحميلها بواسطة Speech SDK في وقت التشغيل. على سبيل المثال، في Windows، إذا عثر libgstreamer-1.0-0.dll على Speech SDK أو 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 من مثيل لفئة الدفق التي تحدد تنسيق ضغط الدفق.

لنفترض أن حالة الاستخدام الخاصة بك هي استخدام PullStream لملف MP3. قد يبدو الرمز الخاص بك كما يلي:


import azure.cognitiveservices.speech as speechsdk

class BinaryFileReaderCallback(speechsdk.audio.PullAudioInputStreamCallback):
    def __init__(self, filename: str):
        super().__init__()
        self._file_h = open(filename, "rb")

    def read(self, buffer: memoryview) -> int:
        print('trying to read {} frames'.format(buffer.nbytes))
        try:
            size = buffer.nbytes
            frames = self._file_h.read(size)

            buffer[:len(frames)] = frames
            print('read {} frames'.format(len(frames)))

            return len(frames)
        except Exception as ex:
            print('Exception in `read`: {}'.format(ex))
            raise

    def close(self) -> None:
        print('closing file')
        try:
            self._file_h.close()
        except Exception as ex:
            print('Exception in `close`: {}'.format(ex))
            raise

def compressed_stream_helper(compressed_format,
        mp3_file_path,
        default_speech_auth):
    callback = BinaryFileReaderCallback(mp3_file_path)
    stream = speechsdk.audio.PullAudioInputStream(stream_format=compressed_format, pull_stream_callback=callback)

    speech_config = speechsdk.SpeechConfig(**default_speech_auth)
    audio_config = speechsdk.audio.AudioConfig(stream=stream)

    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    done = False

    def stop_cb(evt):
        """callback that signals to stop continuous recognition upon receiving an event `evt`"""
        print('CLOSING on {}'.format(evt))
        nonlocal done
        done = True

    # Connect callbacks to the events fired by the speech recognizer
    speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
    speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
    speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
    speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
    speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))
    # stop continuous recognition on either session stopped or canceled events
    speech_recognizer.session_stopped.connect(stop_cb)
    speech_recognizer.canceled.connect(stop_cb)

    # Start continuous speech recognition
    speech_recognizer.start_continuous_recognition()
    while not done:
        time.sleep(.5)

    speech_recognizer.stop_continuous_recognition()

def pull_audio_input_stream_compressed_mp3(mp3_file_path: str,
        default_speech_auth):
    # Create a compressed format
    compressed_format = speechsdk.audio.AudioStreamFormat(compressed_stream_format=speechsdk.AudioStreamContainerFormat.MP3)
    compressed_stream_helper(compressed_format, mp3_file_path, default_speech_auth)

يشير | Speech to text REST API إلى Speech to text REST API for short audio reference | Additional Samples on GitHub

يمكنك استخدام واجهة برمجة تطبيقات REST للصوت المضغوط، ولكننا لم ندرج بعد دليلا هنا. يُرجى تحديد لغة برمجة أخرى للبدء والتعرف على المفاهيم.

يستخدم Speech SDK وSpeech CLI GStreamer لدعم أنواع مختلفة من تنسيقات صوت الإدخال. يقوم GStreamer بفك ضغط الصوت قبل إرساله عبر السلك إلى خدمة الكلام ك PCM أولي.

تنسيق تدفق الصوت الافتراضي هو WAV (16 كيلوهرتز أو 8 كيلوهرتز و16 بت وPCM أحادي). خارج WAV وPCM، يتم دعم تنسيقات الإدخال المضغوطة التالية أيضًا من خلال GStreamer:

  • MP3
  • OPUS/OGG
  • FLAC
  • ALAW في حاوية WAV
  • MULAW في حاوية WAV
  • ANY لحاوية MP4 أو تنسيق وسائط غير معروف

تكوين GStreamer

يمكن لـ Speech CLI استخدام GStreamer لمعالجة الصوت المضغوط. لأسباب تتعلق بالترخيص، لا يتم تحويل ثنائيات GStreamer برمجيا وربطها بـ Speech CLI. تحتاج إلى تثبيت بعض التبعيات والمكونات الإضافية.

يجب أن تكون ثنائيات GStreamer في مسار النظام بحيث يمكن تحميلها بواسطة Speech CLI في وقت التشغيل. على سبيل المثال، في Windows، إذا عثر libgstreamer-1.0-0.dll على Speech CLI أو 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

الخطوات التالية