【发布时间】:2016-08-19 11:10:55
【问题描述】:
我正在构建一个具有可选音频支持的应用程序,它将具有某种背景声音(例如在每个页面中不断播放的循环音轨)。
我所做的是创建一个音频管理器,允许我管理我的声音,这应该根据用户的设置静音/取消静音。
不幸的是,这并没有发生,即使用户禁用它,音频也会继续播放。
这是我的代码示例:
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属性不起作用,这迫使我把这件事复杂化了。 -
您使用的
BackgroundSound是什么?是MediaElement吗?我可以使用MediaElement重现您的问题。IsMuted财产在我身边运作良好。您能否分享一个可以重现您的问题的minimal reproducible example? -
@JayZuo-MSFT 添加了更多代码。我一设置音源就开始播放声音,之后就无法静音了。
标签: c# audio uwp windows-10-universal