gpt4 book ai didi

spotify - AudioKit 访问底层 CoreAudio 节点(Spotify 集成)

转载 作者:行者123 更新时间:2023-12-04 17:48:44 28 4
gpt4 key购买 nike

我正在尝试连接到 Spotify 流并使用自定义合成器修改输出。使用很棒的 AudioKit 会很棒.为了改变输出 Spotify 流,我必须实现这个 method ,这让我可以访问 spotify 的 AUGraph。然后我可以添加将连接到 spotify 图表的输入和输出的 AUNode(对 here 的描述非常好)。

我知道 AudioKit 在内部使用 CoreAudio,但我还没有找到任何方法来访问 AKNode 的底层 AUNode(如果有的话)。或者是否有另一种方法如何将 AudioKit AKNode 连接到现有的 AUGraph。

现在我看到 AudioKit 使用 AVAudioEngine(而不是 EZAudio 中使用的 AUGraph),我可以轻松获得输出和输入节点。所以真正的问题是我是否可以将 AVAudioNode 连接到 AUGraph 中,或者是否有其他方法可以将 AVAudioNode 转换为 AUNode。

编辑:我试图实现 Dmitrii像这样简单设置的建议,尝试修改播放速度:

    var engine: AVAudioEngine = AVAudioEngine()
var playback = AVAudioUnitVarispeed()


func connect(outputBus sourceOutputBusNumber: UInt32, ofNode sourceNode: AUNode, toInputBus destinationInputBusNumber: UInt32, ofNode destinationNode: AUNode, inGraph graph: AUGraph, error: NSError?) {

playback.rate = 0.5

engine.attach(playback)

// Connect
engine.connect(playback, to: engine.mainMixerNode, format: nil)
try! engine.start()

var playbackCD = playback.auAudioUnit.componentDescription
var avPlaybackNode = AUNode()
try! AUGraphAddNode(graph, &playbackCD, &avPlaybackNode).checkError(message: "Failed to add playback node")

//Conect source to the mixer input
AUGraphConnectNodeInput(graph, sourceNode, sourceOutputBusNumber, avPlaybackNode, 0)

//Connect mixer output to the device output
AUGraphConnectNodeInput(graph, avPlaybackNode, 0, destinationNode, destinationInputBusNumber)
}

但对音频输出没有任何影响。尽管如此,它仍然存在。

在结合 AUGraph 和 AVAudioEngine 时,我应该遵循一些特定的生命周期吗?还是我忘记了一些重要的事情?

编辑 2:所以我没有按照建议添加节点,我什至不确定它是否可行。我更幸运地将节点与 kAudioUnitProperty_MakeConnection 属性连接起来:

AUGraphNodeInfo(graph, destinationNode, nil, &destinationUnit)

var connection = AudioUnitConnection(sourceAudioUnit: destinationUnit, sourceOutputNumber: 0, destInputNumber: 0)

try! AudioUnitSetProperty(engine.outputNode.audioUnit!, kAudioUnitProperty_MakeConnection, kAudioUnitScope_Input, 0, &connection, UInt32(MemoryLayout<AudioUnitConnection>.size)).checkError(message: "Failed to make connection")

try! engine.start()

这会将 AVAudioEngine 的输出节点与 Spotify 的输出连接起来。但是,如果我添加任何中间节点,它就无法播放任何内容。这就像 AVAudioNodes 根本不会连接:

engine.attach(varispeed)
engine.connect(varispeed, to: engine.mainMixerNode, format: nil)

var connection = AudioUnitConnection(sourceAudioUnit: destinationUnit, sourceOutputNumber: 0, destInputNumber: 0)

try! AudioUnitSetProperty(varispeed.audioUnit, kAudioUnitProperty_MakeConnection, kAudioUnitScope_Input, 0, &connection, UInt32(MemoryLayout<AudioUnitConnection>.size)).checkError(message: "Failed to make connection")

try! engine.start()

知道为什么会这样吗?我希望引擎输出单元连接到主混音器,主混音器连接到变速,然后连接到 spotify 的输出。任何帮助将不胜感激。

非常感谢

托马斯

最佳答案

AVAudioNode具有实例属性 AUAudioUnit .此外,您可以获得 AudioComponentDescription

您可以将您的节点添加到图形中并获取 AUNode:

AUGraphAddNode(graph,
yourAudioComponentDescription,
outAUNode);

编辑:首先,附加节点,连接它们,然后启动引擎。在 CAShow(graph) 之后显示您的日志以检查您的图表。

关于spotify - AudioKit 访问底层 CoreAudio 节点(Spotify 集成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46794807/

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