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

语音也有声音,实现的关键代码如下:

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);
wave.StopRecord();
}
protected void btnStop_Click(object sender, EventArgs e)
{
//todo: 跨线程进行访问
//if (wave != null)
//{
// wave.waveInStream.Dispose();
// wave.writer.Close();
//}
//wave.StopRecord();
class Record
{
public WaveIn waveInStream;
public WaveFileWriter writer;
//public double duration = 100;
public void StartRecord(string filePath)
{
waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
waveInStream.RecordingStopped += new EventHandler(waveInStream_RecordingStopped);
//writer = new WaveFileWriter(filePath, waveInStream.WaveFormat);
waveInStream.StartRecording();
}
void waveInStream_RecordingStopped(object sender, EventArgs e)
{
//throw new NotImplementedException();
//todo: 跨进程访问
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
}
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
{
//throw new NotImplementedException();
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
int secondsRecorded = (int)writer.Length / writer.WaveFormat.AverageBytesPerSecond;//
//if (secondsRecorded - duration>0)//可以自动停止
//{
// Console.WriteLine("完毕");
// volumeMeter.Amplitude = 0;
// StopRecord();
//}
}
public void StopRecord()
{
if (waveInStream == null)
return;
waveInStream.StopRecording();
waveInStream.Dispose();
waveInStream = null;
writer.Close();
writer = null;
Console.WriteLine("录音完毕");
}
}
[解决办法]
NAudio本身用到了WinForm的东西,它会创建从Form派生的WaveWindow,你可以按照winform的方式解决跨线程的问题。
在asp.net服务程序中调用winform的东西是很混乱的事情,搞到最后把自己都搞乱了,还是放弃吧。
[解决办法]
假如想用ASP.net的话得借用插件的技术来实现。