首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NAudio录制时如何显示录制时间?

用NAudio录制时如何显示录制时间?
EN

Stack Overflow用户
提问于 2015-07-10 20:29:15
回答 1查看 853关注 0票数 2

我正在尝试显示录制时间,而与NAudio库使用C#窗口窗体Timer.This的代码,我试图achieve.The的问题,我有这个代码是计时器的计时不匹配的长度录制我希望计时器的计时和录制计时被同步!

代码语言:javascript
复制
  private void buttonStart_Click(object sender, EventArgs e)
    {

        buttonStart.Enabled = false;
        buttonStop.Enabled = true;

        waveSource = new WaveIn();
        waveSource.WaveFormat = new WaveFormat(44100, 2);

        waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
        waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);

        waveFile = new WaveFileWriter(@"C:\one\Test0010.wav", waveSource.WaveFormat);
        waveSource.StartRecording();

      } 
  void waveSource_DataAvailable(object sender, WaveInEventArgs e)
    {

        if (waveFile != null)
        {

            timerSoundRecord.Start();
            waveFile.Write(e.Buffer, 0, e.BytesRecorded);
            waveFile.Flush();
            var lenght = (int)(waveFile.Length / waveFile.WaveFormat.AverageBytesPerSecond);

            if (lenght == 6)
            {
                timerSoundRecord.Stop();
                waveSource.StopRecording();
                buttonStop.Enabled = false;
                buttonStart.Enabled = true;
            }



        }
    }

private void timerSoundRecord_Tick(object sender, EventArgs e)
    {

        if (progressBarRecordSound.Value != 6)
        {


            seconds = seconds + 1;

            labelTime.Text = @"00:0" + seconds;
            progressBarRecordSound.Value++;
        }
        else
        {
            timerSoundRecord.Stop();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2015-07-10 20:52:00

您在每个节拍都在更新timerSoundRecord_Tick中的秒数。这些是非常不同的测量方法。

只需在全局方法中将长度设置为变量,然后在timerSoundRecord_Tick中对其进行检查,而不是使用要增加的变量waveSource_DataAvailable。

代码语言:javascript
复制
  private void buttonStart_Click(object sender, EventArgs e)
{

    buttonStart.Enabled = false;
    buttonStop.Enabled = true;

    waveSource = new WaveIn();
    waveSource.WaveFormat = new WaveFormat(44100, 2);

    waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
    waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);

    waveFile = new WaveFileWriter(@"C:\one\Test0010.wav", waveSource.WaveFormat);
    waveSource.StartRecording();
    timerSoundRecord.Start();
  } 

int length = 0;
void waveSource_DataAvailable(object sender, WaveInEventArgs e)
{
    if (waveFile != null)
    {           
        waveFile.Write(e.Buffer, 0, e.BytesRecorded);
        waveFile.Flush();
        var lenght = (int)(waveFile.Length / waveFile.WaveFormat.AverageBytesPerSecond);

        if (lenght == 6)
        {
            timerSoundRecord.Stop();
            waveSource.StopRecording();
            labelTime.Text = @"00:0" + length;
            progressBarRecordSound.Value++;
            buttonStop.Enabled = false;
            buttonStart.Enabled = true;
        }
    }
}

private void timerSoundRecord_Tick(object sender, EventArgs e)
{
        labelTime.Text = @"00:0" + length;
        progressBarRecordSound.Value++;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31340804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档