NAudio问题 - 管理一个接一个播放的多重声音文件

时间:2010-10-13 03:04:53

标签: audio naudio

我一直在努力解决几个星期以来一直困扰的问题!基本上,我正在开发的软件可以录制音频,然后播放。该软件可以记录多个声音文件,然后一个接一个地播放它们(使它看起来像是一个连续的声音文件)。但是,我遇到的问题是,从第二个声音文件开始,似乎在第二个,第三个,第四个(等等)文件的顶部有一个“滴答声”。

此滴答是第一个声音文件的最后几毫秒。我所指的“滴答声”类似于黑胶唱片跳得非常快的声音。

到目前为止,我还没有找到问题的根源,是否有人对可能导致此问题的任何想法有所了解?

谢谢

编辑:在下面添加了一些方法。

好的,所以以下方法是重播方法。

public override void Replay(long time)
    {
        if(this.StartTime <= time && this.EndTime >= time && (Speed >= 0.95 && Speed <= 1.05))
        {
            if (!locked)
            {
                locked = true;
                //close the previous stream
                CloseWaveOut();
                //open the file
                waveOut = new NativeDirectSoundOut(latency);
                mainOutputStream = CreateInputStream(outputFilename);
                if (waveOut != null && mainOutputStream != null)
                {
                    //set the time position
                    long offset = time - StartTime;
                    if (offset > 0)
                    {
                        mainOutputStream.CurrentTime = TimeSpan.FromMilliseconds(Convert.ToDouble(offset));
                    }
                    //CurrentTime = TimeSpan.FromMilliseconds(Convert.ToDouble(time - StartTime));
                    waveOut.Init(mainOutputStream);
                    ((WaveChannel32)mainOutputStream).Volume = Volume;
                    Console.WriteLine("waveOut Playing");  // Debugging purposes
                    waveOut.Play();
                }
            }
        }
    }

以下方法是记录方法:

        public override void Record(long time)
    {
        if (waveInStream == null && writer == null && !recorded)
        {
            //for record 
            writer = new WaveFileWriter(outputFilename, recordingFormat);
            waveInStream = new WaveInStream(deviceNumber, recordingFormat, null);
            waveInStream.DataAvailable += new EventHandler<WaveInEventArgs>(waveInStream_DataAvailable);

            waveInStream.StartRecording();
            this.StartTime = time;

            Console.Out.WriteLine("Record Method called"); // Debugging Purposes
        }
    }

1 个答案:

答案 0 :(得分:1)

我建议不要关闭并打开WaveOut,但总是打开一个WaveOut实例。创建一个新的IWaveProvider,其Read方法首先返回第一个WAV文件中的所有数据,然后返回第二个WAV文件中的所有数据。

要找到滴答声的来源,我首先要在Windows Media Player中仔细检查录制的WAV文件本身没有滴答声。