使用以下方法加载声音效果(在C#,XNA中)
SoundEffect effect = Content.Load<SoundEffect>(location);
在某些具有特定声音设置的计算机上,我遇到应用程序崩溃,导致InvalidOperationException
异常。内容管理器似乎已正确初始化,位置也正确(在不同的计算机上正常工作)。
示例音频文件位于:http://www.hybridbeasts.com/test.wav
有趣的是,try / catch失败并仍然会导致应用程序崩溃。
try
{
effect = Content.Load<SoundEffect>(location);
}
catch
{
Warning.Happened("Problem with audio playback detected. Sound automatically disabled");
DebugEngine.disableSound = true;
return;
}
try / catch有什么问题?
调用堆栈如下所示:
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Helpers.ThrowExceptionFromErrorCode(int error)+ 0x3d bytes Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Audio.SoundEffect.AllocateFormatAndData(byte [] format,byte [] data,int offset,int count)+ 0x107 bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Audio.SoundEffect.Create(byte [] format,byte [] data,int offset,int count,int loopStart,int loopLength,System.TimeSpan duration)+ 0x31 bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Audio.SoundEffect.SoundEffect(byte [] format,byte [] data,int loopStart,int loopLength,System.TimeSpan duration)+ 0xd1 bytes Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.SoundEffectReader.Read(Microsoft.Xna.Framework.Content.ContentReader input,Microsoft.Xna.Framework.Audio.SoundEffect existingInstance)+ 0x124 bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentReader.InvokeReader(Microsoft.Xna.Framework.Content.ContentTypeReader reader,object existingInstance)+ 0xdf bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentReader.ReadObjectInternal(object existingInstance)+ 0xfd bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentReader.ReadObject()+ 0x4d bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentReader.ReadAsset()+ 0x88 bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentManager.ReadAsset(string assetName,System.Action recordDisposableObject)+ 0x129 bytes
Microsoft.Xna.Framework.dll!Microsoft.Xna.Framework.Content.ContentManager.Load(string assetName)+ 0x2c7 bytes
Project_Ares.exe!Project_Ares.SoundEffectAres.Load(字符串位置)第77行+ 0x2c字节C#