我正在使用C#n音讯录制了音频和我需要删除所使用的停止按钮,一段时间延迟后简单地停止了自己的记录。

对于记录事件的代码

     private void cmbRecord_Click(object sender, EventArgs e)
     {
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

    } 


     void waveInStream_DataAvailable(object sender, WaveInEventArgs e)
    {
        writer.WriteData(e.Buffer, 0, e.BytesRecorded);
        int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);

    }

停止按钮被给定为

      private void cmbStop_Click(object sender, EventArgs e)
    {
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
    }

我需要自动停止cmbRecord_Click事件内的记录。 由于事先。

有帮助吗?

解决方案

使用定时器时,设置Interval并在复制cmbStop_Click事件代码计时器的OnTick事件。使在mbRecord_Click事件定时器和&记住禁用在cmbStop_Click事件定时器

修改

创建一个新的计时器,并设置其值

//把这个线在表单级水平

  System.Windows.Forms.Timer mytimer=new System.Windows.Forms.Timer(); //create a new Timer

//把这两个到您的形式构造方法仅InitializeComponent()后;

mytimer.Interval=1000; //set the interval to 1 second.
mytimer.Tick += new EventHandler(mytimer_Tick);

启用在mbRecord_Click事件定时器

private void cmbRecord_Click(object sender, EventArgs e)
{
            outputFilename = "file address";

            waveInStream = new WaveIn(44100,2);
            writer = new WaveFileWriter(outputFilename, waveInStream.WaveFormat);

            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);
            waveInStream.StartRecording();


            // Just controling the objects on the screen.
            cmbRecord.Enabled = false;
            cmbStop.Enabled = true;

            //Enable the timer to fire
            mytimer.Enabled = true;

}

后停止记录1秒..

void mytimer_Tick(object sender, EventArgs e)
{       
        waveInStream.StopRecording();
        waveInStream.Dispose();
        waveInStream = null;
        writer.Close();
        writer = null;

        cmbRecord.Enabled = true;
        cmbStop.Enabled = false;
//disable the timer here so it won't fire again...
        mytimer.Enabled = false;
}

其他提示

有一件事情你可能要牢记 - 会有一个DataAvailable回调的之后的调用StopRecording(或期间,根据所使用的回调模型),所以你可能要延迟关闭在WaveFileWriter直到你写的一切。

有一个在所述 VoiceRecorder 样品其使用n音讯并停止在60秒后记录的项目。我在这篇文章解释如何记录自动为停止。

long maxFileLength = this.recordingFormat.AverageBytesPerSecond * 60;

int toWrite = (int)Math.Min(maxFileLength - writer.Length, bytesRecorded);
if (toWrite > 0)
    writer.WriteData(buffer, 0, bytesRecorded);
else
    Stop();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top