2017-12-27 111 views
8

Tôi đang cố tạo một trình tự sắp xếp hiển thị ghi chú từ tệp midi.Đọc ghi chú từ tệp MIDI sử dụng AudioKit

Hiện tại tôi đang sử dụng AudioKit để xử lý dữ liệu nhạc. Muốn biết làm thế nào tôi có thể nhận được dữ liệu ghi chú/sự kiện từ tập tin midi với AudioKit.

Tôi đã cố gắng sử dụng AKSequencer và xuất ra AKMIDINode để nghe sự kiện MIDI, nhưng dường như không thể nhận được bất kỳ thứ gì từ nó.

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

Trả lời

3

Bạn đã xem bất kỳ dự án mẫu Kit âm thanh nào có sẵn để tải xuống chưa? chúng rất hữu ích cho việc khắc phục sự cố AK. Tôi thực sự tìm thấy các ví dụ tốt hơn so với các tài liệu (như thực hiện không được giải thích rất tốt).

Đối với câu hỏi của bạn, bạn có thể thêm người nghe midi vào một sự kiện, có một ví dụ về mã này trong Analog Synth X Project available here.

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

Để biết mã bit làm việc nhiều hơn, bạn có thể refer to this mặc dù mã có thể lỗi thời trong các phần.

1

Tony, có phải bạn không nhận được bất kỳ sự kiện MIDI nào hay chỉ là báo cáo in?

Tôi đồng ý với phản hồi của Axemasta về việc thêm AKMidiListener vào lớp học, cùng với việc kiểm tra các ví dụ về mã MIDI đi kèm với AudioKit. ROM này chơi ví dụ cho thấy làm thế nào để chơi các tập tin MIDI bên ngoài với nút AKMidiSsmpler:

https://github.com/AudioKit/ROMPlayer

Để cho in để hiển thị, hãy thử gói nó trong một DispatchQueue.main.async để nó vào các chủ đề chính. Dưới đây là một thực hiện AudioKit MIDI câu hỏi với một ví dụ mã mà tôi được đăng ở đây:

AudioKit iOS - receivedMIDINoteOn function

Tôi hy vọng điều này sẽ giúp.

Các vấn đề liên quan