Hi Casper

On Sat, Dec 28, 2013 at 6:02 PM, Casper Schipper <casper.schipper@gmail.com> wrote:
Your implementation at first sight seems to me like like quite a thorough port of the complete structure of ChucK, complete with VM etc.. Does that mean that it will be possible to have sample accurate timing in your code execution just like ChucK ? Playing a little bit with JavaScript I’ve noticed that the JavaScript setTimeout clock is very unpredictable and found it to be messy even for a simple drum machine. Of course there are ways of dealing with that by scheduling ahead and using the WebAudio API clock, but that would not work very well with the way ChucK deals with time. But maybe your implementation doesn’t require the clock to be accurate ? I’m very curious to hear what your experience has been!

Your observation is quite on the money as regards setTimeout. I only made use of it for simplicity during prototyping, and mean to replace it with something better suited to audio scheduling, e.g. the way that WAAClock does it (via callbacks to a custom audio processing node). I'm not sure if timing will ever be perfect, but hopefully it'll be acceptable.
 
Anyway what surprised me (shocked is maybe a better word, considering the bad reputation of JavaScript) while playing with the Web Audio API, is that JavaScript is quite interesting as an algorithmic composition scripting language, since it is fundamentally a functional language not that unlike Scheme or Lisp (and some powerful algorithmic musical tools have been built in those like: AC toolbox, Niquist and AthenaCL in Python). Here JavaScript could have an advantage above the more traditional way ChucK deals with types and classes. When using ChucK I found that I almost always wanted to add functionalities to the arrays like iterating, choosing, sorting, mapping functions, lambda functions etc… These are also in the LicK library for ChucK, but I haven’t seen many people use that, I guess because it complicates the syntax a bit*. In JavaScript you get those things from the start (or they are very simple to add). Also it’s easy to change behavior of objects like adding methods dynamically to objects, which is very interesting from the point of view of on the fly programming.

I'm quite fond of functional programming too (although I'm more of an OO guy), which is one of the reasons I prefer CoffeeScript over raw JavaScript, as this language lends itself better to this style of programming, not having to reach for the underscore library all the time. I know very little ChucK as of yet, but my main motivation is to have a low-threshold environment for playing with the language. I'm not trying to implement the perfect in-browser music programming experience :)

Best,
Arve

On 27 dec. 2013, at 02:58, chuck-dev-request@lists.cs.princeton.edu wrote:
Hi guys

I've begun work on a JavaScript (well, CoffeeScript) implementation of ChucK, ChucKJS, for which I'm seeking feedback from ChucK developers in particular. Web Audio API is used to produce sound. Very little of the language is implemented so far, I've just today finished end-to-end support (including a VM) for playing back a sine tone for a certain interval of time as in the following program:

    SinOsc sin => dac;
    2::second => now;

Even though this may seem minor, I'm pretty happy that this is at all possible just from within the browser :) As explained in the project's README, there is a self-contained example (examples/example1.html) which demonstrates the aforementioned sine wave playback capability.

What do you guys think, are anyone else interested in being able to run ChucK programs in the browser? Anyone interested in helping out on ChucKJS (like ChucK it's GPL licensed)?

My motivation for writing ChucKJS is to develop an online development environment for ChucK where one can execute the programs directly in the browser, I figure this will lower the threshold and make the language more fun to work with.

Merry Christmas,
Arve


_______________________________________________
chuck-dev mailing list
chuck-dev@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-dev