Speech SDK는 마이크 또는 파일 입력의 대안으로 오디오를 인식기에 스트리밍하는 방법을 제공합니다.
이 가이드에서는 오디오 입력 스트림을 사용하는 방법을 설명합니다. 또한 오디오 입력 스트림의 몇 가지 요구 사항 및 제한 사항에 대해서도 설명합니다.
GitHub에서 오디오 입력 스트림을 사용한 음성 텍스트 변환 인식의 다양한 예제를 참조하세요.
오디오 스트림의 형식을 식별합니다.
오디오 스트림의 형식을 식별합니다.
지원되는 오디오 샘플은 다음과 같습니다.
- PCM 형식(int-16, 부호화)
- 하나의 채널
- 샘플당 16비트, 초당 샘플 8,000개 또는 샘플 16,000개(초당 16,000바이트 또는 초당 32,000바이트)
- 2블록 맞춤(샘플의 안쪽 여백 포함 16비트)
오디오 형식을 만들기 위한 SDK의 해당 코드는 다음 예제와 같습니다.
byte channels = 1;
byte bitsPerSample = 16;
int samplesPerSecond = 16000; // or 8000
var audioFormat = AudioStreamFormat.GetWaveFormatPCM(samplesPerSecond, bitsPerSample, channels);
코드가 이러한 사양에 따라 RAW 오디오 데이터를 제공하는지 확인합니다. 또한 16비트 샘플이 little-endian 형식인지 확인합니다. 오디오 원본 데이터가 지원되는 형식과 일치하지 않는 경우, 오디오를 필요한 형식으로 트랜스코딩해야 합니다.
고유한 오디오 입력 스트림 클래스 만들기
PullAudioInputStreamCallback에서 파생된 고유한 오디오 입력 스트림 클래스를 만들 수 있습니다. Read() 및 Close() 멤버를 구현합니다. 정확한 함수 시그니처는 언어에 따라 다르지만 코드는 다음 코드 샘플과 유사합니다.
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.
}
}
오디오 형식 및 사용자 지정 오디오 입력 스트림을 기반으로 오디오 구성을 만듭니다. 예시:
var audioConfig = AudioConfig.FromStreamInput(new ContosoAudioStream(), audioFormat);
음성 인식기의 컨텍스트에서 사용자 지정 오디오 입력 스트림을 사용하는 방법은 다음과 같습니다.
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}");
}
}