166 lines
4.6 KiB
C++
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 ¬es);
|
|
|
|
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 ¬es)
|
|
{
|
|
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>
|
|
*/
|
|
|
|
|
|
} |