C#音频文件虽然已停止,但仍在循环中播放

时间:2016-07-06 11:00:08

标签: naudio

我有一个较旧的实现,使用NAudio 1.6播放铃声,表示应用程序中的来电。一旦用户接受呼叫,我就会停止播放。

基本上完成了以下操作:
        1.一旦我收到必须发出呼叫信号的事件,就会启动计时器         2.在播放器上的此计时器Play()内         3.当计时器再次启动时,如果通过CurrentTime属性TotalTimeWaveStream属性Stop()进行检查,则会执行检查         4.当用户接受呼叫时,在播放器上调用BufferedWaveProvider并停止计时器

关键是,我们有时会在播放仍然重复的情况下运行,尽管计时器已停止并且播放器上已调用Stop()。

在以下链接中,我读到代码中使用的类WaveChannel32BufferedWaveProvider始终用0填充缓冲区。

http://mark-dot-net.blogspot.com/2011/05/naudio-and-playbackstopped-problem.html

不停止播放是否可能是由于使用了课程WaveChannel32AudioFileReader

在NAudio 1.7中,PadWithZeroes类就在那里。这个类也用零填充吗?我没有在这个课程中找到像AudioFileReader这样的属性。在这种循环播放的情况下是否可以使用TimerElapsed

void TimerElapsed(object sender, ElapsedEventArgs e) { try { WaveStream stream = _audioStream as WaveStream; if (stream != null && stream.CurrentTime >= stream.TotalTime ) { StartPlayback(); } } catch (Exception ex) { //do some actions here } }

当前实施的代码下方
    private WaveStream CreateWavInputStream(string path)
        {
            WaveStream readerStream = new WaveFileReader(path);
            if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
                readerStream = new BlockAlignReductionStream(readerStream);
            }

            if (readerStream.WaveFormat.BitsPerSample != 16)
            {
                var format = new  WaveFormat(readerStream.WaveFormat.SampleRate, 16,  readerStream.WaveFormat.Channels);
                readerStream = new WaveFormatConversionStream(format, readerStream);
            }

            WaveChannel32 inputStream = new WaveChannel32(readerStream);
            return inputStream;
        }

以下代码创建输入流:

$this->db->where("column_name = 'Click on the Event or  Booking Code you would like to use.'", NULL, FALSE);

0 个答案:

没有答案