如何在我的应用程序的Resources文件夹中播放mp3文件?

时间:2009-07-09 10:56:18

标签: objective-c cocoa macos nssound

我正在创建一个可以在事件中播放声音的应用程序,但我无法弄清楚如何从应用程序的ressources文件夹中访问文件。

以下是我正在做的事情:

NSSound *player = [[NSSound alloc] initWithContentsOfFile:@"Sound.mp3"] byReference:NO];
[player play];

但它根本不起作用。如果我放一个完整长度的路径它会工作,但我需要另一种方式,因为有人可能会将我的应用程序放在Application文件夹以外的其他位置。

2 个答案:

答案 0 :(得分:9)

您需要使用NSBundle类和pathForResource:ofType:方法来引用该文件:

NSSound *player = [[NSSound alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"mp3"] byReference:NO];
[player play];

这将返回传递给方法的资源的完整路径名。

答案 1 :(得分:1)

只是为了澄清为什么您的初始解决方案不起作用:

相对路径相对于当前工作目录。对于从Finder启动的GUI应用程序,初始工作目录是/ - 即文件系统的根目录。如果它是您的软件包的Res​​ources文件夹,那么您的解决方案就可以运行。

正如Perspx在他的回答中指出的那样,正确的解决方案是让你的包将相对路径转换为完整路径。