日期:2014-05-17  浏览次数:20457 次

关于NAudio语音合成的问题,求大神解答,谢谢了
这个问题有点纠结,我之前用winform实现了,wav格式语音的获取,如下图:



语音也有声音,实现的关键代码如下:
 
        protected void btnStart_Click(object sender, EventArgs e)
        {
            wave.waveInStream = new NAudio.Wave.WaveIn();
            wave.writer = new NAudio.Wave.WaveFileWriter("C:/origin.wav", new NAudio.Wave.WaveFormat(16000, 16, 1));
            wave.StartRecord("C:/origin.wav");

            Thread.Sleep(6000);
            wave.StopRecord();
            
        }

        protected void btnStop_Click(object sender, EventArgs e)
        {
            //todo: 跨线程进行访问
            //if (wave != null)
            //{
            //    wave.waveInStream.Dispose();
            //    wave.writer.Close();
            //}
            //wave.StopRecord();
        }

但是在asp.net我想实现相同的结果,就出现问题,语音结果获取大小为1k,没有声音。先看界面:



我想了两种办法:
1、点击开始按钮,开始讲话,后台进行语音的获取,点击停止,调用停止的方法(语音获取和停止都封装在了类中),这种方法不行,点击停止,是再一次请求,之前的那个对象已经没了(我是新手,不要见怪啊),但是我再想能不能后台起一个线程,来执行这个语音获取的过程,当下次点击停止的时候,获取这个后台的线程,再进行语音录取的停止(线程方面不太懂,各位大大帮忙想个解决方案呗)。
2、点击开始按钮,点击开始按钮,开始讲话,后台进行语音的获取,这次不点击暂停,而是在获取声音后,
利用Thread.Sleep(6000) (我在想是不是这个Thread.Sleep()方法会暂停包括语音获取的所有方法,如果语音获取是另外起一个线程的话,就不会出问题了??),暂停6秒,在进行语音的暂停,代码如下,第一种方法的代码和下边的代码类似。
 
        static CommonCode.WavaHelper wave = new CommonCode.WavaHelper();

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnStart_Click(object sender, EventArgs e)
        {
            wave.waveInStream = new NAudio.Wave.WaveIn();
            wave.writer = new NAudio.Wave.WaveFileWriter("C:/origin.wav", new NAudio.Wave.WaveFormat(16000, 16, 1));