2017-12-27 17 views
8

MIDIファイルから音符をレンダリングするシーケンサーを作成しようとしています。AudioKitを使用してMIDIファイルから音符を読む

現在、私は音楽データ処理にAudioKitを使用しています。 AudioKitでmidiファイルからノートデータ/イベントを取得する方法を知りたいですか?

私はAKSequencerを使ってAKMIDINodeにMIDIイベントを聞こうとしましたが、何も得られないようです。

class CustomMIDINode: AKMIDINode { 

    override init(node: AKPolyphonicNode) { 
     print("Node create") // OK 
     super.init(node: node) 
    } 

    func receivedMIDINoteOff(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel) { 
     print("midi note off") // Not printed 
    } 

    func receivedMIDISetupChange() { 
     print("midi setup changed") // Not printed 
    } 

    override func receivedMIDINoteOn(_ noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel) { 
     print("receivedMIDINoteOn") // Not printed 
    } 
} 

func setupSynth() { 
    oscBank.attackDuration = 0.05 
    oscBank.decayDuration = 0.1 
    oscBank.sustainLevel = 0.1 
    oscBank.releaseDuration = 0.1 
} 


let seq = AKSequencer(filename: "music") 
let oscBank = AKOscillatorBank() 
var midi = AKMIDI() 
let midiNode = CustomMIDINode(node: oscBank) 

setupSynth() 

midi.openInput() 
midi.addListener(midiNode) 
seq.tracks.forEach { (track) in 
    track.setMIDIOutput(midiNode.midiIn) 
} 
AudioKit.output = midiNode 
AudioKit.start() 
seq.play() 

答えて

3

ダウンロード可能なオーディオキットプロジェクトのサンプルはありますか?それらはAKのトラブルシューティングに非常に役立ちます。私は実際には実装よりも良い例を見つけています(実装がうまく説明されていないため)。

質問には、イベントにMIDIリスナーを追加することができます。Analog Synth Xプロジェクトavailable hereにこのコードの例があります。コードのより多く働いていたビットのために

let midi = AKMIDI() 
     midi.createVirtualPorts() 
     midi.openInput("Session 1") 
     midi.addListener(self) 

次のことができrefer to thisコードが部品に期限が切れそうですが。

1

Tony、あなたはMIDIイベントや印刷文だけを受け取っていませんか?

私は、AudioKitに付属のMIDIコードの例をチェックするとともに、AKMidiListenerをクラスに追加するというAxemastaの対応に同意します。このROMプレーヤーの例では、AKMidiSsmplerノードと外部のMIDIファイルを再生する方法を示しています。

https://github.com/AudioKit/ROMPlayer

印刷、表示するためには、それはメインスレッド上にあるようDispatchQueue.main.asyncでそれをラップしてみてください。ここで私はここに掲載のコード例でAudioKit MIDIインプリメンテーションの質問です:

AudioKit iOS - receivedMIDINoteOn function

私はこのことができます願っています。

関連する問題