Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zestaw SPEECH SDK umożliwia przesyłanie strumieniowe dźwięku do aparatu rozpoznawania jako alternatywę dla mikrofonu lub danych wejściowych plików.
W tym przewodniku opisano sposób używania strumieni wejściowych audio. Opisuje również niektóre wymagania i ograniczenia strumienia wejściowego audio.
Zobacz więcej przykładów rozpoznawania mowy na tekst ze strumieniem wejściowym audio w usłudze GitHub.
Identyfikowanie formatu strumienia audio
Zidentyfikuj format strumienia audio.
Obsługiwane przykłady audio to:
- Format PCM (int-16, podpisany)
- Jeden kanał
- 16 bitów na próbkę, 8000 lub 16 000 próbek na sekundę (16 000 bajtów lub 32 000 bajtów na sekundę)
- Wyrównane do dwóch bloków (16 bitów, w tym wypełnienie próbki)
Odpowiedni kod w zestawie SDK do utworzenia formatu audio wygląda następująco:
byte channels = 1;
byte bitsPerSample = 16;
int samplesPerSecond = 16000; // or 8000
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
Upewnij się, że kod dostarcza nieprzetworzone dane audio zgodnie z tymi specyfikacjami. Upewnij się również, że 16-bitowe próbki są dostarczane w formacie mało endianu. Jeśli dane źródła audio nie są zgodne z obsługiwanymi formatami, dźwięk musi być transkodowany w wymaganym formacie.
Tworzenie własnej klasy strumienia wejściowego audio
Możesz utworzyć własną klasę strumienia wejściowego audio pochodzącą z PullAudioInputStreamCallbackklasy . Zaimplementuj elementy członkowskie Read() i Close(). Dokładny podpis funkcji jest zależny od języka, ale kod wygląda podobnie do tego przykładowego kodu:
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.
}
}
Utwórz konfigurację audio na podstawie formatu audio i niestandardowego strumienia wejściowego audio. Na przykład:
var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);
Poniżej przedstawiono sposób użycia niestandardowego strumienia wejściowego audio w kontekście rozpoznawania mowy:
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}");
}
}