Como usar o fluxo de entrada de áudio
O SDK de fala fornece uma maneira de transmitir áudio para o reconhecedor como uma alternativa ao microfone ou entrada de arquivo.
Este guia descreve como usar fluxos de entrada de áudio. Ele também descreve alguns dos requisitos e limitações do fluxo de entrada de áudio.
Veja mais exemplos de reconhecimento de fala para texto com fluxo de entrada de áudio no GitHub.
Identificar o formato do fluxo de áudio
Identifique o formato do fluxo de áudio.
As amostras de áudio suportadas são:
- Formato PCM (int-16, assinado)
- Um canal
- 16 bits por amostra, 8.000 ou 16.000 amostras por segundo (16.000 bytes ou 32.000 bytes por segundo)
- Dois blocos alinhados (16 bits, incluindo preenchimento para uma amostra)
O código correspondente no SDK para criar o formato de áudio é semelhante a este exemplo:
byte channels = 1;
byte bitsPerSample = 16;
int samplesPerSecond = 16000; // or 8000
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
Certifique-se de que seu código fornece os dados de áudio RAW de acordo com essas especificações. Além disso, certifique-se de que as amostras de 16 bits cheguem no formato little-endian. Se os dados da fonte de áudio não corresponderem aos formatos suportados, o áudio deverá ser transcodificado para o formato necessário.
Crie sua própria classe de fluxo de entrada de áudio
Você pode criar sua própria classe de fluxo de entrada de áudio derivada de PullAudioInputStreamCallback
. Implementar o Read()
e Close()
membros. A assinatura da função exata depende do idioma, mas o código é semelhante a este exemplo de código:
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.
}
}
Crie uma configuração de áudio com base no seu formato de áudio e fluxo de entrada de áudio personalizado. Por exemplo:
var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);
Veja como o fluxo de entrada de áudio personalizado é usado no contexto de um reconhecedor de fala:
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}");
}
}
Próximos passos
- Guia de início rápido de fala para texto
- How to recognize speech (Como reconhecer voz)