Jus*_*iey 5 audio macos objective-c core-audio
如何在Mac OS X中以编程方式创建多输出设备?
Audio Midi Setup程序提供了一个用于创建一个的GUI界面,但是我希望能够用代码创建一个。
我已经找到了一些用于创建聚合设备的资源,但是多输出设备的功能有所不同,在创建它们时找不到任何东西。到目前为止,这是我得到的:
小智 6
我同样需要以编程方式创建多输出设备。这个例子:http : //daveaddey.com/?p=51涵盖了需求。
我通过学习 /Library/Preferences/Audio/com.apple.audio.SystemSettings.plist 设法做到了。这是音频 MIDI 设置保存配置的地方(在我的盒子上,El Capitan)。
创建一个多输出设备和一个聚合设备并研究 plist。它们几乎相同,只是聚合设备有一个主设备,而 MOD 没有。
考虑 Dave Addey 的例子:我首先通过移除主设备并添加我自己的设备作为输出来创建 MOD。(在我的情况下,Soundflower 和默认输出)
除此之外,将“堆叠”布尔键添加到 CF 字典。根据 CoreAudio 消息来源,此键可确保将相同的输出发送到所有输出通道,而不是未堆叠的聚合设备,并将多个设备组合在一起,使自己“看起来”为具有许多通道的单个设备.
希望这可以帮助。
这基本上是@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)
}
Run Code Online (Sandbox Code Playgroud)
太糟糕了,多输出设备没有音量控制,当它们成为默认输出设备时,这使得它们不太有用。
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |