-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
update synth instance instead of spawning a new one? #71
Comments
Hi!
Just set "freq" not \freq. It's not an SC symbol ;-)
You escaped the f or something.
I will post an example with streams too.
hems.io <notifications@github.com> schrieb am Sa., 30. Nov. 2019, 06:53:
… First of all, absolutely great work! Really impressive ! 🍺
On the example i'm trying to create i would like to have my SineOSC always
playing and instead of spawning a new instance i would like to update the
"freq" parameter..
For instance:
sc.server.boot().then( async (server) => {
const sine = server.synthDef(
"sine",
`
SynthDef("sine", { arg out=0, freq=400;
var zout;
zout = SinOsc.ar([freq, freq], 0, 0.2);
// zout = zout * EnvGen.kr(
// Env.adsr(0, 0.1, 0, 0),
// doneAction: 2
// );
Out.ar(out, zout);
});
`,
);
const instance = await server.synth(sine, {
freq: 440 * Math.random(),
releaseTime: 0.001
});
setInterval(() => {
instance.set("\freq", Math.random() * 100)
}, 500);
} )
Unfortunately, I'm getting an error: "Error: Unmatched type: req".
I'm sure i'm missing something.. What would be the right way to go about
it?
Thank You!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#71?email_source=notifications&email_token=AABVM4VW7PFPHLM7BPBW5C3QWH5WJA5CNFSM4JTFD4I2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4H47LL5Q>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABVM4Q6KRGUM2HXOEHFB5DQWH5WJANCNFSM4JTFD4IQ>
.
|
To clarify a bit more (now that I'm not on mobile): The Supercollider language has Symbols that are written as: In JavaScript you just want a simple string, and by writing Not quite ready, but this would be the dryadic version: const { Synth } = require("supercolliderjs").dryads;
import { interval } from "baconjs";
const sy = Synth.fromSource(`|freq=400| SinOsc.ar([freq, freq], 0, 0.2)`);
const i = interval(500).map(() => {
return { freq: Math.random() * 100 };
});
sy.setStream(i);
export default sy; With all the Bacon stream functions: https://baconjs.github.io/api3/classes/eventstream.html |
thanks for the example @crucialfelix ! Unfortunately, I'm having a hard time with the "set" function, here is a standalone version i baked together to illustrate. const sc = require("supercolliderjs");
startLang = async () => {
sc.lang.boot().then( async (lang) => {
const pyr8 = await lang.interpret(`
Server.default.options.outDevice_("Midas FW");
Server.default.options.numOutputBusChannels(32);
`);
} )
}
startServer = async() => {
sc.server.boot().then( async (server) => {
const sine = server.synthDef(
"sine",
`
SynthDef("sine", { arg out=0, freq=400;
var zout;
zout = SinOsc.ar([freq, freq], 0, 0.2);
Out.ar(out, zout);
});
`,
);
const instance = await server.synth(sine, {
//freq: 440 * Math.random(),
//releaseTime: 0.001
});
setInterval(() => {
instance.set("freq", Math.random() * 100)
}, 500);
} )
}
work = async () => {
await startLang()
await startServer()
}
work() this will yield the error: "Unmatched type: freq", as you can see on this logs: /Users/h/git/hz/supercolliderjs-tests/node_modules/@supercollider/server/lib/osc/msg.js:24
throw new Error(`Unmatched type: ${pairs}`);
^
Error: Unmatched type: freq
at flattenPairs (/Users/h/git/hz/supercolliderjs-tests/node_modules/@supercollider/server/lib/osc/msg.js:24:11)
at Object.nodeSet (/Users/h/git/hz/supercolliderjs-tests/node_modules/@supercollider/server/lib/osc/msg.js:250:34)
at Synth.set (/Users/h/git/hz/supercolliderjs-tests/node_modules/@supercollider/server-plus/lib/ServerPlus.js:44:43)
at Timeout._onTimeout (/Users/h/git/hz/supercolliderjs-tests/src/test.js:43:16)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7) |
Ah, I should have looked more carefully. * synth.set({freq: 441, amp: 0.9}); It should take a Note that you can send many param changes at once. I will make that throw a TypeError with a proper message.
that would post:
|
I still need to fix the documentation generator. This is pretty useless: https://crucialfelix.github.io/supercolliderjs/packages/server-plus/docs/classes/_serverplus_.serverplus.html#synth Because the Synth class that it returns is not exported, it's not in the docs. And the formatting of that those TypeDocs is kind of ugly. Most of the time I use VSCode so I can just option hover / option click on anything and I see docs. But it needs to be published too. |
great.. it takes an object, i should have tried that! Also, I was using thank you once again, great work. |
It worked!! 🍻 Another question I have - which perhaps should be in another issue - is there an easy way to sample the Effectively I would then be modulating my JS code ( for instance a 3D object on WebGL ) with LFOs from Supercollider... So exciting!! |
You triggering so many questions in my mind with this library : D I have like 100 of them now |
I would expect VIM has a TypeScript / Language Server package. But VSCode has been killing it lately. I use the VIM bindings (not perfect). With classic supercollider and my older crucial library I used to do a lot of polling and triggering. Inside a Patch you could do There is Poll http://danielnouri.org/docs/SuperColliderHelp/UGens/Triggers/Poll.html which can send a trig back to the client. The dryadic components will be able to support some really interesting cross communication like that. It would just come back as a stream and then you can filter or map that and plug it into other things. Another use of Dryadic I've dreamed up is that the event/stream system can be connected to from any remote client via a websocket. So you can have a separate browser based app with webgl etc. and it can easily communicate back and forth with the node app. The web app can use Dryad classes and it messages back to the node app to update while playing.
Please let me know! At least I can figure out how to make the docs and development open enough that people can contribute and build things. |
it does but indeed VSCode with a few tweaks is working pretty well..
yes that is super sweet! so basically we would set the "LFO" to be the "in" and a Pulse wave to be the "sampling rate" and wait for the messages on the client side with something similar to the
that sound super amazing, i can't wait!
Yes, that's super sweet. Actually the code i'm writing right now have some WebGL elements moving on the screen and i wanted to make their rotation to be a function of SuperCollider's LFO's amplitude....
really looking forward to check this out..
Great, ping me anytime you would like me to have a look or try something out. I don't have such a deep understanding of the supercollider server as you do, but hopefully i can be helpful by reviewing/trying out examples, giving feedback and hopefully writing some code. once again thanks a lot for such awesome work! ☮️ |
First of all, absolutely great work! Really impressive ! 🍺
On the example i'm trying to create i would like to have my SineOSC always playing and instead of spawning a new instance i would like to update the "freq" parameter..
For instance:
Unfortunately, I'm getting an error: "Error: Unmatched type: req".
I'm sure i'm missing something.. What would be the right way to go about it?
Thank You!
The text was updated successfully, but these errors were encountered: