作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在用户点击特定按钮时播放一段短促的声音。但问题是我总是收到未设置到实例对象的对象引用。表示为空!
我首先尝试了 MonoTouch.AudioToolBox.SystemSound。
MonoTouch.AudioToolbox.AudioSession.Initialize();
MonoTouch.AudioToolbox.AudioSession.Category = MonoTouch.AudioToolbox.AudioSessionCategory.MediaPlayback;
MonoTouch.AudioToolbox.AudioSession.SetActive(true);
var t = MonoTouch.AudioToolbox.SystemSound.FromFile("click.mp3");
t.PlaySystemSound();
请注意,“click.mp3”位于我的根解决方案文件夹中,并且被标记为“内容”。另一种方法是 MonoTouch.AVFoundation.AVAudioPlayer
。
var url = NSUrl.FromFilename("click.mp3");
AVAudioPlayer player = AVAudioPlayer.FromUrl(url);
player.FinishedPlaying += (sender, e) => { player.Dispose(); };
player.Play();
但同样的错误。我用谷歌搜索了一下,发现很多人都有这个问题。我们需要知道它是否是错误。
最佳答案
关于SystemSound
和MP3的使用请看这个问答:Playing a Sound With Monotouch
对于 AVAudioPlayer
请注意以下模式是危险的:
AVAudioPlayer player = AVAudioPlayer.FromUrl(url);
player.FinishedPlaying += (sender, e) => { player.Dispose(); };
player.Play();
自 Play
是异步的。这意味着托管 player
实例可以在 FinishedPlaying
发生之前超出范围。反过来,这个超出范围意味着 GC 可能已经收集了该实例。
解决此问题的方法是将 player
局部变量提升为类型字段。这将确保 GC 不会在播放声音时收集实例。
关于c# - 单点触控 : Playing sound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905008/
我是一名优秀的程序员,十分优秀!