Music, Computing, Design API
A Collection of C++ Classes for Audio + Graphics + Interaction Software Design
Ge Wang

The MCD API consists a number of (loosely organized) C++ abstractions and classes I have found useful in building computer music software over the last 10+ years, in software systems for: ChucK, sndpeek and rt_lpc, audio-visual instruments for laptop orchestra and mobile phone orchestra, and adapted to design and create mobile music software like Ocarina; it is also used in teaching audio-visual software design for my courses Music Software Design (Music 256a / CS 476a at Stanford) and Mobile Music (Music 256b / CS 476b at Stanford). It consists of two sets of C++ classes: X-API, lower-level audio/graphics abstractions, and Y-API, higher-level abstractions built on X-API (see below). Special thanks to Jieun Oh, Spencer Salazar, Nick Bryan, and Jorge Herrera for additional contributions.

download MCD-API (v1.0.1)


X-API (lower-level abstractions)
  • x-buffer: a simple (templated) circular buffer (can be used for audio, messages, objects, etc.)
  • x-vector3d: a 3D vector implementation (also useful for slewing interpolation)
  • x-fun: a few useful utilities functions (e.g., rand2f)
  • x-thread: simple thread + mutex abstraction
    (make sure to define your platform, e.g., __PLATFORM_MACOSX__)
  • x-def: some useful definitions, types, constants
  • x-audio: real-time audio wrapper for RtAudio
  • x-gfx:a few useful real-time graphics utilities
    (also see x-gfx-osx.h with OSX specific texture loading)
  • x-loadlum and x-loadrgb: loading luminance data (from .bw files) and color textures (from .rgb files)
    (thanks to David Blythe, SGI)
  • x-network: (osx only for now) http network code

Y-API (higher-level abstractions)
  • y-entity: useful base class for a graphical object, with several usable derived classes
  • y-particle: abstractions for starting particle systems
  • y-waveform: entity that draws a waveform (given real-time audio data)
  • y-charting: entities for drawing basic histograms and line charts
  • y-fft: a lightweight FFT (thanks to CARL distribution)
  • y-fluidsynth: a wrapper for using fluidsynth to render soundfonts
  • y-score-reader: object to read a MIDI file into a data structure
  • y-echo: a simple feedback echo effect


MCD | CCRMA | music | stanford