我建设具有可选的音频支持的应用程序,它的特色将某种背景声音(如循环配乐上的每一页打保持)切换音频。在UWP应用
我所做的就是创建一个音频管理器,让我来管理我的声音,这应根据用户的设置静音/取消静音音频。
不幸的是,这不会发生,且音频不断播放即使用户禁用它。
这是我的代码示例:
public static async Task StartSoundManager()
{
// Get audio stream from app folder
// ...
BackgroundSound.SetSource(currentStream, currentFile.ContentType);
BackgroundSound.IsLooping = true;
ToggleSounds();
}
public static void ToggleSounds()
{
BackgroundSound.IsMuted = !Settings.IsAudioOn;
}
public bool IsAudioOn
{
// standard getter
set
{
// save value
SoundManager.ToggleSounds();
}
}
一些测试后,IsMuted
设置正确(我也尝试设置音量为0),但更改设置时,没有任何反应。
你们是否有为什么预期这样一个简单的任务没有任何工作的想法?在我看来,在设置源代码后你不能改变音量,这感觉真的是错误的。
编辑:更加完整的类
public static class AudioManager
{
public const string BACKGROUND = "BACKGROUND.mp3";
private static readonly MediaElement BackgroundSound = new MediaElement();
public static async Task StartSoundManager()
{
// Get folder
var folder =
await (await Package.Current.InstalledLocation.GetFolderAsync("Assets")).GetFolderAsync("Audio");
var currentFile = await folder.GetFileAsync(BACKGROUND);
var currentStream = await currentFile.OpenAsync(FileAccessMode.Read);
BackgroundSound.SetSource(currentStream, currentFile.ContentType);
// Set mode and volume
BackgroundSound.IsLooping = true;
ToggleSounds();
}
public static void ToggleSounds()
{
BackgroundSound.IsMuted = !Settings.IsAudioOn; // IsAudioOn is false, still the sound plays
}
}
不会停止()/播放()更有意义?至少你会知道代码是否实际运行:) –
不,因为该设置还切换一次性声音。这个想法是将声音逻辑写成好像始终开启,然后使用音量/静音给用户一个选择。另外,我不明白为什么'IsMute'或'Volume'属性不起作用,迫使我过分复杂这件事。 – StepTNT
你正在使用什么'BackgroundSound'?它是一个'MediaElement'吗?我可以用'MediaElement'重现你的问题。 “IsMuted'属性在我身边很好。你能分享一个可以重现你的问题的[mcve]吗? –