Рейтинг:
2
Mike Meinz
Эта версия компилируется. Вы не были достаточно ясны, чтобы сказать, была ли это ошибка компиляции или ошибка времени выполнения. Если ваша проблема заключалась в ошибке компиляции, эта версия решает эту проблему. Поскольку это код C#, верхний и нижний регистр должны совпадать. Я исправил предложения <event args="">, Чтобы использовать верхний и нижний регистр, как это: <SpeechRecognizedEventArgs>
.
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Speech.AudioFormat;
namespace reco
{
public partial class Form1 : Form
{
private SpeechRecognitionEngine recognitionEngine;
public Form1()
{
InitializeComponent();
try
{
recognitionEngine = new SpeechRecognitionEngine();
DictationGrammar dg = new DictationGrammar();
dg.Name = "Dictation Grammar";
recognitionEngine.LoadGrammar(dg);
recognitionEngine.SetInputToDefaultAudioDevice();
//recognitionEngine.SetInputToWaveFile(@"C:\Users\Deep\Music\New folder\mp3.wav");
recognitionEngine.SetInputToDefaultAudioDevice(); // Gets sound from microphone
recognitionEngine.EndSilenceTimeout = new TimeSpan(0, 0, 2);
// Following two lines are not needed. They cause error!
//recognitionEngine.Recognize();
//recognitionEngine.RecognizeAsync();
recognitionEngine.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(reco_SpeechHypothesized);
recognitionEngine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(reco_SpeechRecognized);
recognitionEngine.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(reco_RecognizeCompleted);
recognitionEngine.AudioSignalProblemOccurred += new EventHandler<AudioSignalProblemOccurredEventArgs>(reco_AudioSignalProblemOccurred);
recognitionEngine.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(reco_SpeechDetected);
recognitionEngine.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(reco_SpeechRecognitionRejected);
recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}
catch (Exception e)
{
MessageBox.Show("Error "+e);
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
void reco_AudioSignalProblemOccurred(object sender, AudioSignalProblemOccurredEventArgs e)
{
richTextBox1.AppendText(e.AudioSignalProblem.ToString());
}
void reco_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
richTextBox1.AppendText(e.Result.Text);
}
void reco_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{
richTextBox1.AppendText("Rejected!");
}
void reco_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
{
richTextBox1.AppendText("Recognition Complete!");
}
void reco_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
richTextBox1.AppendText(e.Result.Text);
}
void reco_SpeechDetected(object sender, SpeechDetectedEventArgs e)
{
richTextBox1.AppendText("Speech Detected!");
}
}
}
Пересмотренное решение - 27 марта 2013 года 2:44 ВЕЧЕРА EDT:
static void speech1(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == "record")
{
showRecord();
}
else if (e.Result.Text == "exit")
{
Application.Exit();
}
}
private void button1_Click(object sender, EventArgs e)
{
showRecord();
}
static void showRecord()
{
record r=new record();
r.show();
}
}
public class record
{
public void show() { }
}
depak gupta
я получаю ошибку времени выполнения в ( recognitionEngine.SetInputToWaveFile(@"C:\Users\Deep\Music\New папка\mp3.wav");)строка № 30 как файл не найдена ,является ли способ записи пути правильным
Mike Meinz
Формат fullpathfilename выглядит для меня правильным.
Является ли "Deep" вашим именем пользователя?
Есть ли папка с именем "Новая папка" в вашей "музыке"?
Есть ли файл с именем "mp3.wav" в "новой папке"?
depak gupta
да ,все это правильно, но та же ошибка, пожалуйста, запустите ее в своей системе и ответьте.
жду вашего ответа.
Mike Meinz
Я побежал на своем компьютере, заменив ваше имя пользователя на мое имя пользователя. У меня его не было .WAV-файл с речью в нем, поэтому я попробовал как файл .MP3, так и A .файл WMA. И то, и другое вызвало ажиотаж. FormatException
Я предполагаю, что механизм распознавания речи не может обрабатывать форматы MP3 или WMA. Я взял одну из систем Windows .WAV звуковые файлы, переместил его в "новую папку" и переименовал в свое имя файла "mp3.wav". Программа нашла файл нормально но потом выбросила его InvalidOperationException
об исполнении приказа RecognizeAsync
метод. Вы не можете одновременно выполнять синхронизацию и асинхронность. Вы должны выбрать один из них. Поскольку вы устанавливаете события, которые генерируются при использовании асинхронного режима, и поскольку у вас есть второй RecognizeAsync в конце вашего кода, я закомментировал следующие строки и получил "Recognition Complete!" в RichTextBox. Конечно, поскольку у меня не было никакой речи в файле, не было никакого дополнительного текста, добавленного к RichTextBox.
Прокомментировано:
//recognitionEngine.Распознавать();
//recognitionEngine.RecognizeAsync();
Вы уверены, что ваше имя пользователя правильно указано в имени файла fullpath?
Вы уверены, что ваш файл называется "mp3.wav"?
Вы уверены, что папка называется "Новая папка"?
Вы уверены, что получаете ошибку "файл не найден", а не ошибку исключения формата?
Вы переименовали звуковой файл и изменили расширение файла с MP3 на WAV?
Mike Meinz
Я добавил следующее утверждение после того, как новая Диктатураграмма(); заявление:
dg.Name = "Dictation Grammar";
Я заменил его на другой. SetInputToWaveFile заявление со следующим содержанием:
recognitionEngine.SetInputToDefaultAudioDevice();
Он распознал речь с помощью микрофона моей гарнитуры. Он не был точен на 100%, но я видел, что он распознает многие слова, которые я говорил.
depak gupta
Спасибо ,сэр, за то, что вы сделали это для меня, я тоже сделал то же самое, что вы сказали, но это немного отличается от того, что я записал, а также не точно, пожалуйста, дайте несколько советов по этому поводу.
Mike Meinz
Это мой первый опыт работы с распознаванием речи. Я читал комментарии по другим вопросам, где программисты пытались использовать механизм распознавания речи Microsoft и испытывали очень плохие результаты для диктовки. Механизм распознавания речи Microsoft, по-видимому, работает лучше всего, если вы создаете грамматику всего из нескольких слов (Пример: STOP START SLOW FAST UP DOWN LEFT RIGHT) и используете ее с приложением, которое требует распознавания только этих нескольких слов.
depak gupta
итак,не могли бы вы сказать мне, как я могу использовать эту команду, чтобы, когда я говорю start, она запускала мое приложение
Mike Meinz
Идея заключается в том, что вы встроите его в свое приложение, чтобы оно реагировало на ограниченный набор произносимых команд.
Чтобы запустить приложение или любую другую программу с помощью голосового ввода, вы должны использовать функцию распознавания речи, встроенную в Windows на панели управления\простота доступа\распознавание речи (в Windows 8. может быть найдено в других версиях Windows).
Опять же, помните, что это лучше всего, когда используется с очень ограниченным количеством слов.
depak gupta
сэр, я поместил код ниже, но я не знаю, как выполнить нажатие кнопки по команде, если это возможно, проверьте и улучшите его.
Mike Meinz
Когда вы определяете, что правильный текст был "услышан", вызовите событие щелчка соответствующей кнопки.
depak gupta
извините, вот ниже приведен код, пожалуйста, проверьте и расскажите, как реализовать нажатие кнопки с помощью команды.
Mike Meinz
Вы можете поместить эти строки кода в следующее и просто вызвать "doit".
частный недействительными доить()
{
запись r = новая запись();
Р.Показать();
};
Или, если вам абсолютно необходимо вызвать событие нажатия кнопки, вам нужно указать параметры при вызове события нажатия кнопки:
button1_Click(отправитель,e);
или, если это не сработает, тогда это:
EventArgs e;
button1_Click(отправитель,e);
depak gupta
сэр. Я хочу, чтобы он работал с моей речевой командой, а не нажимал кнопку вручную.
Mike Meinz
Похоже, ты не понимаешь, что я сказал тебе, как именно это сделать. Для того, чтобы устранить путаницу, я написал код для вас. См. раздел решение 1 с надписью "пересмотренное решение - 26 марта 2013 года 07:27 утра EDT"
depak gupta
сэр. Я поместил свой код в "решение 3", но не знаю, как можно было бы решить эту ошибку.
Mike Meinz
Какая ошибка? Пожалуйста, предоставьте подробную информацию о вашей проблеме.
Пожалуйста, внесите это изменение:
статическая пустота showRecord()
{
запись r=новая запись();
Р.показать();
}
Кроме того, здесь, на CodeProject, считается дурным тоном публиковать последующие вопросы в качестве "решений". Вы должны использовать Improve Question
нажмите кнопку в верхней части этой страницы и внесите изменения в свой первоначальный вопрос.
depak gupta
ошибка отображается на r.show() и showRecord().
Mike Meinz
См. пересмотренное решение 1 выше.
Я добавил немного кода заглушки для класса с именем "рекорд" с метод, названный "шоу". Для меня это было нормально. Не видя точного синтаксиса в вашей программе и точного сообщения об ошибке, я не могу догадаться, что вызывает вашу проблему.