使用Monotouch播放声音

3
无论我尝试什么(build -> content、NSUrl、filename),当我尝试在Monotouch中播放.caf音频文件时,都会出现“空异常”:找不到文件。
//var path = NSBundle.MainBundle.PathForResource("MatchGame", "caf"); 
//var gameSong = SystemSound.FromFile( new NSUrl(path, false));
var gameSong = SystemSound.FromFile("MatchGame.caf");
gameSong.PlaySystemSound();

我也尝试使用文件夹名称“images/MatchGame.caf”以及将MatchGame.caf移动到根文件夹来组合。 我错过了什么?非常感谢。 这是添加monotouch中声音的视频链接。http://www.screencast.com/t/MmE0ZmFh有什么问题吗?
2个回答

8

Bryan,

从你的屏幕录像中看到,你正在尝试播放一个mp3文件而不是caf文件。Mp3文件编码方式不同,不能使用现有的SystemSound类进行播放(我记不清在Obj-C中是否可以这样做了)。

你需要使用AVFoundation命名空间和AVAudioPlayer类。

using Monotouch.AVFoundation;

var mediaFile = NSUrl.FromFilename("myMp3.mp3");
var audioPlayer = AVAudioPlayer.FromUrl(mediaFile);
audioPlayer.FinishedPlaying += delegate { audioPlayer.Dispose(); };
audioPlayer.Play();

你可能需要修改上面的代码 - 我手头没有MonoDevelop,但这应该可以帮助你更进一步。

谢谢!

ChrisNTR


6
你需要第一行代码:

var path = NSBundle.MainBundle.PathForResource("MatchGame", "caf");

然后,确保你的音频文件被包含在应用程序中,方法是在属性面板中将你的CAF文件标记为“内容”,否则该文件将不会复制到生成的应用程序包(.app)中。
你可以按照这里记录的步骤进行操作(它们是针对图像的,但同样适用于音频文件):

http://wiki.monotouch.net/HowTo/Images/Add_an_Image_to_your_Project

此外,这是一个存储文件的好资源位置:

http://wiki.monotouch.net/HowTo/Files/HowTo%3a_Store_Files


我已经阅读了所有的文档并尝试了一切。但是我无法使其播放声音。您能给我示例代码吗? - Bryan
请您观看这个视频并告诉我有什么问题吗?http://www.screencast.com/t/MmE0ZmFh - Bryan
1
你遇到了一个 NullReferenceException 异常,很有可能是因为你没有一个有效的文件可以用于 SystemSound(它仅限于 30 秒的样本)。请使用我们实际推荐你使用的 API,而不是 SystemSound。 - miguel.de.icaza
1
最后一点,如果你想在出现错误时获得更详细的异常信息而不是“null”,你也可以使用以下代码:var sound = new SystemSound (url)而不是SystemSound.FromFile。 - miguel.de.icaza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接