Files
Work/music/findscale.cpp
2024-08-07 09:16:27 -04:00

166 lines
4.6 KiB
C++

#include <music/chord.hpp>
#include <music/progression.hpp>
#include <music/scales.hpp>
#include <midiseq/midiout.hpp>
#include <common/array.hpp>
#include <common/stringbuffer.hpp>
#include <common/console.hpp>
#include <common/pointer.hpp>
/*
#include <music/IonianScale.hpp>
#include <music/DorianScale.hpp>
#include <music/DorianIIScale.hpp>
#include <music/PhrygianScale.hpp>
#include <music/LydianScale.hpp>
#include <music/MixolydianScale.hpp>
#include <music/AeolianScale.hpp>
#include <music/LocrianScale.hpp>
#include <music/PentatonicMinorScale.hpp>
#include <music/HarmonicMinorScale.hpp>
#include <music/MelodicMinorScale.hpp>
#include <music/DorianIIScale.hpp>
#include <music/LydianAugmentedScale.hpp>
#include <music/LydianDominantScale.hpp>
#include <music/Locrian2Scale.hpp>
#include <music/AlteredScale.hpp>
#include <music/DiminishedWholeScale.hpp>
#include <music/DiminishedHalfScale.hpp>
#include <music/WholeToneScale.hpp>
#include <music/BeBopDominantScale.hpp>
#include <music/BeBopMajorScale.hpp>
#include <music/BeBopTonicMinorScale.hpp>
#include <music/BeBopMinorScale.hpp>
#include <music/EightToneSpanishScale.hpp>
#include <music/EnigmaticScale.hpp>
#include <music/GypsyScale.hpp>
#include <music/HungarianScale.hpp>includee
#include <music/HungarianMinorScale.hpp>
#include <music/LeadingWholeToneScale.hpp>
#include <music/LydianMinorScale.hpp>
#include <music/MajorLocrianScale.hpp>
#include <music/NeapolitanMajorScale.hpp>
#include <music/NeapolitanMinorScale.hpp>
#include <music/OrientalScale.hpp>
#include <music/ToDiScale.hpp>
#include <music/SuperLocrianScale.hpp>
#include <music/BaroqueScale.hpp>
*/
#include <music/scales.hpp>
Console winConsole;
Notes getNotes(String strLine);
void findScale(Notes &notes);
using namespace Music;
void main(int argc,char **argv)
{
winConsole.writeLine("Scale v1.00");
if(2!=argc)
{
winConsole.writeLine("(ie) Scale C,E,G");
return;
}
Notes notes=getNotes(argv[1]);
findScale(notes);
}
Notes getNotes(String strLine)
{
Notes notes;
char *pLine=::strtok(strLine.str(),",\0");
while(pLine)
{
notes.insert(&Note(pLine));
pLine=::strtok(0,",\0");
}
winConsole.writeLine(notes.toString());
return notes;
}
void findScale(Notes &notes)
{
Block<SmartPointer<Scale> > scales;
scales.insert(&SmartPointer<Scale>());
scales[0]=new IonianScale();
scales[0].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[1]=new DorianScale();
scales[1].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[2]=new DorianIIScale();
scales[2].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[3]=new PhrygianScale();
scales[3].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[4]=new LydianScale();
scales[4].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[5]=new MixolydianScale();
scales[5].disposition(PointerDisposition::Delete);
scales.insert(&SmartPointer<Scale>());
scales[6]=new AeolianScale();
scales[6].disposition(PointerDisposition::Delete);
for(int index=0;index<scales.size();index++)
{
for(int noteIndex=0;noteIndex<notes.size();noteIndex++)
{
scales[index]->setRoot(notes[noteIndex]);
if(scales[index]->contains(notes))
{
winConsole.writeLine(scales[index]->getDescription());
winConsole.writeLine(scales[index]->toString());
winConsole.writeLine(" ");
}
}
}
/*
#include <music/AeolianScale.hpp>
#include <music/LocrianScale.hpp>
#include <music/PentatonicMinorScale.hpp>
#include <music/HarmonicMinorScale.hpp>
#include <music/MelodicMinorScale.hpp>
#include <music/DorianIIScale.hpp>
#include <music/LydianAugmentedScale.hpp>
#include <music/LydianDominantScale.hpp>
#include <music/Locrian2Scale.hpp>
#include <music/AlteredScale.hpp>
#include <music/DiminishedWholeScale.hpp>
#include <music/DiminishedHalfScale.hpp>
#include <music/WholeToneScale.hpp>
#include <music/BeBopDominantScale.hpp>
#include <music/BeBopMajorScale.hpp>
#include <music/BeBopTonicMinorScale.hpp>
#include <music/BeBopMinorScale.hpp>
#include <music/EightToneSpanishScale.hpp>
#include <music/EnigmaticScale.hpp>
#include <music/GypsyScale.hpp>
#include <music/HungarianScale.hpp>includee
#include <music/HungarianMinorScale.hpp>
#include <music/LeadingWholeToneScale.hpp>
#include <music/LydianMinorScale.hpp>
#include <music/MajorLocrianScale.hpp>
#include <music/NeapolitanMajorScale.hpp>
#include <music/NeapolitanMinorScale.hpp>
#include <music/OrientalScale.hpp>
#include <music/ToDiScale.hpp>
#include <music/SuperLocrianScale.hpp>
#include <music/BaroqueScale.hpp>
*/
}