2008-10-31 4 views
5

현재 특정 오디오 형식으로 인코딩 된 음성을 전송해야하는 응용 프로그램을 작성 중입니다. I는 실행하려고하면 질문 SpeechSynthesizer.SetOutputToAudioStream 오디오 형식 문제

System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat = 
         new System.Speech.AudioFormat.SpeechAudioFormatInfo(System.Speech.AudioFormat.EncodingFormat.Pcm, 
          8000, 16, 1, 16000, 2, null); 

는 오디오 PCM 포맷 초당 8,000 샘플, 샘플 당 16 비트, 모노 초당 16,000 평균 바이트 2

의 블록 정렬 중임 다음 코드에서는 MemoryStream 인스턴스에 아무 것도 기록되지 않습니다. 그러나 초당 8000 샘플에서 11025로 변경하면 오디오 데이터가 성공적으로 기록됩니다.

SpeechSynthesizer synthesizer = new SpeechSynthesizer(); 
waveStream = new MemoryStream(); 

PromptBuilder pbuilder = new PromptBuilder(); 
PromptStyle pStyle = new PromptStyle(); 

pStyle.Emphasis = PromptEmphasis.None; 
pStyle.Rate = PromptRate.Fast; 
pStyle.Volume = PromptVolume.ExtraLoud; 

pbuilder.StartStyle(pStyle); 
pbuilder.StartParagraph(); 
pbuilder.StartVoice(VoiceGender.Male, VoiceAge.Teen, 2); 
pbuilder.StartSentence(); 
pbuilder.AppendText("This is some text."); 
pbuilder.EndSentence(); 
pbuilder.EndVoice(); 
pbuilder.EndParagraph(); 
pbuilder.EndStyle(); 

synthesizer.SetOutputToAudioStream(waveStream, synthFormat); 
synthesizer.Speak(pbuilder); 
synthesizer.SetOutputToNull(); 

는 초당 11,025 샘플에 성공하지 8000 이유는이 8000의 샘플 레이트를 사용하고 내가 SetOutputToAudioStream에 관한 문서에 유용 아무것도 찾을 수 없습니다 때 기록 된 예외 나 오류가 없습니다 일부 사운드 편집 도구를 사용하여 생성하고 올바른 샘플 속도로 변환 한 wav 파일을 포함하는 해결 방법을 제공하지만 가능한 경우 응용 프로그램 내에서 오디오를 생성하고 싶습니다.

관심의 하나의 특별한 점은 SpeechRecognitionEngine가 성공적으로 오디오 형식과 내 합성 웨이브 파일의 연설을 ... 인식 것을 받아들이는 것이 었습니다

업데이트 : 최근에이 오디오 포맷은 특정 설치 음색 성공하지만 실패 발견 다른 사람들을 위해. 특히 LH Michael과 LH Michelle에서는 실패하고 PromptBuilder에 정의 된 특정 음성 설정에 따라 오류가 달라집니다.

답변

3

을 가지고 그들은 본질적으로 샘플을 생성하기 때문에> 8000 Hz). SAPI를 사용하면 엔진이 지원되지 않는 요율을 거부 할 수 있습니다.

1

신디사이저에서 11025로 붙어 있다면 오디오 데이터를 다른 샘플 속도로 변환 할 수 있도록 일부 라이브러리를 내 NAudio 라이브러리에서 만들었습니다. 그것은합니다 (LH 마이클과 LH 미셸 목소리는 단순히 8000 Hz의 샘플 속도를 지원하지 않는 것이 전적으로 가능 A (ACM을 사용) WaveFormatConversionStream 봐 또는 ResamplerDMO (다이렉트 X 미디어 객체가 사용하는)

+0

만약 내가 당신을 방해하면, 당신은 오디오 거즈의 전문가라고 생각합니다, 나는 [이 질문이] (http://stackoverflow.com/q/33932390/2651073) 나를 혼란스럽게 했으니 까, 나를 도울 수 있겠 니? 그? – Ahmad

1

나는 비슷한 문제가있어 누군가에게 도움이 될 경우 회신을 보내고 싶었습니다. 이 스레드는 대답을 찾는 방향으로 나를 잡았습니다. 내 문제는 SpeechSynthesizer 출력을 WAV 파일로 보낸 다음 NAudio로 WAV 파일을 재생하는 것이 었습니다. 파일로 출력 할 때 수정없이 작동했습니다. 그러나 MemoryStream을 사용하려고 시도하면 다시 재생되지만 너무 빨리 들리는 것은 모두 들썩입니다.

SpeechSynthesizer를 출력이 코드는 문제를 해결하고, 더 변형이 NAudio 측에 필요하지 않다 :

88,200
SpeechAudioFormatInfo synthFormat = new SpeechAudioFormatInfo(EncodingFormat.Pcm, 88200, 16, 1, 16000, 2, null); 
synth.SetOutputToAudioStream(streamAudio, synthFormat); 

키이다. 기본적으로 이것은 11025입니다. SpeechAudioFormatInfo를 만들고이를 88200으로 설정하면됩니다.