Guide pratique pour utiliser le flux d’entrée audio

Le Kit de développement logiciel (SDK) Speech permet de diffuser du contenu audio dans le module de reconnaissance comme alternative à l’entrée de microphone ou de fichier.

Ce guide explique l’utilisation des flux d’entrée audio. Certaines exigences et limitations du flux d’entrée audio y sont également décrites.

Consultez d’autres exemples de reconnaissance vocale avec un flux d’entrée audio sur GitHub.

Identifiez le format du flux audio

Identifiez le format du flux audio.

Les exemples de format audio pris en charge sont les suivants :

  • Format PCM (int-16, signé)
  • Un canal
  • 16 bits par échantillon, 8 000 ou 16 000 échantillons par seconde (16 000 octets ou 32 000 octets par seconde)
  • Alignement sur deux blocs (16 bits incluant le remplissage pour un échantillon)

Dans le SDK, le code correspondant pour créer le format audio est similaire à cet exemple :

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

Vérifiez que votre code fournit les données audio RAW respectant ces spécifications. Assurez-vous également que les échantillons 16 bits sont fournis au format little-endian. Si vos données sources audio ne correspondent pas aux formats pris en charge, le fichier audio doit être converti au format requis.

Créez votre propre classe de flux d’entrée audio

Vous pouvez créer votre propre classe de flux d’entrée audio dérivée de PullAudioInputStreamCallback. Implémentez les membres Read() et Close(). La signature de fonction exacte dépend de la langue, mais le code ressemble à cet exemple :

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

Créez une configuration audio basée sur votre format audio et flux d’entrée audio personnalisé. Par exemple :

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

Voici comment le flux d’entrée audio personnalisé est utilisé dans le contexte d’un module de reconnaissance vocale :

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

Étapes suivantes