I also used the above procedure to send MIDI commands from my application to internal background synthesizers such as iMini, Z3TA +, Sunrizer, etc., but I could not get rid of memory leaks. There are no dangerous pointers and distributions in this version. It works without memory leaks.
static var z: UInt8 = 0 // initalize tuple with 256 x this UInt8 value: // Silly: why not an array instead of this.. a tuple is needed.. length must be exact 256.. // Don't know no other way to create a tuple with 256 elements... var midiDataTuple = (z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z, z) // use the above tuple in MIDIPacket func midiSend(status: Int, val1: Int, val2 :Int) { var midipacket = MIDIPacket() midipacket.timeStamp = 0 midipacket.length = 3 midipacket.data = midiDataTuple //<-= midipacket.data.0 = UInt8(status) midipacket.data.1 = UInt8(val1 ) midipacket.data.2 = UInt8(val2 ) var midipacketlist = MIDIPacketList(numPackets: 1, packet: midipacket) MIDIReceived(midiSource, &midipacketlist) } ////////////////////////////////////////////////////////////// func noteOn(soundNr: Int, note: Int, velocity:Int) { let chan = midiChannelForSoundNr[soundNr] midiSend((0x90 + chan), val1: note, val2: velocity) notesPlaying[chan][note] = true }
tested.