live-coding-melody-and-harmony-in-javascript-code-examples

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

live-coding-melody-and-harmony-in-javascript-code-examples [2024/08/10 05:38] – created steve.wanglive-coding-melody-and-harmony-in-javascript-code-examples [2024/08/10 06:57] (current) steve.wang
Line 4: Line 4:
  
 <code javascript>  <code javascript> 
 +let exampleQMap = new K.QuantizedMap(4, [0, 1, 2, 3], ["A", "B", "C", "D"])
 +
 +//wrapLookup examples:
 +exampleQMap.wrapLookup(1.5) //'B'
 +exampleQMap.wrapLookup(4) //'A'
 +exampleQMap.wrapLookup(6.5) //'c'
 +</code>
 +
 +===== Viewing QuantizedMaps in MusicalEnvironment =====
 +
 +<code javascript>
 +console.log(e.octaveMaps)
 +console.log(e.noteMaps)
 +console.log(e.chordMaps)
 +console.log(e.modeFilters)
 +</code>
 +
 +===== Stochastic algorithm for generating melodies based on modes =====
 +
 +https://konduktiva.org/doku.php?id=music_generation#random
 +
 +===== Deterministic algorithm for generating melodies based on L-systems =====
 +
 +https://konduktiva.org/doku.php?id=music_generation#l-system_lindenmayer_system
 +
 +
 +===== Algorithm for chord progressions based on the circle of fifths =====
 +
 +https://konduktiva.org/doku.php?id=music_generation#circle_of_fifths
 +
 +===== Using Algorithmically Generated Chords and Melodies Together =====
 +A function that filters note according to player modeFilter.
 +
 +<code javascript>
 +//Configure Player to use harmonic minor modeFilter:
 +e.modeMaps.default.values[0] = 'harmonic minor'
 +
 +//Checking all three individually:
 +console.log(K.filterMode(2, e, 10, e.players.exampleMidiPlayer1))
 +console.log(K.filterMode(5, e, 10, e.players.exampleMidiPlayer1))
 +console.log(K.filterMode(10, e, 10, e.players.exampleMidiPlayer1))
 +
 +//Checking all with array:
 +console.log([2, 5, 10].map(x => {
 +    return K.filterMode(x, e, 10, e.players.exampleMidiPlayer1)
 +})) //[ 2, 5, 8 ]
 +</code>
 +
 +===== Figure 7b =====
 +
 +<code javascript>
 +e.modeFilters['IIm7'] = new K.QuantizedMap(12, [0, 2, 5, 9], [0, 2, 5, 9])
 +e.modeFilters['v7'] = new K.QuantizedMap(12, [2, 5, 7, 11], [2, 5, 7, 11])
 +e.modeFilters['Imaj7'] = new K.QuantizedMap(12, [0, 4, 7, 11], [0, 4, 7, 11])
 +
 +e.modeMaps.customExample = new K.QuantizedMap(9, [0, 4, 8], ['IIm7', 'v7', 'Imaj7'])
 +
 +e.players.exampleMidiPlayer1.modeMap = 'customExample'
 +
 +console.log([1, 2, 4, 11].map(x => {
 +    return K.filterMode(x, e, 0, e.players.exampleMidiPlayer1)
 +})) 
 +console.log([3, 5, 6, 7].map(x => {
 +    return K.filterMode(x, e, 4, e.players.exampleMidiPlayer1)
 +}))
 +console.log([9, 3, 8, 3].map(x => {
 +    return K.filterMode(x, e, 8, e.players.exampleMidiPlayer1)
 +}))
 +</code>
 +
 +===== Making Music In Konduktiva with our Additions =====
 +
 +<code javascript>
 +K.addChordProgressionFromRomanNumeral(e, 'exampleProgression', 4, [0, 1, 2, 3], ['VI7','IIm7', 'V7', 'Imaj7'], 'C')
 +
 +console.log(e.chordMaps.exampleProgression)
 +console.log(e.rootMaps.exampleProgression)
 +</code>
 +
 +===== simpleRhythmPattern =====
 +
 +<code javascript>
 +K.simpleRhythmPattern (e,
 +    {
 +        voice: 'kick',
 +        patternName: 'testKick',
 +        patternLength: 4,
 +        IOIs: [1,1,1,1],
 +        bools: [true,false,true,false]
 +    }
 +)
 +
 +console.log(e.rhythmMaps.testKick)
 +
 +console.log(e.rhythmMaps.testKick.values)
 +</code>
  
  • live-coding-melody-and-harmony-in-javascript-code-examples.txt
  • Last modified: 2024/08/10 06:57
  • by steve.wang