Jak používat stream zvukového vstupu

Sada Speech SDK poskytuje způsob, jak streamovat zvuk do rozpoznávání jako alternativu k mikrofonu nebo vstupu souboru.

Tato příručka popisuje, jak používat zvukové vstupní streamy. Popisuje také některé požadavky a omezení zvukového vstupního streamu.

Podívejte se na další příklady rozpoznávání řeči na text pomocí streamu zvukového vstupu na GitHubu.

Identifikace formátu zvukového streamu

Určete formát zvukového streamu.

Podporované zvukové ukázky jsou:

  • Formát PCM (int-16, podepsaný)
  • Jeden kanál
  • 16 bitů na vzorek, 8 000 nebo 16 000 vzorků za sekundu (16 000 bajtů nebo 32 000 bajtů za sekundu)
  • Zarovnaný se dvěma bloky (16 bitů včetně odsazení vzorku)

Odpovídající kód v sadě SDK pro vytvoření zvukového formátu vypadá takto:

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

Ujistěte se, že váš kód poskytuje zvuková data RAW podle těchto specifikací. Také se ujistěte, že 16bitové vzorky přicházejí do malého endian formátu. Pokud vaše zdrojová data zvuku neodpovídají podporovaným formátům, musí se zvuk překódovat do požadovaného formátu.

Vytvoření vlastní třídy streamu zvukového vstupu

Můžete vytvořit vlastní třídu streamu zvukového vstupu odvozenou z PullAudioInputStreamCallback. Implementujte členy Read() a Close(). Přesný podpis funkce je závislý na jazyce, ale kód vypadá podobně jako v této ukázce kódu:

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

Vytvořte konfiguraci zvuku na základě formátu zvuku a vlastního zvukového vstupního streamu. Příklad:

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

Tady je postup, jak se vlastní zvukový vstupní stream používá v kontextu rozpoznávání řeči:

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

Další kroky