【问题标题】:Background audio with third party audio library带有第三方音频库的背景音频
【发布时间】:2018-04-17 00:33:14
【问题描述】:

我正在开发一个显示音频频谱的音乐播放器。从我发现可以通过使用 Bass.dll(一个音频库)来做到这一点。

但是,这些示例中的大多数不支持背景音频播放。我尝试在应用清单中添加背景音频功能,但没有任何改变。

如何使用第三方音频库以及支持背景音频播放?我做了一些研究,发现在自定义音频播放器中涉及 SystemMediaTransportControl 可能是一种选择,但我不确定。如果有人能给我提示,将不胜感激

【问题讨论】:

    标签: uwp win-universal-app


    【解决方案1】:

    经过一番研究和实验,我终于找到了解决办法。

    根据背景音频的文档,开发者应该手动集成MediaPlayer中已经包含的SystemMediaTrnasportControl。

    这是引用:

    如果您不使用 MediaPlayer 提供的自动 SMTC 集成,则必须手动与 SMTC 集成以启用背景音频。至少,您的应用必须通过将 IsPlayEnabled 和 IsPauseEnabled 设置为 true 来启用播放和暂停按钮。您的应用还必须处理 ButtonPressed 事件。如果您的应用不满足这些要求,则当您的应用移至后台时,音频播放将停止。

    将新的单进程模型用于背景音频的应用应通过调用 GetForCurrentView 获取 SystemMediaTransportControls 的实例。为后台音频使用传统双进程模型的应用必须使用 BackgroundMediaPlayer.Current.SystemMediaTransportControls 从其后台进程访问 SMTC。

    简而言之,这是背景音频的两个最少代码

    public BassAudioPlayer(CoreDispatcher dispatcher)
        {
            _dispatcher = dispatcher;
            _smtc = SystemMediaTransportControls.GetForCurrentView();
    
            _smtc.ButtonPressed += systemMediaControls_ButtonPressedAsync;
    
            _smtc.IsPlayEnabled = true;
            _smtc.IsPauseEnabled = true;
        }
    
        private async void systemMediaControls_ButtonPressedAsync(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
        {
            await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
            {
                //Whatever you want to add in
            });
        }
    

    【讨论】:

    • @CoCaIceDew 感谢您的提醒。 StackOverflow 只允许人们在发布两天后标记自己的答案,所以我明天再做
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多