char-slop/chordpad.vibed.software
git clone https://git.t4t.associates/char-slop/chordpad.vibed.software
ee3b50a
main
1import { assertEquals } from "@std/assert" ; 2import { voiceTrack } from "../project/harmony.ts" ; 3import { newChordTrack , newProject , placeChord , projectKey } from "../project/model.ts" ; 4import { projectMidi } from "./export.ts" ; 5import { parseMidi } from "./smf.ts" ; 6 7Deno . test ( "a chord track with its bass off leaves each chord's lowest note out" , () => { 8const p = newProject (); 9const chords = newChordTrack (); 10for ( const [ start , symbol ] of [ 11[ 0 , "C/E" ], 12[ 4 , "F" ], 13[ 8 , "G7" ], 14] as const ) { 15placeChord ( chords , { id :symbol , start, dur :4 , symbol}); 16} 17p . tracks = [ chords ]; 18const voiced = voiceTrack ( chords , projectKey ( p )). map ( v => [ ...v . notes ]. sort (( a , b ) => a - b )); 19const exported = () => { 20const [ part ] = parseMidi ( projectMidi ( p )); 21return [ 0 , 4 , 8 ]. map ( beat => 22part . notes 23. filter ( n => n . start === beat ) 24. map ( n => n . pitch ) 25. sort (( a , b ) => a - b ), 26); 27}; 28 29assertEquals ( exported (), voiced ); 30chords . bass = false ; 31assertEquals ( 32exported (), 33voiced . map ( notes => notes . slice ( 1 )), 34); 35});