gpt4 book ai didi

audiokit - AKSequencer 计数一或两个小节

转载 作者:行者123 更新时间:2023-12-02 19:51:32 26 4
gpt4 key购买 nike

在当前序列开始播放之前需要播放 1 或 2 个小节进行倒数。只需点击一下即可计入。

能够做类似的事情会很酷

 player.sequencer.setTime(MusicTimeStamp(-4))

将时间设置为0,不起作用。

如何使用 AKSequencer 进行计数?

最佳答案

编辑:最初我认为您可以简单地将条形计数添加到现有序列的末尾,然后使用 AKCallbackInstrument 和零拍事件重置为适当的长度,但事实证明它有点复杂。

在调用 setLength() 后,您必须调用 enableLooping() 来重新建立循环行为。在幕后,这涉及到为底层 MusicSequence 中的每个轨道调用 MusicTrackSetPropertykSequenceTrackProperty_LoopInfo。在音序器运行时调用此函数会产生奇怪的副作用,即将播放头重新定位到距原始序列末尾的距离等于序列的新长度的位置。例如,如果您有一个 20 节拍序列,并且想要将其动态更改为 16 节拍序列,则调用 enableLooping() 会将播放头重新定位到节拍 4(即 20 - 16) = 4)。然后它将播放至第 16 节,然后按预期循环。幸运的是,在进行此跳跃时,它并没有过多地破坏时机。

解决方案是将序列的长度加倍,并将计数放在最后。例如,如果您有 16 节拍序列,请将长度设置为 32 节拍,并在节拍 28 处开始计数事件。然后在节拍 0 处,您可以调用 setLength(AKDuration(beats: 16.0))enableLooping(),播放头将跳转到第 16 节拍,在新的循环行为下,该节拍实际上是第 0 节拍。时机并不完美,但也不错(有大约 3 毫秒的延迟,但如果您已经在使用基于 MusicSequence 的音序器,这可能不会造成任何影响。)

这不是一个很好的解决方案,但我可以确认它有效。

关于audiokit - AKSequencer 计数一或两个小节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50191394/

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