Share via


Ses giriş akışını kullanma

Konuşma SDK'sı, mikrofona veya dosya girişine alternatif olarak tanıyıcıya ses akışı yapmak için bir yol sağlar.

Bu kılavuzda ses giriş akışlarının nasıl kullanılacağı açıklanmaktadır. Ayrıca ses giriş akışının bazı gereksinimleri ve sınırlamaları açıklanmaktadır.

GitHub'da ses giriş akışıyla konuşmayı metin tanımaya yönelik diğer örneklere bakın.

Ses akışının biçimini belirleme

Ses akışının biçimini belirleyin.

Desteklenen ses örnekleri şunlardır:

  • PCM biçimi (int-16, imzalı)
  • Bir kanal
  • Örnek başına 16 bit, saniyede 8.000 veya 16.000 örnek (saniyede 16.000 bayt veya 32.000 bayt)
  • İki blok hizalı (örnek için doldurma dahil 16 bit)

Ses biçimini oluşturmak için SDK'da karşılık gelen kod şu örneğe benzer:

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

Kodunuzun RAW ses verilerini bu belirtimlere göre sağladığından emin olun. Ayrıca, 16 bit örneklerin little-endian biçiminde ulaştığından emin olun. Ses kaynağı verileriniz desteklenen biçimlere uymuyorsa, sesin gerekli biçime dönüştürülmesi gerekir.

Kendi ses giriş akışı sınıfınızı oluşturma

öğesinden PullAudioInputStreamCallbacktüretilmiş kendi ses giriş akışı sınıfınızı oluşturabilirsiniz. ve Close() üyelerini Read() uygulayın. Tam işlev imzası dile bağlıdır, ancak kod şu kod örneğine benzer:

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

Ses biçiminize ve özel ses giriş akışınıza göre bir ses yapılandırması oluşturun. Örneğin:

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

Konuşma tanıma bağlamında özel ses giriş akışı şu şekilde kullanılır:

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

Sonraki adımlar