代码在类内部工作,但不作为库工作

时间:2014-10-29 11:05:51

标签: c# .net sapi

我正在使用sapi并尝试制作简单的控制台应用程序。

class Program
    {
        static void Main(string[] args)
        {
            var uniq = Guid.NewGuid().ToString() + ".wav";

            string filename = @"C:\Users\Денис\Desktop\" + uniq; 
            var voc = new Vocalizer("Vocalizer for Enterprise Milena 22kHz");
            var sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 2000; i++)
            {
                voc.SpeakToFile("testphrase", filename);
                Console.WriteLine((i + 1) + "times recorded.");
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
        }
    }

这是类的代码:

public class Vocalizer
    {
        private SpeechVoiceSpeakFlags _spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;
        private SpVoice _speaker = new SpVoice();

        public Vocalizer(string vocalizerString)
        {
            _speaker.Voice = _speaker.GetVoices().Cast<SpObjectToken>().Single(vo => vo.GetDescription() == vocalizerString);
        }

        public void SpeakToFile(string phrase, string filepath)
        {
            var spFileMode = SpeechStreamFileMode.SSFMCreateForWrite;
            var spFileStream = new SpFileStream();
            spFileStream.Open(filepath, spFileMode, false);

            _speaker.AudioOutputStream = spFileStream;
            _speaker.Speak(phrase, _spFlags);
            _speaker.WaitUntilDone(Timeout.Infinite);

            spFileStream.Close();
        }
    }

问题是:如果我使用附带的调试器从VS运行我的应用程序,它可以正常工作(无论是Debug还是Release版本)。 但是,如果我试图在VS之外运行它或没有连接调试器,它就会冻结

_speaker.AudioOutputStream = spFileStream;

没有错误,消息,警告或异常。 我通过我的试验发现的最后一件事是,如果我在我的控制台应用程序中放置类的函数代码(SpeakToFile),应用程序就可以在没有附加调试器的情况下工作,但这不是解决方案,因为它应该是单独的类库。

我正在使用自定义发声器Mileena(细微差别)。 默认的Windows预安装的发声器可以正常使用我的应用程序。

0 个答案:

没有答案