문제

현재 특정 오디오 형식으로 인코딩 된 음성 전송이 필요한 응용 프로그램을 연구하고 있습니다.

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

이는 오디오가 PCM 형식, 초당 8000 개의 샘플, 샘플 당 16 비트, 모노, 초당 16000 바이트, 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(); 

8000의 샘플 속도를 사용할 때 기록 된 예외 또는 오류는 없으며 SetoutputtoAudiostream과 관련하여 문서에서 유용한 내용을 찾을 수 없었으며 초당 11025 샘플에서 8000이 아닌 성공한 이유를 찾을 수 없었습니다. 사운드 편집 도구를 사용하여 올바른 샘플 속도로 생성 및 변환했지만 가능하면 응용 프로그램 내에서 오디오를 생성하고 싶습니다.

관심있는 한 가지 중요한 점은 SpeechRecognitionEngine이 오디오 형식을 받아들이고 합성 된 웨이브 파일에서 음성을 성공적으로 인식했다는 것입니다.

업데이트 : 최근 에이 오디오 형식은 특정 설치된 음성에 성공하지만 다른 사람들에게는 실패한다는 것을 발견했습니다. LH Michael 및 LH Michelle에게는 구체적으로 실패하며 프롬프트 빌더에 정의 된 특정 음성 설정마다 실패가 다릅니다.

도움이 되었습니까?

해결책

LH Michael과 LH Michelle Voices는 단순히 8000Hz 샘플 속도를 지원하지 않을 가능성이 있습니다 (본질적으로 샘플> 8000Hz를 생성하기 때문에). SAPI를 사용하면 엔진이 지원되지 않는 요금을 거부 할 수 있습니다.

다른 팁

나는 내 수업을 만들었습니다 나우 디오 신시사이저에서 11025가 붙어있는 경우 오디오 데이터를 다른 샘플 속도로 변환 할 수 있도록 라이브러리. 살펴보십시오 WaveFormatConversionStream (ACM을 사용하는) 또는 ResamplerDMO (DirectX 미디어 개체 사용)

나는 비슷한 문제를 겪고 있었고 다른 사람을 돕는 경우에 대비하여 답장을 게시하고 싶었습니다. 이 스레드는 저를 답을 찾는 데 도움이되었습니다. 내 문제는 SpeechSynthesizer 출력을 WAV 파일로 출력 한 다음 Naudio와 함께 해당 WAV 파일을 재생하는 것이 었습니다. 파일에 출력되면 수정없이 작동했습니다. 그러나 메모리 스트림을 사용하려고 할 때 다시 재생 될 것이지만 너무 빨리 들었던 것은 삐걱 거리는 일이었습니다.

SpeechSyntheizer를 출력하기위한이 코드는 문제를 해결했으며 Naudio 측에서 수정이 필요하지 않습니다.

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

88200이 핵심입니다. 기본적으로 이것은 11025입니다. Speechaudioformatinfo를 생성하고 88200으로 설정하는 것만으로도 필요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top