这个问题有点纠结,我之前用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));
wave.StartRecord("C:/origin.wav");
Thread.Sleep(6000);