gpt4 book ai didi

ios - UIAnimations 响应 Swift 中的 MIDI 事件

转载 作者:可可西里 更新时间:2023-11-01 01:36:28 24 4
gpt4 key购买 nike

我正在尝试使用 Apple 的 AudioToolbox 框架编写一个 MIDI 序列,该框架会在 UI 中触发动画。感谢 Gene De Lisa 的博客,我已经成功地创建了序列,由于代码的长度,我不会在这里完整地复制它。基本过程是设置一个 AUGraph、一个采样器单元 (AudioUnit())、一个 musicPlayer 和一个音乐序列:

var processingGraph:AUGraph
var samplerUnit:AudioUnit
var musicPlayer:MusicPlayer
var musicSequence:MusicSequence

然后我做了一个函数来填充音乐序列:

func createMusicSequence(quality: Int, root: UInt8, interval: UInt8) -> MusicSequence {
// create the sequence
var musicSequence = MusicSequence()

var status = NewMusicSequence(&musicSequence)
if status != OSStatus(noErr) {
print("\(__LINE__) bad status \(status) creating sequence")
CheckError(status)
}

MusicSequenceSetAUGraph(musicSequence, self.processingGraph)

status = MusicSequenceNewTrack(musicSequence, &trackOne)
CheckError(status)

status = MusicSequenceNewTrack(musicSequence, &trackTwo)
CheckError(status)

status = MusicTrackSetDestNode(trackOne, samplerNode)
CheckError(status)

status = MusicTrackSetDestNode(trackTwo, samplerNodeTwo)
CheckError(status)

var beat = MusicTimeStamp(0)
var i = 1
while i <= 4 {
var mess = MIDINoteMessage(channel: 0,
note: 60,
velocity: 64,
releaseVelocity: 0,
duration: 1.0 )
status = MusicTrackNewMIDINoteEvent(trackOne, beat, &mess)
if status != OSStatus(noErr) {
CheckError(status)
}
beat++
i++
}

switch quality{
case 0: flexiChord(root, transFunc: interval, chordQuality: maj7)
case 1: flexiChord(root, transFunc: interval, chordQuality: min7)
case 2: flexiChord(root, transFunc: interval, chordQuality: dom7sharpNineFive)
default: print("error creating sequence")
}

loopTrack(trackOne)
loopTrack(trackTwo)

status = MusicSequenceNewTrack(musicSequence, &trackThree)

MusicSequenceGetTempoTrack(musicSequence, &trackThree)

self.musicPlayer = createPlayer(musicSequence)

return musicSequence
}

所以...我不明白如何实时检测音符事件并根据它们为 UI 设置动画——我知道设置用户回调或 midi 端点与此有关,但我使用的是 swift 并且那里关于这个主题,我能够理解的文档似乎很少。有人可以指出我正确的方向吗?

最佳答案

使用 MIDIDestinationCreateWithBlock 创建一个虚拟目的地在您的阅读 block 中,您将获得一个数据包列表。遍历它们并制作动画。如果你想要声音,你的 readblock 必须使用 MusicDeviceMIDIEvent

将数据包转发到你的采样器

关于ios - UIAnimations 响应 Swift 中的 MIDI 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960147/

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