2017-12-27 215 views
8

kullanarak MIDI dosyasından okuma notu Notu midi dosyasından oluşturan bir sıralayıcı oluşturmaya çalışıyorum.AudioKit

Şu anda müzik veri işleme için AudioKit kullanıyorum. AudioKit ile midi dosyasından not verilerini/etkinliğini nasıl edinebilirim bilmek isterim.

AKSequencer'ı ve çıkışı, MIDI olayını dinlemek için AKMIDINode'a kullanmaya çalıştım, ancak ondan hiçbir şey alamıyor gibi görünüyor.

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() 

cevap

3

Şu anda indirebileceğiniz örnek bir Audio Kit projesine baktınız mı? AK'yi gidermek için çok yararlılar. Örnekleri dokümantasyondan daha iyi buluyorum (uygulama çok iyi açıklanmadığı için).

Sorunuzda bir olaya midi listener ekleyebilirsiniz, bu kodun bir örneği Analog Synth X Project available here. kod daha çalıştı bit için

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

yapabilirsiniz refer to this kod bölgelerinde güncel muhtemel olmasına rağmen.

1

Tony, herhangi bir MIDI olayı veya yalnızca yazdırma ifadeleri almıyor musunuz?

Axemasta'nın sınıfa AKMidiListener eklenmesiyle ilgili yanıta AudioKit ile birlikte gelen MIDI kod örneklerini inceleyerek yanıtını kabul ediyorum. Bu ROM Oyuncu örnek AKMidiSsmpler düğümle harici MIDI dosyalarını çalmak için nasıl gösterir: Baskı görüntülemek için

https://github.com/AudioKit/ROMPlayer

için, ana iş parçacığı üzerinde olacak şekilde bir DispatchQueue.main.async sararak deneyin. İşte burada yayınlanan bir kod örneği olan bir AudioKit MIDI uygulaması soru:

AudioKit iOS - receivedMIDINoteOn function

umarım bu yardımcı olur.