- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此主题已涵盖 Numerous Times ,并且我在以前的应用程序中成功地将 AKMIDICallbackInstrument
与旧的 AKAppleSequencer
结合使用。
我开始使用新的 AKSequencer
,它绝对是惊人的:优雅的界面,并且易于使用。但是,我终生无法弄清楚如何用它处理回调事件。我需要使用回调来触发基于音序器播放的 GUI 事件。
这是我的示例代码:
private func setMetronome(bpm: BPM, beats:Int)
{
sequencer = AKSequencer(targetNode: metronomeSampler)
sequencer.tempo = bpm
sequencer.loopEnabled = false
sequencer.length = Double(beats)
metroCallback.callback = {status, noteNumber, velocity in
if let midiStatus = AKMIDIStatus(byte: status), midiStatus.type != .noteOn { return }
//Do callback stuff here
}
let metroCallbackTrack = sequencer.addTrack(for: metroCallback)
for i in 0..<beats
{
if i == 0
{
sequencer.add(noteNumber: MIDINoteNumber(67), position: Double(i), duration: 1.0)
metroCallbackTrack.add(noteNumber: MIDINoteNumber(67), position: Double(i), duration: 1.0)
}
else if (i % 4 == 0)
{
sequencer.add(noteNumber: MIDINoteNumber(67), position: Double(i), duration: 1.0)
metroCallbackTrack.add(noteNumber: MIDINoteNumber(60), position: Double(i), duration: 1.0)
}
else
{
sequencer.add(noteNumber: MIDINoteNumber(60), position: Double(i), duration: 1.0)
metroCallbackTrack.add(noteNumber: MIDINoteNumber(60), position: Double(i), duration: 1.0)
}
print("seq count:\(i)")
}
for track in sequencer.tracks
{
print("Adding track to mixer:\(track.length)")
track >>> mixer
}
}
这段代码正确地创建了一个包含 n
个节拍的序列,它通过我的 AKSampler
播放一切都很好。除了没有回调事件发生(使用打印语句确认)
思维过程
使用 AKAppleSequencer
和 AKMIDICallbackInstrument
,您可以使用 AKAppleSequencer
的 midi 输入设置 globalMIDIOutput
AKMIDICallBackInstrument
.
现在新的 AKSequencer
和 AKCallbackInstrument
没有这些选项,新的 AKSequencerTrack
也没有(旧的 AKAppleSequencer
将使用可以设置 midi 输入/输出的 AKMusicTrack
对象)。在查看新的 AKSequencer
的实现时,它由 AKNode
对象驱动,AKCallbackInstrument
是 AKNode
对象,并且应该能够由具有正确 MIDI 数据的轨道驱动。
我向我的音序器添加了一条轨道,并从该轨道添加了必要的 MIDI 数据,这些数据完全复制了我想要回调的 MIDI 事件并执行我的 GUI 事件。然而,使用这种方法,它似乎没有调用回调。
有谁知道如何通过回调使用这些新组件?我真的不想回到 AKAppleSequencer
除非显然没有办法用新的 AKSequencer
驱动回调。
最佳答案
要让 AKCallbackInstrument
使用新的 AKSequencer
,请尝试将您的回调工具连接到您的输出,例如,
metroCallback >>> mixer
不明显,但对我有用。
编辑:包括新 AKSequencer
的最小工作版本和 AKCallbackInstrument
class SequencerWrapper {
var seq: AKSequencer!
var cbInst: AKCallbackInstrument!
var mixer: AKMixer!
init() {
mixer = AKMixer()
AudioKit.output = mixer
seq = AKSequencer()
cbInst = AKCallbackInstrument()
// set up a track
let track = seq.addTrack(for: cbInst)
for i in 0 ..< 4 {
track.add(noteNumber: 60, position: Double(i), duration: 0.5)
}
track.length = 4.0
track.loopEnabled = true
track >>> mixer // must send track to mixer
// set up the callback instrument
cbInst.callback = { status, note, vel in
guard let status = AKMIDIStatus(byte: status),
let type = status.type,
type == .noteOn else { return }
print("note on: \(note)")
// trigger sampler etc from here
}
cbInst >>> mixer // must send callbackInst to mixer
}
func play() {
seq.playFromStart()
}
}
关于ios - AudioKit:将新的 AKSequencer 与任何种类的回调乐器结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61491639/
当用户更改参数或预设时,我如何/何时实际更新仪器? AUInstrumentBase 中没有ParameterUpdated 或PresetSelected 类型的方法/回调 最佳答案 相关机制是 A
我已经粘合了这个小型 Java 程序:我有 8 个音调(C、D、E、...、A、B、C),因此我可以使用一架穷人的钢琴。 package net.coderodde.music; import jav
我在使用 AVAudioSequencer(iOS 12.1.4、Swift 4.2、Xcode 10.1)通过 MIDI 控制第三方 AUv3 乐器时遇到问题,非常感谢您的帮助。 我目前在做什么:
我正在使用 MPICH2 1.4 构建一个 Raspberry Pi2 集群(又名 bramble)。 我还有一个 Launchpad,它是一 block 包含 64 个以上按钮的板,每个按钮可以亮起
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
示例:如果我想在我即将自制的 VST 乐器中播放一个声音,并且音序器中的这个音符有 15000 个样本长,并且该音符被 processEvents 设置为 ON,则 processReplace 函数
我是一名优秀的程序员,十分优秀!