[英]Continuous record and play audio in C# visual studio
我一直在嘗試使用臨時的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對象,所以我可以聽到一些咔嗒聲。 有沒有一種方法可以避免這種創建和處置對象的方式,而是只創建一個對象,然后使用新數據進行初始化。 我還觀察到該程序消耗的內存不斷增加。
提前致謝。 撒旦
使用BufferedWaveProvider,並在音頻到達時對其進行解壓縮並將其添加到BufferedWaveProvider。 然后,有一個WaveOut實例從BufferedWaveProvider中不斷播放。
NAudioDemo的源代碼在聊天示例中顯示了如何執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.