~ICMC 2015 - Sept. 25 - Oct. 1, 2015 - CEMI, University of North Texas
The Free sound object enables users to easily query and
download audiofiles from the Freesound database [8]. The
constructor for the Free s ound object takes three forms. A
single integer argument uniquely identifies a particular sound
in the database. A single string argument is used to query
the database and automatically return the highest-ranked result. Otherwise the argument is a dictionary containing the
search query and other options such as minimum and maximum file duration and selection parameters. Once an audiofile has been loaded from the database the functionality of
the F ree s ound object mirrors the Sampler object.
The SoundFont object provides basic support for loading
sets of samples that adhere to the General MIDI specification,
giving easy access to common synth sounds. t
2
3
2.3 Synthesizers
Gibber includes a variety of pre-built synthesis objects with
varying degrees of complexity. The most basic, Synth, comprises an oscillator and an envelope. The Mono object is a
three-oscillator monosynth with a 24db resonant filter, while
the FM object provides simple two-operator FM synthesis with
an envelope controlling both output amplitude and the modulator index. A software emulation of the Roland TR-808
drum machine is also available, providing a synthetic counterpoint to the sample-based Drums object.
2.4 Audio Effects
Gibber's selection of audio effects includes filters, delay, reverb, distortion, bit-crushing, flanging, chorus, vibrato, ring 1
modulation, etc.; most work in either mono or stereo. Every 2
audio generator has a built-in array of effects applied in series 3
to the generator's output. Convenience methods add effects to 4
this array, remove effects by name or by number in the effects 6
chain, or remove a particular matched object. The Bus object 7
can easily create parallel effects chains. 8
9
10
2.5 Bussing, Grouping and Soloing
The Bus object simply sums its inputs and then routes them
to another destination, typically either an effect or Gibber's
master output. Busses also have panning and amplitude properties that can be modulated and sequenced. The Group
command takes an existing set of synthesis objects, disconnects them from whatever busses they are currently connected
to and routes them all into a single bus. This can be used to
quickly apply a single instance of an effect to a mix of sound
sources, as opposed to creating separate copies of the effect
for each individual ugen.
The s olo function mutes all unit generators except those
passed as arguments to the function. Repeated calls to solo
can reintroduce elements to a live performance as they are
added to the argument list. A call to soolo with no arguments
unmutes all previously muted objects.
2.6 Speech Synthesis and Vocoding
The Speech object controls a speech synthesis algorithm.
Users can enter English text and customize its pitch and intraword spacing. A background thread then renders text into the
buffer of a Sampler object for playback and manipulation.
The Vo code r object operates via dual banks of band-pass
filters; the first analyzes the frequency content of an input
modulator signal, while the second applies imparts the resulting spectrum on an input carrier signal. The Robot object is a vocoder with a PWM polysynth as the carrier and
a Speech object as the modulator, producing classic robot
voice effects.
robot =-Roboto().say.seq([ 'this','is','a','test' ], 1/2 ).chord.seq( Rndi(O,8,3) )
This example uses a different word every half note as the
modulator, simultaneously triggering a new chord (three random notes from Gibber's global scale object) as the carrier.
3. MUSICAL NOTATION IN GIBBER
Gibber offers multiple paradigms for representing musical
concepts such as pitch and rhythm, including both raw numeric values (e.g., Hertz, ms) and terminology from Western
music theory (e.g., C4, half note).
3.1 Rhythm and Meter
Gibber's master C1 ock object defaults to 4/4 meter at a tempo
of 120 beats per minute. Users can easily change these values, and such changes can be scheduled over time.
// set clock to 90 beats per minute
Clock.bpm = 90
// set time signature to be 6/8
Clock.timeSignature = '6/8'
// change tempo every four measures
Clock.bpm. seq(
[ 90, 120, 140 1,
measures ( 4 )
Gibber users can indicate timing and duration using notations typical to Western music. For example, 1/ 4 indicates
a quarter note, 1/13 indicates a thirteenth note, and 1 represents a whole note. Any valid JavaScript numeric expression
is accepted, enabling math such as 10*3/16. Gibber also
enables specifying duration by number of samples, so there
is a maxMeasure s property of the master clock which sets
the threshold between interpreting small numbers as counting
measures and large numbers as counting samples. For example, with the maxMe a sure s property set to its default value
of 44, the duration 3 4.5 would indicate thirty-four whole
notes plus a half note, while the duration 50 would indicate
50 audio samples. To indicate a number of measures above
this ceiling, the measure s function return the number of
samples corresponding to a given number of measures at the
current tempo. Users who wish to avoid this amibiguity can
set maxMe asure s zero and then use explicit function calls
-51 -