首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift - AudioKit AKMidi to AKSequencer

Swift - AudioKit AKMidi to AKSequencer
EN

Stack Overflow用户
提问于 2018-09-03 19:59:03
回答 1查看 498关注 0票数 3

我目前有一个应用程序,它使用AKKeyboard来创建使用振荡器的声音。每当键盘被演奏时,我也会得到MIDI数据。我想要做的是从我收到的MIDI数据创建一个AKSequence。

任何建议或指示都将非常感谢,谢谢。

下面是我的部分代码:

代码语言:javascript
复制
var bank = AKOscillatorBank()
var midi: AKMIDI!
let sequencer = AKSequencer()
let sequenceLength = AKDuration(beats: 8.0)

func configureBank() {
    AudioKit.output = bank

    do {
        try AudioKit.start()
    } catch {
        AKLog("AudioKit couldn't be started")
    }

    midi = AudioKit.midi
    midi.addListener(self)
    midi.openInput()
}

// AKKeyboard Protocol methods
func noteOn(note: MIDINoteNumber) {
    let event = AKMIDIEvent(noteOn: note, velocity: 80, channel: 5)
    midi.sendEvent(event)
    bank.play(noteNumber: note, velocity: 100)
}

func noteOff(note: MIDINoteNumber) {
    let event = AKMIDIEvent(noteOff: note, velocity: 0, channel: 5)
    midi.sendEvent(event)
    bank.stop(noteNumber: note)
}

// AKMIDIListener Protocol methods..
func receivedMIDINoteOff(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel) {
    print("ReceivedMIDINoteOff: \(noteNumber), velocity: \(velocity), channel: \(channel)")
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 02:49:17

实际上,您不需要直接从AKMIDIEvents构建序列。只需在调用AKKeyboardView的noteOn和noteOff方法时查询序列的currentPosition,并在此基础上以编程方式将事件添加到序列器轨迹。

这个过程与此基本相同(当然,不包括最后一步):https://stackoverflow.com/a/50071028/2717159

编辑-获取noteOn和noteOff时间,以及持续时间:

代码语言:javascript
复制
// store notes and times in a dictionary:
var noteDict = [MIDINoteNumber: MIDITimeStamp]()

// when you get a noteOn, note the time
noteDict[currentMIDINote] = seq.currentPosition.beats

// when you get a noteOff
let endTime = seq.currentPosition.beats
if let startTime = noteDict[currentMIDINote] {
    let durationInBeats = endTime - startTime
    // use the startTime, duration and currentMIDINote to add event to track
    noteDict[currentMIDINote] = nil
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52149372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档