Reply To: Storing received sysex dump as memoryblock then process

Home Forums General Programming Storing received sysex dump as memoryblock then process Reply To: Storing received sysex dump as memoryblock then process

#118901
dnaldoog
Participant
    • Topics: 4
    • Replies: 480
    • Total: 484
    • ★★

    Hi Damien,

    I feel your pain with regards to the edit three times and strike you’re out. If that happens hit the back button on your browser, cut and paste and wait a few hours to re-post. Not familiar with WordPress, but the admins surely could fix that somehow?

    The problem with the code above is you are doing a getSize() on the function name. Also you declare a midiMessage=MemoryBlock() – that would zero out the midiMessage passed into the function.

    I would initialise total outside the loop just to be safe and also I recommend keeping everything local if possible.

    
    midiMessageReceived = function(midiMessage)
    
    local midiMessageRawSize = midiMessage:getSize()
    local MessageType = midiMessage:getData():getByte(5)
    
    if  midiMessageRawSize == 334 and MessageType == 0x25 then   -- determine if the message is Edit Buffer Type hex25 with size 334bytes
    
    local t,total={},0
    --local newMidiMessage = MemoryBlock() don't need this
    for i=9,midiMessageRawSize-2,2 do
    	--assert(i < midiMessage:getSize())	-- For debugging only
    	local msb = bit.lshift(midiMessage:getData():getByte(i),4)
    	local lsb = midiMessage:getData():getByte(i+1)
    	total = msb+lsb		-- console(String(string.format("[%d] = %.2X",i,total)))
    	
    	table.insert(t,total)
    end
    
    EditBufferMessage = MemoryBlock()
    EditBufferMessage:createFromTable(t)
    --console(String(EditBufferMessage:toHexString(1)))
    --panel:getLabel("Debug"):setText(EditBufferMessage:toHexString(1))
    
    ActiveUnitDecode(midiMessage)
    BufferPstNameDecode(EditBufferMessage)
    BypassStatusDecode(EditBufferMessage)
    UAAlgoLblDecode(EditBufferMessage)
    UBAlgoLblDecode(EditBufferMessage)
    UCAlgoLblDecode(EditBufferMessage)
    UDAlgoLblDecode(EditBufferMessage)
    ConfigSrcTypeDecode(EditBufferMessage)
    UAAlgoDecode(EditBufferMessage)
    UBAlgoDecode(EditBufferMessage)
    UCAlgoDecode(EditBufferMessage)
    UDAlgoDecode(EditBufferMessage)
    panel:getModulatorByName("ViButComEdit"):getComponent():setValue(1, true)
    end
    
    end
    
    • This reply was modified 3 years, 9 months ago by dnaldoog. Reason: fixed some formatting errors
    • This reply was modified 3 years, 9 months ago by dnaldoog. Reason: add getData() method
    Ctrlr