Синтез речи на C #

У меня есть приложение, которое считывает текстовый файл в массив байтов, затем я конвертирую этот массив в строку и отправляю его в качестве входных данных в метод SpeechSynthesizer, но метод SPEAK не говорит ..

если я просто отправлю обычную временную строку, она будет работать нормально ... но когда я конвертирую байтовый массив в строку, это не работает.

что я сделал, это когда я прочитал строку из текстового файла, я использовал эти строки кода

UTF8Encoding temp = new UTF8Encoding(true);
string whatToSay = temp.getString(b);
speech.Speak(whatToSay); // it doesn't work even though the above line returns the  
                            correct string

поэтому мне интересно, какая разница, если я напишу только это:

spech.Speak("hello"); // this works perfect

есть ли разница между этими строками? метод Speech не поддерживает UTF8?


person Elior    schedule 06.12.2013    source источник
comment
Вы пробовали циклическое переключение (воспроизведение строки, а затем преобразование ее в байты и преобразование этих байтов обратно в строку и попытка воспроизведения) строки, чтобы узнать, есть ли проблема с UTF-8?   -  person Suresh    schedule 06.12.2013
comment
нет, но я попробую это   -  person Elior    schedule 06.12.2013
comment
@sthotakura Я сделал то, что вы предложили, и это работает ..   -  person Elior    schedule 06.12.2013
comment
Итак, у вас проблемы не с UTF-8, а с вашим источником входных данных. Он может предоставлять данные в другом формате   -  person Suresh    schedule 06.12.2013
comment
проблема была решена .. Я использовал FileStream для файла вместо StreamReader .. StreamReader решил проблему. Спасибо, в любом случае   -  person Elior    schedule 06.12.2013


Ответы (1)


Я не видел никаких проблем с вашим кодом, но, возможно, ваша переменная b отличается от другой. Я не уверен, что не так, но вы также можете попробовать сохранить где-нибудь аудиофайл и проверить, играет он что-то или нет:

 using (SpeechSynthesizer synth = new SpeechSynthesizer()) {
     synth.SetOutputToWaveFile(@"C:\temp\Sample.wav");
     PromptBuilder builder = new PromptBuilder();
     builder.AppendText("Hello World !"); //You can send a variable here also.
     synth.Speak(builder); 
}
person Bura Chuhadar    schedule 06.12.2013
comment
спасибо за ответ, переменная b - это массив байтов, который является буфером, сохраняющим то, что я прочитал из текстового файла. - person Elior; 06.12.2013
comment
Возможно, вы отправляете несоответствующие значения из этого текстового файла. Вы должны проанализировать текст, чтобы удалить недопустимые символы для SpeechSynthesizer. - person Bura Chuhadar; 06.12.2013
comment
проблема была решена .. Я использовал FileStream для файла вместо StreamReader .. StreamReader решил проблему. Спасибо, в любом случае. +1 - person Elior; 06.12.2013