using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
//Make sure to add a reference to Kinect in the references
using Microsoft.Kinect;
//Make sure you have the speech SDK installed
//go to add reference, browse, navigate to program files, micrsoft SDKs
//speech, assemblies and select speech.dll
using Microsoft.Speech.AudioFormat;
using Microsoft.Speech.Recognition;
using System.IO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace _1
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class JARVIS : Microsoft.Xna.Framework.Game
{
//Create an instance of your kinect sensor
public KinectSensor CurrentSensor;
//and the speech recognition engine (SRE)
private SpeechRecognitionEngine speechRecognizer;
//Get the speech recognizer (SR)
private static RecognizerInfo GetKinectRecognizer()
{
Func<RecognizerInfo, bool> matchingFunc = r =>
{
string value;
r.AdditionalInfo.TryGetValue("Kinect", out value);
return "True".Equals(value, StringComparison.InvariantCultureIgnoreCase) && "en-US".Equals(r.Culture.Name, StringComparison.InvariantCultureIgnoreCase);
};
return SpeechRecognitionEngine.InstalledRecognizers().Where(matchingFunc).FirstOrDefault();
}
//When the window loads, initialize the Kinect
public MainWindow()
{
InitializeComponent();
InitializeKinect();
}
//Initilaize the kinect
private KinectSensor InitializeKinect()
{
//get the first available sensor and set it to the current sensor variable
CurrentSensor = KinectSensor.KinectSensors
.FirstOrDefault(s => s.Status == KinectStatus.Connected);
speechRecognizer = CreateSpeechRecognizer();
//Start the sensor
CurrentSensor.Start();
//then run the start method to start streaming audio
Start();
return CurrentSensor;
}
//Start streaming audio
private void Start()
{
//set sensor audio source to variable
var audioSource = CurrentSensor.AudioSource;
//Set the beam angle mode - the direction the audio beam is pointing
//we want it to be set to adaptive
audioSource.BeamAngleMode = BeamAngleMode.Adaptive;
//start the audiosource
var kinectStream = audioSource.Start();
//configure incoming audio stream
speechRecognizer.SetInputToAudioStream(
kinectStream, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
//make sure the recognizer does not stop after completing
speechRecognizer.RecognizeAsync(RecognizeMode.Multiple);
//reduce background and ambient noise for better accuracy
CurrentSensor.AudioSource.EchoCancellationMode = EchoCancellationMode.None;
CurrentSensor.AudioSource.AutomaticGainControlEnabled = false;
}
//here is the fun part: create the speech recognizer
private SpeechRecognitionEngine CreateSpeechRecognizer()
{
//set recognizer info
RecognizerInfo ri = GetKinectRecognizer();
//create instance of SRE
SpeechRecognitionEngine sre;
sre = new SpeechRecognitionEngine(ri.Id);
//Now we need to add the words we want our program to recognise
var grammar = new Choices();
grammar.Add("hello");
grammar.Add("goodbye");
//set culture - language, country/region
var gb = new GrammarBuilder { Culture = ri.Culture };
gb.Append(grammar);
//set up the grammar builder
var g = new Grammar(gb);
sre.LoadGrammar(g);
//Set events for recognizing, hypothesising and rejecting speech
sre.SpeechRecognized += SreSpeechRecognized;
sre.SpeechHypothesized += SreSpeechHypothesized;
sre.SpeechRecognitionRejected += SreSpeechRecognitionRejected;
return sre;
}
//if speech is rejected
private void RejectSpeech(RecognitionResult result)
{
textBox2.Text = "Pardon Moi?";
}
private void SreSpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{
RejectSpeech(e.Result);
}
//hypothesized result
private void SreSpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
textBox1.Text = "Hypothesized: " + e.Result.Text + " " + e.Result.Confidence;
}
//Speech is recognised
private void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//Very important! - change this value to adjust accuracy - the higher the value
//the more accurate it will have to be, lower it if it is not recognizing you
if (e.Result.Confidence < .4)
{
RejectSpeech(e.Result);
}
//and finally, here we set what we want to happen when
//the SRE recognizes a word
switch (e.Result.Text.ToUpperInvariant())
{
case "HELLO":
textBox3.Text = "Hi there.";
break;
case "GOODBYE":
textBox3.Text = "Goodbye then.";
break;
default:
break;
}
}
}
}
这些是我收到的错误:
方法必须具有返回类型@第48行,第16列
当前上下文中不存在名称'InitializeComponent'@ 第50行,第13栏
当前上下文@Line 127中不存在名称'textBox1', 第13栏
当前上下文@Line 117中不存在名称'textBox2', 第13栏
当前上下文@第143行中不存在名称'textBox3', 第21栏
当前上下文@Line 146中不存在名称'textBox3', 第21栏
我从here获得了代码,并假设它只是被复制/粘贴,因为我不正确地设置了我的Kinect项目。
修改
这就是我将代码更改为:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
//Make sure to add a reference to Kinect in the references
using Microsoft.Kinect;
//Make sure you have the speech SDK installed
//go to add reference, browse, navigate to program files, micrsoft SDKs
//speech, assemblies and select speech.dll
using Microsoft.Speech.AudioFormat;
using Microsoft.Speech.Recognition;
using System.IO;
using System.ComponentModel;
using System.Text;
namespace _1
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class JARVIS : Microsoft.Xna.Framework.Game
{
//Create an instance of your kinect sensor
public KinectSensor CurrentSensor;
//and the speech recognition engine (SRE)
private SpeechRecognitionEngine speechRecognizer;
//Get the speech recognizer (SR)
private static RecognizerInfo GetKinectRecognizer()
{
Func<RecognizerInfo, bool> matchingFunc = r =>
{
string value;
r.AdditionalInfo.TryGetValue("Kinect", out value);
return "True".Equals(value, StringComparison.InvariantCultureIgnoreCase) && "en-US".Equals(r.Culture.Name, StringComparison.InvariantCultureIgnoreCase);
};
return SpeechRecognitionEngine.InstalledRecognizers().Where(matchingFunc).FirstOrDefault();
}
//When the window loads, initialize the Kinect
public JARVIS()
{
//InitializeComponent();
InitializeKinect();
}
//Initilaize the kinect
private KinectSensor InitializeKinect()
{
//get the first available sensor and set it to the current sensor variable
CurrentSensor = KinectSensor.KinectSensors
.FirstOrDefault(s => s.Status == KinectStatus.Connected);
speechRecognizer = CreateSpeechRecognizer();
//Start the sensor
CurrentSensor.Start();
//then run the start method to start streaming audio
Start();
return CurrentSensor;
}
//Start streaming audio
private void Start()
{
//set sensor audio source to variable
var audioSource = CurrentSensor.AudioSource;
//Set the beam angle mode - the direction the audio beam is pointing
//we want it to be set to adaptive
audioSource.BeamAngleMode = BeamAngleMode.Adaptive;
//start the audiosource
var kinectStream = audioSource.Start();
//configure incoming audio stream
speechRecognizer.SetInputToAudioStream(
kinectStream, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
//make sure the recognizer does not stop after completing
speechRecognizer.RecognizeAsync(RecognizeMode.Multiple);
//reduce background and ambient noise for better accuracy
CurrentSensor.AudioSource.EchoCancellationMode = EchoCancellationMode.None;
CurrentSensor.AudioSource.AutomaticGainControlEnabled = false;
}
//here is the fun part: create the speech recognizer
private SpeechRecognitionEngine CreateSpeechRecognizer()
{
//set recognizer info
RecognizerInfo ri = GetKinectRecognizer();
//create instance of SRE
SpeechRecognitionEngine sre;
sre = new SpeechRecognitionEngine(ri.Id);
//Now we need to add the words we want our program to recognise
var grammar = new Choices();
grammar.Add("hello");
grammar.Add("goodbye");
//set culture - language, country/region
var gb = new GrammarBuilder { Culture = ri.Culture };
gb.Append(grammar);
//set up the grammar builder
var g = new Grammar(gb);
sre.LoadGrammar(g);
//Set events for recognizing, hypothesising and rejecting speech
sre.SpeechRecognized += SreSpeechRecognized;
sre.SpeechHypothesized += SreSpeechHypothesized;
sre.SpeechRecognitionRejected += SreSpeechRecognitionRejected;
return sre;
}
//if speech is rejected
private void RejectSpeech(RecognitionResult result)
{
global::System.Windows.Forms.MessageBox.Show("Pardon Moi?");
}
private void SreSpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{
RejectSpeech(e.Result);
}
//hypothesized result
private void SreSpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
global::System.Windows.Forms.MessageBox.Show("Hypothesized: " + e.Result.Text + " " + e.Result.Confidence);
}
//Speech is recognised
private void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//Very important! - change this value to adjust accuracy - the higher the value
//the more accurate it will have to be, lower it if it is not recognizing you
if (e.Result.Confidence < .4)
{
RejectSpeech(e.Result);
}
//and finally, here we set what we want to happen when
//the SRE recognizes a word
switch (e.Result.Text.ToUpperInvariant())
{
case "HELLO":
global::System.Windows.Forms.MessageBox.Show("Hi there.");
break;
case "GOODBYE":
global::System.Windows.Forms.MessageBox.Show("Goodbye then.");
break;
default:
break;
}
}
}
}
在我运行之前我没有错误,而且发生了这种情况:
程序:'C:\ Users \\ Documents \ Visual Studio 2010 \ Projects \ 1 \ 1 \ 1 \ _对象\ Debug \ 1.exe'不包含静态'Main' 适合入境点的方法
答案 0 :(得分:1)
欢迎使用stackoverflow,请考虑阅读FAQ以获得最佳结果,您将遇到第一个错误,因为类名与其构造函数不匹配!因此,您应该将第48行中的MainWindow()
更改为JARVIS()
public JARVIS()
{
InitializeComponent();
InitializeKinect();
}
正如您的来源已经提到的那样,您需要向项目添加三个textboxes
,其名称为textBox1
,textBox2
和textBox3
如果您不需要那些textboxes
只需将代码更改为您想要的任何内容