AbletonOSC and get Volume

Hello,

To set volume using AbletonOSC, it's done with the OSC address /live/track/set/volume and as argument the index of the track (start from 0).

Ok so it works i can move the fader and set the volume to the second track (index 1)

Now of course i'd like to get the fader updated when moving from Ableton. For this AbletonOSC use another OSC address. (https://github.com/ideoforms/AbletonOSC)

image
image

So the answer is an array

(DEBUG, OSC) In:  { address: '/live/track/get/volume', args: [ 1, 0.4000000059604645 ] } From: 127.0.0.1:11000 

And i'm stuck... The fader does not update.

Edit (nylon) :
the funny fact that it works with a simple text widget : when moving from Ableton it updates the value.
image

Any help appreciated :slight_smile:

You can use a custom module to translate the reply message from ableton to a message that the fader can consume

module.exports = {

    oscInFilter: (data)=>{

        if (data.address === '/live/track/get/volume') {
            data.address = '/live/track/set/volume'
        }
        
        return data
    }

}

thank you for this answer but it seems it can be a bit long to "translate" all osc addresses set by AbletonOSC.

No solution without using custom module ?

And why does the text widget work and not the fader ?

abletonOSC-meets-OpenStageControl.json (8.3 KB)

Cheers

The text widget works because its address is the one ableton sends its feedback to (with "/get" instead of "/set"). You could make it work by setting the fader's address to /live/track/get/volume and use its onValue script to send to /live/track/set/volume.

Or you could set the fader's address to /live/track/set/volume and its value property to OSC{/live/track/get/volume, 0, false}

Thank you for your suggestions but does not work

Here for the second "solution"
fader-abletonOSC

I forgot the option in the OSC{} listener to ignore the preArgs (post edited). From your first posts I guess you still need to send /live/track/get/volume at a regular interval if ableton doesn't send feedback automatically.

Hello,

In french to try to clear some points :slight_smile:

Merci pour tes précisions.
Sais-tu comment peut-on permettre 2 programmes différents de loguer les messages OSC.
La librairie AbletonOSC répond sur le port 11001 par défaut ; cette valeur peut être modifiée à 4560 par exemple, valeur du port sur lequel le logiciel Sonic Pi reçoit les messages OSC. Sauf que si j'indique dans O-S-C osc-port:4560 forcément il me dit que le port est déjà utilisé.

Autre question : dans la console d'O-S-C sont logués tous les messages entrant. Peut-on via un custom module filtrer les messages entrants pour ne pas polluer l'affichage dans la console avec des messages récurrents comme /live/song/beat envoyé par AbletonOSC.

Merci pour une éventuelle réponse.

Impossible de faire écouter deux logiciels sur le même port avec le même protocole. Il faudrait que l'un des deux transmette tous les messages reçus à l'autre, ou bien ajouter un programme intermédiaire qui transfère au deux autres.

Les messages bloqués par le custom module (avec un return vide) n’apparaissent pas dans les logs (et n'atteignent pas les clients). Tu peux éventuellement penser la chose à l'envers : désactiver le mode "debug" et faire du console.log dans le custom module en choisissant ce que tu veux afficher ou non.

et fixer le port OSC entrant dans O-S-C 0 11001 et utiliser O-S-C pour traduire via un custom module tous les messages entrant sur le port 11001 (port par défaut de AbletonOSC) et les renvoyer vers le port 4560 ?

Oui, ça ressemblerait à un appel de ce genre dans la fonction oscInFilter

send('127.0.0.1', 4500, data.address, ...data.args)

ça marche bien en effet :slight_smile: On peut coloriser cette console ? A priori nop
console.log('%c Ableton est lancé ', 'background: #222; color: #bada55');

image

pourtant toi tu as réussi à coloriser les messages entrants et les sortants. Quel est le secret ?

edit : déjà évoqué Console.log colour? - #2 by jean-emmanuel mais le lien est mort voidcanva et comment ajouter à O-S-C le module npm colorette ?

tu en connais ?

Il te faut node/npm installé sur ton système, ensuite avec un terminal dans le repertoire où se trouve le fichier du custom module:

npm install colorette

Ça crééra un dossier node_modules dans lequel la fonction nativeRequire ira chercher le module demandé.

Pas spécifiquement, quand j'ai besoin de ça je m'écris un petit script python avec la librairie liblo (sous linux, paquet nommé "python3-liblo" en général), quelque chose comme ça (c'est juste un exemple vite fait, je ne peux pas me lancer dans des cours de python ici ;)):

from liblo import Server
from time import sleep

# create server listening on port 5000
server = Server(5000)

def route_osc(address, args, types, src):
    # forward messages to ports 10000 and 20000
    server.send(10000, address, *args)
    server.send(20000, address, *args)

# bind route function to all incoming messages
server.add_method(None, None, route_osc)

print('Forwarding messages... hit ctrl+c to stop')

while True:
    # check for new messages every 1ms
    server.recv(0)
    sleep(0.001)

image

j'ai juste ajouter import { blue } from "colorette"; au fichier js.

j'obtiens ça comme message d'erreur

(INFO) Reloading custom module...
(ERROR) Custom module loading error
N:\sonicpi\_2023-2024-college\documents\o-s-c\abletonOSC-custom-module.js:39
import { blue } from "colorette";
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at new Script (node:vm:100:7)

Il faut utiliser la fonction nativeRequire comme indiqué plus haut.

image

la phrase load modules m'a induit en erreur :slight_smile:

donc
const colorette = nativeRequire('colorette');
ok mais après...

donc pour avoir l'équivalent de

import { blue } from "colorette"
blue("I'm blue") //=> \x1b[34mI'm blue\x1b[39m
const {blue} = nativeRequire('colorette')

ou alors

const colorette = nativeRequire('colorette'),
      blue = colorette.blue