В текстовом приложении с помощью С# я использую класс SpeechSynthesizer
, он имеет событие с именем SpeakProgress
, которое запускается для каждого произносимого слова. Но для некоторых голосов параметр e.AudioPosition
не синхронизируется с выходным аудиопотоком, а выходной файл волны воспроизводится быстрее, чем показывает эта позиция (см. этот связанный вопрос).
В любом случае, я пытаюсь найти точную информацию о скорости передачи битов и другой информации, относящейся к выбранному голосу. Как я уже сказал, если я могу инициализировать волновой файл с этой информацией, проблема синхронизации будет решена. Однако, если я не могу найти такую информацию в SupportedAudioFormat
, я не знаю другого способа их найти. Например, голос "Microsoft David Desktop" не поддерживает поддерживаемый формат в VoiceInfo
, но, похоже, он поддерживает формат PCM 16000 hz, 16 бит.
Как найти аудиоформат выбранного голоса SpeechSynthesizer
var formats = CurVoice.VoiceInfo.SupportedAudioFormats;
if (formats.Count > 0)
{
var format = formats[0];
reader.SetOutputToWaveFile(CurAudioFile, format);
}
else
{
var format = // How can I find it, if the audio hasn't provided it?
reader.SetOutputToWaveFile(CurAudioFile, format );
}