2009-11-18 130 views
3

无论我尝试什么(构建 - >内容,NSUrl,文件名),我都会收到一个'null exception':当我尝试在monotouch中播放.caf声音文件时找不到文件。用Monotouch播放声音

//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移动到根文件夹中的组合。

我错过了什么?非常感谢。

这里是一个链接到添加单声道声音的视频。 http://www.screencast.com/t/MmE0ZmFh什么是错的?

回答

8

布莱恩,

从看你的截屏 - 你试图播放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

+0

非常感谢!搞定了。 – Bryan 2009-11-30 23:29:04

6

需要的第一行:

变种路径= 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

+0

我读了所有的文件和尝试一切。我无法让它发挥出声音。你能给我一些示例代码吗? – Bryan 2009-11-23 20:15:47

+0

你能看到这个视频,告诉我什么是错的? http://www.screencast.com/t/MmE0ZmFh – Bryan 2009-11-23 21:51:28

+1

您正在收到NullReferenceException,因此您可能没有可用于SystemSound的有效文件(它仅限于30秒样本)。使用我们推荐使用的API,而不是SystemSound。如果你想在错误的情况下,以获得更详细的异常,而不是“空” VAR声音=新SystemSound(URL) 相反SystemSound.FromFile的: – 2009-12-02 03:18:59