PDA

View Full Version : Cockos OSCII-bot (formerly midi2osc)


Justin
11-14-2013, 06:31 PM
Here's a little summary of a project I started for fun, which triggered some of the recent OSC updates:

http://1014.org/?article=511

Discuss here if you like :)

musicbynumbers
11-14-2013, 07:31 PM
ooh if this is what I think it is (which it may not be) ;) then that's very useful! :)

Anton9
11-14-2013, 10:01 PM
Hi Justin,

Nice idea.., I would also like to see REAPER support just the opposite. So if you send REAPER an OSC message such as "/note/on/53" then that note will sound until "/note/off/53" is received. Maybe even something like this "/note/on/53,56,60" for doing chords?

adaragray
11-15-2013, 02:49 AM
ooh if this is what I think it is (which it may not be) ;) then that's very useful! :)

maybe one step closer to midi feedback?

airon
11-15-2013, 03:14 AM
That's what I was thinking.

I use this Novation Dicer DJ controller, which is basically just two button controllers with six layers of five buttons, sending simple midi messages out to trigger stuff in Reaper.

They also have multi-coloured LEDs which can be turned on and off in specific colours via midi messages.

If I can somehow define an OSC feedback message that sends out a the midi message for "GREEN ON for Master Dicer on button X" for each "Plugin in position X on currently selected track", I'll have an additional layer of feedback.

Studying the package now. I'll need to experiment with this once my projects are over though. Monday perhaps.

musicbynumbers
11-15-2013, 05:07 AM
maybe one step closer to midi feedback?

Indeed. A way to send to send at least 7 bit resolution messages ESPECIALLY midi notes out of the midi editor to an OSC device for sequencing? :)

Lazarus
11-15-2013, 06:45 AM
This looks really useful, thanks for sharing it.

adaragray
11-15-2013, 07:09 AM
since osc is better than midi in many ways, i don't expect the devs will implement regular midi feedback anyway.
I know it's already doable with puredata and such, but thats to complicated for my liking.
You can't teach an old cow to dance.
So i could immagine an idiot(like me)-proof osc2midi2-midi2osc patchbay
with osc/midi learn function.
I can totally live with a slim application that runs in background for doing this

plamuk
11-15-2013, 03:02 PM
would this be helpful in overcoming REAPER's limit of only 16 dedicated control channels? (as per this issue: http://forum.cockos.com/showthread.php?t=130974)

musicbynumbers
11-15-2013, 03:12 PM
would this be helpful in overcoming REAPER's limit of only 16 dedicated control channels? (as per this issue: http://forum.cockos.com/showthread.php?t=130974)

I've ran into that too. Would love a way to choose whether the actions menu takes into account the input device as well as midi channel :)

Justin
11-15-2013, 03:19 PM
would this be helpful in overcoming REAPER's limit of only 16 dedicated control channels? (as per this issue: http://forum.cockos.com/showthread.php?t=130974)

Yep, you could convert them into OSC messages and bind/learn those as you like.

jnif
11-15-2013, 03:28 PM
For this project the EEL2 syntax was extended slightly, via the use of a preprocessor, so that you can specify format strings for OSC. For example, you can tell REAPER to set a track's volume via:

oscfmt0 = trackindex;
oscsend(destination, { "/track/%.0f/volume" }, 0.5);

Internally, { xyz } is stored to a string table and inserted as a magic number which refers to that string table entry. It is cheap, but it works.


Any plans to support text strings in JS plugins?
It would be much more convenient than the current single character text support.

jnif

Justin
11-15-2013, 03:42 PM
Any plans to support text strings in JS plugins?
It would be much more convenient than the current single character text support.

jnif

I've been thinking about it for a while, just want to make sure whatever solution we end up doing doesn't break everything or suck too bad (the latter is a bigger worry, since if people start writing JSFX using the syntax we'll be stuck with it).

adaragray
11-17-2013, 07:46 AM
did anyone try it yet and can give a little example? maybe for setting up bcr2000

Anton9
11-21-2013, 12:55 PM
Hey Justin,

Thank you so much for adding this;
+ OSC: added /vkb_midi/

However I'm having a little trouble getting it to work.

I understand that the parameters are RAW MIDI.., so 3C is middle C.
Is velocity supported?

Could you please give an example that would trigger a middle C.

Thank you

Justin
11-21-2013, 01:23 PM
Hey Justin,

Thank you so much for adding this;
+ OSC: added /vkb_midi/

However I'm having a little trouble getting it to work.

I understand that the parameters are RAW MIDI.., so 3C is middle C.
Is velocity supported?

Could you please give an example that would trigger a middle C.

Thank you

The values must be decimal integer, not hex, so find the note value you want in the midi editor, for example C3 is 48, and sending /vkb_midi/note/48 with an integer or float value of 1-127 would do the trick. Example:

oscsend(dev, {"i/vkb_midi/note/48"}, 127);

or

oscfmt0 = 48;
oscsend(dev, {"i/vkb_midi/note/%.0f"}, 127);

EvilDragon
11-21-2013, 01:30 PM
There's also MIDI note 0, is that not supported? :D

Anton9
11-21-2013, 01:53 PM
Ok so now I'm gettig some MIDI activity but when looking at the MIDI activity log of ReaControlMIDI it's showing that a Note Off is being received.

This is the command I'm sending.
("/vkb_midi/note/60", 127)

musicbynumbers
11-21-2013, 02:48 PM
There's also MIDI note 0, is that not supported? :D

Didn't the modern church ban that one? ;)

Tale
11-21-2013, 05:02 PM
There's also MIDI note 0, is that not supported? :D
Well, this is not MIDI, and if C3 is 49, then I guess the lowest note (C-1) is 1, not 0 (and the highest note is 128).

Justin
11-21-2013, 08:39 PM
Sorry, I meant 48 not 49.

Justin
11-21-2013, 08:42 PM
Ok so now I'm gettig some MIDI activity but when looking at the MIDI activity log of ReaControlMIDI it's showing that a Note Off is being received.

This is the command I'm sending.
("/vkb_midi/note/60", 127)

Oops, looks like a bug in the OSC vkb_midi impl. Will be fixed in the next build!

Anton9
11-23-2013, 04:03 AM
Justin,

Works now.., I'll be testing it in various situations over the next day or two, I'll also give the other VKB_MIDI_xxxx commands some testing and if I notice any issues I will PM you.

Thanks once again! :D

fwd0120
11-23-2013, 12:30 PM
Saw this on your blog a yesterday. Great!

David Else
11-24-2013, 11:43 AM
Does this mean some clever person can make code to get my behringer bcf 20000 to actually get data feedback from plug-ins and update itself!? That would be a dream come true, its the biggest missing feature in Reaper for me.

adaragray
11-24-2013, 02:20 PM
Does this mean some clever person can make code to get my behringer bcf 20000 to actually get data feedback from plug-ins and update itself!? That would be a dream come true, its the biggest missing feature in Reaper for me.
i don't think so, would be to good to be true

LugNut
11-25-2013, 08:58 AM
Does this mean some clever person can make code to get my behringer bcf 20000 to actually get data feedback from plug-ins and update itself!? That would be a dream come true, its the biggest missing feature in Reaper for me.

Hi,

I dont have a bcf2000,
but doesnt the bcf2000 work with klinke's csurf.dll? I could be wrong or i dont understand, but I could swear this setup had what u need?

http://forum.cockos.com/showthread.php?t=81818

I think nofish wrote a guide for this.


Guido

David Else
11-25-2013, 01:17 PM
Hi,

I dont have a bcf2000,
but doesnt the bcf2000 work with klinke's csurf.dll? I could be wrong or i dont understand, but I could swear this setup had what u need?

http://forum.cockos.com/showthread.php?t=81818

I think nofish wrote a guide for this.


Guido

I didn't know it was possible... i don't have the BCF2000 here to check it. If anyone knows, is it possible to (for example) map a plug-in's controls to the faders and every time it loads the faders spring into the correct positions!?

LugNut
11-25-2013, 04:12 PM
I didn't know it was possible... i don't have the BCF2000 here to check it. If anyone knows, is it possible to (for example) map a plug-in's controls to the faders and every time it loads the faders spring into the correct positions!?

Yes. i think^^

Jeffos
11-26-2013, 06:37 AM
midi2osc open source: thank you for sharing such code examples, Justin!!
I really enjoyed the MIDI-in and OSC-out code bits, straight to the point, lovely :)
But the cherry on the pie is definitely the EEL2 extension example, most interesting, thanks!

Did a tiny midi2osc config too... I've seen little things.. but no time to elaborate :/

.. well, just one big thing I'd like to suggest for REAPER (I've missed the related 4.57pre-cycle train) :

ACTION i/section/@/action f/section/@/action/@/cc
ACTION_SOFT f/section/@/action/@/cc/soft
ACTION_RELATIVE f/section/@/action/@/cc/relative

^^ or anything similar (as usual), oh! and section/@ == unique action section id here

Jeffos
11-26-2013, 06:38 AM
did anyone try it yet and can give a little example?

Coincidentally, I've worked on a very similar MIDI<->OSC project just recently, so here's another midi2osc example (while I have (N)RPNs & stuff fresh in mind :)):
Download: Generic midi2osc v1.0 (http://reaper.mj-s.com/generic_midi2osc_v1.0.zip).

This one is a generic MIDI to OSC converter, it remaps any MIDI channel-based messages to OSC messages.
It also supports MIDI CC events with 14 bit resolution (optional):

CC pairs (CC#0 to #31)
Registered Parameter Number (RPN)
Non Registered Parameter Number (NRPN)
Should be compliant with MIDI specs: supports Reset RPN (0x3FFF), "All Controllers Off" (CC#121), etc..

Important! You must edit/tweak this file before you can use it: you at least have to define your own MIDI device input(s) and your own OSC server there.
=> Just open it in a text editor, everything is explained inside (as you'll see, there are other things you can customize -I made the code "tweak tolerant", well... to some extend).

would this be helpful in overcoming REAPER's limit of only 16 dedicated control channels? (as per this issue: http://forum.cockos.com/showthread.php?t=130974)
I don't think midi2osc will help you about that, but I'm not sure it's what you need actually...
To be honest, what you described in your thread sounds a bit convoluted to me (doable with a single MIDI channel?) but it seems "MIDI-input specific assignments" is what you are really after there (I mean CC#4 on Channel 7 from device1 triggers something different than CC#4 on Channel 7 from device2)
=> midi2osc + the generic config here should help about that! (the script tags OSC messages with MIDI device "IDs")

Does this mean some clever person can make code to get my behringer bcf 20000 to actually get data feedback from plug-ins and update itself!?

no, sorry. you would need a proper control surface plugin, or "osc2midi" for that (not midi2osc).

adaragray
11-26-2013, 10:25 AM
no, sorry. you would need a proper control surface plugin, or "osc2midi" for that (not midi2osc).

wouldn't that be cool? a reaper osc2midi2osc or midi2osc2midi translator

LugNut
11-26-2013, 04:28 PM
Hi,

Just so guys w bcfs get what they need...and stay outa here^^ kiddin'


Go here...

http://forum.cockos.com/showthread.php?t=33149

All things BCF200 related.

Carry on...

adaragray
11-27-2013, 08:18 AM
its not just about the bcf/bcr stuff.
the translator would make it possible to use ANY Hardware controller with feedback

given the right config file

Jeffos
11-29-2013, 03:04 AM
adaragray, nothing new here... Such OSC<->MIDI tools already exist. Pure data is one of them, Banned even explained things thoroughly and shared a "feedback patch" here: http://forum.cockos.com/showthread.php?t=97255

adaragray
11-29-2013, 05:05 AM
mm ok. pure data again.
pd alone uses 3% of my cpu
and can't wrap my head around it.
ill'd rather have it the more "rapid" way
Since i feel like beeing annoying with this
i stop asking and start to be happy with what i have.

Xenakios
12-04-2013, 10:18 AM
Thanks for the tool Justin! :) While it's rather involved to set up, it allows for some nice shaping of MIDI data coming in from external devices. Request : implement OSC-to-OSC support too ;)

Justin
12-11-2013, 10:59 AM
Starting work on multiple-script support, as well as osc2midi and osc2osc and midi2midi support. Perhaps a rename is in order, perhaps osc_midi_megatool? Suggestions?

zappadave
12-11-2013, 11:06 AM
Reaperdom or maybe Reapercom

SmajjL
12-11-2013, 11:20 AM
swiss_osc_midi
(Based on the swiss army knife, for the record) :)
And "swiss" to me is multiple options. :)
And.. if it sounds a little bit schwa'ish, that's good right? ;)

mim
12-11-2013, 11:21 AM
Moscito Bytes
M(idi &) OSC to bytes

ivansc
12-11-2013, 11:30 AM
Thankyew folks, he's here all week! (Try the veal)

Tronic
12-11-2013, 12:10 PM
'Reaper osc midi'
anagrams to
'Imprecise road.'

Justin
12-11-2013, 12:43 PM
swiss_osc_midi
(Based on the swiss army knife, for the record) :)
And "swiss" to me is multiple options. :)
And.. if it sounds a little bit schwa'ish, that's good right? ;)

Hah or 'midi osc knife'?

SmajjL
12-11-2013, 01:12 PM
Sounds dangerous! :) but yeah, i would "get" it but it does not sound so good saying it though to me. :)
That said, if you already have stuff organized starting with either midi or osc then i must agree on following that standard then.
osc_swiss_midi? :)

SmajjL
12-11-2013, 04:32 PM
http://stash.reaper.fm/19121/Swiss.png

Just wanted you to put the knife away. *puh* :D
Keyword of the idea is swiss though, let's just see if the idea/word grows on you in a few days or if we get other suggestions that works better.
osc_midi_swiss? :)

Justin
12-11-2013, 07:43 PM
Woo, have midi2osc doing [osc|midi]<-->[osc|midi], working pretty well, such as:

http://1014.org/shiz/shup/alphatrack.cfg

(not done yet, obviously :)

...and you can load multiple scripts, which share hardware if necessary... by default it will load *.cfg from the program directory.

Anton9
12-11-2013, 08:36 PM
You could call it M.O.M. (MIDI-OSC Megatool)..., or maybe just call it "The Tool".

Justin
12-12-2013, 04:26 AM
Haha, MOM.

Teddy
12-12-2013, 04:54 AM
Woo, have midi2osc doing [osc|midi]<-->[osc|midi], working pretty well, such as:

http://1014.org/shiz/shup/alphatrack.cfg

(not done yet, obviously :)

...and you can load multiple scripts, which share hardware if necessary... by default it will load *.cfg from the program directory.

When I look at this code, it reminds me of Ableton Live's python controller scripts. Would it be an idea to include this functionality directly in reaper instead of having this run in a separate application? Just asking. :) great job so far with this project.

Justin
12-12-2013, 03:35 PM
When I look at this code, it reminds me of Ableton Live's python controller scripts. Would it be an idea to include this functionality directly in reaper instead of having this run in a separate application? Just asking. :) great job so far with this project.

That's definitely a possibility, and you could look at this much as a testbed for that sort of thing.. but my original use-case benefitted from a separate process, so this will continue on as well.

Banned
12-12-2013, 04:12 PM
Haven't had a chance to take a look at this stuff yet, but it sounds great - awesome to see more OSC stuff in any case, keep it coming Justin! :)

Justin
12-14-2013, 08:05 PM
Here is the new version, now renamed to OSCII-bot:

http://1014.org/?article=512

SmajjL
12-16-2013, 01:56 PM
*Quack!* ;)

OSCII-bot sounds good to me. :)

Justin
12-16-2013, 05:00 PM
Here we go: http://www.cockos.com/oscii-bot/

Xenakios
12-16-2013, 06:10 PM
Good work! :)

adaragray
12-17-2013, 08:24 AM
:like: :)

LugNut
12-26-2013, 06:38 PM
Hi,

Thank you Justin for making osciibot.

I think i have a general idea of the concepts but,alas, I cant program for shit so i was wondering if some kind soul could help me out. I have stared hard and long at the sample scripts...to no avail.

Firstly, i will be sending a midi message {x message on a specific midi port} to oscibot,and have osc tell oscibot what number is the currently selected track...and then convert that value into midi. Any midi message will do.

I believe i could copy and paste my way from there to get any further deeper into osc commands. Pllllllllzzzzzzzzzzzz help?

Happy Holidays to all,

guido

adaragray
12-27-2013, 02:42 AM
funny, i was thinking the exact same thing bu didn't dare to ask

SmajjL
12-27-2013, 04:26 AM
*Annoying buzzer*

To late! problem solved, better luck next time. ;)

adaragray
12-27-2013, 01:18 PM
*Annoying buzzer*

To late! problem solved, better luck next time. ;)

? :)

SmajjL
12-28-2013, 06:59 AM
Nothing to see here.. ;) :)

Justin
12-29-2013, 03:45 PM
test post of attachment -- ignore this

EcBaPr
01-01-2014, 01:42 AM
all the OSC stuff is exciting.. I would like to put my hand up for the dummies though and ask is there likely to be anyway of implementing OSC control which is more straight forward ?

What is the feasability of just allowing something like right click on a JS fader and an option "send to OSC" and a dialog to type the OSC command ? so if someone wants to quickly add OSC control on the timeline they just load dummy fader, write a command and automate with familiar controls like envelopes etc ? If you have learn input and send to OSC output you could have easy custom routings also.

I know you need ReaperOSC files for setting up interfacing to a full control surfaces but for quick and simple stuff its difficult for the lay person to get their head around too many config files and programming etc...

For example right now i want to send mainMuteFx and echoVolume OSC commands to an external device at a few points on timeline. Its hard to work out how to get a JS fader (just an FX control obviously) to send those commands when its tied to the ReaperOSC file that determines the OSC message for all the FX controls..

adaragray
01-09-2014, 09:11 AM
Great Veto!
thats a good starting point

EcBaPr
01-10-2014, 03:48 AM
Im just posting this ultra-basic osciibot script for people who want to get started and have the same difficulties like i had to get their head around it.

It basically does the same (i hope :)) like Banned does it with his superb PureData patch here (http://forum.cockos.com/showthread.php?t=97255) (the first one), allowing midi-feedback, except for just one parameter.

I have no idea about osciibot other than it might be something that can help me :) Could you let me know if your script (or an adaptation of it) would be able to help me do the following..

I want to send the OSC command "mainMuteFx" out of reaper to an external device.. i want to be able to automate this command on/off freely on the timeline. Can osciibot help me ?

LugNut
01-10-2014, 02:41 PM
Im just posting this ultra-basic osciibot script for people who want to get started and have the same difficulties like i had to get their head around it.

It basically does the same (i hope :)) like Banned does it with his superb PureData patch here (http://forum.cockos.com/showthread.php?t=97255) (the first one), allowing midi-feedback, except for just one parameter.

Hi Veto,

I think i may owe u enormously...I know nothing about scripts....but am i correct in understanding that if i change this line....

oscsend(reaper_in,"n/track/1/fx/1/fxparam/1/value", osc_val);.....

to some reaper osc command that gets the index # of the selected track, if that command exists...this script will send out a midi command with that number in the value? If so it would be a Godsend for me! Awe plz say its so!

If i may ask,where is the master list of all osc commands?

Thanks heaps for making this available.

Guido

LugNut
01-11-2014, 04:31 PM
Hi,

Thx veto. Some of the stuff u said is making sense to me , but I am afraid I will have to wait until the interger/string thing is done by someone else...or a GUI is added to js and oscibot..lol. Thank you for your help.

Guido

LugNut
01-12-2014, 07:33 PM
I was wrong, string to int conversion is not needed.
But i can only get it to work from track 1-8, probably only a config thing.
Would help when i would know more than nothing about OSC... :)

Hi,

Thank you!1 I just saw this ..am going to try now ...thx!!

Guido

LugNut
01-12-2014, 08:24 PM
Hi,


This is how much i dont know^^ I put these three files in the stash..i didnt know if i should copy them here...but maybe u could look at them veto? Youve gone above the call of duty already..thx.

http://stash.reaper.fm/19456/ScreenShot.png


http://stash.reaper.fm/19457/OscibotLog.txt


http://stash.reaper.fm/19458/Track-to-CC.txt


btw

In ur script...what controller is expected on the input side...i see msg1=176...what is that?

If this is too much of a pita, plz feel no obligation. Thx again!

Guido

LugNut
01-15-2014, 12:03 PM
Hi,

Oh boy..u are the man....digesting.....thanx!!!!

btw about the 1-8 thing..i was going to blindly suggest that. I been in this control surface mode so deep and long now!

Thank you Veto..bb

Guido

HH007
01-20-2014, 04:45 AM
Hi Justin,

I've downloaded the files for OSX, I've copied the program to Finder into the list with programs but after clicking twice, nothing seems to happen. The documentation that comes with the files is limited. How should I use this? After starting the program, what should I be seeing or does starting mean that a function becomes available? Thank you for your support.

Kind Regards,

HH007

LugNut
01-20-2014, 10:03 AM
Hi Justin,

I've downloaded the files for OSX, I've copied the program to Finder into the list with programs but after clicking twice, nothing seems to happen. The documentation that comes with the files is limited. How should I use this? After starting the program, what should I be seeing or does starting mean that a function becomes available? Thank you for your support.

Kind Regards,

HH007

Hi,

Had the same prob i think...take the sample scripts out of the folder "Sample Scripts" and put them in the sane directory as oscibot. then restart oscibot. Should see something then....i hope^^

Guido

LugNut
01-20-2014, 11:29 AM
Hi,

This is frkn very frustrating!!

I am trying to send a midi message..mod wheel on my motif...to osci bot and then have osc get the selected tracks id# and then spit it out my bomes midi port as any midi message whose value is the selected tracks id #.

Heres what i have now.......in oscobot..thx to veto.....

@input motif_in MIDI "MOTIF6-1"
@output translate_out MIDI "Bome's Midi Translator 4"

@oscmsg
(oscmatch("/track/%d/select")) && (oscparm(0,0) > 0)?
(
msg1 = 176;
msg2 = 0;
msg3 = fmt0;
midisend(translate_out);

printf("Track %d selected\n");
);


Hers what i get in oscibot.... i move of the mod wheel..and 2 middle c notes pressed...but no midi output and no log data generated.


http://stash.reaper.fm/19537/oscibot%201.gif



Another question...for me to achieve what i want to do, do i need to define an osc control surface in Reaper prefs?

This is killin me. I have spent hours trying to decipher this "developers video game"..... meaning...i just dont get it. Couldnt oscibot have some sort of basic non programmer friendly gui? Ive read and reread the sample scripts..but sorry its all greek to me.^^ Just like js. Sigh

Plz help?

Guido

LugNut
01-20-2014, 02:02 PM
Hi Guido,

firstly i'm sorry for your frustration, i think a good portion of that is my fault.
I misread your post and what you wanted to try to do (i thought you just wanted osciibot listen to track changes in REAPER and send out midi-messages related to that, which does it pretty nicely).
The language barrier is very high here on my side... :)

If i find some minutes in the next days i'll have a closer look over your script and i'll PM you with the news, i hope we can get it to work the way you want it (not so sure atm).

V


Hi Veto,

Thats very kind of you. Thanks! You dont speak Italian do u? hehe i could do a little of that.

I must say tho, that this is not for musicians..esp drummers!! I have been reading and rereading the sample script, and even the little math there is incomprehensible to me. My fault.

take your time Veto, I am sorry that i have imposed on you so much.

Thx

Guido

Jeffos
01-24-2014, 10:12 AM
not for musicians..esp drummers!! I have been reading and rereading the sample script, and even the little math there is incomprehensible to me.
LOL. I can confirm Math is not for drummers, e.g. just recently I even managed to make a dumbass mistake in applying a simple %, it was VERY embarassing!
That being said... Isn't it what drummers are supposed to do? What makes the whole difference with samplers/computers?
Introducing errors in all these maths IS the groove (so sucking at Maths is intentional but yeah... only us, drummers, can understand that :))

___

EDIT @ Veto (post below):

hummm... Sounds like math :) In this ~ music style, I'd say this is one grooves:

T0apbeC8Gz8

^^ warning: this vid might only interest drummers!

EDIT2: ...and since I'm on it, introducing more tiny math errors to make things groove, graphically/programmatically this time:

emjuqqyq_qc

^^ so code can groove too, actually :)

LugNut
01-25-2014, 08:35 AM
Wow jeffos and veto,

I looked at that first video and at veto's...holy crap...been playing drums professionally for over 40 years..jeez am I old....and those are some killer chops! Not a lot of math "errors" tho..^^ To my pedestrian ears.heheh
Almost gave me that" I'm gonna quit playing"feelin I got when I use to watch Billy Cobham live. I try to avoid that at all costs!^^

To really tell u how sheltered I have been, I never realized that guys were playing those jungle beats..thought it was all skillful programming...lol. Dam!

Man I gotta get out more often. Thx

Guido

EcBaPr
01-28-2014, 02:07 AM
if anyone is skilled with scripting i was wondering if they could write me a script for oscii-bot ?

I have an RME UFX interface and i want a midi CC to be able to switch the FX in totalmix (RME mixer software) on and off.. the OSC command to do this is /mainMuteFx

id like a midi CC to act as a switch for this somehow.. Can anyone create this ? I look at the scripts and im fairly lost on how to decipher them..

I would be looking to use the UFX midi port with a "loopback" cable rather than installing a virtual midi port.. So i was thinking

Reaper (midi output UFX hardware) --> (midi input UFX hardware) oscii-bot --> (OSC 127.0.0.1:8000) Totalmix FX

Tronic
02-16-2014, 11:44 PM
Why it does not support the sysex?

Banned
03-26-2014, 10:50 AM
Finally got around to playing with this a bit tonight. :)

One small thing that has been bothering me for at least one and a half cups of coffee: I kept getting this error message:
Warning: line '@input OSCfromREAPER OSC "192.168.1.2:9000”' (and possibly more)' are not in valid section and may be ignored
As it turns out, the culprit were the 'fancy' quote marks at the end, which somehow got into my test script. :p So, if you see this error, watch out for this one, and make sure to use ugly straight quote characters. :)

The next thing bothering me, was that OSCII-bot didn't seem to see any of my MIDI devices (I'm on OS X, btw). While, for example, my Behringer BCR-2000 is named "BEHRINGER - BCR2000 - Port 1" in REAPER, making OSCII-bot look for "BEHRINGER" or "BCR2000" didn't work. As it turns out, what *did* work, was using "Port 1". (I got a clue from looking at the names of MIDI devices in Snoize's MIDI Monitor app, which showed only the last part of some device names.)

So, after two cups of coffee, I got Jeffos' MIDI to OSC conversion script working for OSCII-bot v0.2 on my Mac. Here is my adapted version: MIDI2OSC-II (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/MIDI2OSC-II.txt.zip). This took just a few trivial edits, but hopefully it will be useful for some others who'd like to get started hacking with this. For convenience, I combined Jeffos' script with Justin's notes for general OSCII-bot usage. Much thanks to Justin and Jeffos - the MIDI parsing example is *very* useful! :)

I'm thinking it would be *really* nice to have more sophisticated MIDI parsing functionality built into OSCII-bot itself, btw - much like it would be an awesome addition to JS. It's not much fun having to do all the boilerplate stuff of composing different types of MIDI messages manually. I'd love to see some more specific commands like sendmidicc(device_index, controller_number, control_value) or sendmidinrpn(device_index, nrpn_number, control_value), to make scripting (much) less tedious and difficult (= more fun).

Off for a third cup, trying to make a companion OSC2MIDI script doing the reverse thing, so we have a generic bidirectional conversion utility between OSC <--> MIDI. I already have a tiny bit of test code working, yay! :)

Jeffos
03-26-2014, 04:40 PM
Like. Thanks for the update/port Banned!

Banned
03-27-2014, 04:59 PM
Like. Thanks for the update/port Banned!
You're very welcome. :) I have already used your script to create workarounds for two different issues where REAPER have hardware sending 'problematic' NRPNs (see here (http://forum.cockos.com/showpost.php?p=1334160&postcount=16) and here (http://forum.cockos.com/showpost.php?p=1334199&postcount=24)). Without it, I probably wouldn't even have tried to do that using OSCII-bot. So a big thanks to yourself again! :)

Btw, especially when converting MIDI input to MIDI output, it seems useful to have *two* sets of msg1, msg2, msg3 'special' vars in OSCII-bot, so you could use one set for parsing MIDI input, and the other for constructing MIDI output. Now, whenever you construct a MIDI message, you lose the last incoming message, so you'd have to store its values manually, copying back and forth. So how about adding something like msg1out, msg2out, msg3out? Does that make sense?

Banned
04-16-2014, 08:27 AM
But i can only get it to work from track 1-8, probably only a config thing.
[...] values equivalent to the selected track number (currently only between 1-8, has something to do with the Track Bank i feel)
Yes, probably. In the .ReaperOSC configuration file you use (*not* the Default.ReaperOSC file !!!), change the number of tracks that make up a 'bank':
DEVICE_TRACK_COUNT 8
... to something like:
DEVICE_TRACK_COUNT 1024
(or more, if you're that kind of guy. ;))
I was wrong, string to int conversion is not needed. [...]
Hmm, the workaround you use (looking at the 'binary' message patterns) sort of works, but not in corner cases (e.g. with multiple selected tracks, unselecting the last selected track, it does not show the last selected track anymore...). I figure it would needs something like a stack to remember the order in which tracks have been selected to make it bug-proof.

But, in any case, I still would like to know how to get an integer value from a numeric parameter value sent as a string... because that's also what I want to do in OSCII-bot (v0.2) scripts, but I can't seem to figure out how to do so.

As with LugNut/Veto's example above, the more general issue is that REAPER's OSC Console Surface feature outputs some important *numeric* values as *strings*: e.g. last selected track number, track bank number, parameter bank number, last touched effect track number, last touched effect slot number. (Afaik we're not able to get these numbers as int (or float) values directly. This seems to be by design; I would suppose it is to accommodate displaying the values in e.g. OSC control apps for touch screen devices. Perhaps I should also request some enhancements to the OSC Control Surface implementation, but I guess that's a separate issue...)

Can anyone show some simple example code for OSCII-bot that extracts an int value from a string (which contains only that value), sent as parameter of an OSC message by REAPER? For example, for this action description / pattern (as in Default.ReaperOSC):
TRACK_NUMBER s/track/number/str
There are some comments in Justin's sample_script.txt example (included in OSCII-bot v0.2 download) which seem relevant:
@oscmsg
// oscparm(x,v) will get parameter value x, setting v to $'f', $'i', $'s', or 0 if invalid, etc. if $'s', you can get individual chars from the string using ((str_offs<<16) + parm_idx)
... which seems to be what I need, but I can't seem to figure out how to actually use this to extract an int value from a parameter which is (formatted as) a string. :( Can anyone give a little demonstration?

Btw:
[...] in pre9 you can now embed/extract raw (and optionally big-endian) ints/shorts/floats/doubles as floats as well... [...]
I guess OSCII-bot does not have something like this (yet)?

Banned
04-17-2014, 06:17 PM
@oscmsg
// oscparm(x,v) will get parameter value x, setting v to $'f', $'i', $'s', or 0 if invalid, etc. if $'s', you can get individual chars from the string using ((str_offs<<16) + parm_idx)

Ok, I figured some of this string stuff out... and now have a little script that can be used to monitor the OSC output from REAPER, which is quite cool for debugging:

///////////////////////////////////////////////////////////////////////////////
// ReaperOSC-Log.txt
// (by Banned)
// v0.1
// script for OSCII-bot v0.2
// For logging the output of an 'OSC Control Surface' configuration from REAPER
///////////////////////////////////////////////////////////////////////////////

// Use an OSC Control Surface configuration in REAPER which is
// configured to *send* OSC messages to this network address/port:
@input localhost OSC "localhost:9000" // localhost = 127.0.0.1 (IPv4)

@oscmsg
oscmatch("*") ? (
fmt0 = oscstr;
printf("\n[OSC output from REAPER] %s");

x = 0; // reset: parameter value number
v = 0; // reset: parameter value type
while(
// oscparm(x,v) will get parameter value x, setting v to $'f', $'i', $'s', or 0 if invalid, etc.
fmt0 = oscparm(x,v);

x && v ? printf(", "); // when multiple values are received, add a comma between the values

v == $'f' ? printf(" [f] %f"); // $'f' = 102 (ascii) = float type parameter value

v == $'i' ? printf(" [i] %d"); // $'i' = 105 (ascii) = int type parameter value

// you would expect that this one-liner would work, too; but unfortunately, it does not... :(
// v == $'s' ? printf(" [s] %s"); // $'s' = 115 (ascii) = string type parameter value

// ... so we have to get the characters in the string one by one :(
v == $'s' ? (
printf(" [s] "); // $'s' = 115 (ascii) = string type parameter value

// if $'s', you can get individual chars from the string using ((str_offs<<16) + parm_idx)
str_offs = 0; // reset offset to start at first character in string
oscparm_val_str = ""; // reset: create empty string to copy in characters one by one
while(
fmt0 = oscparm((str_offs<<16) + x, s); // get an individual character from the string
// fmt0 ? printf("%c"); // print string, one ascii character at a time
fmt0 ? str_setlen(oscparm_val_str, (strlen(oscparm_val_str)+1)); // increase string length by one character
str_setchar(oscparm_val_str, str_offs, fmt0); // copy another character into string
str_offs += 1; // increment offset: move to next character in string
fmt0; // return character (0 = string termination)
);

fmt0 = oscparm_val_str;
printf("%s"); // now we finally have the entire string, print it

// THIS PART DOES NOT WORK !?!
// if the string contains an integer numeric value, print it
// matchi("*%d*", oscparm_val_str) ? printf("\n==> parameter value is formatted as string, but contains a numeric value: %d");
);

x += 1; // next parameter value
v; // return parameter value type (0 = invalid, last parameter value reached on previous loop cycle already)
);
);

However, I'm still stuck at the end: I'm failing to get an int (or float) value from the string using matchi(), see line 54 (commented out). This now only gives me a single digit, the last one found in the string. I would have expected that I can get integer numbers of multiple digits into the fmt0 variable like this too, though (since that's how it seems to work with oscmatch(), which aliases to matchi(parm, oscparm). Can anyone help out and tell me what I'm missing here?

(Also, any other suggestions for improvements are very welcome!)

Banned
04-18-2014, 11:09 AM
Ok, I think I finally got it, much thanks to ijijn's hint here (http://forum.cockos.com/showthread.php?p=1293113#post1293113). :)

Here (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/OSC-input-logger.txt.zip)'s what I did (the commented out part between /* and */ now does what I wanted to achieve):
///////////////////////////////////////////////////////////////////////////////
// OSC-input-logger.txt
// (by Banned)
// v0.2
// script for OSCII-bot v0.2
///////////////////////////////////////////////////////////////////////////////

// For logging the output of an 'OSC Control Surface' configuration from REAPER,
// make sure that it sends OSC messages to the network address/port defined here:
@input localhost OSC "localhost:9000" // localhost = 127.0.0.1 (IPv4)

@oscmsg
oscmatch("*") ? (
fmt0 = oscstr;
printf("\n[OSC input] %s"); // print OSC message address (without parameters; see below)

x = 0; // reset: parameter value number
v = 0; // reset: parameter value type
while(
// oscparm(x,v) will get parameter value x, setting v to $'f', $'i', $'s', or 0 if invalid, etc.
fmt0 = oscparm(x,v);

x && v ? printf(", "); // when multiple values are received, add a comma between the values

v == $'f' ? printf(" [f] %f"); // $'f' = 102 (ascii) = float type parameter value

v == $'i' ? printf(" [i] %d"); // $'i' = 105 (ascii) = int type parameter value

// you would expect that this one-liner would work, too; but unfortunately, it does not... :(
// v == $'s' ? printf(" [s] %s"); // $'s' = 115 (ascii) = string type parameter value
// ... so we have to get the characters in the string one by one :(
v == $'s' ? (
printf(" [s]"); // $'s' = 115 (ascii) = string type parameter value

// if $'s', you can get individual chars from the string using ((str_offs<<16) + parm_idx)
str_offs = 0; // reset offset to start at first character in string
strcpy(oscparm_val_str, ""); // reset: create empty string to copy in characters one by one
//oscparm_val_str = ""; // reset: create empty string to copy in characters one by one
while(
fmt0 = oscparm((str_offs<<16) + x, s); // get an individual character from the string
// fmt0 ? printf("%c"); // print string, one ascii character at a time
fmt0 ? str_setlen(oscparm_val_str, str_offs+1); // increase string length by one character, padding with space
str_setchar(oscparm_val_str, str_offs, fmt0); // copy another character into string
str_offs += 1; // increment offset: move to next character in string
fmt0; // return character (0 = string termination)
);

fmt0 = oscparm_val_str;
strlen(oscparm_val_str) ? printf(" %s"); // now we finally have the entire string, print it (if its length is not 0)
/*
// THIS PART DOES NOT QUITE WORK AS EXPECTED...
// if the string contains a numeric value, print it (NB: this misses numbers preceded by '.' in the string; e.g. track name is "Instr. 15")
// THIS GIVES THE USER STRING SLOT NUMBER :(
// matchi("*+f*", oscparm_val_str) ? printf("\n==> parameter value is formatted as string, but contains a numeric value: %f\n");
// THIS MISSES THE SIGN FOR NEGATIVE VALUES :( -- but it's good enough for unsigned values
// matchi("*?%f*?", oscparm_val_str) ? printf("\n==> parameter value is formatted as string, but contains a numeric value: %f\n");

matchi("*?-*?%f*?", oscparm_val_str) ? ( // first, try to match for a negative value (i.e. directly preceded with '-' character)
fmt0 *= -1; // apply negative sign
printf("\n==> parameter value is formatted as string, but contains a numeric value: %f");
) : ( // else, just try to match a value
matchi("*?%f*?", oscparm_val_str) ? printf("\n==> parameter value is formatted as string, but contains a numeric value: %f\n");
);
*/ );

x += 1; // next parameter value
v; // return parameter value type (0 = invalid, last parameter value reached on previous loop cycle already)
);
);

Justin
04-22-2014, 07:49 AM
OSCII-bot 0.3 is up, with all of the modernized string support from JSFX. It also has mutable literal strings (unlike JSFX), and some other goodies that ended up in ReaScript/EEL, such as eval() support:


#foo = "var = ";
#foo += "32";
eval(#foo); // var = 32


Also included is tcp_connect(), gfx_init(), etc. I need to make OSCII-bot generate documentation too... Maybe for 0.31.

Edit: here's some documentation: http://www-dev.cockos.com/oscii-bot/oscii-bot-doc.html (updated with string info)

Banned
04-22-2014, 12:49 PM
OSCII-bot 0.3 is up, with all of the modernized string support from JSFX. It also has mutable literal strings (unlike JSFX), and some other goodies that ended up in ReaScript/EEL, such as eval() support:


#foo = "var = ";
#foo += "32";
eval(#foo); // var = 32


Also included is tcp_connect(), gfx_init(), etc. I need to make OSCII-bot generate documentation too... Maybe for 0.31.

Edit: here's some documentation: http://www-dev.cockos.com/oscii-bot/oscii-bot-doc.html (updated with string info)
Oh, some cool stuff there! Thanks!! :)

I just made some string related functions, but I can now probably throw them out again. :D

Adding the ability to create custom GUIs from OSCII-bot scripts is excellent; I was going to suggest that - and not only because console logging can be pretty harsh on the CPU. :) Pretty cool demo script showing I/O there, too (although not quite readable, hehe). Will definitely need to dive deeper into that stuff...

Would it perhaps make sense to add something like the @slider stuff from JS's generic UI, too? That may be an easier (although less flexible, of course) approach to adding some visual feedback and/or control to the user.

The OMNI snooping thing looks quite useful, too.

A little suggestion: when pressing the escape key, OSCII-bot quits (at least, on my Mac it does). Imho it should be slightly more persistent.

Banned
05-07-2014, 10:04 AM
I just made some string related functions, but I can now probably throw them out again. :D
Actually, good thing I didn't, as I still very much need them. I did rewrite them a bit using the new features in v0.3, though, while getting a bit more comfortable with the syntax.
Adding the ability to create custom GUIs from OSCII-bot scripts is excellent; I was going to suggest that - and not only because console logging can be pretty harsh on the CPU. :) Pretty cool demo script showing I/O there, too (although not quite readable, hehe). Will definitely need to dive deeper into that stuff...
I have been playing with the "show-io.txt" demo script a bit, it was quite useful to learn a bit about the gfx* features. :)

While this was mainly an exercise just for fun, I have also adapted it a bit, hopefully enhancing its usefulness for other purposes than simple demonstration (= profit!). In doing so, I have removed a bit (but not all!) of the fun graphics stuff - so it is definitely not intended as a replacement for it. Check out my MonitorMIDI+OSC-IO.txt script here (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/MonitorMIDI%2BOSC-IO.txt.zip).

The main things that I thought made sense to add, were:

- (Most importantly): display not only the address of OSC messages, but also their parameter(s) value(s) and type(s);

- Creating some user defined functions for getting parameter values as strings (to help with the above), which seems to be quite fundamental to parsing OSC messages;

- An adapted layout, with different message types on separate 'lines', which seems more suitable for visualizing MIDI to OSC / OSC to MIDI conversion; the line for MIDI input is displayed at the top, followed by OSC output, then OSC input, and finally MIDI output. This way you can more easily see both what comes in and what goes out, both for MIDI and OSC.

- Color coding - just because it's awesome. Things were getting a bit too much old school monochrome terminal. ;)

- When receiving many messages in a short time span (e.g. on action to 'refresh' all console surfaces), the messages were pasted on top of previous ones, which frustrated readability. As a quick and dirty solution (which works ok in most cases, less so for some larger fonts / font sizes), a filled black rectangle is now drawn over a line before drawing a new message on the same line. However, since it also seems useful to somehow be able to see that there are multiple messages arriving in a short time, I chose to make it slightly transparent.

- I added a timer/counter to the fade-to-black effect, so the speed can be tweaked (i.e. slowed down), and enhanced it with a bit of blurring: frustrating readability just enough to be fun, while still being somewhat useful -- but sorry, the rotation and resize blitting just *had* to go... ;)
The OMNI snooping thing looks quite useful, too.
Although indeed *very* useful, the downside to this approach seems to be that it seems to be impossible to see which device any specific message is going to / coming from (please correct me if I'm wrong!).

For example, since I wanted to display MIDI messages in a more human readable format (e.g. "[MIDI input] Channel 5 CC#7 value: 100") than raw bytes (which of course do not provide much additional information, since we already have OSCII-bot showing those in the bottom left corner), I initially intended to integrate the sophisticated 14 bit CC# pairs / (N)RPN message parsing from JeffOS' MIDI2OSC script into this one.

But then I soon realised that in order to reliably parse such messages consisting of multiple parts, we would need to be able to discriminate between originating devices. For example, when receiving value almost simultaneously for channel 1, CC# 7 from one device and channel 1, CC# 39 from another device, the script (in hi-res mode) could (incorrectly) interpret them as a single pair of MSB/LSB CC# messages to make up one 14-bit value, because we can't tell which device was the source of the individual messages.
A little suggestion: when pressing the escape key, OSCII-bot quits (at least, on my Mac it does). Imho it should be slightly more persistent.
Somewhat related: conversely, OSCII-bot does *not* quit when a GUI window created by a script has focus. :) I guess it would make sense to always pass computer keyboard commands like CMD+Q (Mac) / ALT+F4 (Windows) on to the main app window (another one: CMD+` does work to cycle from the main window to the first script window, but then stops working, so you can't cycle through all of the application windows). Also, GUI windows created by a script can't be closed or minimized using the usual OS-specific keyboard shortcuts. Shouldn't they?

---

Some remarks about the current implementation/documentation:

- Is gfx_update() perhaps called *automatically* in the @timer section? The documentation (http://www-dev.cockos.com/oscii-bot/oscii-bot-doc.html) mentions: "Once the graphics window is open, gfx_update() should be called periodically." However, the graphics functions seem to work just fine without doing so, and calling gfx_update() in fact results in a syntax/compile error. :-/

- I can't seem to get gfx_getchar() to work either. Am I missing anything, or is it perhaps bugged / not yet implemented? For example, this code (placed in the @timer section, or anywhere else) seems to do absolutely nothing (regardless of which window has focus):
char = gfx_getchar() ? printf("%c", char);

- While this hardly surprising, it isn't quite self-evident that the graphics coordinate system starts at the top of the window with x = 0, and y = 0 at the left. (I pretty much typed all the code I thought I needed for drawing VU meters before testing to see if it actually worked, only to find out that it worked *almost perfectly: it was upside down. :D) I figure that deserves to be mentioned somewhere.

- The reference for gfx_setfont() mentions: "After calling gfx_setfont(), gfx_texth may be updated to reflect the new average line height." Wouldn't it be more useful to have something like gfx_texth to reflect the *maximum* line height? (Or is there perhaps another easy way to find that out?)

- Imho it would be pretty useful if we could get the window dimensions, and set the GUI window position in relation to the screen. Currently, when creating multiple GUI windows, they always seem overlap on (re)loading scripts.

- I managed to crash or hang OSCII-bot a couple of times on loading scripts with invalid syntax. Will email in some sample code and (OS X) crash reports to support later.

Banned
05-07-2014, 10:26 AM
Here's another script for OSCII-bot v0.3, which may be useful for demonstration (of how OSC message parsing, OSC to MIDI conversion, and custom GUI drawing can be done using OSCII-bot), or perhaps even actual use (e.g. if you have a spare screen at the other end of your recording room, something like this could be useful): VUmeters.txt (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/VUmeters.txt.zip). The .zip download also includes a .ReaperOSC configuration file for REAPER's OSC Control Surface feature, optimised to use with this script (the Default configuration should also work just fine, though).

As the name suggests, this script draws a bunch of VU meters on the screen (with track names / numbers) and absolute or musical time as a bonus. The number of meters can be configured, and the window allows resizing so you can make them any size you want. The meter color goes from green to yellow to red over certain levels - but can also be configured to use trippy rainbow colors instead. :)

The script can also send MIDI CC# out, so if you have a MIDI controller with a bunch of LEDs or other visual value indicators, you can use it as a VU meter strip as well (tested on my BCR-2000, but should be able to work with most MIDI controllers; not yet optimized though, so be aware that it may sends a *lot* of MIDI data!). Or maybe control a light show with it...

Banned
05-07-2014, 10:30 AM
if anyone is skilled with scripting i was wondering if they could write me a script for oscii-bot ?
Here's a little script (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/CCtoTotalmixFX.txt.zip) that should - hopefully - do what you want. See the comments inside for some hints regarding setup and configuration, I hope it makes enough sense to figure out what to do. Of course just ask if anything is unclear, doesn't work, etc. Cheers!

Banned
05-07-2014, 11:23 AM
And yet another script that may be useful for demonstration and/or actual use: MIDItoVKB.txt (https://dl.dropboxusercontent.com/u/876736/OSCII-bot/MIDItoVKB.zip). This .zip download also includes a .ReaperOSC configuration file for REAPER's OSC Control Surface feature, optimised to use with this script (again, the Default configuration should also work just fine).

This script takes MIDI from the configured input(s), and sends it to REAPER as OSC messages, where it arrives as MIDI again at the Virtual Keyboard. This e.g. allows you to send MIDI from one system to another system running REAPER over the local network. I'd figure this would also be a good starting point for a script to process MIDI before hitting REAPER (e.g. change MIDI channel, invert note velocity, convert velocity to CC#, etc.). Perhaps useful for porting some JS MIDI effects to the world outside of REAPER ( / ReaJS, which unfortunately doesn't exist on OS X, afaik).

Justin
05-07-2014, 12:28 PM
- Is gfx_update() perhaps called *automatically* in the @timer section? The documentation (http://www-dev.cockos.com/oscii-bot/oscii-bot-doc.html) mentions: "Once the graphics window is open, gfx_update() should be called periodically." However, the graphics functions seem to work just fine without doing so, and calling gfx_update() in fact results in a syntax/compile error. :-/


Sorry, yes, the docs are wrong (gfx_update() is used by some other EEL/gfx related things, I should remove it from the OSCII-bot docs).

- I can't seem to get gfx_getchar() to work either. Am I missing anything, or is it perhaps bugged / not yet implemented? For example, this code (placed in the @timer section, or anywhere else) seems to do absolutely nothing (regardless of which window has focus):
char = gfx_getchar() ? printf("%c", char);



Try this:
(char = gfx_getchar()) > 0 ? printf("%c", char);
(your code was parsed as: char = (gfx_getchar() ? printf("%c", char)); which is not what you want)


- While this hardly surprising, it isn't quite self-evident that the graphics coordinate system starts at the top of the window with x = 0, and y = 0 at the left. (I pretty much typed all the code I thought I needed for drawing VU meters before testing to see if it actually worked, only to find out that it worked *almost perfectly: it was upside down. :D) I figure that deserves to be mentioned somewhere.

This is standard for most Windows and Linux systems, but I guess OS X is the exception...

- The reference for gfx_setfont() mentions: "After calling gfx_setfont(), gfx_texth may be updated to reflect the new average line height." Wouldn't it be more useful to have something like gfx_texth to reflect the *maximum* line height? (Or is there perhaps another easy way to find that out?)

Or it should just be "the line height".


- I managed to crash or hang OSCII-bot a couple of times on loading scripts with invalid syntax. Will email in some sample code and (OS X) crash reports to support later.

I look forward to these!

Banned
05-07-2014, 12:57 PM
Try this:
(char = gfx_getchar()) > 0 ? printf("%c", char);
(your code was parsed as: char = (gfx_getchar() ? printf("%c", char)); which is not what you want)
Oh, I see.. I was expecting it to be something simple like that. I'm such a noob. :o Thanks, that code works as expected. :)

The next question, then, would be if it is somehow possible to capture keyboard input even when a script window does not have focus? For example, when using OSCII-bot in conjunction with REAPER, I'm assuming the user would typically have focus on a window belonging to REAPER, but may want to use some keys to control an OSCII-bot script. Since I am guessing this is not currently possible, please consider this as another FR.
This is standard for most Windows and Linux systems, but I guess OS X is the exception...
Yeah - Apple either doesn't really know what they want, or came around, apparently: iOS does it one way, OS X another. I guess I must have been doing OS X the last time I was using x/y coordinates. :D

Celphor
09-16-2014, 09:39 AM
Hi,

first of all: What a great and nifty tool! That what was I am looking for. Thank you very much Justin!

I have some questions:

1) When a device is connected after startup (or reconnected), how can I manage to initialize it correctly? I don't see a way to place a callback or hook function.

2) Can the program be started in background/deamon mode? If I close the window it will go to background. Is there a command line switch to achive this?

3) Can the gfx window be frame/borderless? I'm thinking of a function like the volume bar on a TV that's popping up shortly when making a change.

Thanks in advance and happy hacking OSC ;-)

Tronic
09-21-2014, 12:55 AM
Sorry to ask this, but no future update with support for midi sysex messages?

Celphor
09-28-2014, 01:11 AM
I need this too. I will take a look if I can add support for it

dixo
09-28-2014, 01:56 PM
I just started dabbling with oscii-bot. I am interested in getting a BCR2000 to work as a dedicated plugin parameter interface, with working parameter feedback. I envision the BCR to have a static layout with controls for my favorite plugins (e.g. EQ, Compressor, etc), and it should control the plugins of the last touched/selected track.

Using the excellent monitor script by Banned I can see what messages Reaper sends out to the control surface, and I notice that Reaper does not automatically send out the values of the plugin parameters when a different track is selected.
This means that the control surface will not synchronize its indicators (e.g. the LED rings on the BCR) and its current values to the values of the plugin until the knobs are actually turned, causing the values to jump to whatever the control surface had stored for that value.

How is this supposed to work? Should the OB script explicitly query all relevant plugin parameters when a new track is selected if that is even possible? Or is there a smarter/simpler way to get Reaper so send the current parameter values?

Maybe I am looking at this the wrong way, I have only just started looking at using OSC in Reaper.
Any help is much appreciated.

Banned
09-29-2014, 04:02 AM
How is this supposed to work? Should the OB script explicitly query all relevant plugin parameters when a new track is selected if that is even possible? Or is there a smarter/simpler way to get Reaper so send the current parameter values?.
Hi dixo,

What you describe is (more or less) possible (I'm occasionally using a BCR-2000 like that myself); the behavior depends on what configuration you're using for the OSC Control Surface setup. Note that you are now dealing with *multiple* selections: one for REAPER, and one for the control surface. Flexible as this may be, it sounds like you would want to change the "DEVICE_FOLLOWS" setting to "REAPER", so one follws the other - perhaps that makes most sense to you, at leat initially. Read the comments in the Default.ReaperOSC file for more info and related settings.

Glad to hear the logging script is useful to you, btw. :) But, as a disclaimer: I'm not 100% certain one can say that REAPER isn't sending something only because the script fails to show it. ;)

dixo
09-29-2014, 05:46 AM
Hi Bannned,

Thanks for your reply. I am currently studying the script you wrote for the Peavey StudioMix, that teaches me a lot about what can be done with oscii-bot.


Note that you are now dealing with *multiple* selections: one for REAPER, and one for the control surface. Flexible as this may be, it sounds like you would want to change the "DEVICE_FOLLOWS" setting to "REAPER", so one follws the other - perhaps that makes most sense to you, at leat initially. Read the comments in the Default.ReaperOSC file for more info and related settings.


I am not completely sure that I fully understand what you are saying here.
The setup that I hope to create is as follows:
- I will use a Icon Qcon Pro as my main control surface. It has the motorized faders, transport controls, jog, scribble strips etc. Initially I will probably try to get it working with either the native mode (the Qcon has a Reaper mode in the latest firmwares!) or the Klinke MCU dll but maybe one day I'll try to write an oscii-bot script like you did for the StudioMix to get greater control over the behaviour.
- The BCR2000 will be dedicated to control my most used plugins (Eq, some synths, compressors, reverb, etc). When I select a track in Reaper, or by pressing the select button on the Qcon, the BCR should show the plugin parameter settings for that track, and control them. This would reduce the navigation between various plugins: all important parameters of my favourite ones are available at the same time. It also allows me to label the knob assignments using tape or paper overlays, the assignment is static.
The mapping of MIDI CC's from the BCR to the actual FX parameter OSC strings (and vice versa) should be handled by the script. No clue yet how complex that would be, and how static or dynamic that mapping actually is (e.g. not sure if the order of my favourite plugins would always be the same for all my tracks...).
- Eventually I may want to add a tablet with TouchOSC or similar to add display features and maybe interface to other plugins that I use less often (e.g. exotic VSTi synths).

Does this make sense? And do you see fundamental problems implementing it?


Glad to hear the logging script is useful to you, btw. :) But, as a disclaimer: I'm not 100% certain one can say that REAPER isn't sending something only because the script fails to show it. ;)

If the logging script does not catch those events, wouldn't that mean that any osc-to-midi script I would write would miss them too?

Again, thanks for your reply and all the example code you have already written, that really helps a lot!

Regards,
Dixo

dixo
09-29-2014, 08:05 AM
Note that you are now dealing with *multiple* selections: one for REAPER, and one for the control surface. Flexible as this may be, it sounds like you would want to change the "DEVICE_FOLLOWS" setting to "REAPER", so one follws the other - perhaps that makes most sense to you, at leat initially. Read the comments in the Default.ReaperOSC file for more info and related settings.


Thinking about this some more I think I may start to see what you are getting at. I was under the impression that Reaper always was the central authority on track selections, and that a control surface could send a message to ask Reaper to select a track, which Reaper would then communicate back to all control surfaces. So, Reaper being the central entity controlled and reflected by all control surfaces. Are you saying that it works differently, and that Reaper and control surfaces can have an independent and thus different notion of track selection?
It seems that there are still a lot of concepts that I can't wrap my head around yet...

Regards,
Dixo

Celphor
09-29-2014, 08:07 AM
Hi,

you have to check these variables in the selected OSC property file and set it to the right amount your controller supports:

DEVICE_FX_COUNT 8
DEVICE_FX_PARAM_COUNT 16
DEVICE_FX_INST_PARAM_COUNT 16

You should see messages in the log starting with fx or fxinst for the selected track or track/@/fx(inst) if you use bank switching

dixo
09-29-2014, 09:12 AM
Ok, so what seem to I understand so far is that Reaper can communicate simultaneously with multiple control surfaces that all have their own bank sizes (for tracks, effects, fx parameters etc.). These devices can send bank select commands to select a different group of tracks etc. Reaper then maps the track/fx/param number within that bank to its own internal notion, independently for each surface. So, track 9 in Reaper can be track 1, bank 2 on a 8-fader surface and track 3, bank 2 on a 6-fader surface and Reaper will keep track of the current mapping for each surface. Is that right, or am I completely mistaken now?

When selecting a track in Reaper that is not in the current bank of the device, will Reaper suppress any events for that track to the device, or will it send the proper bank select to select the track on the device? Or is this controlled by the "Reaper follows device/Device follows Reaper" setting?
It looks like I need to do some experiments... :)

My apologies for all the questions, there is so much I don't understand and so much to learn. Thanks for all the information!

Regards,
Dixo

Banned
09-29-2014, 11:12 AM
Ok, so what seem to I understand so far [...]. Is that right, or am I completely mistaken now?

[...]
Exactly right! :) Seems like you're wrapping your head around some important concepts already, just keep going. :)
It looks like I need to do some experiments... :)

My apologies for all the questions, there is so much I don't understand and so much to learn. Thanks for all the information!
Feel free to ask, but indeed, at this point I'd recommend - more than anything else - to just do some experimenting while (re-)reading the comments in the default config file.

Banned
09-29-2014, 11:24 AM
I am currently studying the script you wrote for the Peavey StudioMix, that teaches me a lot about what can be done with oscii-bot.
Cool. :) Similarly, learning what OSCII-bot can do was my excuse for writing it, heh. :) Note that some parts of it are specificly intended for testing on a BCR-2000, as that was what I use(d) or testing it - as I don't even have a StudioMix myself. I should perhaps create a similar script to demonstrate a basic setup that people can customize a bit, specifically for the BCR-2000...

Celphor
10-01-2014, 01:12 AM
So, track 9 in Reaper can be track 1, bank 2 on a 8-fader surface and track 3, bank 2 on a 6-fader surface and Reaper will keep track of the current mapping for each surface. Is that right, or am I completely mistaken now?
Dixo

Absolutly correct.


When selecting a track in Reaper that is not in the current bank of the device, will Reaper suppress any events for that track to the device, or will it send the proper bank select to select the track on the device?
Dixo

No. The data for the current track is always sent with no regard if it's in the selected bank or not. This data starts with track/... only while the data for the tracks in the bank start with track/<tracknumber>/...

You have to select the bank via an OSC-send from OSCII-bot.

Celphor
10-01-2014, 01:24 AM
As discussed earlier in this thread, sysex support is urgently required to make OSCII-bot the perfect tool.

I extended it for myself to allow sysex sending. This is an easy task when using a string.

To receive sysex I need a special section (like @sysex). Easy too. What I didn't find out is the how to map data from C++ to the EEL memory.
I could put the data in a string, but that's not working, because strings are NULL-terminated in EEL.

Does anybody now how to achieve this? :

@sysex

// Data is stored in memory at sysexmsg and length in sysexmsg_length
// Access data

sysexmsg[0] == 0xF0 ? (
... bla bla

);

--- and ---

@init

buf = 23;
buf[0] = 0xF0;
..
buf[n] = 0xF7;

sendsysex(buf, n);


--

A function like this exists in JSFX, so Justin, if you won't copy it yourself, could you be so kind and hand over a sniplet ?

Thanks in advance

dixo
10-02-2014, 03:39 AM
No. The data for the current track is always sent with no regard if it's in the selected bank or not. This data starts with track/... only while the data for the tracks in the bank start with track/<tracknumber>/...

You have to select the bank via an OSC-send from OSCII-bot.

Ah, I see. Thanks! In the meantime I have been experimenting and reading example code and I think I am starting to understand how Reaper is communicating with control surfaces using OSC.
This oscii-bot is a fantastic tool and I am looking forward to make my BCR do exactly what I want. Could take a while though... ;)

Celphor
10-02-2014, 07:26 AM
Ok, I found out how to access the memory in EEL2 internally.

EEL_F NSEEL_CGEN_CALL scriptInstance::_testmethod(void *opaque, EEL_F *buf, EEL_F *len) {
scriptInstance *_this = (scriptInstance*)opaque;
if (_this)
{
unsigned int addr = *buf;
EEL_F **blocks = ((compileContext*)_this->m_vm)->ram_state.blocks;
unsigned int whichblock = addr / NSEEL_RAM_ITEMSPERBLOCK;
unsigned int offset = addr % NSEEL_RAM_ITEMSPERBLOCK;
EEL_F *block = blocks[whichblock];
EEL_F *x = 0;
if (block) {
x = block + offset;
}

_this->DebugOutput("test buf: %x", buf);
_this->DebugOutput("test x: %f", x);
_this->DebugOutput("test *x: %f", *x);
}
return 0.0;
}

Celphor
10-05-2014, 03:11 PM
For sysex support version, see new thread ( http://forum.cockos.com/showthread.php?t=147204 )

dixo
10-08-2014, 01:49 PM
I have been experimenting a lot with various .ReaperOSC files, but keep running into stuff that does not work.
That could mean I don't understand how all of this works (most likely), or that there is something strange with Reaper OSC.

The track related stuff seems to work more or less as I expected, but I can't seem to get the FX related stuff working well.

I want my device to behave like it can only handle a single track, but multiple FX with multiple parameters at all.
Whenever I select a track I want my device to show the parameters of all the FX in that track.

So, I defined:


DEVICE_TRACK_COUNT 1
DEVICE_FX_COUNT 16
DEVICE_FX_PARAM_COUNT 32
DEVICE_FX_INST_PARAM_COUNT 32

DEVICE_TRACK_BANK_FOLLOWS MIXER
DEVICE_TRACK_FOLLOWS LAST_TOUCHED

TRACK_NAME s/track/@/name
TRACK_NUMBER s/track/@/number/str

FX_NAME s/fx/@/name

FX_PARAM_NAME s/fx/@/fxparam/@/name
FX_PARAM_VALUE s/fx/@/fxparam/@/value/str
FX_PARAM_VALUE n/fx/@/fxparam/@/value


I expected Reaper to send the names and values of all the FX and FX parameters upon track change: the new track is always outside the current bank of the device (track bank size is 1) and the FX bank has place for data from multiple FX and FX parameters.
But it doesn't work, Reaper does not send any FX parameters at all.

Can anyone explain why? How does Reaper decide when it has to send FX and FX parameter info? What am I doing wrong?

All help will be greatly appreciated!

Banned
10-09-2014, 05:34 AM
I have been experimenting a lot with various .ReaperOSC files, but keep running into stuff that does not work.
That could mean I don't understand how all of this works (most likely), or that there is something strange with Reaper OSC.

The track related stuff seems to work more or less as I expected, but I can't seem to get the FX related stuff working well.
Indeed, it's probably some misconfiguration in your end - this sort of stuff typically works just fine. However, do note that this thread is about OSCII-bot, not about REAPER's OSC capabilities. So perhaps let's move the discussion elsewhere?
I expected Reaper to send the names and values of all the FX and FX parameters upon track change: the new track is always outside the current bank of the device (track bank size is 1) and the FX bank has place for data from multiple FX and FX parameters.
But it doesn't work, Reaper does not send any FX parameters at all.

Can anyone explain why? How does Reaper decide when it has to send FX and FX parameter info? What am I doing wrong?

All help will be greatly appreciated!
Haven't replicated your setup (not in studio atm), but it seems that you have to include the track number in your message patterns - even though you only use a single track per bank - if you want the current effect selection to update when switching *tracks* (as opposed to switching *effects*).

dixo
10-09-2014, 06:41 AM
Hi Banned, you are right, sorry about that. I have created a new topic in the Reaper - Midi and other protocols section: http://forum.cockos.com/showpost.php?p=1414695&postcount=1

mertznet
11-15-2014, 01:54 PM
I am working on using OSCII bot to convert MIDI messages into OSC to control my X32 Rack mixer. I am finding that if I send a single OSCsend statement in response to a MIDI command, things work properly. If I issue more than one OSCsend in response to a single MIDI command though, the OSC command becomes a bundle and gets ignored by the X32. I have tried a number of things but haven't been able to develop a workaround.

I hope this makes sense. Any suggestions or recommendations?

Banned
11-15-2014, 02:42 PM
I am working on using OSCII bot to convert MIDI messages into OSC to control my X32 Rack mixer. I am finding that if I send a single OSCsend statement in response to a MIDI command, things work properly. If I issue more than one OSCsend in response to a single MIDI command though, the OSC command becomes a bundle and gets ignored by the X32. I have tried a number of things but haven't been able to develop a workaround.

I hope this makes sense. Any suggestions or recommendations?
When configuring an OSC output, you can (optionally) specify the maximum packet size. Perhaps try setting this to zero to prevent OSCII-bot from sending OSC messages as bundles, doing something like (adjust where appropriate):

@output OSC_to_X32 OSC "127.0.0.1:8000" 0 0

Quoted from Justin's sample script:
// @output lines:
// usage:
// @output devicenameforcode OSC "127.0.0.1:8000" [maxpacketsize] [sleepamt]
// @output devicenameforcode MIDI "substring match" [skip]

// maxpacketsize is 1024 by default, can lower or raise depending on network considerations
// sleepamt is 10 by default, sleeps for this many milliseconds after each packet. can be 0 for no sleep.

@output localhost OSC "127.0.0.1:8000"

mertznet
11-15-2014, 03:35 PM
When configuring an OSC output, you can (optionally) specify the maximum packet size. Perhaps try setting this to zero to prevent OSCII-bot from sending OSC messages as bundles, doing something like (adjust where appropriate):

@output OSC_to_X32 OSC "127.0.0.1:8000" 0 0

Quoted from Justin's sample script:

Thanks for the suggestion. Alas, I already tried that. I am not sure if there is some other code that could be sent to command OSCII bot to start a new "line". Almost like "\n" is for printing commands.

mertznet
11-15-2014, 07:28 PM
I did manage a clumsy and inelegant workaround. I found that if I put the second oscsend statement inside @timer and kept the first oscsend statement inside @midimsg I could make it work. However, I had to add a chunk of code to keep the @timer one from running right away. At least it works. It would be so much nicer to avoid the ugly workaround.

mertznet
11-16-2014, 07:21 PM
It seems the best workaround I was able to come up with is to put all OSCsend statements into the @timer section. Then set up the code so that the sends are essentially queued up and only one executes on each timer pass. This approach seems to be the most elegant method of working around the "bundle" quirk with my X32.

Justin
12-13-2014, 03:44 PM
Try using 1 for the max packet size, rather than 0, the latter may be interpreted as "use default", off the top of my head...

flipotto
04-18-2015, 03:53 PM
Hey, Ok so I downloaded and run this, I copy banned's monitorMIDI+OSC-IO.txt to appdata folder.
The program runs with a black window.
I don't know how to load different programs with this.
Nor how to get the midiosc monitor to work.
I have and osc control surface output to 127.0.0.1:9000 but nothing shows up in the monitor window, when I move a slider.

What am I doing wrong?

Banned
04-18-2015, 05:20 PM
Hey, Ok so I downloaded and run this, I copy banned's monitorMIDI+OSC-IO.txt to appdata folder.
The program runs with a black window.
I don't know how to load different programs with this.
Well, apparently, you did - that black window is entirely expected. ;)

You load different scripts simply by putting them in your scripts folder (~/Library/Application Support/OSCII-bot folder on Mac OS X, and for Windows on that AppData you mentioned, I assume).
Nor how to get the midiosc monitor to work.
I have and osc control surface output to 127.0.0.1:9000 but nothing shows up in the monitor window, when I move a slider.

What am I doing wrong?
Could be a number of things, I guess... fwiw, it still works fine here:

https://dl.dropboxusercontent.com/u/876736/OSCII-bot/MonitorMIDI%2BOSC-IO.gif

Perhaps try uncommenting line 10:
//@input osc_localhost OSC "localhost:9000" // localhost = 127.0.0.1 (IPv4)
-->
@input osc_localhost OSC "localhost:9000" // localhost = 127.0.0.1 (IPv4)

Banned
06-06-2015, 08:29 AM
Did anybody create a tool for send control from midi using oscii-bot?

midi to oscii-bot to osc to reaper to send amount? Solving the send issue of Reaper from midi.
Controlling sends/receives using MIDI is part of e.g. the (more comprehensive) script I wrote for the Peavey StudioMix. But if you're only interested in controlling sends, it should be quite easy to write a script that replicates the functionality of that Pd patch (https://dl.dropboxusercontent.com/u/876736/Reaper/OSC-MIDI-conversion.zip) which I created for this specific purpose.

https://dl.dropboxusercontent.com/u/876736/Reaper/OSC-MIDI-conversion-example.jpg

goldenarpharazon
11-12-2017, 12:09 PM
Introduces
• Bidirectional OSC support (send to OSC listens, receive from OSC sends)
• macOS version compiled with latest SDK + Xcode (should still run on 10.6 though)
• Latest WDL/EEL2 changes/fixes since 2014

Context and details in this post/thread
https://forum.cockos.com/showpost.php?p=1911521&postcount=7
V0.4 download is at
http://www-dev.cockos.com/oscii-bot/

mschnell
11-12-2017, 02:51 PM
Introduces
• Bidirectional OSC support (send to OSC listens, receive from OSC sends)
WOW !!!
That was fast !!
Just 12 hours after I found that the previous version would not work for me !

I'll test ASAP.

... Works perfectly for me.

Thanks a lot,
-Michael

mschnell
11-12-2017, 03:03 PM
Introduces
• Latest WDL/EEL2 changes/fixes since 2014
Great !
-Michael

fundorin
11-12-2017, 11:24 PM
WOW !!!
That was fast !!
Just 12 hours after I found that the previous version would not work for me
Lucky you. It was a couple of years, since previous version didn't work for me (no Sysex support). And there's still no Sysex support in the update. 😒

mschnell
11-13-2017, 03:51 AM
Introduces...

goldenarpharazon. if you are entitled to do so, you might want to enhance the “OSCII-bot code reference” website → https://www.cockos.com/oscii-bot/oscii-bot-doc.html similar to this suggestion (in case my guessing of how OSCII-bot 0.4 works is correct).

@input : specifies a device to open for input. Usage:
@input devicehandle MIDI "substring devicename match" [skip_count]

@input devicehandle OSC "1.2.3.4 : port"
>>> the IP address given denotes the interface in the system OSCII-bot runs in, the port given is the port OSCII-bot opens to listen on. Hence the sending site needs to be configured to use this address and port to send OSC messages to OSCII-bot. <<<

@input devicehandle OSC "* : port"
>>> use any IP interface in the system OSCII-bot runs in <<<

>>> if an OSC message is detected at a port defined by “@input devicehandle OSC ...”, or automatically assigned by “@output devicehandle OSC ...”, the @oscmsg event handler EEL code is executed, and oscstr and oscparm() will provide the content received, msgdev will provide the devicehandle. <<<

>>> if oscsend() is used with a devicehandle defined by “@input devicehandle OSC ...”, the OSC message will be sent to the last IP-address and port number an OSC messages has been received from via this device. This is useful to have OSCII-bot act as a server-like OSC instance, doing bidirectional communication. <<<

@input devicehandle OMNI-MIDI -- receives all MIDI received by other scripts
@input devicehandle OMNI-OSC -- receives all OSC received by other scripts
@input devicehandle OMNI-MIDI-OUTPUT -- receives all MIDI sent by other scripts
@input devicehandle OMNI-OSC-OUTPUT -- receives all OSC sent by other scripts

@output : specifies a device to open for output. Usage:
@output devicehandle OSC "host : port" [maxpacketsize (def=1024)] [sleepinMS (def=10)]
>>> the host IP address and port number define the target site to receive OSC messages sent by OSCII-bot via this device. The sending IP address for such messages will be the IP address of the interface in the system OSCII-bot runs in. The sending port number of the messages will be a random number that is chosen when OSCII-bot starts the script. <<<

>>> The port number acquired by “@output devicehandle OSC "host : port" ...“ will also be opened to listen to received OSC messages on. For incomming OSC messages to this port, the @oscmsg event handler EEL code is executed, and msgdev will provide the devicehandle. This is useful to have OSCII-bot attach to a server-like OSC instance (such as a hardware based digital mixer), doing bidirectional communication.


@output devicehandle MIDI "substring match" [skip]

Justin
11-13-2017, 02:55 PM
Just posted v0.5 with (experimental) SysEx support to http://www-dev.cockos.com/oscii-bot .. Also updated the docs on that page. It'll go to the main cockos.com soon too.

mschnell
11-13-2017, 11:26 PM
It'll go to the main cockos.com soon too.
Maybe somehow OSCIIbot could be integrated in Reaper, so that
- it's not necessary to start another executable: seamless integration of Midi and OSC based external hardware by just activating an appropriate script.
- we can use a modified version of the great IDE provided for JSFX
- scripts can be managed by ReaPack.

Supposedly this would mean to enhance ReaScript by a Midi and OSC API that can manage external communication. (I never did ReaScript: can ReaScripts be free-running - like JSFX or OSCIIbot, at all ? )

Michael (just dreaming)

goldenarpharazon
11-20-2017, 03:16 PM
•Now packaged separately for each platform and without source code (source available via git)
•Add get_device_open_time() to detect MIDI device re-opens
•Fix multiline comment parse bug

More details and download via
http://cockos.com/oscii-bot/

DarkStar
08-05-2018, 05:12 AM
Can anyone let me know how to monitor the messages between OSCII-bot and Reaper?

I saw Banned links above but they are all "404 - page not found""

_Stevie_
08-05-2018, 07:31 AM
This one?

https://forum.cockos.com/showpost.php?p=1343009&postcount=92

goldenarpharazon
08-06-2018, 02:11 AM
Can anyone let me know how to monitor the messages between OSCII-bot and Reaper?

I saw Banned links above but they are all "404 - page not found""

There are two means of monitoring in Reaper and OSCII-bot itself.
1. Use reaper's OSC monitor (the 'Listen' button on the OSC Control Surface Settings page) to check the messages are being received by Reaper, and
2. check that the OSC and Midi traffic is both seen in the OSCII-bot console log.

Beyond this try "show-io.txt" which is one of the sample scripts bundled with OSCII-bot. Banned wrote a follow-on script called "MonitorMIDI+OSC-IO.txt" but it doesn't add any more to these beyond showcasing fancier graphics.

DarkStar
08-06-2018, 02:33 AM
Thank you - I did see that post but then saw that there were some later ones; those were the ones with the defunct links

I had thought that the[Listen] button was for detecting ports / addresses, not for traffic monitoring

I have enabled Log in the OSCII-bot console but do not see anything.