gpt4 book ai didi

c# - 单点触控 : Playing sound

转载 作者:可可西里 更新时间:2023-11-01 05:04:10 27 4
gpt4 key购买 nike

我正在尝试在用户点击特定按钮时播放一段短促的声音。但问题是我总是收到未设置到实例对象的对象引用。表示为空!

我首先尝试了 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();

但同样的错误。我用谷歌搜索了一下,发现很多人都有这个问题。我们需要知道它是否是错误。

最佳答案

关于SystemSoundMP3的使用请看这个问答: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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com