THERE IT IS: the ultimate custom module for cubase users (at least for me)

And for my Friday gift to you all - working code that extracts full cubase track name with 29 characters...

//Sysex Track Variables

var trackName = "unpopulated"
var pos = 72
var rootPosLCD = 72
var keepStringVal = 0
var trackNameJoined = "unpopulated"
var bufferTrackName = "undefined"
var posBuffer = 72
var nameLengthCheck = 0
send('midi', 'MCU_From_OSC', '/note', 1, 44, 127);  //Send MCU command to swith to track name sending

module.exports = {

    oscInFilter:function(data){

        
        var { address, args, host, port } = data

       // if (host === 'midi' && port == 'MCU_To_OSC') {console.log('2MCU PING OCCOURED' + address)}

        // MCU TEST AREA HERE


        if (host === 'midi' && port === 'MCU_To_OSC' && address === '/sysex') {

           
            if (args[0].value.includes("f0 00 00 66 14 12")) { // sysex header for mackie lcd text

                var nameDone = false

                var sysExVal = args[0].value
                var d = sysExVal.split(" ").slice(6).map(x => parseInt(x, 16))
               // console.log('d = ' + d)
                pos = d[0] // first byte -> position // hex to int
                    //console.log('pos = ' + pos)
                text = d.slice(1).map(x => String.fromCharCode(x)) // rest -> updated characters
                text.pop() // drop sysex closing byte                    
                trackName = text.join('')
            
                nameLengthCheck = bufferTrackName.length - trackName.length
                charFromStart = pos - rootPosLCD 

                var lengthCheck = charFromStart + trackName.lenth

                if (lengthCheck < 29) {

                    let newEndLength = 29 - charFromStart - trackName.length

                    newEnd = bufferTrackName.substring(bufferTrackName.length - newEndLength)
                } else {newEnd = ""}
                



            if (pos == 72) {       //Full length name recievd


                    trackNameJoined = trackName + newEnd
                    bufferTrackName = trackNameJoined
                    posBuffer = pos
                    console.log('TrackName Joined = ' + trackNameJoined)

                    nameDone = true

                } else if (pos > posBuffer && posBuffer == 72 && nameDone == false) {

                    keepStringVal = pos - posBuffer  //new name follows a full string text

                    var prevTrackKeep = bufferTrackName.substring(0, keepStringVal)
                    
                    trackNameJoined = prevTrackKeep + trackName + newEnd
                    bufferTrackName = trackNameJoined
                    posBuffer = pos
                    nameDone = true

                    console.log('TrackName Joined = ' + trackNameJoined);

                } else {

                    keepStringVal = pos - rootPosLCD  //new name follows a full string text

                    var prevTrackKeep = bufferTrackName.substring(0, keepStringVal)

                    trackNameJoined = prevTrackKeep + trackName + newEnd
                    bufferTrackName = trackNameJoined
                    posBuffer = pos
                    nameDone = true

                    console.log('TrackName Joined = ' + trackNameJoined);

                        }
            }

           

            

           
        }
//END MCU TEST AREA


        return {address, args, host, port}
        
    },

	oscOutFilter: function (data) { 		// Filter incomming osc messages

		var { address, args, host, port } = data




    return data  //End of OSC out Filter here
	}
}

Edit: Any bugs or problems let me know. It's probably not the most efficient code and could do with tidying up but it works on my machine...

Edit: there is a way better solution further down the thread with the bugs ironed out here Better solution here

2 Likes