繁体   English   中英

在C#Visual Studio中连续录制和播放音频

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM