~ICMC 2015 - Sept. 25 - Oct. 1, 2015 - CEMI, University of North Texas Music Programming in Gibber Charles Roberts [email protected] Matthew Wright [email protected] JoAnn Kuchera-Morin [email protected] University of California at Santa Barbara Media Arts & Technology Program ABSTRACT We document music programming in Gibber; a creative coding environment for the browser We describe affordances for a sample-accurate and functional approach to scheduling, pattern creation and manipulation, audio synthesis, using rhythm and harmony, and score definition and playback. 1. INTRODUCTION First introduced as an environment for live coding performance in 2012 [1], Gibber has gradually expanded in scope to include musical instrument design [2], 2D and 3D graphics, and improved affordances for both live coding and musical composition. This paper codifies the compositional affordances of Gibber, both from the perspective of real-time composition (also known as live coding [3, 4]) and more traditional compositional practice. Gibber embodies an interesting set of design decisions. Although it primarily uses a high-level language, JavaScript, for end-user programming, 1 it also offers low-level affordances not found in many music programming languages, such as the creation of multiple, sample-accurate clocks with audio-rate modulation of timing and intra-block audio graph modification. Efficiency is optimized whenever possible [5, 6] but it will most likely never be as efficient as music programming languages with C bindings; however, we feel the accessibility of the environment (a link is all that is needed to start programming in Gibber), the simplicity of the notation, and interesting approaches to time and pattern make Gibber a compelling choice as a musical programming tool. In addition to its dedicated web environment for programming, there is also a standalone JavaScript library, gibber.lib.js, that can be included and used inside of any HTML document. This library has been ported to work with p5.js 2, the JavaScript implementation of the Processing creative coding system. 1 Graphical shader programming in Gibber is performed in GLSL. 2 http://p5js.org Copyright: 02015 Charles Roberts et al. This is an open-access article distributed under the terms of the Creative Commons Attribution License 3.0 Unported, which permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. We begin by discussing the synthesis possibilities of Gibber, which include a wide variety of both synthesizers and effects. This is followed by a discussion of musical notation, including the use of symbols to represent concepts from the Western musical tradition. We discuss musical structure in Gibber, beginning with the use of patterns and sequencers and proceeding to higher-level heterarchical structures. We conclude with a discussion of our system in relation to other music programming languages and a brief look at Gibber in use. 2. SYNTHESIS AND SIGNAL PROCESSING Gibber provides a variety of options for audio synthesis, many of which are wrappers around the unit generators and instruments found in Gibberish.js, a lower-level DSP library for JavaScript [5] written specifically to support Gibber. While users can construct custom instruments from low-level unit generators in Gibber, one of its strengths compared to many music programming languages (particularly JavaScript-based) is an emphasis on usable, precomposed instruments. This frees composers and beginning programmers from the need to also be synthesis experts in order to achieve interesting sonic results. Here we provide a short overview of available synthesis options (some previously discussed in the context of Gibberish.js [5]), along with a more detailed discussion of several high-level unit generators that are more specific to Gibber. 2.1 Raw Oscillators The canonical waveforms are provided as wavetable oscillators. Additional quasi-bandlimited waveforms (pulse, square and saw) are provided using FM synthesis techniques [7]. 2.2 Sample Loading, Playback, and Manipulation Gibber provides a variety of options for audiofile playback. The standard Sampler object can load multiple audiofiles concurrently, and provides methods to schedule changes to the active buffer. It can be used to sample audio input and any signal in Gibber's audio graph, including the master output. A Sampler's built-in save method writes its stored audio buffer to a. way file, providing an easy way to record performances or compositions. - 50 -
Top of page Top of page