Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LUA mod:getMidiMessage():getProperty("midiMessageCtrlrNumber") crashing on PC #17

Closed
damiensellier opened this issue May 30, 2024 · 11 comments

Comments

@damiensellier
Copy link
Owner

damiensellier commented May 30, 2024

local myNumber = mod:getMidiMessage():getProperty("midiMessageCtrlrNumber")
crashes on v5.6 on Windows. It works in 5.3.201.

NOTE : All mod:getMidiMessage():getProperty() won't work on macOS and will return :

Error message: [string "sendCC"]:10: attempt to call method 'getProperty' (a nil value)

sendCC = function(--[[ CtrlrModulator --]] mod --[[ number --]], value --[[ number --]], source)
    if panel:getBootstrapState() then
        return
    end
    local myNumber = mod:getMidiMessage():getProperty("midiMessageCtrlrNumber") -- CRASHES
  -- myNumber=15 -- WORKS
    panel:sendMidiMessageNow(CtrlrMidiMessage(string.format("B0 %.2x %.2x", myNumber, value)))
end

See @dnaldoog test panel for testing : test midiMessageCtrlrNumber_1_0_2024-05-30_11-40.zip

@damiensellier damiensellier added the bug Something isn't working label May 30, 2024
@dobo365
Copy link
Collaborator

dobo365 commented Jul 4, 2024

Will have to check that one...

@damiensellier
Copy link
Owner Author

REF : RomanKubiak#619 (comment)

@damiensellier
Copy link
Owner Author

Comparer code v5.6.31 avec source v5.3.198

@damiensellier
Copy link
Owner Author

NOTE:

Probably comes from a bad LuaBind defintion. Search for wrapForLua CtrlrLuaManager :

void CtrlrModulator::wrapForLua (lua_State *L)
{
	using namespace luabind;

	module(L)
		[
			class_<CtrlrModulator, CtrlrLuaObject>("CtrlrModulator")
// ...
.def("getMidiMessage", (CtrlrMidiMessage &(CtrlrModulator::*)(void))&CtrlrModulator::getMidiMessagePtr)
		.def("getMidiMessage", (CtrlrMidiMessage &(CtrlrModulator::*)(const CtrlrMIDIDeviceType))&CtrlrModulator::getMidiMessagePtr)
// ...

@damiensellier
Copy link
Owner Author

damiensellier commented Dec 13, 2024

CtrlrLuaManager L1143 was commented, I don't remember why :

.def("getProperty", (const var &(CtrlrModulator::*)(const Identifier&) const)&CtrlrModulator::getProperty) // Updated v5.6.31

If uncommented, does not work.

@damiensellier
Copy link
Owner Author

damiensellier commented Dec 13, 2024

CtrlrModulator.cpp has all the mod properties

CtrlrMidiMessage.cpp has all the midiMessage properties
setProperty is declared
but
getProperty is missing ??

requires something like that :

CtrlrMidiMessageType CtrlrMidiMessage::getProperty() const
{
	//
}

@damiensellier
Copy link
Owner Author

Different properties of the midi message of the modulator :

  <midi midiMessageType="9" midiMessageChannelOverride="0" midiMessageChannel="1"
        midiMessageCtrlrNumber="1.0" midiMessageCtrlrValue="0" midiMessageMultiList=""
        midiMessageSysExFormula=""/>

@damiensellier
Copy link
Owner Author

In Ctrlr 5.3.198 there's extra files for Lua which have been merged and deprecated :

CtrlrModulatorProcessor.cpp
CtrlrModulatorProcessor.h

merged with CtrlrManager.cpp

@damiensellier
Copy link
Owner Author

The function getProperty() are the following :

const var &getProperty (const Identifier& name) const
{ 
	return midiTree.getProperty (name); 
}
		
const var getProperty (const Identifier& name, const var &defaultReturnValue) const
{ 
	return midiTree.getProperty (name, defaultReturnValue); 
}

We need to bind them to LUA :

        .def("getProperty", (const var &(CtrlrMidiMessage::*)(const Identifier &) const) &CtrlrMidiMessage::getProperty) // Added v5.6.31

@damiensellier
Copy link
Owner Author

FIXED :

Capture d’écran, le 2024-12-17 à 18 47 25

test midiMessageCtrlrNumber_1_0_2024-12-17_15-44.panel.zip



--
-- Called when a modulator value changes
-- @mod   http://ctrlr.org/api/class_ctrlr_modulator.html
-- @value    new numeric value of the modulator
--
sendCC = function(--[[ CtrlrModulator --]] mod --[[ number --]], value --[[ number --]], source)
    if panel:getBootstrapState() then
        return
    end
     local messageType = mod:getMidiMessage():getMidiMessageType()
    console("message Type Via getMidiMessageType: "..tostring(messageType))

     local messageTypeViaGetType = mod:getMidiMessage():getType()
    console("messageType Via getType: "..tostring(messageTypeViaGetType))

     local midiControllerNumber = mod:getMidiMessage():getNumber()
    console("midi Controller Number via getNumber: "..tostring(midiControllerNumber))

     local midiValue = mod:getMidiMessage():getValue()
    console("midi Value: "..tostring(midiValue))

     local messageSize = mod:getMidiMessage():getSize()
    console("message Size: "..tostring(messageSize))

     local midiMessageCtrlrNumberViaProp = mod:getMidiMessage():getProperty("midiMessageCtrlrNumber")
     console("midi Controller Number via getProperty: "..tostring(midiMessageCtrlrNumberViaProp))

    panel:sendMidiMessageNow(CtrlrMidiMessage(string.format("B0 %.2x %.2x", midiMessageCtrlrNumberViaProp, value)))
end

Both getNumber and getProperty() work from now on.

@damiensellier
Copy link
Owner Author

damiensellier commented Dec 17, 2024

FIXED IN v5.6.31

NOTE :

CtrlrMidiMessage.h L118

//const var getProperty (const Identifier& name, const var &defaultReturnValue) const { return midiTree.getProperty (name, defaultReturnValue); } // Updated v5.6.31. Useless

CtrlrMidiMessage.cpp L920

        .def("getProperty", (const var &(CtrlrMidiMessage::*)(const Identifier &) const) &CtrlrMidiMessage::getProperty) // Added v5.6.31

@damiensellier damiensellier removed the bug Something isn't working label Dec 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants