我一直在尝试使用临时 wav 文件同时录制和播放音频。后来我想创建一个VOIP聊天程序。
我使用 Naudio 库在 C# 中捕获和播放音频,它似乎工作得很好。下面是我写的c#代码:
using System.IO.Ports;
using NAudio.Wave;
using System.IO;
namespace VOIP
{
public partial class Form1 : Form
{
WaveIn wab = new WaveIn();
MemoryStream s;
int k;
public Form1()
{
InitializeComponent();
wab.BufferMilliseconds = 100;
wab.NumberOfBuffers=5;
wab.DataAvailable += new EventHandler<WaveInEventArgs>(wa_DataAvailable);
}
void wa_DataAvailable(object sender, WaveInEventArgs e)
{
Play(e.Buffer);
}
private void Play(byte[] p)
{
WaveOut ou = new WaveOut();
s = new MemoryStream(p);
RawSourceWaveStream r = new RawSourceWaveStream(s, wab.WaveFormat);
ou.Init(r);
ou.Play();
ou.Stop();
ou.Dispose();
s.Dispose();
r.Dispose();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Stop")
{
wab.StopRecording();
button1.Text = "Record";
}
else if (button1.Text == "Record")
{
wab.StartRecording();
button1.Text = "Stop";
}
}
}
}
问题出在“播放”方法上。由于每次数据可用时都会创建和处理waveout对象:我可以听到一些咔哒声。有没有办法避免这种创建和处置对象的方式,而只是创建一个对象,然后用新数据进行初始化。我还观察到该程序消耗的内存不断增加。
提前致谢。萨纳坦