- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个支持循环的 aksequencer,我想在播放期间更改长度。我已经用 setLength() 和 setLoopInfo() 尝试过这一点,但似乎都无法正常工作。
预期行为:如果我有一个 16 节拍序列,并且我调用changeSequenceToLength(12),我希望循环从节拍 1-12 播放,然后重复。 (当然,我应该处理在第 12 拍之后更改长度的情况,但你明白了)。
实际行为:鱼龙混杂。当我使用 setLength(endbeat) 时,它只是删除 endbeat 之后的 MIDI 事件,但循环仍然是 16 节拍。当我调用 setLoopInfo(duration, numloops) 时,它缩短了循环,但从错误的一侧。因此,它不再播放 1-12,而是播放 4-16。当我第一次更改循环持续时间时,它还会出现一些奇怪的卡顿现象。
任何有关如何解决此问题的建议将不胜感激!我也查看了支持苹果 MusicSequence 的文档,但它非常稀疏。
我的代码大致如下:
import AudioKit
import AudioKitUI
final class Sequencer: AKSequencer {
static let shared = Sequencer() //Singleton
var numBeats = 16 // Number of spaces in the grid
var beatLength = 1/4.0
var sequenceDuration: AKDuration {
get {
return AKDuration(beats: (numBeats * beatLength))
}
}
private override init() {
super.init()
setTempo(120.0)
for _ in 0..<8 {
let track = newTrack()
}
let callback = AKCallbackInstrument() { status, note, velocity in
//send midi messages...
}
let midiNode = AKMIDINode(node: callback)
setLength(sequenceDuration)
AudioKit.output = midiNode
AudioKit.start()
midiNode.enableMIDI(Midi.shared.client, name: "midiNode midi in")
enableLooping()
}
func changeSequenceToLength(length: Int) {
numBeats = length
setLength(sequenceDuration)
// setLoopInfo(sequenceDuration, numberOfLoops: 50)
}
}
编辑:所以我找到了 AKMusicTrack.setLengthSoft(),所以当我缩短序列时,我的 midi 序列不会被删除。我还阅读了 setLoopInfo 的代码,它确实应该从末尾向后创建一个循环(它不应该采用 startTime 和 offset 吗??)。但当我更改序列长度时,我仍然遇到播放卡顿的问题。
最佳答案
调用 setLength()
后,您需要通过调用 enableLooping()
重新断言循环行为(或者您可以使用 setloopInfo
这将一步完成这两件事)。但基本上在定序器运行时改变循环长度将是一个问题。
重要的是要了解,AKSequencer
本质上是 CoreMIDI 的 MusicSequence
的 Swift 包装器,因此它基本上继承了 MusicSequence
的大部分怪癖,并且限制。这些限制之一是,虽然您可以设置循环范围的“左侧”,但无法设置“右侧” - 它将始终循环回 MusicTimeStamp 0。调用 setLoopinfo
(或者也可以调用 setLength()
后跟 enableLooping()
) 实际上并没有像你所说的那样从错误的一侧缩短循环(尽管我也认为它是这样做的,一开始) )。它正确设置了循环长度,但还将播放头传送到“新循环长度”节拍远离“旧循环长度”的位置。因此,如果您将 16 节拍循环更改为 12 节拍循环,MusicSequence
将从 0 循环到 12,但会将播放头移动到节拍 4 (16 - 12 = 4)。它不会从4播放到16,而是从4播放到12,它们从0循环到12。有时你可以work around this你可以在玩的时候完成这项工作,但大多数情况下这是一种痛苦。最好的解决方案是在更改循环长度时停止播放。 CoreMIDI'a MusicSequence
不太擅长动态处理变化。
关于audiokit - 更改 AKSequencer 的长度 : weird behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50655994/
在当前序列开始播放之前需要播放 1 或 2 个小节进行倒数。只需点击一下即可计入。 能够做类似的事情会很酷 player.sequencer.setTime(MusicTimeStamp(-4))
我正在使用 AKSequencer 创建一系列由 AKMidiSampler 播放的音符。我的问题是,无论我做什么,在更高的速度下,第一个音符总是有一点延迟。 我试过预滚动序列,但无济于事。用 AKS
我正在使用 AudioKit AKSequencer 制作一个可以播放、暂停和停止的 midi 音符轨道。我遇到的问题是,当您停止音序器播放并重新启动它而不倒带时,它会准确地从它停止的地方开始,即使那
我有一个相当复杂的应用程序,到目前为止一直在使用 AKAppleSequencer,但由于该音序器不时弹出一些奇怪的行为和错误,我一直希望转移到更新的 AKSequencer。不幸的是,新的音序器似乎
有时我需要一些长音符才能在音序器停止后继续播放。 akSequencer.stop() // Need to put some code to ask the question 当 AKSequenc
我需要从 AKSequencer 实例中删除所有节奏事件,但我找不到方法。 我尝试使用如下所示的clearRange()方法,但我不确定这是正确的方法,因为它不起作用: var sequencer =
我正在使用 Audiokit API 创建一个函数,用户将音符按到屏幕上,然后根据他们选择的 SoundFont 发出声音。然后我让他们收集大量笔记,让他们按照他们选择的顺序播放。问题是我正在使用 A
我正在尝试使用 AKSequencer() 从 .mid 文件发送 midi 数据,在虚拟输出上以在应用程序外部使用它(下面有更多详细信息)。 我的问题是我的 AKSequencer 没有将 midi
此主题已涵盖 Numerous Times ,并且我在以前的应用程序中成功地将 AKMIDICallbackInstrument 与旧的 AKAppleSequencer 结合使用。 我开始使用新的
这是我目前正在处理的一个多音频文件播放项目,其中多个 AKPlayer 通过 AKSequencer 以随机顺序播放。 首先,我有一个文件名数组: Let filenames = [“1.mp3”,
我正在尝试使用 AudioKit 在小节的每个节拍上播放声音。尽管我已经实现了 this 中的代码关于通过 AudioKit 回调的类似问题,我似乎无法让音序器正确更新更改和播放。它会准确地播放一次,
我想读取一个 midi 文件并在触发音符事件时显示内容。我发现了这个 stackoverflow 问题,第二个答案建议使用 AudioKit: How Do I Get Reliable Timing
我有一个支持循环的 aksequencer,我想在播放期间更改长度。我已经用 setLength() 和 setLoopInfo() 尝试过这一点,但似乎都无法正常工作。 预期行为:如果我有一个 16
我目前有一个应用程序使用 AKKeyboard 通过振荡器创建声音。每当弹奏键盘时,我也会得到 MIDI 数据。我想做的是根据我收到的 MIDI 数据创建一个 AKSequence。 任何建议或指示将
我是 Audiokit 的新手。我想可视化正在运行的 AKSequencer 的当前位置。是否有任何我可以连接的回调(如 AKMetronome)或监听器或运行的根时钟/主循环?或者我应该使用以任何方
我使用的是 AudioKit 4.9.1 并且无法使用新的 AKSequencer 播放 MIDI 文件(替换 AKAppleSequencer )。没有声音播放。假设 MIDI 文件和样本已正确加载
以下代码在 iOS 11 中循环播放多个音频文件,但在 iOS 10 中没有。好像 AKSequencer 不能在 iOS 10 中循环播放? let mixer = AKMixer() var se
我想使用 AudioKit 播放 MIDI,但所有文档都指向从路径/URL 加载 MIDI 文件。有没有办法为此使用字符串? 我目前正在使用 AKAppleSequencer ( https://au
我正在使用 AKSequencer 的 genData 函数接收文件格式的 MIDI。接下来我想使用我生成的 MIDI 文件将其加载到 AKSequencer 中。这可能吗? 最佳答案 是的。 Aud
我一直在努力解开一个谜 sinewave issue收效甚微。我想在这里开始一个新问题,因为我已经深入研究了这个问题的细节。 在设置 AKSequencer 并为其提供 MIDI 文件时,我看到了一些
我是一名优秀的程序员,十分优秀!