import { VibePreset } from '../vibes'; import { GardenAudioChord, gardenAudioConfig, GardenAudioVibeProfile, } from './garden-audio-config'; export const getVibeProfile = (vibe: VibePreset): GardenAudioVibeProfile => vibe.audio; export const getChordIntervals = ( chord: GardenAudioChord, openVoicing: boolean ): Array => { if (openVoicing) { return chord.quality === 'major' ? gardenAudioConfig.generativePiano.chordVoicings.majorOpen : gardenAudioConfig.generativePiano.chordVoicings.minorOpen; } return chord.quality === 'major' ? gardenAudioConfig.generativePiano.chordVoicings.majorClosed : gardenAudioConfig.generativePiano.chordVoicings.minorClosed; }; export const degreeToSemitone = ( profile: GardenAudioVibeProfile, degree: number ): number => { const scaleIndex = ((degree % profile.scale.length) + profile.scale.length) % profile.scale.length; const octave = Math.floor(degree / profile.scale.length); return ( profile.scale[scaleIndex] + octave * gardenAudioConfig.piano.pitchSemitonesPerOctave ); };