在 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来播放了。

Creative Commons License Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license .