@1SLY2

В файл идут не те данные, почему?

В файл попадает не то, что надо, совсем не то что надо "System.Collections.Generic.List`1[System.String]" а именно вот это. Файл должен отображать текст, который я записал с микрофона, записывал библиотекой NAudio.
Вот код распознавателя речи:
class ReadFromAFile : INotifyPropertyChanged
    {
        SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(new CultureInfo("en-US"));
        Grammar dictation = new DictationGrammar();
        List<string> text = new List<string>();

        public ReadFromAFile()
        {
            dictation.Name = "Dictation Grammar";
            recognizer.LoadGrammar(dictation);
            recognizer.SetInputToAudioStream(File.OpenRead(@"Ex_voice.wav"), new SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Mono));
            recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(SpeechRecognizedHandler);
            recognizer.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(RecognizeCompletedHandler);
        }

        public void WritingToTextFile()
        {
            using (StreamWriter sw = new StreamWriter("Text.txt", false, System.Text.Encoding.Default))
            {
                sw.WriteLine(text);
                sw.Close();
            }
        }

        public List<string> ReadingFromTextFile()
        {
            List<string> temp = new List<string>();
            using (StreamReader sr = new StreamReader("Text.txt"))
            {
                temp.Add(sr.ReadToEnd());
            }
            return temp;
        }

        private void SpeechRecognizedHandler(object sender, SpeechRecognizedEventArgs e)
        {
            if (e.Result != null && e.Result.Text != null)
            {
                text.Add(e.Result.Text);
            }
            else
            {
                MessageBox.Show("File is empty");
            }
        }

        private void RecognizeCompletedHandler(object sender, RecognizeCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show("  Error encountered " + 
                  e.Error.GetType().Name + " " + e.Error.Message);
            }
            if (e.Cancelled)
            {
                MessageBox.Show("  Operation cancelled.");
            }
            if (e.InputStreamEnded)
            {
                MessageBox.Show("  End of stream encountered.");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }

Подскажите в чем проблема, мысли есть, но очень страшные.
P.s. Использую MVVM, может еще тут есть какие-то палки в колесах.
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
// и вообще так себе идея называть список словом текст, лучше 
List<string> text = new List<string>();
private readonly List<string> _translatedTextLines = new List<string>();
var output = string.Join("\n",text);
Ответ написан
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
сделайте замены в коде:
WritingToTextFile

public void WritingToTextFile()
{
	using (StreamWriter sw = new StreamWriter("Text.txt", false, System.Text.Encoding.Default))
	{
		sw.WriteLine(text);
		sw.Close();
	}
}
на
File.WriteAllText("Text.txt", text)
ReadingFromTextFile

public List<string> ReadingFromTextFile()
{
	List<string> temp = new List<string>();
	using (StreamReader sr = new StreamReader("Text.txt"))
	{
		temp.Add(sr.ReadToEnd());
	}
	return temp;
}
а тут надо подумать! на
File.ReadAllText("Text.txt")если одной строкой, илиFile.ReadAllLines("Text.txt")если нужен массив строк

но это так, вступление, что бы убрать мусорный код
вы не приводите код, который реально выполняет запись/распознавание голоса, и что то далее. все что вы показали - это предварительные ласки подготовка.. где процесс то? (upd тот, который возвращает пустой текст, или вы его теряете по пути к сохранению)
Ответ написан
edward_freedom
@edward_freedom
Попробуй заменить
sw.WriteLine(text);
на
sw.WriteLine(string.join(Environment.NewLine, text));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы