2017-12-27 109 views
8

का उपयोग कर मिडी फ़ाइल से नोट पढ़ें, मैं एक अनुक्रमक बनाने की कोशिश कर रहा हूं जो मिडी फ़ाइल से नोट प्रस्तुत करता है।ऑडियोकिट

वर्तमान में मैं संगीत डेटा प्रोसेसिंग के लिए ऑडियोकिट का उपयोग कर रहा हूं। मैं जानना चाहता हूं कि ऑडियोकिट के साथ मिडी फ़ाइल से नोट डेटा/ईवेंट कैसे प्राप्त किया जा सकता है।

मैंने MIDI ईवेंट सुनने के लिए AKSequencer का उपयोग करने और AKMIDINode को आउटपुट करने का प्रयास किया है, लेकिन ऐसा लगता है कि इससे कुछ भी नहीं मिल सकता है।

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

क्या आपने ऑडियो किट परियोजनाओं को डाउनलोड करने के लिए उपलब्ध किसी भी उदाहरण को देखा है? वे एके समस्या निवारण के लिए बहुत उपयोगी हैं। मुझे वास्तव में दस्तावेज से बेहतर उदाहरण मिलते हैं (क्योंकि कार्यान्वयन बहुत अच्छी तरह से समझाया नहीं गया है)।

आपके प्रश्न के लिए आप किसी ईवेंट में मिडी श्रोता जोड़ सकते हैं, Analog Synth X प्रोजेक्ट available here में इस कोड का एक उदाहरण है।

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

कोड का एक और अधिक काम किया बिट के लिए आप कर सकते हैं refer to this हालांकि कोड भागों में पुराने हो चुके संभावना है।

1

टोनी, क्या आपको कोई MIDI ईवेंट नहीं मिल रहा है, या केवल प्रिंट स्टेटमेंट्स हैं?

मैं कक्षा में AKMidiListener जोड़ने के बारे में एक्समेस्टा की प्रतिक्रिया से सहमत हूं, साथ ही ऑडियोकिट के साथ आने वाले MIDI कोड उदाहरणों की जांच के साथ। इस रॉम प्लेयर उदाहरण कैसे AKMidiSsmpler नोड के साथ बाहरी मिडी फ़ाइलों को खेलने के लिए पता चलता है: प्रिंट प्रदर्शित करने के लिए

https://github.com/AudioKit/ROMPlayer

सके, इसके लिए एक DispatchQueue.main.async में यह लपेटकर इतना है कि यह मुख्य थ्रेड पर है की कोशिश करो। मुझे आशा है कि इस मदद करता है

AudioKit iOS - receivedMIDINoteOn function

: यहाँ एक कोड उदाहरण है कि मैं यहां पोस्ट के साथ एक AudioKit मिडी कार्यान्वयन सवाल है।