猿问

将音频录制到内存流中,然后将其保存到文件中

您无需再次声明该事件。如果它是公共的并且在需要时已经被抛出,您可以根据需要通过订阅基类事件来处理更改。


我的意思是,您可以执行以下操作:


using System;

using System.Windows.Forms;


namespace DRT

{

    internal abstract partial class DRT_ComboBox_Abstract : ComboBox

    {

        public DRT_ComboBox_Abstract()

        {

            InitializeComponent();

            SelectedValueChanged += MyOwnHandler

        }


        protected virtual void MyOwnHandler(object sender, EventArgs args)

        {

            // Hmn.. now I know that the selection has changed and can so somethig from here

            // This method is acting like a simple client

        }

    }

}

在S O LID类上(我相信 是这种情况ComboBox),通常有效调用订阅者来处理某些事件的方法通常是虚拟的,一旦您从此类继承,就允许您拦截事件处理程序调用,如果这是你想要的。


这是:


using System;

using System.Windows.Forms;


namespace DRT

{

    internal abstract partial class DRT_ComboBox_Abstract : ComboBox

    {

        public DRT_ComboBox_Abstract()

        {

            InitializeComponent();

        }


        protected override void OnSelectedValueChanged(object sender, EventArgs args)

        {

            // Wait, the base class is attempting to notify the subscribers that Selected Value has Changed! Let me do something before that

            // This method is intercepting the event notification


            // Do stuff


            // Continue throwing the notification

            base.OnSelectedValueChanged(sender, args);

        }

    }

}


慕无忌1623718
浏览 217回答 2
2回答

qq_花开花谢_0

试试这个:using(var fileWriter = new WaveFileWriter("yourOutputFile", SampleProvider.WaveFormat){    ResourceWaveStream.CopyTo(fileWriter);}顺便说一句,这里的“使用”块对您有好处,因为它会自动处理编写器,允许 WaveFileWriter 将标头写入文件。

眼眸繁星

好的,我终于有了解决方案。首先,我将声音数据直接复制到内存流中。然后当我需要它时,我将整个内存流读入 a RawSourceWaveStream,然后将其传递给最终的WaveFileWriter. 如果有人对我的具体做法感兴趣,请给我留言。
随时随地看视频慕课网APP
我要回答