By Jamie Duffy (adaptation Denis Burel). Coded by Amaia Apiñaniz. (Not finished)
Log in to post a comment.
// PIANO - SOLAS by Jamie Duffy (adaptation Denis Burel). Coded by Amaia Apiñaniz. ditty.bpm = 80; const piano = synth.def(class { constructor(options) { this.phase = 0; this.freq = midi_to_hz(options.note); } process(note, env, tick, options) { this.phase += this.freq * ditty.dt; return Math.sin(this.phase * Math.PI * 2) * env.value; } }, { levels: [0, 0.2, 0.2, 0], times: [0.1, 0.1, 0.25], curves: [0, -2, -2], env: segenv, duration: 0.5 }); const rightChorusNotes = [ {number: 'e', octave: 4}, {number: 'gb', octave: 4}, {number: 'g', octave: 4}, {number: 'b', octave: 4}, {number: 'g', octave: 4}, {number: 'gb', octave: 4} ]; const leftDoNotes = [ {number: 'c', octave: 3}, {number: 'e', octave: 3}, {number: 'g', octave: 3}, {number: 'c', octave: 4}, {number: 'g', octave: 3}, {number: 'e', octave: 3} ]; const leftReNotes = [ {number: 'd', octave: 3}, {number: 'gb', octave: 3}, {number: 'a', octave: 3}, {number: 'd', octave: 4}, {number: 'a', octave: 3}, {number: 'gb', octave: 3} ]; const leftMiNotes = [ {number: 'e', octave: 2}, {number: 'g', octave: 2}, {number: 'b', octave: 2}, {number: 'e', octave: 3}, {number: 'b', octave: 2}, {number: 'g', octave: 2} ]; const leftSiNotes = [ {number: 'b', octave: 2}, {number: 'd', octave: 3}, {number: 'gb', octave: 3}, {number: 'b', octave: 3}, {number: 'gb', octave: 3}, {number: 'd', octave: 3} ]; // 1 tresillos function playOneHandTripletWabe(notes) { for (let i = 0; i < notes.length ; i++) { piano.play(notes[i].number + notes[i].octave); sleep(1/3); } } // 2 tresillos a la vez function playTwoHandsTripletWabe(leftNotes, rightNotes) { for (let i = 0; i < leftNotes.length ; i++) { piano.play(leftNotes[i].number + leftNotes[i].octave); piano.play(rightNotes[i].number + rightNotes[i].octave); sleep(1/3); } } // 2 tresillos a la vez con negra con puntillo al final function playTwoHandsTripletWabeConclusion(leftNotes, rightNotes) { for (let i = 0; i < leftNotes.length ; i++) { piano.play(leftNotes[i].number + leftNotes[i].octave); piano.play(rightNotes[i].number + rightNotes[i].octave); if (i + 1 === leftNotes.length){ sleep(1.3); } else { sleep(1/3); } } } function playChorus() { for (let i = 0 ; i < 2 ; i++) { playOneHandTripletWabe(rightChorusNotes); } } function playIntroSecondPart(notes) { for (var i = 0; i < notes.length ; i++) { piano.play(notes[i].number + notes[i].octave, {duration: 3}); piano.play(notes[i].number + (notes[i].octave - 1), {duration: 3}); playChorus(); } } function playIntro() { piano.play(e5); sleep( 1 ); piano.play(b5); sleep( 1 ); piano.play(gb5); sleep( 1.1 ); piano.play(eb5); sleep( 1.5 ); const introNotes = [ {number: 'c', octave: 2}, {number: 'e', octave: 2}, {number: 'b', octave: 2}, {number: 'c', octave: 3}, {number: 'c', octave: 3}, {number: 'e', octave: 3}, {number: 'b', octave: 2}, {number: 'c', octave: 2} ]; playIntroSecondPart(introNotes); } function playFirstPart() { const notes = [leftDoNotes, leftMiNotes, leftSiNotes, leftDoNotes, leftDoNotes, leftMiNotes, leftSiNotes]; for (let i = 0; i < notes.length ; i++) { for (let j = 0; j < 2 ; j++) { playTwoHandsTripletWabe(notes[i], rightChorusNotes); } } const leftDoNotesConclusion = leftDoNotes.slice(0, 4); const rightChorusNotesConclusion = rightChorusNotes.slice(0, 4); playTwoHandsTripletWabe(leftDoNotes, rightChorusNotes); playTwoHandsTripletWabeConclusion(leftDoNotesConclusion, rightChorusNotesConclusion); } // INTRO playIntro(); // FIRST PART playFirstPart(); // FIRST MELODY const noteNumbers = ['c','d','e','f','g','a','b']; function getNextNote(note) { let noteNumber = note.number; let octave = note.octave; let index = noteNumbers.indexOf(noteNumber); if (index === -1) { return {number: noteNumber.substring(0, 1), octave: octave}; } let nextNoteNumber = index + 1 === noteNumbers.length ? noteNumbers[0] : noteNumbers[index + 1]; let newOctave = index + 1 === noteNumbers.length ? octave + 1 : octave; return {number: nextNoteNumber, octave: newOctave}; } function playMordent(note) { const mordentNote = getNextNote(note); piano.play(note.number + note.octave); piano.play(mordentNote.number + mordentNote.octave); } function playMelodyFirstPart(leftNotes, rightNotes) { for (let i = 0 ; i < rightNotes.length ; i++) { piano.play(leftNotes[i].number + leftNotes[i].octave, {duration: 1/3}); if (rightNotes[i]){ let duration = rightNotes[i].duration ? (rightNotes[i].duration) : (1/3); if (rightNotes[i].mordent) { playMordent(rightNotes[i]); } piano.play(rightNotes[i].number + rightNotes[i].octave, {duration: duration}); } sleep(1/3); } } const melodyFirstRightNotes = [ {number: 'b', octave: 4}, {number: 'd', octave: 5}, {number: 'e', octave: 5}, {number: 'gb', octave: 5, duration: 2/3}, null, {number: 'g', octave: 5}, {number: 'gb', octave: 5}, {number: 'e', octave: 5}, {number: 'd', octave: 5}, {number: 'b', octave: 4}, {number: 'a', octave: 4}, {number: 'g', octave: 4} ]; const duplicateLeftDoNotes = leftDoNotes.concat(leftDoNotes); playMelodyFirstPart(duplicateLeftDoNotes, melodyFirstRightNotes); const melodySecondRightNotes = [ {number: 'a', octave: 4}, {number: 'b', octave: 4}, {number: 'd', octave: 5}, {number: 'a', octave: 4, duration: 2/3, mordent: true}, null, {number: 'g', octave: 4}, ]; const duplicateLeftMiNotes = leftMiNotes.concat(leftMiNotes); const duplicateRightMelodyNotes = melodySecondRightNotes.concat(melodySecondRightNotes); playMelodyFirstPart(duplicateLeftMiNotes, duplicateRightMelodyNotes); const melodyThirdRightNotes = [ {number: 'a', octave: 4}, {number: 'b', octave: 4}, {number: 'd', octave: 5}, {number: 'a', octave: 4, duration: 2/3, mordent: true}, null, {number: 'g', octave: 4}, {number: 'gb', octave: 4}, {number: 'g', octave: 4}, {number: 'b', octave: 4}, {number: 'gb', octave: 4, duration: 2/3, mordent: true}, null, {number: 'e', octave: 4}, ]; const duplicateLeftReNotes = leftReNotes.concat(leftReNotes); playMelodyFirstPart(duplicateLeftReNotes, melodyThirdRightNotes);