10

有没有人设法使 NSUserNotification soundName 与自定义声音一起使用?我尝试使用 aif 和 caf 格式 44100KHz 16bit 2 秒的持续时间。通知会在适当的时间显示,并带有正确的标题和文本,但会播放默认声音而不是我的自定义声音。

声音文件已正确复制到应用程序包中。如果我尝试这个,声音就可以了:

NSSound* sound = [NSSound soundNamed:@"morse.aif"];
[sound play];

但是当我在通知中使用相同的声音时,会播放默认通知声音:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    NSUserNotification* notification = [[NSUserNotification alloc]init];
    notification.title = @"Titolo";
    notification.deliveryDate = [NSDate dateWithTimeIntervalSinceNow:10];
    notification.soundName = @"morse.aif";
    [[NSUserNotificationCenter defaultUserNotificationCenter]scheduleNotification:notification];
}

我尝试了有无扩展,但没有成功。

notification.soundName = @"morse.aif";
notification.soundName = @"morse2.caf";
notification.soundName = @"morse";     

这些都不起作用。

我的应用程序没有签名也没有沙盒化,但我认为用户通知没有必要这样做,除了声音问题之外,通知工作得很好。

4

2 回答 2

10

在我看来,这个问题是区分大小写的。使用notification.soundName = @"Morse";对我来说非常有效。正如您在NSSound文档中看到soundNamed的声音搜索文件夹按顺序排列:

~/Library/Sounds
/Library/Sounds
/Network/Library/Sounds
/System/Library/Sounds

如果您查看最后一个,这可能是您试图从中提取的位置,因为它们是系统偏好设置中的声音,您可以看到它们的名称

声音名称

因此,保留文件的大小写,并省略扩展名,它应该可以按预期工作。

于 2013-07-05T17:08:12.173 回答
2

如果您有多个版本的应用程序二进制通知中心可能正在为您的声音文件搜索错误的二进制文件。

如果您确保删除二进制文件的任何旧副本,它应该可以解决问题。

来自 Apple 开发论坛:https ://devforums.apple.com/message/708511

如果您有多个版本的应用程序二进制文件浮动,则可能会发生这种情况。NotificationCenter 只对其中一个进行罚款。如果是没有声音的那一个就不行了。

于 2015-03-23T02:56:57.947 回答