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