5

有没有办法使用 C++ 和 Xcode 在 Mac OS 上播放系统提示音?我知道我需要使用图书馆。是否有适用于 Mac 和 Windows 平台的库?

4

3 回答 3

6

我想你可能想使用NSBeep


NS哔声

播放系统提示音。

#include <AppKit/AppKit.h>

void NSBeep (void);

对于命令行工具,这似乎可以正常工作:

#include <AppKit/AppKit.h>
#include <iostream>

using namespace std;

int main(void)
{
    cout << "Hello world !" << endl;
    NSBeep();
    sleep(1)
    return 0;
}

$ g++ -Wall -framework AppKit beep.cpp -o beep
$ ./beep

2021 年 5 月更新

虽然此解决方案在 2011 年有效,但 AppKit 现在似乎不再与 C++ 兼容,因此您现在需要将该文件视为 Objective-C++,即将 beep.cpp 重命名为 beep.mm。

于 2011-09-13T21:35:20.633 回答
2

播放哔声的跨平台方式是std::cout << "\007";。我一直试图通过传入一个字符然后递减直到 7 来播放它。那没有用。不过,显式输出代码确实有效。

于 2011-09-18T05:31:09.003 回答
2

这是 2021 年适用于当前 macOS (Big Sur) 的替代方法(与我早期的 NSBeep 解决方案不同,它现在仅适用于 Objective-C++,不适用于 vanilla C++)。我反汇编NSBeep发现它只是调用AudioServicesPlayAlertSound了一个参数值0x1000(kSystemSoundID_UserPreferredAlert)。AudioServicesPlayAlertSound是 AudioToolbpx 框架的一部分,幸运的是它仍然适用于 C++(与 AppKit 不同)。

#include <AudioToolbox/AudioServices.h>
#include <iostream>

using namespace std;

int main(void)
{
    cout << "Hello world !" << endl;
    AudioServicesPlayAlertSound(kSystemSoundID_UserPreferredAlert);
    sleep(1);
    return 0;
}

编译并运行:

$ g++ -Wall -framework AudioToolbox beep.cpp -o beep
$ ./beep
于 2021-05-27T09:55:26.727 回答