【问题标题】:How can I programmatically create a multi-output device in OS X?如何在 OS X 中以编程方式创建多输出设备?
【发布时间】:2016-05-29 22:00:10
【问题描述】:

如何在 Mac OS X 中以编程方式创建多输出设备?

Audio Midi Setup 程序提供了一个 GUI 界面来创建一个,但我希望能够在代码中创建一个。

我已经找到了一些用于创建聚合设备的资源,但是多输出设备的功能不同,我在创建它们时找不到任何东西。到目前为止,这是我所得到的:

【问题讨论】:

  • 以编程方式通过 Objective-C/Swift,还是通过 AppleScripting 应用程序?
  • @jkdev 通过 Objective-C/Swift

标签: objective-c macos audio core-audio


【解决方案1】:

我同样需要以编程方式创建多输出设备。 此示例:http://daveaddey.com/?p=51 涵盖了需求。

我通过研究 /Library/Preferences/Audio/com.apple.audio.SystemSettings.plist 设法做到了。这是 Audio MIDI Setup 保存配置的地方(在我的盒子 El Capitan 上)。

创建一个多输出设备和一个聚合设备并研究 plist。它们几乎相同,只是聚合设备有一个主设备,而 MOD 没有。

以 Dave Addey 为例: 一方面,我设法通过移除主设备并添加我自己的设备作为输出来创建 MOD。 (在我的例子中,Soundflower 和默认输出)

除此之外,将“堆叠”布尔键添加到 CF 字典。根据 CoreAudio 消息来源,此键确保将相同的输出发送到所有输出通道,而不是未堆叠的聚合设备,并将多个设备组合在一起以使其“看起来”为具有大量通道的单个设备.

希望这会有所帮助。

【讨论】:

  • 谢谢!这为我节省了很多时间。
  • 太棒了!我想知道我是否可以使用更现代的AudioHardwareCreateAggregateDevice() 或者它仍然是通过插件界面进行的旅行?
  • 是的!从 macOS 10.9 开始,您可以使用 AudioHardwareCreateAggregateDevice + kAudioAggregateDeviceIsStackedKey 来做到这一点,尽管这两种聚合设备都不支持音量控制,这很可惜。
【解决方案2】:

这基本上是@Andrei B. 的答案,带有链接的 [now dead] 博客文章代码 更新为使用 AudioHardwareCreateAggregateDevice()kAudioAggregateDeviceIsStackedKey 符号(它很快,抱歉,我没有阅读问题):

func createMultiOutputAudioDevice(masterDeviceUID: CFString, secondDeviceUID: CFString, multiOutUID: String) -> (OSStatus, AudioDeviceID) {
    let desc: [String : Any] = [
        kAudioAggregateDeviceNameKey: "My Multi-Output Device",
        kAudioAggregateDeviceUIDKey: multiOutUID,
        kAudioAggregateDeviceSubDeviceListKey: [[kAudioSubDeviceUIDKey: masterDeviceUID], [kAudioSubDeviceUIDKey: secondDeviceUID]],
        kAudioAggregateDeviceMasterSubDeviceKey: masterDeviceUID,
        kAudioAggregateDeviceIsStackedKey: 1,
        ]

    var aggregateDevice: AudioDeviceID = 0
    return (AudioHardwareCreateAggregateDevice(desc as CFDictionary, &aggregateDevice), aggregateDevice)
}

太糟糕了,多输出设备没有音量控制,这使得它们成为默认输出设备时就不那么有用了。

【讨论】:

  • 感谢您“实现”死链接 ;-)
  • 在返航机的帮助下
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 2011-03-16
  • 2015-03-22
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多