我正在使用Xcode为Mac OS X制作应用程序,我希望它能在发生某些事情时播放警报声。
在Objective-C / Cocoa中播放声音最简单的代码是什么?请注意,我的声音文件是.aif
。
另外,我在哪里将声音文件放在我的项目中?
谢谢。
答案 0 :(得分:26)
要在Mac上播放音频,您可以使用NSSound
进行基本活动,也可以使用功能更强大的CoreAudio
框架来处理更复杂的任务。
如果您使用NSSound
来实现此目标,您的代码将如下所示:
NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"replace-with-file-name" ofType:@"aif"];
NSSound *sound = [[NSSound alloc] initWithContentsOfFile:resourcePath byReference:YES];
// Do something with sound, like [sound play] and release.
OR
NSSound *sound = [NSSound soundNamed:@"replace-with-file-name-without-the-extension"];
// Do something with sound, like [sound play], but don't release (it's autoreleased).
如果您要使用第二个代码段,则必须确保声音文件的扩展名为aiff
,而不仅仅是aif
,因为+soundNamed:
会查找非常具体的文件扩展名;我认为aif
不在该列表中。
使用CoreAudio
会更复杂,所以如果您只是想玩它并使用非常简单的设置搞乱,只需使用NSSound
答案 1 :(得分:10)
声音的基本播放非常简单。
您可以使用NSSound
类以几种不同的方式加载文件,例如,按名称加载:
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
如果你想保留它,就需要保留。
在这种情况下,类将搜索某些特定目录,包括您的应用程序包,以查找具有该名称的声音文件。一个重要的注意事项是文件必须具有.aiff
(带有两个 f)的扩展名才能通过此方法找到。*
您可能会将声音文件存储在项目的Resources文件夹中;这就是“媒体”文件通常被保存的地方。
然后你可以非常简单地演奏它,也许是按下按钮:
- (IBAction)playTheSound:(id)sender {
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
[myAwesomeSound play];
}
也可以进行一些基本的传输控制:暂停,停止,检查声音是否已完成,等等。有关详细信息,请参阅Sound Programming Topics Guide。
*当然也可以使用其他格式。
答案 2 :(得分:1)
例如,添加AudioToolbox框架,将声音文件添加到资源/项目,然后将以下内容添加到.h:
#import <AudioToolbox/AudioToolbox.h>
然后:(在.h中的@interface {blah}之后)
- (IBAction) playSound;
将以下内容添加到.m :(将'Ping'和'wav'更改为相应的文件名和类型)
- (IBAction) playSound
{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
答案 3 :(得分:0)