Dear all,
chuck-1.5.1.0 (chai) has been released:
https://chuck.stanford.edu/release/
WebChuck & IDE have also been updated to 1.5.1.0:
https://chuck.stanford.edu/webchuck/https://chuck.stanford.edu/ide/
what's new? (full release notes)
https://chuck.stanford.edu/release/VERSIONS
===============
Some highlights
===============
This release (1.5.1.0) updates a long-standing policy regarding
`return`statements in function declarations (see below); added
@array.sort(); added new command-line option (--pid-file), useful for
process monitoring in long-running installations; general bug fixes and
stability improvements.
---
NEW: the chuck compiler now rejects non-void function definitions in
which not all control paths return a value, and will print a compiler
error in the form of:
"error: not all control paths in 'fun int f()' return a value"
RATIONALE: while *** this may break some existing code (apologies!) ***
that assumed the previous return semantics (or forgot to return a value
or accidentally declared a function as returning something when it
should return `void`), we believe this change will be more beneficial in
the long term and will lead to clearer, more intentional code.
---
FYI much has been added recently between 1.5.0.0 and 1.5.1.0:
* new for-each loop syntax for iterating through arrays (1.5.0.8)
* enhanced and more accurate compiler error reporting; now
highlights code and pinpointing error location in code (1.5.0.5)
* detection and reporting for out-of-order dependencies (1.5.0.8)
...the cause of much mysterious behavior and crashing previously
* color terminal support for CLI chuck (1.5.0.5)
* expanded class library support in IO, random number generation,
Machine.eval(), chugins management, and array
* new features in CLI chuck, miniAudicle, WebChucK & IDE
* (developer) streamlined c++ integration for those wishing to
incorporate ChucK core into other c++ hosts (1.5.0.7)
https://github.com/ccrma/chuck/tree/main/src/host-examples
Our work is never done. Here's to supporting research, teaching, and
art-making.
Keep on ChucKin'
ChucK Team
=====================================
Join us on Discord!
https://chuck.stanford.edu/community/
=====================================
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- what we make, makes us --
https://artful.design/
~~~
Dear all,
Since chuck-1.5, we shipped a series of incremental releases. We thought
we'd spare your inbox (until now!) and offer a cumulative announcement.
The latest release -- chuck-1.5.0.5 (chai) -- just dropped:
https://chuck.stanford.edu/release/
WebChuck & IDE have also been updated to 1.5.0.5:
https://chuck.stanford.edu/webchuck/https://chuck.stanford.edu/ide/
===============
Some highlights
===============
* chuck in color -- color terminal support is here (for command-line
ChucK); compiler errors, probes, logs, on-the-fly programming (OTF), and
other messages are output in color, for easier reading and to be more
colorful
See some example screenshots:
https://chuck.stanford.edu/doc/images/chuck-tty-color2023.png
===
* speaking of compiler errors, ChucK (command-line, miniAudicle, and
WebChucK IDE) now display relevant code when reporting compiler errors,
and pinpointing the error location. For example:
```
error-testA.ck:3:5: error: class 'SinOsc' has no member 'test'
[3] foo.test();
^
error-testB.ck:5:12: syntax error
[5] */ it @ is not ! valid => syntax!
^
```
The improved error-reporting should make chuck a bit easier to use for
everyone, and especially for students learning the language.
===
* improved random number generator (RNG) on all platforms (and
especially on windows); ChucK now defaults to mt19937 (Mersenne Twister
with long period of 2^19937; when supported by the underlying platform)
and with a few additional tools/toys...
Some new random examples:
https://chuck.stanford.edu/doc/examples/math/randomize.ckhttps://chuck.stanford.edu/doc/examples/math/maybe.ckhttps://chuck.stanford.edu/doc/examples/math/int-dist.ck
===
* Machine.eval(...) now will immediately spork and synchronously run the
evaluated code as a new shred, while automatically yielding the current
shred to give the new shred a chance to run, all this without advancing
time. This opens the possibility for running generated code at runtime!
powerful! perilous!
Machine API reference:
https://chuck.stanford.edu/doc/reference/base.html#Machine
Machine.eval() examples:
https://chuck.stanford.edu/doc/examples/machine/eval.ckhttps://chuck.stanford.edu/doc/examples/machine/eval-global.ck
===
miniAudicle "quality of life" improvements for newcomers and veterans alike:
* miniAudicle "Help" menu now has items that will open websites in
the default browser -- for quick access to documentation:
"ChucK Class Library Reference..."
https://chuck.stanford.edu/doc/reference/
"ChucK Documentation..."
https://chuck.stanford.edu/doc/
"ChucK Community..."
https://chuck.stanford.edu/community/
* "Audio driver" drop-down selection in Preferences, for run-time
selection of different drivers: "DirectSound", "WASAPI", or "ASIO" on
Windows; "Jack", "Pulse", or "ALSA" on Linux
* Device Browser now has an "Audio driver" drop-down box that can select
an available driver to view its associated audio devices
* Preferences->ChuGins can now probe chugins on the systems
===
See what's new (full release notes):
https://chuck.stanford.edu/release/VERSIONS
Much more is on the way...
===
(For developers)
* improved build instructions for ChucK, miniAudicle, and Chugins on
their respective repository landing pages:
https://github.com/ccrma/chuck#readmehttps://github.com/ccrma/miniAudicle#readmehttps://github.com/ccrma/chugins#readme
=========================================
chuck one, chuck all -- join us!
https://chuck.stanford.edu/community/
=========================================
Happy ChucKing,
ChucK Team
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- what we make, makes us --
https://artful.design/
~~~
Dear friends,
chuck-1.5.0.1 (chai) has been released:
https://chuck.stanford.edu/https://chuck.cs.princeton.edu/
This is a patch release following the major chuck-1.5 release:
---
* fixed HID joystick input on Windows
* fixed a potential-crash-on-shutdown type system issue
* fixed binary FileIO reading of signed/unsigned integers
* improved: Math.random*() functions now internally use a standard
Mersenne Twister random number generator (mt19937); this greatly
improves the quality of RNG output, especially on Windows
* added support for 24-bit, 32-bit, and 64-bit WvOut audio file output
* miniAudicle (Windows and Linux) now has a "Audio driver" drop-down
selection in the Preferences dialog window; this selections allows for
run-time selection of different drivers: "DirectSound", "WASAPI", or
"ASIO" on Windows; "Jack", "Pulse", or "ALSA" on Linux
* (Linux) fixed miniAudicle compilation with Qt6
---
Full release notes:
https://chuck.stanford.edu/release/VERSIONS
WebChuck and IDE have also been updated to 1.5.0.1:
https://chuck.stanford.edu/webchuck/https://chuck.stanford.edu/ide/
---
Also, we'd like to signal-boost Clint Hoagland's excellent video
tutorial series, "Creating Electronic Music with Chuck":
https://www.youtube.com/watch?v=toFvb6uqiDc&list=PL-9SSIBe1phI_r3JsylOZXZyA…
Made in ChucK: here is a recent Stanford Laptop Orchestra concert:
https://slork.stanford.edu/events/2023/spring/
Join the ChucK community on Discord!
https://discord.gg/ENr3nurrx8
---
Keep on ChucKin,
ChucK Team
[chuck-1.5.0.1 contributors] Spencer Salazar, Perry Cook, Celeste
Betancur, Andrew Zhu Aday, Marise van Zyl, Terry Feng, Nick Shaheed,
Eito Murakami, Ge Wang, Matt Wright, Fernando Lopez-Lezcano, Nils Tonnätt
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- what we make, makes us --
https://artful.design/
~~~
Dear all,
A new release of ChucK (1.5.0.0; codename "chai") is here:
https://chuck.stanford.edu/https://chuck.cs.princeton.edu/
This is a major release; additions and updates include:
* ChucK + AI (ChAI) -- a set of AI/ML tools for building interactive AI
musical instruments and systems (thanks to Dr. Rebecca Fiebrink for
blazing the trail on interactive AI for music; thanks Yikai Li and the
students of Music AI):
https://chuck.stanford.edu/chai/https://chuck.stanford.edu/doc/reference/ai.html
* WebChucK IDE -- code ChucK on the web!
https://chuck.stanford.edu/ide/
(thanks Terry Feng + team for WebChucK IDE)
* WebChucK landing page (use ChucK in your web projects)
https://chuck.stanford.edu/webchuck
(thanks Jack Atherton for creating WebChucK)
* all new API reference, now auto-generated from the type system (based
on Spencer Salazar's 'ckdoc' utility; many thanks to everyone who
contributed documentation and examples):
https://chuck.stanford.edu/doc/reference/
* audio drivers support -- ASIO and WASAPI support on Windows; can now
compile Jack + Pulse + ALSA support into a single chuck executable on
Linux (thanks Dana Batali and Nick Shaheed)
* improved audio devices support, including AirPods and other Bluetooth
headphones
* The full list of new features and updates can found here:
https://chuck.stanford.edu/release/VERSIONS
* (extra!) A few projects made with ChAI from a recent course
https://ccrma.stanford.edu/courses/356/https://ccrma.stanford.edu/courses/356/gallery/
Happy ChucKing to all!
ChucK Team
[Many people contributed to chuck-1.5] Perry Cook, Spencer Salazar, Jack
Atherton, Celeste Betancur, Chris Chafe, Michael Mulshine, Andrew Zhu
Aday, Marise van Zyl, Terry Feng, Nick Shaheed, Alex Han, Eito Murakami,
Yikai Li, Ge Wang
[Additional thanks] Dana Batali, David Braun, Barak Pearlmutter, Eric
Heep, Fernando Lopez-Lezcano, Kunwoo Kim, Stanford HAI, people of CCRMA
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- what we make, makes us --
https://artful.design/
~~~
Dear all,
chuck-1.4.1.0 (numchucks) is available:
http://chuck.stanford.edu/http://chuck.cs.princeton.edu/
This is a significant update to ChucK that addresses many issues while
adding new features, UGens, examples, and internal groundwork for future
directions. We heartily recommend updating to this latest version. The
release notes are reproduced below and can be found at this URL:
http://chuck.stanford.edu/release/VERSIONS
Thank you and keep on chuckin'...
Perry, Spencer, Ge and ChucK Team
-------
1.4.1.0
(NOTE) chuck-1.4.1.0 is the first significant release resulting from a
coordinated team effort to update and improve ChucK for teaching and
research. In April 2021, Perry and Ge led a ChucK "Global
Repair-a-thon", which identified issues and put forth a new Development
Roadmap. The ChucK dev team will follow this roadmap for updates, new
features, and new ChucK mediums (e.g., Chunity, WebChucK, FaucK,
ChucKTrip, and more). Many people were involved in this significant
release, including Jack Atherton, Mike Mulshine, Matt Wright, Rebecca
Fiebrink, Dan Trueman, Lloyd May, Mark Cerqueira, Mario Buoninfante,
Perry Cook, Spencer Salazar, and Ge Wang. Many thanks to everyone who
contributed. Happy ChucKing!
---
- (added) static Object.help();
All ChucK objects (i.e., all non-primitive types) can now invoke
.help(), which will dynamically generate and print to console
the description and inheritance hierarchy of the underlying type,
as well as the available functions at runtime. This can be called
on any object instance or on any class (without an instance):
// any object instance
SinOsc foo;
// print to console info about its underlying type
foo.help();
(OR)
// call help() from any class (identical output as above)
SinOsc.help();
Intended to be a quick runtime reference / learning tool!
- (added) examples/help.ck -- show .help() in action
- (added) examples/deep/chant.ck (by Perry Cook, 2006) -- a chant
singing synthesizer that makes use of ChucK's strongly-time and
concurrent programming features.
- (added) new Multi-channel LiSa UGens! (LiSa10 was already present)
LiSa2 (stereo)
LiSa4 (quad),
LiSa6 (6-channel; laptop orchestra edition!)
LiSa8 (8-channel),
LiSa16 (16-channel)
- (fixed) LiSa playback bug; voice panning now handles the mono case;
previously was silencing voice playback
- (added) new STK set/get access functions in FM:
float op4Feedback( float value );
Set operator 4 feedback.
float op4Feedback();
Get operator 4 feedback.
float opADSR( int opNum, float a, float d, float s, float r );
Set operator ADSR: attack, decay, sustain, release.
float opAM( int opNum, float value );
Set operator amplitude modulation.
float opAM( int opNum );
Get operator amplitude modulation.
float opGain( int opNum, float value );
Set operator gain.
float opGain( int opNum );
Get gperator gain.
float opRatio( int opNum, float ratio );
Set operator frequency ratio.
float opRatio( int opNum );
Get operator frequency ratio.
float opWave( int opNum, int wave );
Set operator waveform [1-8].
- (added) new Synthesis Toolkit (STK) FM instruments from Perry!
HnkyTonk: STK-style Honkey Tonk Piano FM synthesis instrument.
(aka, Algorithm 1 of the Yamaha TX81Z DX11 FM synthesizer)
FrencHrn: STK-style French Horn FM synthesis instrument.
(aka, Algorithm 2 of the Yamaha TX81Z DX11 FM synthesizer)
KrstlChr: STK-style "Crystal Choir" FM synthesis instrument.
(aka, Algorithm 7 of the Yamaha TX81Z DX11 FM synthesizer)
*** for each of these, try using the new .help() to examine its
documentation and interface; e.g., HnkyTonk.help(); ***
- (added) new Moog function:
float filterStartFreq( float freq );
Set filter starting frequency.
float filterStartFreq();
Get filter starting frequency.
- (added) new STK examples:
examples/stk/frenchrn-algo2.ck -- FM French Horn demo
examples/stk/honkeytonk-algo1.ck -- fun with FM Honkey Tonk
examples/stk/krstlchr-algo7.ck -- heavenly FM Kristal Choir
examples/stk/hevymetl-acoustic-algo3.ck -- FM HevyMetl
=> Nylon Guitar
examples/stk/hevymetl-trumpet-algo3.ck -- FM HevyMetl => Trumpet
examples/stk/rhodey-song.ck -- a lovely little number
- (updated) tweaks to a number of STK UGens, which may result in audio
changes; the affected UGens are:
BandedWG, BeeThree, FMVoices, HevyMetl, PercFlut, Rhodey,
TubeBell, Wurley
- (fixed) issue in PluckTwo in computing delay length; this affects
the tuning of various plucked string models, including Mandolin.
- (added) .frames() for SndBuf and SndBuf2; returns the number of
sample frames in the loaded sound file. This is identical in
behavior to .samples() -- but for stereo+, .frames() is
semantically more accurate than .samples().
- (added) "global" declarations for int, float, string, Object, UGen,
Event; this can be used in-language across ChucK files (each file
must first "declare" the global value before using it). This also
support usage from external hosts such as Chunity. (thanks to Jack
Atherton for this work!)
- (added) constant power panning (as controlled by the .pan parameter)
for all UGen_Stereo--including Pan2, stereo dac, stereo adc; this is
controllable using the new .panType parameter. By default, constant
power panning is NOT enabled for dac and adc, whose panning behavior
is unchanged (panType==0) and favors a kind of unity-gain-preserving
but perceptually suspect panning scheme. By contrast, Pan2 will
default
to use constant power panning (panType==1). This change will alter
the effect of any existing code that uses Pan2. Specifically, it
will introduce a ~3 dB reduction in the output Pan2 (it is possible
to restore the previous behavior by explicitly setting .panType to
0). This ~3 dB reduction corresponds to the equal-powered amplitude
value when pan is at center (pan=0). Mathematically, the reduction
amount can be calculated using Std.lintodb(Math.cos(pi/4))
(To hear this new behavior, check out):
examples/stereo/stereo_noise.ck
- (BEHAVIOR CHANGED) clearly separated array.size() and
array.capacity(); for historical/compatibility reasons, array.cap()
is the same as array.size() and generally should be avoided in favor
of either .size() or .capacity()
- (BEHAVIOR CHANGED): internally, all ChucK static functions are now
passed an extra parameter (Chuck_Type * TYPE) as a pointer to the
base type/class. This will affect Chugins, which should be updated/
rebuilt with the latest headers.
- (BEHAVIOR CHANGED): when connecting two multi-channel UGen's (both
are at least stereo), say LHS => RHS, if LHS channels < RHS
channels, the channels will be connected one-by-one up to the LHS
channel count; previously, the LHS channels will be automatically
repeated to connect to the RHS channels that have no corresponding
LHS channels. This behavior can still be achieved by manually
connecting the individual channels of LHS and and RHS through
LHS.chan(n) and RHS.chan(n).
- (fixed) resolved a bug with SndBuf not playing when .rate < 0 and
while .pos beyond the end
- (fixed) resolved a bug with SndBuf where it could output DC when
.rate < 0 after it reaches the beginning of the file (e.g., if the
first sample is non-zero)
- (fixed) resolved a bug in ADSR when sustain is set to 0 and audio
stops, .releaseTime return NaN and basically the world ends (thanks
to mariobuoninfante for help in addressing this)
- (fixed) reset Gen10 table to allow add/remove partials; thanks to
mariobuoninfant
- (fixed) updated MidiOut and removed check in order to allow messages
of size less than or greater than 3 bytes; thanks to
mariobuoninfant for this issue report on Ubuntu Studio 64-bit; this
fix addresses the sending of MIDI clock, stop, continue, and SysEx
-- also thank you mariobuoninfante for the fix.
- (fixed) ChucK shell can now be exited either by the "exit" command
or through ctrl-c. Previously. ctrl-c sometimes failed to end the
the program due to logic in the global cleanup function; this has
been addressed.
- (fixed) addressed an issue where Chugins were being loaded twice.
- (fixed) the --chugin-load:off option is now correclty taken into
account and will appropriately result in no Chugins being loaded.
- (deprecated) Chubgraph => (new) Chugraph;
Chubgraph will continue to function, with a deprecation warning.
- (documentation) updated embedded documentation text for all
statically linked UGens and libraries.
- (documentation) brought examples in alignment between distribution
and the online examples collection; many examples updated for
clarity and utility
http://chuck.stanford.edu/doc/exampleshttp://chuck.cs.princeton.edu/doc/examples
- (internal/refactor) the "Mega Merge 2021" integrates a long-standing
branch since REFACTOR-2017 that includes support for globals and was
the basis for Chunity. Future Chunity releases will align with
mainline ChucK language features. (thanks to Jack Atherton for
several years of laying the groundwork and for ChucK in Chunity!)
- (internal/developement) added m_started flag to the ChucK class to
avoid a strange (but mostly harmless) condition when the virtual
machine is shutting down and ChucK::run() attempt to call
ChucK::start()
- (internal/development) Thanks to Mark Cerqueira -- migrated from old
Travis CI (continuous integration testing) to GHA (GitHub Actions).
Dear all,
chuck-1.4.0.1 (numchucks) is available:
http://chuck.stanford.edu/http://chuck.cs.princeton.edu/
This is an minor release of ChucK and addresses a number of specific
issues. Please see the release notes at the end of this email and, as
usual, thank you and happy ChucKin!
Also, tune in live to Artful Design TV today (Wednesday 5/6) 1pm
PDT/UTC-7; Perry Cook, Spencer Salazar, and I will host to talk coding
and music with ChucK! It's free and open to all.
*********************************************************
What: Artful Design TV #6 "Coding Music with ChucK"
When: Wednesday (5/6) 1pm PDT (UTC-7)
*********************************************************
learn more/register/tune-in HERE: http://artful.design/tv
*********************************************************
-------
1.4.0.1
- (fixed) when opening audio input devices where the default
device has insufficient channels (e.g., MacOS input is mono
by default), logic has been added to also match sample rates
when searching for alternate audio input devices; additional
logic added in the specific case of mono input devices to
simulate stereo, to fulfill the standard request for stereo
input.
- (fixed) added check to prevent crash in rare situations involving
self-join when deleting XThread in background. (git PR #103)
- (fixed) by stuntgoat@github -- right-recursion in chuck parser
can exhaust memory in larger chuck files; this has been updated
to use left recursion. (git PR #32, (finally) merged by hand by
Spencer and Ge) Also thanks to Tom Lieber for the initial analysis
and solution:
https://lists.cs.princeton.edu/pipermail/chuck-users/2009-April/004029.html
- (added) by Nathan Tindall -- Q and freq bounding for filters (LPF,
HPF, BPF, BRF) to avoid LOUD FILTER EXPLOSIONS; now negative values
will throw an exception on the offending shred.
- (restored, macOS) MAUI Chugin now (re)supported, post 1.4.0.0
- (added; developer) ChucK.h API to set a main thread hook (e.g., for
graphical functionalitie from Chugins)
- (updated, developer) Chugin API now support main thread callback
for graphical-/GUI purposes
- (developer) refactored code to move I/O-related code out of
chuck_lang and into chuck_io.
Best,
Spencer, Ge, and ChucK team
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- what we make, makes us --
https://artful.design/
~~~
Dear ChucKists,
I hope this finds you well. Since April, I have been hosting a Zoom
series called Artful Design TV (COVID-19 Edition): a multi-format weekly
series encompassing artful design, music, coding, critical making with
helpings of history and philosophy, and life check-ins for participants.
No experience is needed; it's free and all are welcome.
https://artful.design/tv/
This coming Wednesday (5/6) at 1pm PDT/UTC-7, join us live for an
episode all about ChucK. Perry Cook, Spencer Salazar, and I will host
to unpack the arcane art of programming language design, write some code
to make music, gaze into the abyss of the ChucK virtual machine, and
more. In a word: fun!
Learn more / sign up here (free and open to all):
https://artful.design/tv
Check out earlier episodes in the Archive:
https://artful.design/tv/archive
Keep on ChucKin',
Ge!
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://ccrma.stanford.edu/~ge/
~
Artful Design: Technology in Search of the Sublime!
-- a book for the engineer with a soul --
https://artful.design/
~~~
Dear fellow ChucKians,
ARTFUL DESIGN: TECHNOLOGY IN SEARCH OF THE SUBLIME — a book about
how we shape technology, and how technology shapes us in turn — is
now released!
ChecK it out:
https://artful.design/
The chapters (with tips on how to read them):
https://artful.design/chapters.html
Order today, and I'll see you in the book:
https://artful.design/buy.html
ChucK on,
Ge!
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://www.gewang.com/
~
Co-founder, Smule
~~~
Friends, ChucKians, artful designers, lend me your ears!
For the past three years, and thanks to a Guggenheim Fellowship, I have
been quietly working on a new book about design and technology, art and
life. The book -- ARTFUL DESIGN: TECHNOLOGY IN SEARCH OF THE SUBLIME
(A MUSICOMIC MANIFESTO) -- explores design as the intersection of art,
engineering, and philosophy. It breaks down computer-mediated
instruments, tools, games, and social experiences in everyday life,
and elaborates 100+ tacit principles of artful design.
It's all in there: ChucK, laptop orchestras, Ocarina, video games,
wacky computer music interfaces, audiovisual design, and a whole lot
more. Published by Stanford University Press, ARTFUL DESIGN was created
entirely in the medium of a (full-color, 488-page) photo comic. This is
a book for anyone who has ever been curious about how we shape
technology, and how technology shapes us.
It's nerdy. It's philosophical. It's a core dump of my brain in comic
form. And it's coming out next week.
See for yourself:
https://artful.design/
The chapters:
https://artful.design/chapters.html
Pre-order the book now, and it will be at your doorstep next week!
https://www.amazon.com/dp/1503600521/https://artful.design/buy.html
Do you know anyone else who might be interested in this book? Please
share this with them!
Keep on ChucKin’ -- and I'll see you in the book!
Ge!
~~~
Ge Wang
Associate Professor
Center for Computer Research in Music and Acoustics (CCRMA)
Department of Music (also Computer Science, by Courtesy)
Stanford University
https://www.gewang.com/
~
Co-founder, Smule
~~~