Monotouch 声音无法正常播放

Posted

技术标签:

【中文标题】Monotouch 声音无法正常播放【英文标题】:Monotouch sound doesn't play properly 【发布时间】:2011-05-10 00:46:57 【问题描述】:

我正在尝试在 monotouch 中播放声音文件,但它在一两秒后被切断。这是我用来播放声音的代码:

SoundFileName = filename; 
var sound = SystemSound.FromFile(filename);
sound.PlaySystemSound();

这是我正在尝试播放的 MP3 文件。再一次,我听到了一小会儿,然后就被剪掉了。之后我添加了一个 thread.sleep() 行,然后它会一直播放。

但这并不理想,因为我正在播放的 mp3 文件的长度可能会有所不同。任何帮助将不胜感激。谢谢你。

【问题讨论】:

【参考方案1】:

您需要在表单或类级别声明您的sound 对象。在您发布的示例中,sound 仅作用于函数,因此一旦方法结束,变量就会超出作用域并在声音播放完毕之前被释放。 Thread.sleep 有效,因为该调用会阻止该方法结束一段时间(从而防止 sound 超出范围)。

【讨论】:

非常感谢,陷入了 MT 激进的 GC :(【参考方案2】:

您可能还想看看这个问题:Playing a sound with MonoTouch

我不认为 SystemSound 旨在与开放时长的 MP3 一起使用。

【讨论】:

ios 中的 AVAudioPlayer(我假设是 MonoTouch 包装的)与 .NET 中的 SoundPlayer 工作方式相同 - 它在开始播放之前预加载整个文件,这意味着它并不理想对于一首歌曲长度的 MP3。我不知道,也许 MonoTouch 通过包装不同的 iPhone API 来实现 SoundPlayer(据我所知,至少有 3 个可供选择)?

以上是关于Monotouch 声音无法正常播放的主要内容,如果未能解决你的问题,请参考以下文章

使用 Monotouch 播放默认 iOS 系统声音

使用 AudioQueue 和 Monotouch 静态声音录制

Monotouch 停止播放音频剪辑

montouch 检测声音何时播放完毕

为啥我使用 WinAPI C++ 录制的声音无法正常播放?

MonoTouch 是不是有任何数据绑定支持?