我正致力于这个语音识别和文本到语音的项目。我有三个脚本,一个是Form.cs
,另一个是文本到语音的脚本(Voice.cs
),另一个是其他方法Auxiliary.cs
。
Voice.cs
正常变量SpeechSynthesizer synth = new SpeechSynthesizer();
。
然后我有void
:
public void Say(string speech)
{
synth.SpeakAsync (speech);
}
当我在Voice.Say(string)
脚本中调用Form.cs
时,它很有效,当我从Auxiliary.cs
调用NullReferenceException
时,它会在合成器中抛出Auxiliary.cs
。
为什么会这样?我的意思是,表单脚本以与 //Form1.cs
public partial class Form1 : Form
{
public Auxiliary auxiliary;
public Voice voice;
public void Form1_Load ()
{
voice = new Voice ();
auxiliary = new Auxiliary();
voice.Say("Hi, Patrick");
}
}
//Auxiliary.cs
public class Auxiliary
{
public Voice voice;
public void Start()
{
voice = new Voice();
voice.Say("Hi");
}
}
//Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public void Start()
{
synth = new SpeechSynthesizer();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}
很抱歉,如果这个问题已经存在,我在整个网站上搜索了它,但是却什么也没找到。
编辑:这些是代码。
var pos = userMarker.getPosition();
console.log( pos.lat(), pos.lng() );
答案 0 :(得分:0)
这是一个很好的做法,为类添加具有适当参数的构造函数。
Using Constructors (C# Programming Guide)
在你的情况下,从不调用方法Voice.Start(),因此没有synth
对象的实例。
// Voice.cs
public class Voice
{
public SpeechSynthesizer synth;
public Voice()
{
Start();
}
public void Start()
{
synth = new SpeechSynthesizer();
synth.SetOutputToDefaultAudioDevice();
}
public void Say(string speech)
{
synth.SpeakAsync(speech);
}
}