В настоящее время я работаю над приложением, которое требует передачи речи, закодированной в определенный аудиоформат.
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. У меня есть обходной путь, включающий wav файл, который я сгенерировал и преобразовал в правильную частоту дискретизации, используя некоторые инструменты редактирования звука, но я хотел бы сгенерировать звук из приложения, если смогу.
Одним из интересных моментов было то, что SpeechRecognitionEngine принимает этот аудиоформат и успешно распознал речь в моем синтезированном волновом файле ...
Обновление: недавно обнаружил, что этот аудиоформат работает успешно для определенных установленных голосов, но не работает для других. Он не работает специально для LH Michael и LH Michelle, и ошибка зависит от настроек голоса, определенных в PromptBuilder.