Objective c 播放声音文件(.aif)的简单方法
我正在使用Xcode为MacOSX制作一个应用程序,我希望它在发生什么事情时发出警报声 在Objective-C/Cocoa中播放声音的最简单代码是什么?请注意,我的声音文件是Objective c 播放声音文件(.aif)的简单方法,objective-c,cocoa,macos,audio,Objective C,Cocoa,Macos,Audio,我正在使用Xcode为MacOSX制作一个应用程序,我希望它在发生什么事情时发出警报声 在Objective-C/Cocoa中播放声音的最简单代码是什么?请注意,我的声音文件是.aif 另外,我应该将声音文件放在我的项目中的什么位置 谢谢。要在Mac上播放音频,您可以将其用于基本活动,也可以使用更强大的框架来执行更复杂的任务 如果要使用NSSound实现此目标,您的代码将如下所示: NSString *resourcePath = [[NSBundle mainBundle] pathForR
.aif
另外,我应该将声音文件放在我的项目中的什么位置
谢谢。要在Mac上播放音频,您可以将其用于基本活动,也可以使用更强大的框架来执行更复杂的任务
如果要使用
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.
或
如果要使用第二个代码段,则必须确保声音文件的扩展名是aiff
,而不仅仅是aif
,因为+soundNamed:
查找非常特定的文件扩展名;我认为aif
不在该列表中
使用
CoreAudio
更为复杂,因此,如果您只想播放它,并使用非常简单的设置,只需使用NSSound
基本的声音播放非常简单
您可以使用该类以几种不同的方式加载文件,例如,按名称加载:
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
如果你想保留它,就需要保留它
在本例中,该类将搜索某些特定目录,包括应用程序包,以查找具有该名称的声音文件。一个重要的注意事项是,该文件必须具有.aiff
(具有两个f)扩展名才能通过此方法找到。*
您可能会将声音文件存储在项目的Resources文件夹中;这就是通常保存“媒体”文件的地方
然后,您可以非常简单地播放它,可能需要按下按钮:
- (IBAction)playTheSound:(id)sender {
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
[myAwesomeSound play];
}
还可以进行一些基本的传输控制:暂停、停止、检查声音是否已结束,等等。详情请参阅
*当然,也可以使用其他格式。例如,添加AudioToolbox框架,将声音文件添加到资源/项目中,然后将以下内容添加到.h:
#import <AudioToolbox/AudioToolbox.h>
将以下内容添加到.m中:(将“Ping”和“wav”更改为相应的文件名和类型)
您可以在Xcode中将.aif文件复制并添加到项目中,如下所示:
请参阅苹果的示例和精彩信息:&。谢谢,你能给我一个如何在代码中使用NSSound的示例吗?谢谢,它起作用了,再问一个问题:我的声音是例如1分钟,我释放了它,它是否继续播放?Andy,声明一个声音一旦被释放就会停止播放:“解除分配后,声音对象停止播放声音(根据需要),以便释放相应的音频资源。”因此,如果创建声音,开始播放,然后在播放结束前释放,声音将停止。
#import <AudioToolbox/AudioToolbox.h>
- (IBAction) playSound;
- (IBAction) playSound
{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}