(...the last two values in the column are 0,0 like Tap Lead...)
"Also note the change from 8 to 32 in row five. Maybe that's connected with the polyphony"
...after all, the chords have four notes...makes sense...
I know I said I'd given up trying to communicate with the ESP32, but I discovered a new piece of info, and now the Orba's not just talking...it's gabbling.
************************************************************
The info here is basically correct, but it leaves out a vital piece of information...what you actually do to start communication once you've configured the serial settings.
When connected normally, I see the Orba as a USB serial device on COM13; though as I've said, I'm not sure if that's automatic or because of some other driver I've added. It will be interesting to know if this works 'out of the box',
Open Putty and configure the serial settings accordingly...
...but instead of clicking "Open", select "Session" and then select "Serial" to use the options you just configured.
I usually start by making sure the Orba is ready by turning it off and on, and I tend to select "Never" in that "Close window" box. Then click: "Open".
At first I just got a black box and nothing happened. Then I hit a few random keys and...messages....!
I would recommend to start by pressing <Enter> (just what I always do) and then try the following one-letter commands, which produce various results
d – Skipping check for debugger
e - Detected HW Version: 0
h - Remix ver 57
q - Toggling looper quantize mode, new mode = 0, 0, 0, 0
q - Toggling looper quantize mode, new mode = 1, 1, 1, 1
s - U3 errs=0x0000 Tx=0, Rx=0, af=0, rx isr=20, tx isr=0
v - (fuin one, toggles the motor on and off )
w - Forcing RAM Write to flash... ("Putty fatal error - Error reading from serial device")
z - ("Putty fatal error - Error reading from serial device")
B - BLE stuff, had to run firmware update to revive it
O - Loads of stuff, ending in animated weirdness
Some of these produce reams of stuff I haven't read yet. This is "B":
..."O"...
(...had to flash it from a file to revive it afer that one...)
It shows event logs for gestures and what it's playing:
Pressing numbers 1-4 shows Looper info...
Obvs I was excited to see that "q" toggles quantise on and off, but I haven't got it working yet, even after editing one of the Song files to change the quantisation parameter from 0 to 1.
(...corrected Putty images...)
Shift-8 (Asterisk) and Shift-= (+) on my UK keyboard increase/decrease volume, and also give some kind of report about it.
The messages that crop up are to be found in a file called "0x8000000.bin" (attached) which I think is one of the ones that the App creates and deletes during flash-from-file. It also includes text like: "handle_terminal_commands", which is evidently what it's doing. It might contain clues for other one-finger commands we haven't found yet, or what they do.
This is really exciting stuff! I've dabbled with a number of micro controllers and am able to follow most of this. I'm glad you tried setting quantization on in both hardware and software. Its too bad it didn't work. Have you checked if this is "recording" quantization of "playback" quantization? I'm wondering if there's anything for changing Key/ScaleMode/Tempo/Metronome ?
Matching the coinsole command letters in the previous list with the entries in the .bin file below we get...
s) U3 errs=0x%04X Tx=%d, Rx=%d, af=%d, rx isr=%d, tx isr=%d
d) Skipping Check for debugger...
e) Detected HW Version: %u Jumping to bootload mode!
w) Forcing RAM Write to flash...
q) Toggling looper quantize mode, new modes = %u, %u, %u, %u
B) Commencing BLE serial pass-through with ESP32 in programming mode...
O) Commencing BLE serial pass-through with ESP32 in normal mode
*/+) Volume set to %u / %lu counts
9) Info for loop ID
h) Remix ver 57
...and there's also that "v" that toggles the motor on and off. (Could that be the "Palm Event" in the main code? Wonder if there's seekerData for it.)
Similar entries in the .bin file I haven't accounted for yet, which might possibly be associated with other one-letter commands, includes:
MemIdx = %lu - MIDI Note at tick %lu, channel %u, note %u, duration %u, von %u, voff %u
MIDI CC at tick: %lu, channel: %u, CC Num: %u, CC Val: %u
MIDI Pitch Bend at tick: %lu, channel: %u, PBend Val: %i
***********************************************************************************
>"I think I’d read somewhere something about how if you want to talk the ESP32 it has to be in a different mode."
Given:
B) Commencing BLE serial pass-through with ESP32 in programming mode...
O) Commencing BLE serial pass-through with ESP32 in normal mode
...at least I wasn't imagining things...;-)
I think normal mode is a normal connection, and with that, "O" ends up doing...something. (Animated ASCII event-monitor stuff.) "B" ends up with a question mark and a firmware reset. (I'm still wondering if programming mode might possibly be indicated by the white spinning circle you get if you pull the plug during an update. I might test that but I've done enough firmware resets for one day.)
>"I'm wondering if there's anything for changing Key/ScaleMode/Tempo/Metronome?"
Good question, I was thinking there might be a tempo setting somewhere, and it would be interesting to find out whether the way the App changes key involves the same kind of communication as the console...
Looking at lines 9-12 as a set:
Movement Metric Tilt, Spin, Move, ShakeCC 2001
Touch Metric Radiate, Press, Vibrato 3111
Note Event Tap lead/chord, Bump, Shake 0000
At line 13, that leaves me wondering why Vibrato has 0 like the Events instead of 1 like the other Metrics.
...as well as the quantizationMode parameter in the "Mode" tags...
<Mode name="Lead" quantizationMode="0" volume="200">
...the Song presets have entries like this which are probably tied up with loops and quantisation.
<LoopData writeIndex="0" recordStartTime="0" recordStopTime="0" lastEventTime="0"
nBars="0" eventData="" eventDataCrc="ffffffff"/>
The "MemIdx" (memory index?) entries might be useful...
MemIdx = 148 - MIDI Note at tick 2759, channel 1, note 52, duration 114, von 107, voff 51
MemIdx = 156 - MIDI Note at tick 2759, channel 1, note 59, duration 114, von 107, voff 51
MemIdx = 164 - MIDI Note at tick 2759, channel 1, note 64, duration 114, von 107, voff 51
MemIdx = 172 - MIDI Note at tick 2759, channel 1, note 68, duration 114, von 107, voff 51
MemIdx = 180 - MIDI CC at tick: 2822, channel: 0, CC Num: 1, CC Val: 0
MemIdx = 184 - MIDI CC at tick: 2858, channel: 1, CC Num: 255, CC Val: 44
MemIdx = 188 - MIDI CC at tick: 3462, channel: 0, CC Num: 1, CC Val: 7
MemIdx = 192 - MIDI CC at tick: 3839, channel: 1, CC Num: 255, CC Val: 83
MemIdx = 196 - MIDI CC at tick: 3839, channel: 1, CC Num: 74, CC Val: 93
It could potentially show the structure of a block of note data if we could find a way to copy it off.
In the meantime, I guess it should be possible to reconstruct it from the log.
Here's a simple tune with Bass. I've been messing around with quantise and I think it might possibly have done something to it, because I don't think I played it that badly.
I've attached the data from the console. All rows except "MIDI Note" can be discarded. The note data loooks plausible. In order to reconstruct a MIDI sequence using the timing data I'd be thinking Max/MSP, if I knew how to use it; or maybe one of those music programming languages like Sonic Pi.
This log data will be invaluable to breaking down the eventData in a song's LoopData nodes. I suspect its the exact same data from the MemIdx above. Eventually I'll build the Generic Fiddler but we can just paste the eventData from a song like the one below into the experimental fiddler but I think it might be too long.. Quantizing would just be rounding the tick values to the nearest tick..
<LoopData writeIndex="504" recordStartTime="0" recordStopTime="0" lastEventTime="3484" nBars="4" eventData="INgAKkswRwAggQAqUi5ZABBoAC1ZKpoAIO4AKkMnNwAglgAqTDNPABBsACRKKKcAIBUARQsAWgAQ7wAqSi1CABCMACpLLlQAEFkALWMrpwAQ+wAqSCw/ABCMACpPLVAAEGoAJFAlkQAgHABFBABaABDMACpTLkMAEI4AKkssVgAQYQAtWCeBABD+ACpUMkYAEIwAKlo3UQAQWwAkSyiOACAbAEUFAFoAEOkAKlYxPQAgIgBFBABaABBoACpOMEoAEFwALUUwawAQ8gAqXjVFACAeAEUEAFoAEGYAKlI1SgAQcwAkVSl4ACAbAEUHAFkAEMEAKkkwRAAQogAqTTJEABBLAC1PHnsAEPkAKlk4RgAgJABFBQBZABBvACpJNkIAEFkAJFotnAAgGgBFBQBZABDjACphNzsAICAARQMAWgAQaAAqTjFDABBqAC1TI2wAEPAAKlw2OAAgHwBFBABZABBxACpVNEUAEFQAJF0upgAgGQBFCQBZABDSACpaOjsAIBwARQUAWgAQagAqSzFGABBkAC1eNHwAEAQBKlw0NgAQigAqUjVIACBIACRnPXoAEBsARQIAWQAQ6gAqVy49ACAhAEUFAFkAEGQAKlAySwAQXQAtUiZvABD9ACpoOD8AICAARQcAWgAQUwAqUjk0ABBeACRXLKUA" eventDataCrc="fe32e7bf"/>
Figuring out the calculation of ticks to notes will be important. I found this to help
Andrea Mannocci
This thread is intended to gather the feedback of Orba tinkerers.
28 people like this idea