gpt4 book ai didi

swift - 使用AVPlayer从MacOS Swift应用程序将音频定向到空中播放扬声器

转载 作者:行者123 更新时间:2023-12-03 01:19:06 27 4
gpt4 key购买 nike

我试图将我在SWIFT中编写的MacOS应用程序中的音频直接定向到空中播放扬声器。

我可以将音频定向到板载声音输出,或者说USB DAC没问题。我可以说出一个已连接的USB DAC的音频设备ID,并且可以在我的应用程序中直接将音频定向到特定的水平,但是很难找到使用SWIFT / AVPLAYER播放扬声器的好的样本/文档。

有人看到过将macOS(非ios)快速应用程序中的音频直接定向到airplay扬声器的任何好的文档/代码示例吗?即如何获取airplay音频设备ID的列表并从avplayer发送输出到它们?

为了将声音输出说成USB DAC,我可以使用此功能获取播放音频设备ID的列表-

func getOutputDevices()-> [AudioDevice] {

print_log ("")
print_log("+++ START AUDIO PLAYBACK DEVICES FOUND....")
print_log ("")

for device in AudioDevice.allOutputDevices() {
print("DEVICE NAME: " + device.name + " -> DEVICE ID: " + String(device.uid ?? "Empty Device"))

}

print_log ("")
print_log("+++ END AUDIO PLAYBACK DEVICES FOUND....")
print_log ("")

return AudioDevice.allOutputDevices()

}

然后使用avplayer并设置音频audioOutputDeviceUniqueID来向返回的音频设备之一播放音频,
print_log("Setting audio output device to " + String(playback_device.uid ?? "Empty"))


gbl_queue_player.audioOutputDeviceUniqueID=playback_device.uid


gbl_queue_player.addObserver(stage, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
gbl_queue_player.addObserver(stage, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil)
gbl_queue_player.addObserver(stage, forKeyPath:"currentItem", options:NSKeyValueObservingOptions.new, context:nil)


gbl_queue_player.play()

我希望一切都有意义。 Ive找到了一些有关IOS的文档,但不是MacOS的。

谢谢!

编辑01/07/2020

尝试使用下面的代码在按钮按下时实例化AVRoutePicker。

好消息:出现选择器,并列出了内置扬声器。

坏消息:我的系统上没有经过确认的airplay设备或USB DAC以这种方式显示,但它们在OS的声音选择器中显示。

@IBAction func airplay_button_clicked(_发件人:任意)

{

让框架= CGRect(x:50,y:50,宽度:100,高度:50)

gbl_routePickerView = AVRoutePickerView(框架:框架)

view.addSubview(gbl_routePickerView)}

}

此应用程序没有沙箱。

***编辑解决方案01/06/2020

正如乔恩(Jon)所指出的,必须将一个玩家分配给路线选择器玩家属性

所以对我来说功能变成了

@IBAction func airplay_button_clicked(_发件人:任意){
    print_log("Airplay button clicked")

let frame = CGRect(x: 50, y: 50, width: 100, height: 50)



if #available(OSX 10.15, *) {
gbl_routePickerView = AVRoutePickerView(frame: frame)
gbl_routePickerView.player=gbl_queue_player
view.addSubview(gbl_routePickerView)

} else {
// Fallback on earlier versions
print_log("OS Does not support avroute picker.")
}

}

最佳答案

在 View 层次结构中实例化AVRoutePickerView,然后将AVPlayer实例分配给AVRoutePickerViewplayer属性。然后,您将具有一个GUI,用于为AVPlayer选择AirPlay路线。

关于swift - 使用AVPlayer从MacOS Swift应用程序将音频定向到空中播放扬声器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61629249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com