Så här använder du ljudindataströmmen

Speech SDK är ett sätt att strömma ljud till identifieraren som ett alternativ till mikrofon- eller filinmatning.

Den här guiden beskriver hur du använder ljudindataströmmar. Den beskriver också några av kraven och begränsningarna för ljudindataströmmen.

Se fler exempel på tal till textigenkänning med ljudindataström på GitHub.

Identifiera formatet på ljudströmmen

Identifiera formatet på ljudströmmen.

Ljudexempel som stöds är:

  • PCM-format (int-16, signerat)
  • En kanal
  • 16 bitar per exempel, 8 000 eller 16 000 exempel per sekund (16 000 byte eller 32 000 byte per sekund)
  • Tvåblocksjusterad (16 bitar inklusive utfyllnad för ett exempel)

Motsvarande kod i SDK för att skapa ljudformatet ser ut så här:

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

Kontrollera att koden tillhandahåller RAW-ljuddata enligt dessa specifikationer. Kontrollera också att 16-bitarsprover kommer i lite endianskt format. Om ljudkällans data inte matchar de format som stöds måste ljudet omkodas till det format som krävs.

Skapa en egen ljudindataströmsklass

Du kan skapa en egen ljudindataströmsklass som härletts från PullAudioInputStreamCallback. Read() Implementera medlemmarna ochClose(). Den exakta funktionssignaturen är språkberoende, men koden ser ut ungefär som det här kodexemplet:

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

Skapa en ljudkonfiguration baserat på ditt ljudformat och din anpassade ljudindataström. Till exempel:

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

Så här används den anpassade ljudindataströmmen i kontexten för en taligenkänning:

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

Nästa steg