我正在使用Xcode爲Mac OS X製作應用程序,並且我希望它在發生某些事情時播放警報聲。簡單的方法來播放聲音文件(.aif)
在Objective-C/Cocoa中播放聲音最簡單的代碼是什麼?請注意,我的聲音文件是.aif
。
另外,我在哪裏把聲音文件放入我的項目?
謝謝。
我正在使用Xcode爲Mac OS X製作應用程序,並且我希望它在發生某些事情時播放警報聲。簡單的方法來播放聲音文件(.aif)
在Objective-C/Cocoa中播放聲音最簡單的代碼是什麼?請注意,我的聲音文件是.aif
。
另外,我在哪裏把聲音文件放入我的項目?
謝謝。
要在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:
會查找非常特定的文件擴展名nsions;我認爲aif
不在該列表中。
使用CoreAudio
是比較複雜的,所以如果你只是想用非常簡單的設置圍繞發揮它和食堂,只需使用NSSound
聲音的基本播放是很容易的。
可以使用NSSound
類加載該文件在幾個不同的方式,例如,通過名稱:
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
這將需要保留的,如果你想保持它周圍。
在這種情況下,該類將搜索某些特定的目錄,包括您的應用程序包,以找到具有該名稱的聲音文件。其中重要的一點是,該文件必須有.aiff
(與 F公司)的擴展,以通過這種方法發現*
你可能會存儲在您的項目的資源文件夾中的聲音文件。這就是通常保存「媒體」文件的地方。
然後你就可以非常簡單地玩,也許用一個按鈕按下:
- (IBAction)playTheSound:(id)sender {
NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"];
[myAwesomeSound play];
}
它也可以做一些基本的傳輸控制:暫停,停止,檢查聲音是否已經完成,等等。有關詳細信息,請參閱Sound Programming Topics Guide。
*當然也可以使用其他格式。
例如,添加AudioToolbox框架,將聲音文件添加到您的資源/項目,然後將以下內容添加到您的。H:
#import <AudioToolbox/AudioToolbox.h>
然後:
- (IBAction) playSound;
(@interface {}嗒嗒在您的.h後)以下內容添加到您的m:(變 '平' 和 'WAV' 到相應的文件名和類型)
- (IBAction) playSound
{
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
AudioServicesPlaySystemSound(soundID);
[soundFile release];
}
謝謝,你能給我一個如何在代碼中使用NSSound的例子嗎? – Andy 2011-05-16 20:21:07
感謝它的工作,只有一個問題:我的聲音是例如1分鐘,我釋放它,它繼續玩嗎? – Andy 2011-05-16 20:34:14
Andy,[NSSound類參考](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSSound_Class/Reference/Reference.html)聲明一個聲音將停止播放一旦它被釋放:「釋放後,聲音對象停止播放聲音(根據需要),以便釋放相應的音頻資源。」所以如果你創建了一個聲音,開始播放它,然後在它播放完之前釋放它,聲音就會停止。 – 2011-05-17 05:19:26