Skip to content

mhitchman/IMS

Repository files navigation

Interactive Music System

Introduction

The project procedurally generates music. Two rhythm voices are generated using one dimensional cellular automata. A melodic voice has set note patterns, where the root is shifted using a markhov model and the intervals are determined using one dimensional cellular automata. The main system is implemented in Chuck and relies on TouchOSC and OSC messages for user control. MIDI messages are then output to the IAC Driver bus. An accompanying Ableton Live project has been setup with the appropriate MIDI channels and inputs.

Installation

To run the project requires:

Running

  1. Load the accompanying TouchOSC layout (IMSInterface.touchosc) on to the smart phone device using the Wi-Fi or iTunes method.
    1. Use the app settings to set the correct host IP address (the smartphone and computer need to be on the same network)
  2. Open the Ableton Project (hub.als)
  3. The easiest way to run the Chuck component is to open the miniAudicle app
    • Go to Window > Device Browser and select MIDI from the dropdown menu
    • Set the value of port to the IAC Bus Driver port in MIDIHelper.ck
    • Open initialise.ck with miniAudicle
    • In the Virtual Machine window click “Start Virtual Machine”
    • In the main window click the “Add Shred” button in the toolbar
  4. Chuck should start picking up the OSC messages from TouchOSC and sending MIDI messages to Ableton Live

File Structure

The function of the main files of the Chuck project are described below. The files themselves are heavily commented so provide greater details.

  • initialise.ck loads all Chuck files necessary for the project to run
  • setCommon.ck sets values to some static variables that need a value
    • setting these values in the class would have resulted in them being reset every time an object was created
  • interface.ck contains all the OSC processing and interface logic. It triggers actions in other parts of the code depending on the OSC message’s address and/or values
  • CA.ck includes the class that contains the functions and variables for calculating 1D Cellular Automata
  • CARhythm.ck contains the code for the rhythmic voices
  • interCreate.ck contains the code for the melodic (regularly referred to as the interval) voice

Interface

The TouchOSC interface includes a number of different controls.

  • Tempo fader: sets the tempo across the whole system between 60 bpm and 120 bpm
  • Rhythm Toggle buttons: left button enables/disables the first rhythmic voice while the right button does the same for the second voice.
  • Interval Toggle button: enables/disables the melodic (interval) voice
  • Rhythm CA multi-toggle: can be used to set the cellular automata used by the rhythmic voices. The CA will then “evolve” from that configuration. The CA array is not written to until either the ‘1’ or ‘2’ button to the right is pressed. They will cause the multi-toggle affect either the first or second voice’s CA respectively.
  • Rhythm Mask buttons: these are used to set the rules being used by the rhythmic voice CAs. Since a three neighbourhood rule can be expressed as a integer between 0-7 there are 8 numbered buttons. Highlighted buttons will be used as rules for creation of “child” cells. The values will not be used until either the ‘1’ or ‘2’ button is pressed again meaning the rules will be used for the first or second rhythm voices respectively.
  • Key button: are used to set the key of the scale that the melodic voice’s notes are locked to. The pressed button is written immediately but doesn’t take effect until the end of the two bar cycle the melodic instrument is on.

Issues

Occasionally Ableton will be receiving MIDI data but not process it. It apparently has something to do with missing time-stamps in the MIDI data and comes about as a result of using certain software with the IAC Driver Bus and Ableton. The solution that definitely works is restarting the computer.

About

Interactive music system written in Chuck

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages