s.boot;
s.reboot;


(
// Define a custom function that listens on a given port
~startOSCListener = { |port, oscAddress|

    // Create a NetAddr for the server to bind to
    var udpIn, listener;

    // Start listening on the port
    udpIn = NetAddr.langPort(port); // binds to this port

    // Define the listener
    listener = OSCdef.new(
        key: "myOSCListener",  // unique identifier
        func: { |msg, time, addr, recvPort|
            var val;

            val = msg[1]; // assuming single float argument

			// Print in the console (just for debugging)
            ["[OSC RECEIVED]", msg, "from", addr].postln;


            // Example: do something with `val`
            // You could control a Synth here


        },
        path: oscAddress,
        srcID: nil,  // nil = accept from any IP
        recvPort: port
    );

    "Listening for OSC on port % at address '%'\n".format(port, oscAddress).postln;
};
)

// Start the listener
~startOSCListener.(port: 8000, oscAddress: "/touchX"); // Change the oscAddress depending on what you want to receive