Initial
This commit is contained in:
88
guitar/Fingering.cpp
Normal file
88
guitar/Fingering.cpp
Normal file
@@ -0,0 +1,88 @@
|
||||
#include <guitar/Fingering.hpp>
|
||||
#include <guitar/GlobalDefs.hpp>
|
||||
|
||||
FrettedNotes Fingering::getFingering(const Scale &scale)
|
||||
{
|
||||
FrettedNotes frettedNotes;
|
||||
FrettedNote frettedNote;
|
||||
|
||||
frettedNotes.size(scale.size());
|
||||
GlobalDefs::outDebug(scale.toString());
|
||||
for(int index=0;index<scale.size();index++)
|
||||
{
|
||||
if(!index)getFirst(frettedNote,((Scale&)scale)[index]);
|
||||
else getNext(frettedNote,frettedNotes[index-1],((Scale&)scale)[index]);
|
||||
frettedNotes[index]=frettedNote;
|
||||
}
|
||||
return frettedNotes;
|
||||
}
|
||||
|
||||
bool Fingering::getFirst(FrettedNote &frettedNote,const Note ¬e)
|
||||
{
|
||||
Note tmpNote;
|
||||
bool found;
|
||||
|
||||
found=false;
|
||||
mCurrString=0;
|
||||
mCurrFret=0;
|
||||
GlobalDefs::outDebug(String("[Fingering::getFirst] Looking for ")+note.toString());
|
||||
while(!found)
|
||||
{
|
||||
tmpNote=mFretboard.getAt(mCurrString,mCurrFret);
|
||||
GlobalDefs::outDebug(String("[Fingering::getFirst] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString());
|
||||
if(tmpNote==note)
|
||||
{
|
||||
frettedNote.setString(mCurrString);
|
||||
frettedNote.setFret(mCurrFret);
|
||||
frettedNote.setNote(tmpNote);
|
||||
mAnchorFret=mCurrFret;
|
||||
found=true;
|
||||
}
|
||||
if(mCurrFret>Fretboard::Frets)
|
||||
{
|
||||
mCurrString++;
|
||||
mCurrFret=0;
|
||||
if(mCurrString<0)return false;
|
||||
}
|
||||
mCurrFret++;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
bool Fingering::getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e)
|
||||
{
|
||||
Note tmpNote;
|
||||
bool found;
|
||||
|
||||
found=false;
|
||||
GlobalDefs::outDebug(String("[Fingering::getNext] Looking for ")+note.toString());
|
||||
if(mCurrFret<0||mCurrString>5)return false;
|
||||
while(!found)
|
||||
{
|
||||
tmpNote=mFretboard.getAt(mCurrString,mCurrFret);
|
||||
GlobalDefs::outDebug(String("[Fingering::getNext] Str:")+String().fromInt(mCurrString)+String(" Fret:")+String().fromInt(mCurrFret)+String(" ")+tmpNote.toString());
|
||||
if(tmpNote==note)
|
||||
{
|
||||
frettedNote.setString(mCurrString);
|
||||
frettedNote.setFret(mCurrFret);
|
||||
frettedNote.setNote(tmpNote);
|
||||
found=true;
|
||||
}
|
||||
if((mCurrFret-mAnchorFret)+1>mMaxStretchFrets)
|
||||
{
|
||||
mCurrFret=mAnchorFret-2;
|
||||
mCurrString++;
|
||||
// mAnchorFret=mCurrFret;
|
||||
if(mCurrString>5)return false;
|
||||
if(mCurrFret<0)mCurrFret=0;
|
||||
}
|
||||
if(mCurrFret>Fretboard::Frets)
|
||||
{
|
||||
mCurrString++;
|
||||
mCurrFret=0;
|
||||
if(mCurrString>5)return false;
|
||||
}
|
||||
mCurrFret++;
|
||||
}
|
||||
return found;
|
||||
}
|
||||
Reference in New Issue
Block a user