SuperCollider Tutorial: 11. TouchOSC

  Рет қаралды 21,951

Eli Fieldsteel

Eli Fieldsteel

Күн бұрын

Пікірлер: 84
@johneicher6683
@johneicher6683 10 жыл бұрын
You have made learning Super Collider so much easier. Thank you.
@dmmztube
@dmmztube 4 жыл бұрын
Great tutorials. And great wifi names at 3:50. "Laputa", "No pasa nada", "Do you need a Wifi"
@DRYROT124
@DRYROT124 7 жыл бұрын
You are a master! Very well done videos. The content, the production quality and your delivery...Excellent.
@TheCloudsandTheSkies
@TheCloudsandTheSkies 9 жыл бұрын
This is great stuff! Thanks so much! I am currently doing an MA course and one of my modules is based on the use of SuperCollider. I was originally using GUIs from SuperCollider itself but using OSC seems so much more fun and interesting. Thanks for the Tutorial! Its great!
@linjie1915
@linjie1915 9 жыл бұрын
Couldn't hide any more, since your tutorials are so awesome!
@sphiralstudios
@sphiralstudios 10 жыл бұрын
Thank you for this tutorial series - this is the missing piece between where I was and being able to digest the SuperCollider Book. Very interested to see the Kinect stuff in the next vid. Don't know if you play with the Monome gear at all, but I'm working on getting my Arc to play with SuperCollider also. Might be too small a community to dedicate a whole video to, but no one's got one out there yet (that I could find). Anyway, liked and subscribed, keep up the great work!
@wild939
@wild939 10 жыл бұрын
Awesome videos bro. I watched them all and enjoying them alot. U make it easy to be understood and entertaining. Thanks alot. Please keep them coming up.
@Doddinn
@Doddinn 10 жыл бұрын
Brilliant tutorial as always. You are an inspiration. Keep up the good work.
@ZetaCarinae
@ZetaCarinae 5 жыл бұрын
Incredibly helpful, thank you!
@Phobia017
@Phobia017 9 жыл бұрын
Great videos Eli, invaluable.
@lazzarello
@lazzarello 6 жыл бұрын
controlling parameters via OSC starts at 12:00. Something that bit me is OSC is typed and some UGens in SC fail silently if they are passed an arg of the wrong type.
@ofelia2030
@ofelia2030 9 жыл бұрын
I also have a question about how to know the name of a silider or knob in the default TouchOSC layouts so that i could use them in case i don use TouCH OSC Editor.By name, i mean something like the '/main/toggle of your video. I am sorry if this is too far from your tutorial. I am actually trying to install TochOSC editor in linux, but I am having trouble with it, so maybe thatś why i came up with these alternative questions. Cheers, and thanks for the tutorials!
@elifieldsteel
@elifieldsteel 9 жыл бұрын
ofelia Open the TouchOSC Editor on your computer, click "Open", and choose one of the default layouts. Click on an object and you'll be able to see the object's address in the column on the left side of the editor.
@ofelia2030
@ofelia2030 9 жыл бұрын
i just downloaded touchosc, and there is a thing, which you dont mention i think, called osc midi bridge, which is what hexler.net suggests is THE way of sending-receiving MIDI messages between computer-ipad. I am confused about this, and why you didn need it in your video. I use linux, so it sounds good to not necessarily need that Bridge program that is not available in linux (or maybe i igonre that it is available).
@elifieldsteel
@elifieldsteel 9 жыл бұрын
ofelia The primary topic of this video (and the two that follow) is OSC, so hexler's MIDI bridge feature is not directly relevant. Further, the iPad is not really a native MIDI device. Because it is capable of sending/receiving OSC, I rarely (if ever) find the need to enable MIDI communication. I am of the opinion that when OSC is available it should be chosen in favor of MIDI, since it is faster, more customizable, and sends higher resolution data.
@9sirgato9
@9sirgato9 9 жыл бұрын
Eli I got a question, For example I got two identical Synthdef that just are different in frequency, so I got 2 toggles to activate each one. The problem is that it can only run one at a time, how do I can make them run sepparately?
@elifieldsteel
@elifieldsteel 8 жыл бұрын
+Michel Soto There is absolutely no point in making two identical SynthDefs. Make one SynthDef, and declare a frequency argument so that it can be instantiated with a frequency of your choosing. SynthDef.new(\a, {arg freq=500; etc...}).add; Synth(\a, [\freq, 440]); Synth(\a, [\freq, 880]);
@insightfool
@insightfool 9 жыл бұрын
Supercollider is MADDENING. I can't figure out how I would map values from the OSC args to values that are useful for a specific signal/ugen. Something like the .range operator but for a general range? I know there's linlin and such but when I have a msg[0] coming in, I want to be able to just say msg[0].generalrange(1,100) to map values that go from 0-1 to 1-100. Why should this be so dammed hard in SC??!
@insightfool
@insightfool 9 жыл бұрын
used linlin...figured it out per your tutorial :)
@user-dt4ih9kh7z
@user-dt4ih9kh7z 4 жыл бұрын
Hello Eli.I have an important question : When I try to "sync" my mobile device with the touch OSC editor, it always fails(with the message "Request time out" ). This happens although I find my pc device on Options, and then I also attempt to manually place my IP. I have an old Iphone 5, do you believe this is the problem? If yes, could you suggest me another way for external control, another program,for an old device like that? As I search the web, I cannot find clear instructions for OSC Communication for SC. Also,from what I have understood, MIDI is an alternative communication to OSC ,so I could search also for MIDI controlling softwares?
@elifieldsteel
@elifieldsteel 4 жыл бұрын
I can't tell you precisely why TouchOSC sync is timing out. I think there are several reasons this could be happening. I've gotten a few sync issues in the past, but they are rare and almost always fixed by software and/or hardware restarts. I doubt your iPhone 5 is the source of the problem, but can't be sure. Keep in mind that syncing your mobile device with TouchOSC is a totally separate issue from using your device to communicate with SC over OSC. For example, can you use one of the default TouchOSC layouts to communicate with SC? It sounds like your main issue is related to TouchOSC, not SC, so if you are looking for alternative platforms that allow creation of custom GUI for OSC messaging, you could check out Lemur by Liine, which allows in-app GUI creation and editing: liine.net/en/products/lemur/
@user-dt4ih9kh7z
@user-dt4ih9kh7z 4 жыл бұрын
@@elifieldsteel I appreciate your reply. I found that AVG FireWall for some reason was blocking the sync prodecure. When I turn it off, I can move on normally! But, I have a last question to be honest. I try to connect variables with the OSCDEFS to manipulate the sound. I can do it with Synths/groups and .set method. But what would be the method for Pdef/Pbind manipulation?
@owenerz1
@owenerz1 9 жыл бұрын
Hi Eli. Your videos are really great. I have a question as I am new to SC. Is there a noteOn, noteOff equivalent when using OSC. In the code below I have both synths running with keys on TouchOSC. It's working fine but I'm not sure how to start create the noteon - noteoff type of function. Any help would be greatly appreciated. Thanks man. ( OSCdef( ew1, {arg msg,time, addr, port; // these are the four arguments specified for a function in OSCdef. x.set (\midi, 36 ,msg [1]).postln;//allows me to change the midi note }, '/1/push1'//this assigns the OSCdef to the first key. ); OSCdef( ew2, {arg msg,time, addr, port; x.set (\midi, 37 ,msg [1]).postln; }, '/1/push2' ); OSCdef( ew3, {arg msg,time, addr, port; x.set (\midi, 38 ,msg [1]).postln; }, '/1/push3' ); OSCdef( ew4, {arg msg,time, addr, port; x.set (\midi, 39 ,msg [1]).postln; }, '/1/push4' ); OSCdef( ew5, {arg msg,time, addr, port; x.set (\midi, 40 ,msg [1]).postln; }, '/1/push5' ); OSCdef( ew6, {arg msg,time, addr, port; x.set (\midi, 41 ,msg [1]).postln; }, '/1/push6' ); OSCdef( ew7, {arg msg,time, addr, port; x.set (\midi, 42 ,msg [1]).postln; }, '/1/push7' ); OSCdef( ew8, {arg msg,time, addr, port; x.set (\midi, 43,msg [1]).postln; }, '/1/push8' ); OSCdef( ew9, {arg msg,time, addr, port; x.set (\midi, 44 ,msg [1]).postln; }, '/1/push9' ); OSCdef( ew10, {arg msg,time, addr, port; x.set (\midi, 45 ,msg [1]).postln; }, '/1/push10' ); OSCdef( ew11, {arg msg,time, addr, port; x.set (\midi, 46 ,msg [1]).postln; }, '/1/push11' ); OSCdef( ew12, {arg msg,time, addr, port; x.set (\midi, 47 ,msg [1]).postln; }, '/1/push12' ); OSCdef( ew13, {arg msg,time, addr, port; x.set (\midi, 48 ,msg [1]).postln; }, '/1/push13' ); //Second keyboard on the second page. OSCdef( ew1a, {arg msg,time, addr, port; y.set (\midi, 60 ,msg [1]).postln; }, '/2/push1' ); OSCdef( ew2a, {arg msg,time, addr, port; y.set (\midi, 61 ,msg [1]).postln; }, '/2/push2' ); OSCdef( ew3a, {arg msg,time, addr, port; y.set (\midi, 62 ,msg [1]).postln; }, '/2/push3' ); OSCdef( ew4a, {arg msg,time, addr, port; y.set (\midi, 63 ,msg [1]).postln; }, '/2/push4' ); OSCdef( ew5a, {arg msg,time, addr, port; y.set (\midi, 64 ,msg [1]).postln; }, '/2/push5' ); OSCdef( ew6a, {arg msg,time, addr, port; y.set (\midi, 65 ,msg [1]).postln; }, '/2/push6' ); OSCdef( ew7a, {arg msg,time, addr, port; y.set (\midi, 66 ,msg [1]).postln; }, '/2/push7' ); OSCdef( ew8a, {arg msg,time, addr, port; y.set (\midi, 67,msg [1]).postln; }, '/2/push8' ); OSCdef( ew9a, {arg msg,time, addr, port; y.set (\midi, 68 ,msg [1]).postln; }, '/2/push9' ); OSCdef( ew10a, {arg msg,time, addr, port; y.set (\midi, 69 ,msg [1]).postln; }, '/2/push10' ); OSCdef( ew11a, {arg msg,time, addr, port; y.set (\midi, 70 ,msg [1]).postln; }, '/2/push11' ); OSCdef( ew12a, {arg msg,time, addr, port; y.set (\midi, 71 ,msg [1]).postln; }, '/2/push12' ); ) // Here is the two synths. ( SynthDef("owen",{ arg out,amp=0.25, midi=36; var freq, env; freq=midi.midicps; env = EnvGen.ar(Env.adsr); out=Saw.ar(freq, mul:amp); Out.ar(0, out*env); Out.ar(1, out*env); }).send(s); ) ( SynthDef("owen2",{ arg out, midi=60; var freq1; freq1=midi.midicps; out=SinOsc.ar(freq1); out=FreeVerb.ar(out, 0.35, 1); Out.ar(0, out); Out.ar(1, out); }).send(s); ) x=Synth("owen") y=Synth("owen2")
@elifieldsteel
@elifieldsteel 9 жыл бұрын
owen corrigan No. "note on" and "note off" are specific to the MIDI protocol, and OSC is an open-ended protocol in which you can define your own custom messages and behaviors. From a cursory look at your code, you seem to be designing a keyboard-like interface in TouchOSC. From my perspective, you are re-inventing the wheel. It would be so much easier to simply use a MIDI keyboard controller and rely on SC's MIDI functionality.
@owenerz1
@owenerz1 9 жыл бұрын
Eli Fieldsteel Thanks a million for your prompt reply. How would I go about only triggering a sound with touchosc when I touch the button (for example). Could I use and if statement to tell SC only to trigger the sound when it is pressed on the iPad?? How would I go about that type of syntax?? I hope my question makes sense. Thanks again for your help.
@elifieldsteel
@elifieldsteel 9 жыл бұрын
owen corrigan It's quite simple, really. Here's a simplified example, something like this should work: OSCdef.new( ew1, { arg msg; if( msg[1] == 1, {x = Synth.new(\owen)}, {x.free} ); }, '/1/push1' );
@owenerz1
@owenerz1 9 жыл бұрын
Eli Fieldsteel Thanks a lot for your help Eli.
@curiuser
@curiuser Жыл бұрын
I would like to receive data from a python flask application in supercollider, is this possible? Any help will be greatly appreciated. Thank you.
@elifieldsteel
@elifieldsteel Жыл бұрын
If you can express your data as OSC messages, yes. For sending OSC data from python, I’d recommend python-osc: pypi.org/project/python-osc/
@curiuser
@curiuser Жыл бұрын
@@elifieldsteel great thank you! applying this.
@PsebDX
@PsebDX 8 жыл бұрын
Hi Eli, I've been trying to use Max to control some synths I've written in SuperCollider via OSC, similarly to what you've been doing with TouchOSC. The problem I'm having stems from the gate in the envelope generator. If I play a note on my synth, then let go, the gate goes from 1 to 0, as it should (doneAction is 2). But then if I make any adjustments to any of the other parameters while the gate is 0, they are not "remembered" by the synth the next time I play a note to open the gate, and instead the default values of the SynthDef are used. Does this make any sense?
@elifieldsteel
@elifieldsteel 8 жыл бұрын
It sounds your mechanism for playing a note creates a Synth whose gate value is initially 1, and the mechanism for stopping a note sets the gate to 0, and because doneAction is 2, the Synth is freed. Therefore, any argument value changes don't have any effect after the envelope is finished, because the Synth doesn't exist any more. One solution would involve changing doneAction to zero to prevent freeing the Synths, and making sure to create your Synths in advance, at patch startup time (maybe 128 Synths, one for each possible MIDI note), making sure their gate value is initially 0. Then, change your note on/off mechanism so that it simply sets the corresponding Synth's gate value to 1 and 0. I show something similar toward the end of Tutorial 9.
@PsebDX
@PsebDX 8 жыл бұрын
Thanks for the helpful response! (It got buried in my junk mail folder so I didn't see it till now).
@cikibli
@cikibli 6 жыл бұрын
This is helpful.infinite :P
@folcwin1066
@folcwin1066 10 жыл бұрын
Awsome!
@mauropasserino9007
@mauropasserino9007 9 жыл бұрын
Your tutorial is great!! Thanks Eli.., I want to ask you a question,, if I want to use "multi toggle" of "multiXY", what should I write in the Path field of OSCdef?? If i wrote '1/multitoggle1/1/1' ; this only works with one toggle at time,, I need to write multiple paths.,. how do I do this?? Thanks Eli!!
@elifieldsteel
@elifieldsteel 9 жыл бұрын
Mauro Passerino Good question. The individual buttons on a multitoggle actually each send out a single integer on a unique OSC address. I think this is a questionable design decision; I would much prefer to have the multitoggle send out an array of values on only one OSC address. So yes, you do in fact have to create multiple OSCdefs to receive individual button data from a multitoggle. Fortunately, you can use nested iteration to do this very quickly. Here is an example for a 5x5 multitoggle:( var gridx=5, gridy=5; gridx.do{ arg x; gridy.do{ arg y; OSCdef( "multitoggle"++(x+1)++(y+1), { arg msg; msg.postln; }, "/1/multitoggle1/"++(x+1)++"/"++(y+1) ); }; }; )
@mauropasserino9007
@mauropasserino9007 9 жыл бұрын
Thanks Eli! You are God for me haha,, greetings from Argentina!
@mauropasserino9007
@mauropasserino9007 9 жыл бұрын
Eli Fieldsteel The final last question please! How can I distinguish (or accede) a message from a button from another (multitoggle)? If button1=1 -->do something == if [ /1/multitoggle1/1/1, 1 ]-->do somethingIf button1=0 -->do something == if [ /1/multitoggle1/1/1, 0 ]-->do something If button2=1 -->do something If button2=0 -->do something ... I was trying but can´t solve this..! Thanks Eli!!!!
@elifieldsteel
@elifieldsteel 9 жыл бұрын
Mauro Passerino I don't think I understand your question. You can refer to different buttons in a multitoggle by changing the address (for example, /1/multitoggle1/1/1 refers to a single button, /1/multitoggle1/1/2 refers to an adjacent button, etc). If you want to define unique behaviors for discrete buttons, you'll need to create unique OSCdef objects with unique action functions.
@mauropasserino9007
@mauropasserino9007 9 жыл бұрын
Eli Fieldsteel Sorry if I wasn´t clear,, this is what I mean: ( var gridx=1, gridy=5; gridx.do{ arg x; gridy.do{ arg y; OSCdef( "multitoggle"++(x+1)++(y+1), { arg msg,time,addr,port; msg.postln; //This is what I want to do: if(msg =={'/1/multitoggle1/1/1, 1 '}){ "Do something 1".postln; } if(msg =={'/1/multitoggle1/1/2, 1 '}){ "Do something 2".postln; } if(msg =={'/1/multitoggle1/1/3, 1 '}){ "Do something 3".postln; } if(msg =={'/1/multitoggle1/1/4, 1 '}){ "Do something 4".postln; } if(msg =={'/1/multitoggle1/1/5, 1 '}){ "Do something 5".postln; //This obviously doesn´t work, I don´t know how to write this lines of code! } }, "/1/multitoggle1/"++(x+1)++"/"++(y+1) ); }; }; ) Thanks again for your time Eli!!
@coolbaboonable
@coolbaboonable 10 жыл бұрын
Thanx a mil Eli! Accelerometer data for SuperCollider: \accxyz [1][2][3]
@9uweeoncbmd890
@9uweeoncbmd890 6 жыл бұрын
Hey, Eli. Have you already seen a problem of SuperCollider having short moments of not receiving OSC data exactly every 10 seconds? I have had no problem using OSCdef and its informations in Synths in my own code. However, I noticed that there is a hiccup of sorts from SuperCollider every 10 seconds, in which it does not receive information for a split second, and then dumps all the information at once the very second after. OSCdef.trace has shown me that that behavior is consistent, and I cannot find any sort of mention of this behavior elsewhere in the internet or SC's mailing list. I've pinged my internet connection looking for this same problem in latency, but it seems to only happen on SuperCollider's end when receiving MIDI and OSC information. I'll continue to try and solve this, but all I've tried hasn't worked yet. If you know of something, let me know, because I'm really excited with TouchOSC's possibilities.
@Desafis
@Desafis 4 жыл бұрын
Hai Eli, thanks for this Video, but the Syntdef doesn't work at all. The post window shows up that }). add is not correct. Did I miss something?
@elifieldsteel
@elifieldsteel 4 жыл бұрын
I would guess that you're pressing shift-enter to evaluate the SynthDef, which only evaluates the cursor's current line, and should instead be using control-enter (win) or command-enter (mac) to evaluate a parenthetical clump of code. Alternatively, highlight the SynthDef code before evaluating.
@wild939
@wild939 10 жыл бұрын
I got a question which maybe not smart or useful one for alot out there but its something that popped up my head. What if I want to invert a toggle button to perform an action when its off (aka msg is "0"). When I turn it on it do a specific action and when I turn it off it does another action and same for faders and knobs if they centered for example and I want the negative values position work for specific function and positive position another one? Is that possible?. Sorry for my bad english but I wish my comment make sense and clear to be understood. Thanks alot
@elifieldsteel
@elifieldsteel 10 жыл бұрын
You're describing conditional logic. In your OSCdef function, use an if-statement or something similar: if(value == 0, {"off".postln}, {"on".postln}); so that SC prints "off" when the button value is 0 and "on" when the button value is 1. Then just change the contents of the true/false functions so that they do what you want. When a GUI ranges from 0 to 1, but you want it to range from 1 to 0, use 1 minus the GUI value (in other words, if the GUI value is n, use 1 - n).
@wild939
@wild939 10 жыл бұрын
Thanks very very much for ur fast and detailed reply and the video as well. So helpful bro :). keep it up and keep the videos coming :) thanks again for everything.
@joshuadelorimier1619
@joshuadelorimier1619 8 жыл бұрын
could you show an example of going the other way using OSCfunc??? and if its possible to get the built in args like \midinote out of a Pbind? Thanks for the tutorials!
@elifieldsteel
@elifieldsteel 8 жыл бұрын
+Joshua deLorimier (TRASHTRASH) By "go the other way," do you mean send OSC messages to TouchOSC? I don't understand what you mean by "get the args out of a Pbind." Can you be more specific?
@joshuadelorimier1619
@joshuadelorimier1619 8 жыл бұрын
+Eli Fieldsteel Thank you so much for the reply sorry for the poorly written question. So I want to Send Osc data to another application or we could pretend the led lights of touchosc. From my research to send data you have to use OSCFunc I believe. I wanted to know if it is possible to send the data from different Pbind's. Here is an example based off your last tut. If you could show me how you would write a OSC function so I could send the \midinote arg data to another application I would appreciate it so much. Thank you so much for your tutorials and your time! ( ~song1=Pdef(\pat2, Pbind( \instrument,\fm1, \dur,Pseq([1/2],inf), \stretch, 60/128*4, \midinote,Pshuf([23,42,33,35,26,74],inf).trace, atio, Prand([2/3,1/3,3/4,3/2,2/6,6/7,1/8],inf), \atk,Pwhite(1,8,inf), el,Pwhite(1,8,inf), \amp,Pwhite(0.1,0.1,inf), \pan,Pwhite(-1,1,inf), ); ).play(quant:60/128*4); ) I want to be able to send the notes that \midinote are playing. Thanks so much!
@elifieldsteel
@elifieldsteel 8 жыл бұрын
+Joshua deLorimier (TRASHTRASH) OSCFunc is used for receiving OSC data, not sending it. To send OSC data, create an instance of NetAddr that represents your OSC destination (IP and port number), and use the sendMsg method. You can't directly ask an EventStreamPlayer (Pbind.play) to "send out" certain data. Doing it this way would likely involve defining your own custom event type that sends OSC, creating a second Pbind to generate those events, and playing the two event streams in parallel with Ppar-- too much work IMO. I find it much easier to ask the generated Synths to send OSC data themselves, using SendReply, so that Pbind generates the Synths, and the Synths generate the OSC output. I'd do it like this: ( s.waitForBoot({ //create NetAddr representing TouchOSC //make sure IP and port are correct ~touchOSC = NetAddr.new("192.168.1.100", 9000); //simple percussive sine wave generator SynthDef.new(\a, { arg freq=440, t_trig=1; var sig; sig = SinOsc.ar(freq,0,0.2); sig = sig * EnvGen.kr(Env.perc,t_trig,doneAction:2); //send MIDI note number to sclang SendReply.kr(t_trig, '/pitch', freq.cpsmidi.round); Out.ar(0, sig!2); }).add; //receive MIDI note number from scsynth and send to TouchOSC //I'm using an 8-toggle multitoggle to //represent pitches of an A-major scale OSCdef.new(\pitch, { arg msg; ~touchOSC.sendMsg( '/1/multitoggle2', //convert to 1 if note number is played, 0 if not (msg[3]==69).asInteger, (msg[3]==71).asInteger, (msg[3]==73).asInteger, (msg[3]==74).asInteger, (msg[3]==76).asInteger, (msg[3]==78).asInteger, (msg[3]==80).asInteger, (msg[3]==81).asInteger, ); }, '/pitch'); //Pbind creates Synths, which send pitch data ~pattern = Pbind( \instrument, \a, \dur, 0.5, \midinote, Pxrand((Scale.major.degrees+69)++81,inf), ); }) ) p = ~pattern.play; //start
@joshuadelorimier1619
@joshuadelorimier1619 8 жыл бұрын
oh my godness thank you sooo much....I've lost at least two days trying to figure out a solution! Much appreciated!
@HighlandViolinist
@HighlandViolinist 5 жыл бұрын
Is there a way to change the default port in SuperCollider? Also, if you have multiple OSC devices, can you setup SC to receive messages from all of them on multiple ports?
@elifieldsteel
@elifieldsteel 5 жыл бұрын
Yes. For OSC listening in sclang, just create an OSCdef and provide the desired port value as the recvPort argument. If you have multiple OSC sources arriving on different ports, you can create multiple OSCdefs listening on those ports. //create OSCdef listening on different port: ( OSCdef( \test, { arg msg; msg.postln; "received".postln; }, '/msg', recvPort:57130 ) ) //establish a NetAddr for sclang to test OSC communication internally ~langAddr = NetAddr("127.0.0.1",57130); //send OSC message. should see "received" in post window ~langAddr.sendMsg('/msg', 1); Keep in mind the server listens on port 57110 and the language listens on 57120, so it depends where you want to send/receive messages. I assume you're doing language-listening on 57120 as this video demonstrates, but just in case, here's what I'd do to change the default server port: //listen on different port s.addr_(NetAddr.new("127.0.0.1",6789)) s.reboot; //(unsure if necessary) s.addr; //confirm new port assignment //establish NetAddr object for localhost server to test OSC communication internally ~serverAddr = NetAddr.new("127.0.0.1",6789) //create a synth by explicitly sending an OSC message ~serverAddr.sendMsg('/s_new', "default", s.nextNodeID, 0, s.defaultGroupID) //done s.freeAll;
@HighlandViolinist
@HighlandViolinist 5 жыл бұрын
@@elifieldsteel So to summarize; if I have two phones, each time I program a button to do something in an OSCdef, I have to write the specific phone's recvPort.
@elifieldsteel
@elifieldsteel 5 жыл бұрын
HighlandViolinist - Chantelle Ko I think that’ll work. I don’t believe I’ve ever actually tested this particular setup. You could certainly try sending both phones to the same port. This might work too, but I have a hunch something will complain about the port being in use or unavailable. What you’re describing is definitely possible, though.
@HighlandViolinist
@HighlandViolinist 5 жыл бұрын
@@elifieldsteel When I've done this in Max MSP, each phone has their own port, and then make a [udpreceive] object for each phone with the port number in the argument. If the phones were on the same port, then I think what would happen is both phone's buttons would be mapped to control the same things. It could cause problems if people on each phone were both trying to control the same fader or button at the same time.
@HighlandViolinist
@HighlandViolinist 5 жыл бұрын
@@elifieldsteel I tested it and it works! kzbin.info/www/bejne/a5uQkp2JndaWb5o I discovered this method seems to be more efficient to get SC to listen to multiple ports thisProcess.openUDPPort(1121); //this makes SC additionally listen to the port written inside the brackets thisProcess.openUDPPort(57130); thisProcess.openPorts; // list all open ports And then I used the recvPort:(number) inside the OSCdef like you mentioned.
@coolbaboonable
@coolbaboonable 10 жыл бұрын
I have a playbuf synthdef and I have values from accelerometer. Both work, but not together. How do I use "live" OSC values (from OSCdef) to control an arg in the synthdef (where the buffer is stored)?
@elifieldsteel
@elifieldsteel 10 жыл бұрын
This video provides answers to your question, exactly as you've asked it. Use OSCdefs whose functions call 'set' commands on the existing Synth.
@coolbaboonable
@coolbaboonable 10 жыл бұрын
Eli Fieldsteel Yes, this is true. I went back and watched all the tutorials, losing track of the problem...I was creating a new synth for every .set() by using .play instead of .add for the synthdef(). Thanks.
@elifieldsteel
@elifieldsteel 10 жыл бұрын
I had a feeling it was something simple. Glad you got it figured out!
@linjie1915
@linjie1915 9 жыл бұрын
Eli Fieldsteel Hi, Eli! Your video is really helpful to me. I would like to ask you how to send message to multitoggle or multifader in supercollider?
@elifieldsteel
@elifieldsteel 9 жыл бұрын
介琳 Append an extra slash and number to the address. For example, an address such as /main/multifader1/3 will address the third fader on the multi object named "multifader1" on the page called "main." See the TouchOSC manual: hexler.net/docs/touchosc-controls-reference#multifader
@humabeing
@humabeing 8 жыл бұрын
Message 'linlin' not understood. RECEIVER: nil what could be wrong...... plz help !! i get this with all the faders and the toggle doesnt work!
@elifieldsteel
@elifieldsteel 8 жыл бұрын
linlin maps a number from one linear range to another. If a variable is receiving the linlin message, it must first be given a numerical value. If you don't give your variable a numerical value, it has a value of 'nil,' and it makes no sense to map 'nil' some a linear range. For example, x=5; then x.linlin(1,10,20,100); makes sense. Without x=5 first, SC returns your error.
@humabeing
@humabeing 8 жыл бұрын
so what values should my osc sliders be sending? they currently sending 0 to 1.
@humabeing
@humabeing 8 жыл бұрын
if the value range is 0 to 1 then nil is innevitable as a msg value. and in between o and 1 i get also msg not understood.
@elifieldsteel
@elifieldsteel 8 жыл бұрын
+humanbeing No, a value of nil is not inevitable. It doesn't matter what numerical value receives the linlin message, as long as it actually has a numerical value. There is something else wrong with your code causing your linlin receiver to not be given a numerical value, possibly a misspelled variable name. I cannot help you further unless I have more information. You can PM your code to me, if you like.
@humabeing
@humabeing 8 жыл бұрын
+Eli Fieldsteel ty you r the best. it is the code u showed on this video. maybe the osc app iam using doesn't send the correct msgs
@gkyriak380
@gkyriak380 7 жыл бұрын
SOS - Please help: I can't get to connect OSC on my Android even if I put the correct IP address of my computer to search for hosts (don't find any unfortunately)! Is there a workaround to make this work (I don't have an Apple mobile device but only an Android)... Does the fact that the WiFi is common to all residents in my residence halls (i.e. public) hinder the process of connecting my Mac to my Android device? Thank you very much in advance!
@elifieldsteel
@elifieldsteel 7 жыл бұрын
When you say "connect OSC on my Android," are you referring to the sync process that loads TouchOSC interfaces from your computer onto your mobile device?
@gkyriak380
@gkyriak380 7 жыл бұрын
Both this and the reflection of Android touch actions onto SuperCollider. I've been able to do some sort of workaround by creating a private Wi-Fi hotspot with data disabled, so that network connection is only established between device and Mac computer - getting the connection to work, but how is it sometimes possible that I match the WiFi addresses but still can't get the process to work? I hope I made myself as clear as possible, waiting for your reply!
@elifieldsteel
@elifieldsteel 7 жыл бұрын
"getting the connection to work" - I assume this means you can successfully sync layouts between computer and mobile device? "still can't get the process to work" - I assume this means receive OSC messages in SuperCollider? If I'm understanding you correctly, this may be an SC syntax problem (OSC address misspelled in OSCdef, perhaps), and your Android must also send OSC to the correct port as well as the correct IP address. The port to which sclang listens is 57120 by default (configure this in the TouchOSC settings on your mobile device). I'm not sure it's necessary, but I usually boot the audio server before initiating OSC communication with SC. The fact that you're using a heavily-trafficked network may cause dropped packets and slow response times, and there may even be some wireless configuration that inhibits OSC -- but I'm totally speculating here. I've used university-wide networks before with no problems, but I usually use a private network for performances. And, FWIW, I frequently have these sorts of problems when sending OSC between devices, i.e. I can't receive messages coming from another device. I double-check IP and port, make sure devices are both on the same network (doesn't actually have to be wifi, it can be an ethernet connection), and sometimes restart SC and other apps participating in the OSC messaging. That's really all there is to it. Hope this helps.
@gkyriak380
@gkyriak380 7 жыл бұрын
That was very helpful - Thank you!
SuperCollider Tutorial: 12. Nintendo Wiimote
18:18
Eli Fieldsteel
Рет қаралды 9 М.
SuperCollider Tutorial: 8. Buffers
28:36
Eli Fieldsteel
Рет қаралды 32 М.
SCHOOLBOY. Последняя часть🤓
00:15
⚡️КАН АНДРЕЙ⚡️
Рет қаралды 16 МЛН
Incredible Dog Rescues Kittens from Bus - Inspiring Story #shorts
00:18
Fabiosa Best Lifehacks
Рет қаралды 34 МЛН
The CUTEST flower girl on YouTube (2019-2024)
00:10
Hungry FAM
Рет қаралды 40 МЛН
Controlling SuperCollider from Python using SCAMP
14:52
Marc Evanstein / music․py
Рет қаралды 2,3 М.
Using TouchOSC with Ableton Live
11:55
fromstudiotostage
Рет қаралды 55 М.
Renoise Live Remix Demo (TouchOSC)
4:24
forgeaudiodesigns
Рет қаралды 1,1 М.
SuperCollider Tutorial: 7. Server Architecture
20:07
Eli Fieldsteel
Рет қаралды 25 М.
I've never seen ANYTHING like this before... Temple OS
17:57
Linus Tech Tips
Рет қаралды 4,2 МЛН
SuperCollider Mini Tutorial: 10. Sequencing with Demand UGens
4:51
Eli Fieldsteel
Рет қаралды 1,4 М.
I turned my ipad into a steampunk chip-tune instrument
1:49
AxeManderson
Рет қаралды 8 М.