Cara menggunakan aliran input audio

SDK Ucapan menyediakan cara untuk mengalirkan audio ke pengenal sebagai alternatif untuk mikrofon atau input file.

Panduan ini menjelaskan cara menggunakan aliran input audio. Ini juga menjelaskan beberapa persyaratan dan batasan aliran input audio.

Lihat contoh pengenalan ucapan ke teks lainnya dengan aliran input audio di GitHub.

Mengidentifikasi format aliran audio

Identifikasi format aliran audio.

Sampel audio yang didukung adalah:

  • Format PCM (int-16, ditandatangani)
  • Satu saluran
  • 16 bit per sampel, 8.000 atau 16.000 sampel per detik (16.000 byte atau 32.000 byte per detik)
  • Dua blok sejajar (16 bit termasuk padding untuk sampel)

Kode yang sesuai dalam SDK tersebut untuk membuat format audio akan terlihat seperti ini:

byte channels = 1;
byte bitsPerSample = 16;
int samplesPerSecond = 16000; // or 8000
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);

Pastikan kode Anda memberikan data audio RAW sesuai dengan spesifikasi ini. Juga, pastikan bahwa sampel 16-bit hadir dalam format endian kecil. Jika data sumber audio Anda tidak cocok dengan format yang didukung, audio harus ditranskodekan menjadi format yang diperlukan.

Membuat kelas aliran input audio Anda sendiri

Anda dapat membuat kelas aliran input audio Anda sendiri yang berasal dari PullAudioInputStreamCallback. Terapkan anggota Read() dan Close(). Tanda tangan fungsi yang tepat bergantung pada bahasa, tetapi kode tersebut akan terlihat mirip dengan sampel kode ini:

public class ContosoAudioStream : PullAudioInputStreamCallback 
{
    public ContosoAudioStream() {}

    public override int Read(byte[] buffer, uint size) 
    {
        // Returns audio data to the caller.
        // E.g., return read(config.YYY, buffer, size);
        return 0;
    }

    public override void Close() 
    {
        // Close and clean up resources.
    }
}

Buat konfigurasi audio berdasarkan format audio dan aliran input audio kustom Anda. Misalnya:

var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);

Berikut adalah cara aliran input audio kustom digunakan dalam konteks pengenal ucapan:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

public class ContosoAudioStream : PullAudioInputStreamCallback 
{
    public ContosoAudioStream() {}

    public override int Read(byte[] buffer, uint size) 
    {
        // Returns audio data to the caller.
        // E.g., return read(config.YYY, buffer, size);
        return 0;
    }

    public override void Close() 
    {
        // Close and clean up resources.
    }
}

class Program 
{
    static string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY");
    static string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION");

    async static Task Main(string[] args)
    {
        byte channels = 1;
        byte bitsPerSample = 16;
        uint samplesPerSecond = 16000; // or 8000
        var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
        var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);

        var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion); 
        speechConfig.SpeechRecognitionLanguage = "en-US";
        var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }
}

Langkah berikutnya