[sc-users] Call for Code Contributions !!!
Till Bovermann
tboverma at techfak.uni-bielefeld.de
Tue Dec 4 11:56:56 PST 2007
Hey,
Are you aware of the Score class?
It makes offline rendering of osc commands really easy... see its
help page for help :-)
regards
TIll
On 04.12.2007, at 11:34, olaf hochherz wrote:
> ok
> another try
> sorry
>
> on linux i can do
>
> "scsynth -N test.osc _ test.wav 44100 WAV int24 -o 1".unixCmd
this should work if you have scsynth in your PATH (which is not the
case on osx), apart from that it does not produce any sound (i think...)
>
> how to do this on mac or in common-sc?
>
> thor wrote:
>> On 3 Dec 2007, at 01:03, olaf hochherz wrote:
>>> i like this type of code maybe someone like this to:
>> Hi Olaf
>> Could you explain (with comments) what this code does?
>> I get the test.wav.osc file, but then what?
>> I think examples like this have to have good documentation and
>> preferably some sounding result.
>> Thanks.
>> thor
>> PS. There are now lots of new examples in the latest commit of SC.
>>>
>>> (
>>> ~createVars={var sampleRate=44100,oscfile=File
>>> ("test.wav.osc","w"),wavfilename="test.wav",pos=0;
>>>
>>> SynthDef("sineperiod",{arg freq,amp;
>>> var env=EnvGen.ar(Env.new([0,1,1,0], [0,1/freq,0]),
>>> doneAction: 2);
>>> var sig=SinOsc.ar(freq,0,amp);
>>> OffsetOut.ar(0,sig*env);
>>> }).writeDefFile;
>>>
>>> ~addFreq={arg freq,amp;
>>> var msg=[pos,
>>> [\s_new, \sineperiod,-1,1,0,
>>> \freq,freq,
>>> \amp,amp*0.999]
>>> ].asRawOSC;
>>> oscfile.write(msg.size);
>>> oscfile.write(msg);
>>> pos=pos+(1/freq);
>>> };
>>>
>>> ~addSamples={arg samples,amp;
>>> ~addFreq.(sampleRate/samples,amp);
>>> };
>>>
>>> ~render={
>>> var msg = [ pos, [0]].asRawOSC;
>>> oscfile.write(msg.size);
>>> oscfile.write(msg);
>>> oscfile.close;
>>> ("scsynth -N"+wavfilename++".osc _ "+wavfilename+sampleRate+"
>>> WAV int24 -o 1 >/dev/null ").systemCmd.postln;
>>> };
>>>
>>>
>>> f={arg maxdeep,samples=[2,2],amps= [1,1],smod={|akt,deep,at|
>>> akt.flat},amod={|akt,deep,at|akt.flat},sakt=1,aakt=1,howdeep=0,at=0;
>>> var self=thisFunction;
>>> if(howdeep<maxdeep,{
>>> samples=smod.(samples,howdeep,at);
>>> amps=amod.(amps,howdeep,at);
>>> [(samples*sakt).flat,(amps*aakt).flat].postln
>>> .flop
>>> .do{|i,j|
>>> [i,j].postln;
>>> self.(maxdeep,samples,amps,smod,amod,i[0],i[1],howdeep
>>> +1,j)
>>> }
>>> },{
>>>
>>> [maxdeep,samples,amps,smod,amod,sakt,aakt,howdeep,at].postln;
>>> ~addSamples.(sakt,aakt);
>>> });
>>> };
>>> };
>>> )
>>>
>>> (
>>> ~createVars.value;
>>> //default
>>> f.(7);
>>> ~render.value;
>>> )
>>>
>>> (
>>> ~createVars.value;
>>> f.(5,
>>> [1,2,3,4,5].linexp(1,5,1,10),
>>> (1/[1,5,3,4,2]),
>>> {|akt,deep,at|akt.flat},
>>> {|akt,deep,at|akt.reverse.flat}
>>> );
>>> ~render.value;
>>> )
>>>
>>>
>>> (
>>> ~createVars.value;
>>> f.(3,
>>> [1,2,3,4,5].linexp(1,5,1,10),
>>> (1/[1,5,3,4,2]),
>>> {|akt,deep,at|(akt.reverse+++akt).flat},
>>> {|akt,deep,at|(akt.reverse++akt).reverse.flat}
>>> );
>>> ~render.value;
>>> )
>>>
>>>
>>> thor wrote:
>>>> Hello everyone
>>>> SuperCollider is stable, rock-solid and super efficient. There
>>>> is a book coming out and version 3.2 is in the making. However,
>>>> the state of the "contributions" in the "examples" folder in the
>>>> distribution is not very good. There are only 5 examples there.
>>>> I'm volunteering to fix this if you just send examples here to
>>>> the list or to myself and I'll commit them into the SVN and the
>>>> official distribution. I might also try to sort them into some
>>>> intelligent categories.
>>>> These do not have to be finished pieces or grand projects. Just
>>>> an exploration of some UGen, synthesis, algorithmic composition,
>>>> audio analysis, effects, instruments, graphics.... whatever.
>>>> The code can be seen as addition to the examples we find in the
>>>> helpfiles, but it can be much more general as it does not have
>>>> to focus on one UGen or functionality as the helpfiles do. I
>>>> have already ported some of the examples from SC2 over but there
>>>> might be much more out there as well, so if you know of some
>>>> good examples, please let me know.
>>>> With hope to see some wicked code !
>>>> Thor
>>>> PS. It would be nice (although optional) if you put your name
>>>> and year at the top + if there are 3rd party code needed. Here
>>>> is a good example (Tim even has a small description of what the
>>>> code does):
>>>> // Termite College
>>>> // (Tim Walters) (CC 2006)
>>>> // Features recursively generated phase modulation trees
>>>> //
>>>> // Requires the GVerb and BEQsuite UGens, downloadable at
>>>> // http://realizedsound.net/downloads
>>>> (Although we should remove the CC as the code has to be GPL.
>>>> I suggest we change it to C (for copyright) as it's always your
>>>> copyright)
>>>> -------------------------------------------------------------------
>>>> -----
>>>> _______________________________________________
>>>> sc-users mailing list
>>>> sc-users at create.ucsb.edu
>>>> http://www.create.ucsb.edu/mailman/listinfo/sc-users
>>> _______________________________________________
>>> sc-users mailing list
>>> sc-users at create.ucsb.edu
>>> http://www.create.ucsb.edu/mailman/listinfo/sc-users
>> _______________________________________________
>> sc-users mailing list
>> sc-users at create.ucsb.edu
>> http://www.create.ucsb.edu/mailman/listinfo/sc-users
> // (Olaf HOchherz) (CC 2007)
> // Features recursively generated
> // Sine Period Concatination
> // with NonRealtimeSynthesis
>
> // a set of functions:
>
>
> (
> //function to setup global variables;
> ~setup={arg oscfilename,wavfilename,sampleRate;
> ~oscfile=File(oscfilename,"w");
> ~oscfilename=oscfilename;
> ~wavfilename=wavfilename;
> ~sampleRate=sampleRate;
> ~pos=0;
> };
>
> //a Synth which creates one period of a sinewave
> SynthDef("sineperiod",{arg freq,amp;
> var env=EnvGen.ar(Env.new([0,1,1,0], [0,1/freq,0]), doneAction:
> 2);
> var sig=SinOsc.ar(freq,0,amp);
> OffsetOut.ar(0,sig*env);
> }).writeDefFile;
>
> //writes a Period into an oscfile
> ~addFreq={arg freq,amp;
> var msg=[~pos,
> [\s_new, \sineperiod,-1,1,0,
> \freq,freq,
> \amp,amp*0.999]
> ].asRawOSC;
> ~oscfile.write(msg.size);
> ~oscfile.write(msg);
> ~pos=~pos+(1/freq);
> };
>
> //writes a Period into an oscfile
> ~addSamples={arg samples,amp;
> ~addFreq.(~sampleRate/samples,amp);
> };
>
> //render a oscfile to a wav file
> ~render={
> var msg = [ ~pos, [0]].asRawOSC;
> ~oscfile.write(msg.size);
> ~oscfile.write(msg);
> ~oscfile.close;
> ("scsynth -N"+~oscfilename++" _ "+~wavfilename+~sampleRate+"
> WAV int24 -o 1").postln.systemCmd.postln;
> };
>
>
> //function to recursive generate sine periodes
> f={
> arg
> maxdeep,
> samples=[2,2],amps=[1,1],//proportion-array in each recusion step
> the actual value of length and amp of a period gets multiplicated
> with this arrays
> smod={|samples,deep,at|samples},//this are functions to transform
> the previews arrays
> amod={|amps,deep,at|amps},
> sakt=1,aakt=1,//these are the start-values
> howdeep=0,at=0;//the is for orientation in the recursion
> var self=thisFunction;
> if(howdeep<maxdeep,{//stop recursion after a feew steps
> samples=smod.(samples,howdeep,at);//modulate the poportion
> arrays
> amps=amod.(amps,howdeep,at);
> [(samples*sakt).flat,(amps*aakt).flat]
> .flop//for easy itteration
> .do{|i,j|
> self.(maxdeep,samples,amps,smod,amod,i[0],i[1],howdeep
> +1,j)//do it again with new poportion-arrays and start-values
> }
> },{
> ~addSamples.(sakt,aakt);//at a some point the recursion stops and
> a period gets written
> });
> };
> )
>
> //usage:
>
> (
> //setup global variables
> ~setup.value("test.osc","test.wav",44100);
> //the default test case
> f.(7);
> //is the same as: f.(7,samples=[2,2],amps=[1,1],smod={|
> samples,deep,at|samples},amod={|amps,deep,at|amps},1,1)
> //write the file
> ~render.value;
> //on linux use:
> "aplay test.wav".unixCmd
> )
>
> (
> ~setup.value("test.osc","test.wav",44100);
> f.(8,//for mac users: this can freeze your sc don't use big numbers
> //for linux users: don't use big numbers this can freeze your
> sclang so you have to recompile the library (C-c C-l in emacs)
> [1,3],//a more interesting set of proportions
> ([1,1])
> );
> ~render.value;
> )
>
> (
> ~setup.value("test.osc","test.wav",44100);
> f.(5,
> [1,2,3,4,5],//a more interesting set of proportions
> (1/[1,2,3,4,5]),// also for the volume
> {|akt,deep,at|akt.flat},
> {|akt,deep,at|akt.reverse.flat}//reverse the volume
> );
> ~render.value;
> )
>
>
> (
> ~setup.value("test.osc","test.wav",44100);
> f.(3,
> [1,2,3,4,5,6,7],
> (1/[1,2,3,4,5,6,7]),
> {|akt,deep,at|(akt.reverse+++akt).flat},
> {|akt,deep,at|(akt.reverse++akt).reverse.flat}
> );
> ~render.value;
> )
> _______________________________________________
> sc-users mailing list
> sc-users at create.ucsb.edu
> http://www.create.ucsb.edu/mailman/listinfo/sc-users
More information about the sc-users
mailing list