在 App 中使用 Mac OS X 系统声音
On 2014-11-02 22:40:17 By Soli在 App 中使用 Mac OS X 系统声音
声音绝对会为你的 App 增色不少。哪怕是最简单的输入反馈或事件提醒,也会让你的 App 马上就变得生动起来甚至趣味盎然。让人欣慰的是,你并不需要费心去制作一段声音并把这个声音文件加入到你的 App 中。因为系统已经自带了多达十四种音效。
你可以任意选择一个系统声音在你的 App 中使用,也可以把所有声音都列出来让用户自由选择。但无论怎样,你都需要知道系统自带的声音有哪些。
快速查看
你可以在系统设置里查看系统自带的声音都有哪些。方法是依次打开 系统设置
->声音
->音效
。在选择一个警告声音
里列出了系统内置的十四种声音,比如 Basso、Blow、Frog、Tink等。或许你的系统有些不一样,但这就是我们要找的系统声音。
选择一个声音,比如Pop
,你可以在你的 App 中加入如下代码来播放它:
NSSound *sound = [NSSound soundNamed:@"Pop"];
[sound play];
编程枚举
为了让用户可以自己选择,你需要在你的 App 中列出这些声音。一个一个地把上面的那些声音的名字写进你的 App 是最直接的办法。但因为系统版本不同,或其他什么原因,用户的系统中可能并没有你列出的声音。所以,你或许有必要用一段代码把系统自带的声音枚举出来,而不是硬编码进你的 App。
下面这段代码可以把系统自带声音的名字枚举出来,并以NSArray
的形式返回:
- (NSArray *)systemSounds
{
NSMutableArray *sounds = [NSMutableArray array];
NSArray *libraryPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSAllDomainsMask, YES);
for (NSString *libraryPath in libraryPaths) {
NSString * soundsPath = [libraryPath stringByAppendingPathComponent: @"Sounds"];
NSDirectoryEnumerator *soundsEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:soundsPath];
for (NSString *soundFile in soundsEnumerator) {
NSString *soundName = [soundFile stringByDeletingPathExtension];
if ([NSSound soundNamed:soundName])
[sounds addObject:soundName];
}
}
return sounds;
}
有了声音名字就可以使用NSSound
来播放了。
Except where otherwise noted, content on this site is licensed under a
Creative Commons Attribution 4.0 International license
.