C# 背景音频和系统媒体传输控制(SMTC)

C# 背景音频和系统媒体传输控制(SMTC),c#,uwp,C#,Uwp,我正在尝试使用UWP应用程序(特别是Xbox)的音频图API捕获/呈现音频 我希望能够捕获和呈现音频时,应用程序在后台的RTC应用程序。我从文档中了解到,我可以手动启用SMTC以允许AudioGraph在后台继续工作,但它不工作 我正在使用以下代码设置SMTC: systemMediaControls = SystemMediaTransportControls.GetForCurrentView(); systemMediaControls.IsEnabled

我正在尝试使用UWP应用程序(特别是Xbox)的音频图API捕获/呈现音频

我希望能够捕获和呈现音频时,应用程序在后台的RTC应用程序。我从文档中了解到,我可以手动启用SMTC以允许AudioGraph在后台继续工作,但它不工作

我正在使用以下代码设置SMTC:

        systemMediaControls = SystemMediaTransportControls.GetForCurrentView();
        systemMediaControls.IsEnabled = true;
        systemMediaControls.PropertyChanged += SystemMediaControls_PropertyChanged;
        systemMediaControls.ButtonPressed += SystemMediaControls_ButtonPressed;
        systemMediaControls.IsPlayEnabled = true;
        systemMediaControls.IsPauseEnabled = true;
        systemMediaControls.IsStopEnabled = true;
        systemMediaControls.PlaybackStatus = MediaPlaybackStatus.Playing;
我创建了输出听力图,如下所示:

private async Task CreateAudioGraph(string outputDeviceId)
{
    try
    {

        // Create an AudioGraph with default settings
        AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Media)
        {
            PrimaryRenderDevice = await DeviceInformation.CreateFromIdAsync(outputDeviceId)
        };
        CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);

        if (result.Status != AudioGraphCreationStatus.Success)
        {
            // Cannot create graph
            //rootPage.NotifyUser(String.Format("AudioGraph Creation Error because {0}", result.Status.ToString()), NotifyType.ErrorMessage);
            return;
        }

        AudioGraph = result.Graph;

        // Create a device output node
        CreateAudioDeviceOutputNodeResult deviceOutputNodeResult = await AudioGraph.CreateDeviceOutputNodeAsync();

        if (deviceOutputNodeResult.Status != AudioDeviceNodeCreationStatus.Success)
        {
            // Cannot create device output node
            //rootPage.NotifyUser(String.Format("Audio Device Output unavailable because {0}", deviceOutputNodeResult.Status.ToString()), NotifyType.ErrorMessage);
            //speakerContainer.Background = new SolidColorBrush(Colors.Red);
        }

        OutputNode = deviceOutputNodeResult.DeviceOutputNode;

        AudioGraph.Start();
    }
    catch (Exception ex)
    {
        var e = ex;
    }
}
此事件处理程序捕获PropertyChanged事件:

private async void SystemMediaControls_PropertyChanged(SystemMediaTransportControls sender, SystemMediaTransportControlsPropertyChangedEventArgs args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        if (args.Property == SystemMediaTransportControlsProperty.SoundLevel)
        {
            // Check for the new Sound level
            switch (systemMediaControls.SoundLevel)
            {
                case SoundLevel.Full:
                case SoundLevel.Low:
                    // If we had paused due to system mute, then resume on unmute.
                    //if (pausedDueToMute)
                    //{
                    //    mediaPlayer.Play();
                    //    pausedDueToMute = false;
                    //}
                    break;
                case SoundLevel.Muted:
                    // We've been muted by the system. Pause playback to release resources.
                    //if (mediaPlayer != null && mediaPlayer.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
                    //{
                    //    mediaPlayer.Pause();
                    //    pausedDueToMute = true;
                    //}
                    break;
            }
        }
    });
}
我还在appxmanifest中添加了
backgroundMediaPlayback
功能:

  <Capabilities>
    <Capability Name="internetClient" />
    <uap:Capability Name="videosLibrary" />
    <uap:Capability Name="picturesLibrary" />
    <uap:Capability Name="contacts" />
    <uap:Capability Name="voipCall" />
    <uap:Capability Name="phoneCall" />
    <uap3:Capability Name="backgroundMediaPlayback"/>
    <DeviceCapability Name="microphone" />
    <DeviceCapability Name="webcam" />
  </Capabilities>

问题是,当应用程序被发送到后台时,
systemMediaControls.SoundLevel
被静音


如何使用AudioGraph API在后台捕获/呈现音频?

这是否回答了您的问题?