Informazioni il flusso di input audio
L'SDK di Voce consente di trasmettere l'audio nel sistema di riconoscimento come alternativa all'input del microfono o del file.
Questa guida illustra come usare il flusso di input audio. Descrive anche alcuni requisiti e limitazioni di tale flusso.
Vedere altri esempi di riconoscimento vocale con il flusso di input audio in GitHub.
Identificare il formato del flusso audio
Identificare il formato del flusso audio.
Gli esempi audio supportati sono:
- Formato PCM (int-16, firmato)
- Un canale
- 16 bit per campione, 8.000 o 16.000 campioni al secondo (16.000 byte o 32.000 byte al secondo)
- Allineamento a due blocchi (16 bit inclusa la spaziatura interna per un campione)
Il codice corrispondente nell'SDK per creare il formato audio sarà simile all'esempio seguente:
byte channels = 1;
byte bitsPerSample = 16;
int samplesPerSecond = 16000; // or 8000
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
Assicurarsi che il codice fornisca i dati audio RAW in base a queste specifiche. Assicurarsi inoltre che gli esempi a 16 bit arrivino in formato Little-Endian. Se i dati dell’origine audio non corrispondono ai formati supportati, l'audio deve essere transcodificato nel formato richiesto.
Creare una classe di flusso di input audio personalizzata
È possibile creare la classe di flusso di input audio personalizzato da PullAudioInputStreamCallback
. Implementare i membri Read()
e Close()
. La firma esatta della funzione dipende dalla lingua, ma il codice è simile a questo esempio di codice:
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.
}
}
Creare una configurazione audio basata sul formato audio e sul flusso di input audio personalizzato. Ad esempio:
var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);
Ecco come viene usato il flusso di input audio personalizzato nel contesto di un riconoscimento 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}");
}
}