electro-music.com   Dedicated to experimental electro-acoustic
and electronic music
 
    Front Page  |  Articles  |  Radio
 |  Media  |  Forum  |  Wiki  |  Links  |  Store
Forum with support of Syndicator RSS
 FAQFAQ   CalendarCalendar   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   LinksLinks
 RegisterRegister   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in  Chat RoomChat Room 
 Forum index » DIY Hardware and Software » ChucK programming language
PyChuck
Post new topic   Reply to topic Moderators: Kassen
Page 1 of 4 [95 Posts]
View unread posts
View new posts in the last week
Mark the topic unread :: View previous topic :: View next topic
Goto page: 1, 2, 3, 4 Next
Author Message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Tue Jun 17, 2008 2:47 am    Post subject: PyChuck
Subject description: An experimental ChucK implementation in Python
Reply with quote  Mark this post and the followings unread

Python is cool.
ChucK rocks.
Combining them must result in something awesome!
So I'm trying to implement a chucklike environment in Python. Python already has garbage collection and other cool features like the ability to pass functions as arguments and it's fun to see if audio synthesis can benefit from them.
100% Python audio synthesis is super slow but it's just for the fun of it.
I tried to make the code look similar to ChucK syntax...
Well, have a look at yourselves:
Code:
VM = VirtualMachine()
spork = VM.spork

def mainshred():
    global sinosc, g
    sinosc = SinOsc()
    sinosc >> sinosc.FM #Self modulation
    sinosc.freq = 1000.0
    sinosc.gain = 900.0
    g = Gain()
    sinosc >> g >> dac
    g.gain = 1.0/sinosc.gain

    def sporky():
        later = VM.now + second
        while VM.now < later:
            sinosc.gain *= 0.99
            g.gain = 1.0/sinosc.gain
            yield 100*ms

    spork( sporky() )
   
    yield 3*second
    sinosc.freq = 500.0
    sinosc.gain = 1.0
    g.gain = 1.0

spork( mainshred() )

The easiest syntax I found for time advancement that Python accepts was using ( yield duration ).
I obviously have too much time in my hands. :P
If this actually gets anywhere I'll post the damn thing. Too hacky and undocumented at the moment.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Mon Jun 23, 2008 6:38 am    Post subject: Reply with quote  Mark this post and the followings unread

Still hacky, undocumented and even slower, PyChucK starts to come in to shape... at least conceptually. I'll probably make it right first. So 100% Python until everything works and then I'll start optimizing the main bottlenecks in C/C++.

Some features I've planned and partly implemented as of now.
PyChucK comes with more types:
time ~ duration (The same as ChucK's time and dur)
measure ~ beat (Non uniform time for more expressive rhytms)
You can advance time both in durations and beats but it'll probably make sense only to use one of them in your shred. Beats are more flexible because you can later change the speed of your composition without having to worry about different voices desynching.*see EDIT
tempo (beat/duration a mapping from beat to duration. Used to change how quickly VM's measure changes compared to it's time)
frequency ( 1/duration )
pitch ~ interval (Absolute and relative pitch)
chord ( compound pitch )
cord ( compund interval )
There will be a rich arithmetic for manipulating these types. I'm paying special attention to make writing musical note sheets as expressive as it can be in plain text while still allowing all kinds of tunings and rhythms.

UGens also have arithmetic operations defined so that if foo, bar and spam are UGens, then:
(foo + bar) * spam
is a new UGen whose output is the sum of foo's and bar's multiplied by spam's.
Also functions can be applied easily:
foo >> math.tanh >> dac
will apply hyperbolic tangent distortion to the output of foo.

EDIT: Another option is to only allow time and Events in the VM shreds and make a new abstract VM (a Conductor) that handles non uniform time. This allows multiple tempos to be played simultaneously and simplifies the uniform VM code... I'll have to think about this...

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
chuckles



Joined: Apr 02, 2007
Posts: 72
Location: San Diego, California

PostPosted: Mon Jun 23, 2008 2:20 pm    Post subject: What the HOELLE are you doing!? Reply with quote  Mark this post and the followings unread

I'm not completely understanding what you are doing here (although it sounds extremely interesting).

Are you writing a wrapper around Chuck callable in Python? Or are you implementing Chuck architecture natively or semi-natively in Python?

Garbage collection would be cool, but even better would be a simple facility to read and write data files. At any rate it's great that you're doing this and I at least for one am interested in reading about your progress sometimes...
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Mon Jun 23, 2008 4:10 pm    Post subject: Reply with quote  Mark this post and the followings unread

I'm implementing the chuckian architecture from scratch in Python. I'm doing this as a programming exercise trying to figure out shreduling and stuff on my own. I like the way some things are done in ChucK so I'm trying to keep those while adding more features and making it more Pythonic.
Ge hasn't yet given me the permission to use the name 'ChucK' so PyChucK is more of a placeholder name right now. I'm not even sure if Python can do realtime synthesis even after burying the main code in C. If it can't do realtime it can't do livecoding or HID and it's not really a chuck then.
However my main focus is on creating an expressive set of classes and generators for offline audio composition and I try to keep things flexible should one get experimental with extension modules. Smile

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Thu Jun 26, 2008 10:03 am    Post subject: Reply with quote  Mark this post and the followings unread

Wow, this is a major undertaking, I wish you the best of luck with it!
_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Thu Jun 26, 2008 1:04 pm    Post subject: Reply with quote  Mark this post and the followings unread

Inventor wrote:
Wow, this is a major undertaking, I wish you the best of luck with it!

Thanks, I wish you luck also on your chuckian adventures.
I just finished implementing the arithmetic for the chuck-types and I'm moving on to oscillators. I made a little improvement to the BLIT code and the last harmonic should now appear and disappear smoothly as the frequency changes. Can't wait until I get to try it in action with just tuned harmonies.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Thu Jun 26, 2008 2:33 pm    Post subject: Reply with quote  Mark this post and the followings unread

You could call it "Puck" for Python-Chuck", but I guess you thought of that already. Successfully pulling this off would seem to be a real resume bullet-item for a CS person.
_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Tue Jul 01, 2008 5:10 am    Post subject: Reply with quote  Mark this post and the followings unread

I've gotten the pure python version to a such a state that I could try everything out and get a good overview on things. It still throws a ton of exceptions every time I try something different. I don't think I will release this version publicly, it would be just too cruel to the user. :)
If you are a super adventurous python hacker and you really have nothing better to do then you can contact me and I'll give you the alpha version of PyChucK to play with.

So I think now is the time to start making it into a smooth C extension module.
Any suggestions on how to do this?
The main platform I'm writing PyChucK for is Linux but portability would of course be nice.
I'd like to have support for JACK for audio I/O.
Should MIDI and OSC be done with python modules or C extensions?

EDIT: I got JACK rolling and I made my first realtime synth with C - a polyphonic MIDI controlled sinewave oscillator. Yay, progress.

EDIT2: Starting to grasp the Python/C API. Making progress.

EDIT3: Ahh, the magical world of Segmentation faults.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Sun Jul 06, 2008 8:03 am    Post subject: Reply with quote  Mark this post and the followings unread

I've now gone over five minutes without Seg faulting or corrupting the memory of the Python interpreter, a new record!

I'm now designing the Gain unit generator and here are the current specifications:
*Naturally it has the .gain attribute. :)
*It has an .empty attribute that is used as the constant input signal if there are no other inputs. (Any input overrides it.)
*It has the .op attribute like ChucK's Gain does but with a few extras.
-1 User specified Python binary function.
0 Nullify all input.
1 + Add all input together
2 - Reduce by subtracting ie. start with the first input and subtract the rest.
3 * Multiply all input
4 / Reduce by dividing ie. start with the first input and divide it with the rest.
5 % Reduce by taking the modulus.
6 ** Reduce by raising to the power
7 & Take the smallest input.
8 | Take the largest input.
9 ^ Add inputs together and take modulus 2.
10 Round inputs to the nearest integer and reduce by logical and
11 Same as 10 but with logical or
12 Same as 10 but with logical xor
13 Same as 10 but with logical nand
14 Same as 10 but with logical nor

*It has a .mode attribute for shaping the reduced input.
-1 User specified Python unary function.
0 Nullify all output (this is a bit redundant)
1 Normal output (identity operation)
2 Squared output
3 Cubed output
4 output**4
5 output**5
6 Fully rectified output (absolute value)
7 Half rectified output (if negative then zero)
8... math.h functions and a couple more

All arithmetic operations between UGens will result in a new Gain unit generator with the appropriate reducing operator (shown above).
Notice how &, | and ^ operate on zero and one the same way as the logical operations would.

The unary operation + will result in an additive Gain.
The unary operation - will result in an additive Gain with .gain = -1.
The unary operation abs will result in an additive Gain with fully rectifying mode.
The unary operation ~ will result in an additive Gain with half rectifying mode.


Did I miss anything? :)

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Sun Jul 06, 2008 11:56 am    Post subject: Reply with quote  Mark this post and the followings unread

Make it get me a beer.

But seriously, this IS quite an undertaking and you ARE accomplishing it. I'm impressed! Keep on truckin', Frostburn!

_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Sun Jul 06, 2008 1:01 pm    Post subject: Reply with quote  Mark this post and the followings unread

And truck I shall. :)
Oh lookie! There's the error function in the GNU library... I wonder what erf-distortion sounds like. How about binary Beta function of a bandlimited sawtooth wave and an anti-aliased square?

I think Ws[function_name](...) could work as the WaveShaping syntax.
Code:
b,s = BlitSawOsc(200.0), AaSqrOsc(300.0, width=0.3)
totalcpufrier = WsErf( WsBeta(b,s) )
totalcpufrier >> dac

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
kijjaz



Joined: Sep 20, 2004
Posts: 765
Location: bangkok, thailand
Audio files: 4

PostPosted: Sun Jul 06, 2008 11:16 pm    Post subject: Reply with quote  Mark this post and the followings unread

Ahhhh this is exciting.
I haven't been in Python yet, so i should start learning very soon.
Back to top
View user's profile Send private message Send e-mail Visit poster's website Yahoo Messenger MSN Messenger
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Mon Jul 07, 2008 12:46 am    Post subject: Reply with quote  Mark this post and the followings unread

Keep your shirts on girls, we ain't done yet!
It's said that good things come to those who wait, but I don't know about the Internet on that one. :)

Moving on to the oscillator specs:

Each oscillator has the usual members.
*phase, warped to [0,1) range.
*freq, running frequency.
*width, the width of the duty cycle or other timbral characteristic.

They also come prepatched with the following modulators that can all be used at the same time if one wishes.
*AM, amplitude modulation. Multiplies output by this.
*PM, phase modulation. Adds to the current phase.
*FM, frequency modulation. Adds to the current frequency.
*WM, width modulation. Adds to the current width.
*hard, hard sync. Every positive zero crossing here resets the phase of the oscillator.
*soft, soft sync. Every positive zero crossing here reverses the direction of the oscillator.

I have the following oscillators in mind:
*PhasorOsc, output is the same as internal phase.
*SinOsc, sine wave oscillator.
*CosOsc, sine wave oscillator. Different width implementation.
*PulseOsc, output is 1 for the duration of width, zero otherwise.
*RectOsc, output is 1 for the duration of width, -1 othewise.
*SqrOsc, DC blocked RectOsc.
*TriOsc, Integral of SqrOsc. (The usual TriOsc of ChucK).
*ParOsc, Integral of TriOsc. Parabolic Oscillator.
*SawOsc, TriOsc with width fixed to 0 or 1.
*Sine(WaveForm)Osc,the width parameter morphs between sine wave and target waveform.
*Aa(WaveForm)Osc, Anti-aliased version of WaveFromOsc.
*BlitOsc, Band limited impulse train.
*Blit(WaveForm)Osc, Band limited version of WaveFormOsc (If it's Blit based).
*BuzzOsc, Sum of sine wave harmonics with a given spectral falloff inside a given band of harmonics.
*TableOsc, User defined waveform, fast but no width control.
*FunOsc, User defined waveform.
*DigitalTapeOsc, Insane manipulation of sound data.

EDIT: I got raw sample dumping working. Lol, the speed of sample generation increased by a factor of several hundreds compared to the pure python version. But that was to be expected. Now I'll just have to figure out how to dump the samples to an audio buffer instead of the hard disk.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Kassen
Janitor
Janitor


Joined: Jul 06, 2004
Posts: 7678
Location: The Hague, NL
G2 patch files: 3

PostPosted: Mon Jul 07, 2008 9:15 am    Post subject: Reply with quote  Mark this post and the followings unread

This is starting to look quite interesting, mr. Burn!
_________________
Kassen
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Mon Jul 07, 2008 11:59 am    Post subject: Reply with quote  Mark this post and the followings unread

Here are my thoughts on Virtual Machines and shreds:
A VirtualMachine is an UGen with the usual .now attribute that gets ticked one sample at a time along with the rest of the UGens.
It also has a .mow (measured now) attribute that denotes the current measure or bar in score time. The output of the Virtual Machine UGen is .mov as a float.
It has a .tempo attribute that tells how fast .mov advances compared to .now, tempo is measured in beats/second ie. in Hertz.
It has an .FM modulator that adds the input to tempo.
I think I'll throw in a .TM modulator as well that multiplies tempo by the input.

Shreds are implemented as python generators ie. resumable functions. They offer a clean syntax using the yield [duration] statement to advance time.
Because generators are built in to Python there will be no main shred. On the top level you can create, connect and delete UGens and spork shreds but you cannot advance time using yield. There cannot be a .me keyword for shred auto inspection.
I don't think that child-parent relationships are necessary between shreds. If a shred wants to run wild, let it. No need to kill it if the parent dies. You can always close a shred using the .close method that Python provides.

Shreds can yield None (or just yield) to allow other shreds shreduled to run at the same time to run first.
yield a time to sleep until that time. (Times smaller than now will issue a warning and run immediately.)
yeild a duration to sleep for so many frames.
yield a measure to sleep until mow reads the same. (Measures smaller than mow will issue a warning and continue running.)
yield a beat to sleep for that many beats.
yield an Event to sleep until that Event signals.

EDIT: Coding the shred stacks, mmm pointer magic. (mmm, infinite recursion that fills up the memory heap and crashes.)

EDIT: Events shall henceforth be callables who taketh as arguments the noble VM and the respectable shred in question. Execution of the shred shall thence be seized until her majesty Event shalt otherwise decree.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Tue Jul 08, 2008 10:46 pm    Post subject: Reply with quote  Mark this post and the followings unread

We have lift off!
PyChucK made it's first sound just now thanks to Python's built in ossaudiodev module.

The piece of code that follows creates a sinewave modulator m with frequency of 2Hz and a gain of 100.0.
Connects it to the FM input of a carrier sinowave s with a width of 0.4 .
Then it's just simple matter of creating a buffer, connecting the patch to the blackhole ,initializing the audio device and dumping data to it.

I just ran it with the command:
python chuckosstest.py

It made a wobbling beep!
Gratifying.

Code:
import ossaudiodev
from chuck import *

m = SinOsc(2.0, gain = 100.0)
s = SinOsc(440.0, width = 0.4)
m >> s.FM

f = FrameBuffer()

s >> f >> blackhole

dev = ossaudiodev.open('w')
(fmt,channels,rate) = dev.setparameters(ossaudiodev.AFMT_S16_LE, 1,44100)
set_srate(rate)

samplecount = 0
while samplecount < rate*5:
    tick(blackhole,1024)
    samplecount += dev.write( f.flush_all() )
   
dev.close()   


EDIT: Running PyChucK in Python's interactive mode with ossaudiodev in it's own thread = livecoding goodness. The system responds in real time to what I'm coding.
EDIT: Stereo output is up.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Kassen
Janitor
Janitor


Joined: Jul 06, 2004
Posts: 7678
Location: The Hague, NL
G2 patch files: 3

PostPosted: Wed Jul 09, 2008 7:24 am    Post subject: Reply with quote  Mark this post and the followings unread

Really impressive, Frost!

I like the way you are dealing with modulation, having a more SC-like approach there. This livecoding thing sounds good as well, how large is the granularity of what can be updated without bothering other parts of the running program? Is this syntax the way you'd like to keep it or are you aiming for something more ChucKian with a "real" massively overloaded ChucK operator in the future? Please keep us up to date!

_________________
Kassen
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Wed Jul 09, 2008 2:04 pm    Post subject: Reply with quote  Mark this post and the followings unread

I'll take a closer look at the interactive mode later to see what are the limits of responsiveness and if there are audio drop outs with small buffers (I need to have the streaming buffer code ready to test adc input too). I'll report when I know.
The syntax is the way I like it.
( spam = eggs ) syntax for assignment and
( foo >> bar ) to imply connection.
It wouldn't make much sense to massively overload >> either because it's already used by Python with different meaning ie. bit shifting. I don't think you can make up a new operators in Python without modifying it's core. If I could have the authentic => operator I would overload it to mean function calls.
I find
5 => fun1 => joy2 => bliss3 => result
more aesthetic than
result = bliss3( joy2( fun1( 5 ) ) )

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Kassen
Janitor
Janitor


Joined: Jul 06, 2004
Posts: 7678
Location: The Hague, NL
G2 patch files: 3

PostPosted: Wed Jul 09, 2008 2:34 pm    Post subject: Reply with quote  Mark this post and the followings unread

Frostburn wrote:

I find
5 => fun1 => joy2 => bliss3 => result
more aesthetic than
result = bliss3( joy2( fun1( 5 ) ) )


I agree.

I find it easier and more natural to write and read as well.

_________________
Kassen
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Wed Jul 09, 2008 2:40 pm    Post subject: Reply with quote  Mark this post and the followings unread

Well, a lot of the details are either over my head or otherwise of minor interest to me, however to see a person take on such a monumental task and actually make decent progress toward accomplishing it is very encouraging indeed. When you first announced this project I thought that you had bit of more than you could chew, or perhaps someone had whacked you with a silly stick! But you are proving that reaction incorrect, you are actually accomplishing the goal of recoding the fundamentals of ChucK in your own way. Plus I'll reassert that doing this makes for a decent CV/resume enhancement for any software professional. More power to ya, Frostburn! Keep it up!
_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Wed Jul 09, 2008 2:45 pm    Post subject: Reply with quote  Mark this post and the followings unread

Field of ASCII art cheerleaders for Frostburn:

Code:

    *\o_               _c/*
     /  *             *  \
    <\       *\o/*       />
               )
        c/*   / >    *\o
        <\            />
__o     */\          /\*     c__
* />                        <\ *
 /\*    __o_       _c__     */\
       * /  *     *  \ *
        <\           />
             *\c/*
ejm97        __)__


"go coder go!" hee hee, now I'm getting downright ridiculous, aren't I?

_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Wed Jul 09, 2008 4:12 pm    Post subject: Reply with quote  Mark this post and the followings unread

silly Inventor wrote:
"go coder go!" hee hee, now I'm getting downright ridiculous, aren't I?

When a programming language has something like spork as a keyword you can't really be out of place with your sillynessess on it's forum. :)
To be honest I didn't expect that PyChucK would soar so soon (if ever). It's been a fun ride so far and I've learned a ton.

update: I got the adc streaming code working but OSS doesn't like full duplex mode on my machine and I get clicks if I try to record a sound with OSS in any application. But I did get less clicks in PyChucK. I guess I'll focus on the playback and disk rendering and get the waveshapers and shreds up for some demos.

EDIT: Things are starting to come together but as I was afraid having six modulators hardwired causes a lot of overhead and as a result PyChucK's oscillators are about four times more CPU expensive than ChucK's. Also OSS sucks, lags and drops.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Sat Jul 12, 2008 10:18 am    Post subject: Reply with quote  Mark this post and the followings unread

PyChucK now has Noise, Step, Impulse, TimeGen (infinite linear ramp up), 51 waveshapers, 17 binary waveshapers, 15 oscillators, 10 native types and one VirtualMachine. :)

Make some noise if you want it now! I'll cook up the most unstable thing that you'll have to compile yourself and use without much useful documentation. I'll throw in some examples though.

If you care to wait I'll still have a lot of UGens to implement.
-Sample tables (Chebyshev distortion comes to mind)
-Envelopes (simple, ADSR, user defined linear, user defined cubic)
-Stereo stuff.
-Buffered Delays
-Filters (from OneZero to BiQuad, low-,high-,band-,allpass, band reject, peaking EQ, low shelving, high shelving)
-Reverbs
-Convolution Filters (Coloring filter [for eg. pinking noise], Adams-Bashforth [stabilizes simple self modulation], brute force free convolution, delayed Hilbert Transform, delayed smart free convolution)
-Digital Tape

When I reach this point I think I'll release a public beta.

Of course a good library of instruments, granular synthesis, wavelets and all that jazz would be nice to have at some point. :)

UAnas will probably come as a separate package because they'll depend on other libraries like numpy. I don't think theres any point in reinventing the wheel here.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Frostburn



Joined: Dec 12, 2007
Posts: 255
Location: Finland
Audio files: 9

PostPosted: Mon Jul 14, 2008 2:24 pm    Post subject: Reply with quote  Mark this post and the followings unread

...so many things look so good on paper until you try them out. :)
I've decided to get some practical experience with PyChucK as it is so that I have something to reflect on before I move on to developing more UGens. So implementing JACK gets the first priority because it allows me to hook up my MIDI keyboard. I'll also look in to the sequencing/composing aspects.
I wonder what will come out of this. Without filters the sound will be very clean and depthless. Mmm.... Mathematically precise chip tunes.

_________________
To boldly go where no man has bothered to go before.
Back to top
View user's profile Send private message
Inventor
Stream Operator


Joined: Oct 13, 2007
Posts: 6221
Location: near Austin, Tx, USA
Audio files: 267

PostPosted: Mon Jul 14, 2008 4:16 pm    Post subject: Reply with quote  Mark this post and the followings unread

If you want a sequencer, make a Boolean Sequencer! Also, why doesn't PyChucK have filters?
_________________
"Let's make noise for peace." - Kijjaz
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic Moderators: Kassen
Page 1 of 4 [95 Posts]
View unread posts
View new posts in the last week
Goto page: 1, 2, 3, 4 Next
Mark the topic unread :: View previous topic :: View next topic
 Forum index » DIY Hardware and Software » ChucK programming language
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Forum with support of Syndicator RSS
Powered by phpBB © 2001, 2005 phpBB Group
Copyright © 2003 through 2009 by electro-music.com - Conditions Of Use