通过 Objective-C 控制 Mac OS X 中正在运行的应用程序的音量

发布于 2024-10-18 20:53:57 字数 106 浏览 1 评论 0原文

请通过 Objective-C 代码片段和有用链接提供有关如何控制 OS X 中输出的所有音频信号的建议?

我认为它应该类似于 OS X 逻辑层中的代理层。

谢谢你!

Please edvice by objective-c code snippets and useful links of how can I control all audio signals of output in OS X?

I think it should be something like proxy layer somewhere in OS X logic layers.

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2024-10-25 20:53:57

有点遗憾的是没有简单的 API 可以做到这一点。幸运的是,它并不难,只是冗长。

首先,获取系统输出设备:

UInt32 size;
AudioDeviceID outputDevice;
OSStatus result = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOuputDevice, &size, &outputDevice);

然后设置音量:

Float32 theVolume;
result = AudioDeviceSetProperty(theDevice, NULL, 0, /* master channel */ false, kAudioDevicePropertyVolumeScalar, sizeof(Float32), &theVolume);

显然我省略了任何错误检查,这是必须的。

事情可能会变得有点棘手,因为并非所有设备都支持通道 0(主通道)。如果您的设备出现这种情况(很可能是这样),您有两个选择:查询设备的首选立体声对并单独设置这些通道的音量,或者仅设置通道 1 和 2 的音量。

It's somewhat sad that there is no simple API to do this. Luckily it isn't too hard, just verbose.

First, get the system output device:

UInt32 size;
AudioDeviceID outputDevice;
OSStatus result = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOuputDevice, &size, &outputDevice);

Then set the volume:

Float32 theVolume;
result = AudioDeviceSetProperty(theDevice, NULL, 0, /* master channel */ false, kAudioDevicePropertyVolumeScalar, sizeof(Float32), &theVolume);

Obviously I've omitted any error checking, which is a must.

Things can get a bit tricky because not all devices support channel 0 (the master channel). If this is the case with your device (it probably is) you have two options: query the device for its preferred stereo pair and set the volume on those channels individually, or just set the volume on channels 1 and 2.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文