Megosztás a következőn keresztül:


A hangbemeneti stream használata

A Speech SDK lehetővé teszi a hang átvitelét a felismerőbe a mikrofon vagy fájlbemenet alternatívájaként.

Ez az útmutató a hangbemeneti streamek használatát ismerteti. Emellett a hangbemeneti stream néhány követelményét és korlátozását is ismerteti.

További példák a beszéd-szövegfelismerésre hangbemeneti adatfolyammal a GitHubon.

A hangstream formátumának azonosítása

Azonosítsa a hangstream formátumát.

A támogatott hangminták a következők:

  • PCM formátum (int-16, aláírt)
  • Egy csatorna
  • 16 bit mintánként, 8000 vagy 16 000 minta másodpercenként (16 000 bájt vagy 32 000 bájt másodpercenként)
  • Kétblokkos igazítás (16 bites, beleértve a minta párnázását)

A hangformátum létrehozásához az SDK megfelelő kódja az alábbi példához hasonlóan néz ki:

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

Győződjön meg arról, hogy a kód ezeknek a specifikációknak megfelelően biztosítja a RAW hangadatokat. Győződjön meg arról is, hogy a 16 bites minták kis endian formátumban érkeznek. Ha a hangforrás adatai nem felelnek meg a támogatott formátumnak, a hangot át kell kódolni a szükséges formátumra.

Saját hangbemeneti streamosztály létrehozása

Létrehozhat saját hangbemeneti streamosztályt a forrásból PullAudioInputStreamCallback. Implementálja a tagokat és Close() a Read() tagokat. A függvény pontos aláírása nyelvfüggő, de a kód ehhez a kódmintához hasonlóan néz ki:

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

Hangkonfiguráció létrehozása a hangformátum és az egyéni hangbemeneti adatfolyam alapján. Példa:

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

Az egyéni hangbemeneti stream használata a beszédfelismerő kontextusában történik:

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

Következő lépések