What's Your Music?

2018 Fall CTP431 Final Project
Mingyu, Kim


0. Introduction

This project is designed for who are willing to learn or experience composition(or producing), but don't know WHERE TO START FIRST.
To help them, I implement this project, Automatic Music Generator so called 'What's Your Music?'.
Who are NOT familiar with some musical theories(i.e. Harmonics), sound design, or even has no idea, are all welcome.

You DO NOT need to worry about anything.
Just CLICK, LISTEN, get INSPIRTION and Start your first music.
change



1. Contents

This project contains 2 types of part:
2 'Sequencer' part / 7 'Control Node' part.

In 'Sequencer' part, you can make melody notes on left side & drumline notes on right side.
The melody sequencer uses tone.js to generate synth sound, and drumline sequencer uses WedAudioAPI to generate drum sound.
By clicking each notes, you can compose your own melody and drumline.
Melody sequencer consists of 16 columns with 14 rows(total 2 octaves). It is based on heptatonic(7 notes in 1 octave).
Drumline sequencer consists of 5 elements(kick,snare,closed hihat, open hihat, 808 Bass).
With melody and synth sequencers, you can make FULL music.

On the downside, there are total 7 'Control Nodes'(except Play/Stop).
With these nodes, you can control:
Complexity / Melody / Musical Scale / Synth Type / Synth Envelope / Synth Effect / BPM
By just clicking 'Random Set' buttons, sound parameters will be changed automatically.
Your job is just clicking and finding your favorite combination.



2. Technical Aspects

This project consists of mainly 3 functional nodes:
tech1

I used NexusUI to implement sequencers and buttons, WebAudioAPI to implement drum sounds and Tone.js to generate synth sound.
Every visible objects are created in final.html, using NexusUI.
In final.js, I created oscillator for kick and bass sound, and white noise for hi-hat and snare sound.
In final_tonejs.js, all functions to create and control synth sounds are implemented.

One example of that functions is here, the 'Complexity'.
Synth notes on sequencer are generated by probability, and this probability is controlled by Complexity node.
Also, I made this based on four-on-the-floor(4/4) beat, so more weight is given to first beat in each 1 bar.
Here is the example of how I implement that function.
tech2
Most of functions generating like Envelope, Effect, SynthType are implemented similarly to that example, practically using math.Random() function.

Here is one more interesting example, the 'Scale Generator'.
Based on musical theories about frequencies for notes, intervals in major or minor, ..., I created the muscial scale generator.
Whenever you click the 'Random Set' button, root notes and major-or-minor value is set randomly.
With those 2 parameters, a heptatonic scale is set. Here is the actual implementation.
tech2

If you are interested in other functions, please consult the sources.



3. References

Ramsophone
http://robertvinluan.com/Ramsophone/

Blips of Life
http://blipsoflife.herokuapp.com/