首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的NAudio音乐冻结时,在我的游戏中CPU使用量激增?

为什么我的NAudio音乐冻结时,在我的游戏中CPU使用量激增?
EN

Stack Overflow用户
提问于 2015-06-21 13:45:14
回答 1查看 456关注 0票数 0

我正在编写一个游戏,并试图使用NAudio来播放音乐和音效,但是当游戏占用大量的CPU时,音乐就会冻结。我试着在一个单独的线程中运行音乐,但这似乎没有帮助。我怎样才能防止音乐冻结呢?

这是我的音乐播放代码:

代码语言:javascript
复制
        // (code to select a track goes here)

        // prepare the new track
        var tl = trackname.ToLower();
        var path = Path.Combine("Music", trackname);
        IWaveProvider p;
        if (tl.EndsWith("ogg"))
            p = new VorbisWaveReader(path);
        else if (tl.EndsWith("mp3"))
            p = new Mp3FileReader(path);
        else if (tl.EndsWith("wav"))
            p = new WaveFileReader(path);
        else
            throw new Exception("Unknown audio format for file " + path);
        waveout.Stop();
        if (CurrentMode == MusicMode.None)
            return; // no music!

        // fade between the two tracks
        prevTrack = curTrack;
        if (prevTrack != null)
            prevTrack.BeginFadeOut(FadeDuration);
        curTrack = new FadeInOutSampleProvider(p.ToSampleProvider(), true);
        curTrack.BeginFadeIn(FadeDuration);

        // start playing
        // TODO - start fade of new track even before old track is done?
        if (prevTrack != null)
            waveout.Init(new MixingSampleProvider(new ISampleProvider[] { curTrack, prevTrack }));
        else
            waveout.Init(curTrack);
        waveout.Play();
        waveout.PlaybackStopped += waveout_PlaybackStopped;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 07:14:57

WaveOut是什么类型的?使用WaveOutEvent将在后台线程上执行音频操作。

而且,在同一个WaveOut.Init实例上第二次调用WaveOut并不是NAudio正式支持的东西,可能会导致奇怪的事情发生。

提高音频性能的主要方法是:

  1. 以较高的延迟操作
  2. 最小化音频引擎需要做的工作(例如,将音频从自定义格式预解压缩到PCM,并将其存储在内存中)

对于您的场景,最好的方法是创建一个自定义的跨衰落示例提供程序。不幸的是,目前NAudio中还没有这样的文章,但是对于将来的博客帖子/代码示例来说,这是个好主意,所以我会把它放在要写的事情清单上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30965185

复制
相关文章

相似问题

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