如何播放 macOS “垃圾箱”系统声音?

Posted

技术标签:

【中文标题】如何播放 macOS “垃圾箱”系统声音?【英文标题】:How to play the macOS "Trash" system sound? 【发布时间】:2021-07-15 09:32:57 【问题描述】:

我在里面发现了几个 macOS 系统声音

/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds

当您在 dock/drag to trash.aif 的查找器中删除文件时,包括垃圾声音。

但是我找不到播放这些声音的 API。我真的不想硬编码任何文件路径。

PS:一种选择可能是将声音简单地复制到我自己的应用程序包中,但如果可能的话,我也想避免这种情况(还有许可?)。

【问题讨论】:

【参考方案1】:

导入AudioToolbox框架并使用AudioservicesPlaySystemSound函数。参数值未记录在案,并且可能与硬编码路径一样更改。它应该通过应用商店的审核,因为它不是私有 API。

//drag to trash.aif
AudioServicesPlaySystemSound(0x10);

//poof item of dock.aif
AudioServicesPlaySystemSound(0xf);

唯一记录在案的值是:

CF_ENUM(SystemSoundID)

    kSystemSoundID_UserPreferredAlert   = 0x00001000,
    kSystemSoundID_FlashScreen          = 0x00000FFE,
        // this has been renamed to be consistent
    kUserPreferredAlert     = kSystemSoundID_UserPreferredAlert
;

这里是未记录值的列表

 1 "Volume Mount.aif"
 2 "Volume Unmount.aif"
 3 "Media Keys.aif"
 4 "Sticky Keys ON.aif"
 5 "Sticky Keys OFF.aif"
 6 "Sticky Keys MODIFER.aif"
 7 "Sticky Keys Locked.aif"
 8 "Sticky Keys Stuck.aif"
 9 "Mouse Keys ON.aif"
10 "Mouse Keys OFF.aif"
11 "Slow Keys, 1st Key Pressed.aif"
12 "Slow Keys, Key Registered.aif"
13 "empty trash.aif"
14 "move to trash.aif"
15 "poof item off dock.aif"
16 "drag to trash.aif"
17 "InkSoundBecomeMouse.aif"
18 "InkSoundStroke1.aif"
19 "InkSoundStroke2.aif"
20 "InkSoundStroke3.aif"
21 "InkSoundStroke4.aif"
22 "burn complete.aif"
23 "burn failed.aif"
24 "Grab.aif"

【讨论】:

除了尝试或暴力破解之外,有没有一种很好的方法可以找出哪些值对应于什么声音? @ErikAigner 我用 HopperApp 反汇编了 AudioToolbox 框架。最初我拆卸 Dock 并查看播放声音的系统调用。

以上是关于如何播放 macOS “垃圾箱”系统声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何播放简单的系统声音[重复]

如何从 osx 应用程序播放系统声音?

播放系统录制的声音

如何在 .Net 中播放“新邮件”系统声音?

如何在 iPad 上播放系统按钮点击声音?

iOS 7 无法播放系统声音