Delen via


De audio-invoerstroom gebruiken

De Speech SDK biedt een manier om audio naar de recognizer te streamen als alternatief voor microfoon of bestandsinvoer.

In deze handleiding wordt beschreven hoe u audio-invoerstromen gebruikt. Ook worden enkele van de vereisten en beperkingen van de audio-invoerstroom beschreven.

Bekijk meer voorbeelden van spraak-naar-tekstherkenning met audio-invoerstream op GitHub.

De indeling van de audiostream identificeren

De indeling van de audiostream identificeren.

Ondersteunde audiovoorbeelden zijn:

  • PCM-indeling (int-16, ondertekend)
  • Eén kanaal
  • 16 bits per steekproef, 8.000 of 16.000 steekproeven per seconde (16.000 bytes of 32.000 bytes per seconde)
  • Twee blokken uitgelijnd (16 bits inclusief opvulling voor een voorbeeld)

De bijbehorende code in de SDK voor het maken van de audio-indeling ziet er als volgt uit:

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

Zorg ervoor dat uw code de RAW-audiogegevens levert op basis van deze specificaties. Zorg er ook voor dat 16-bits voorbeelden binnenkomen in de little-endian-indeling. Als uw audiobrongegevens niet overeenkomen met de ondersteunde indelingen, moet de audio in de vereiste indeling worden getranscodeerd.

Uw eigen audio-invoerstroomklasse maken

U kunt uw eigen audio-invoerstroomklasse maken die is afgeleid van PullAudioInputStreamCallback. Implementeer de Read() en Close() leden. De exacte functiehandtekening is afhankelijk van de taal, maar de code ziet er ongeveer als volgt uit:

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

Maak een audioconfiguratie op basis van uw audio-indeling en aangepaste audio-invoerstroom. Voorbeeld:

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

Hier ziet u hoe de aangepaste audio-invoerstroom wordt gebruikt in de context van een spraakherkenningsfunctie:

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

Volgende stappen