[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