#ifndef _GUITAR_FINGERING_HPP_ #define _GUITAR_FINGERING_HPP_ #ifndef _MUSIC_SCALE_HPP_ #include #endif #ifndef _GUITAR_FRETBOARD_HPP_ #include #endif #ifndef _GUITAR_FRETTEDNOTE_HPP_ #include #endif class Fingering { public: Fingering(); virtual ~Fingering(); FrettedNotes getFingering(const Scale &scale); private: enum{MaxStretchFrets=4,DefaultString=5}; bool getFirst(FrettedNote &frettedNote,const Note ¬e); bool getNext(FrettedNote &frettedNote,const FrettedNote &prevFrettedNote,const Note ¬e); int getCurrString(void)const; void setCurrString(int currString); int getCurrFret(void)const; void setCurrFret(int currFret); Fretboard mFretboard; int mMaxStretchFrets; int mStartString; int mCurrString; int mCurrFret; int mAnchorFret; }; inline Fingering::Fingering() : mMaxStretchFrets(MaxStretchFrets), mStartString(DefaultString), mCurrString(mStartString), mCurrFret(0) { } inline Fingering::~Fingering() { } inline int Fingering::getCurrString(void)const { return mCurrString; } inline void Fingering::setCurrString(int currString) { mCurrString=currString; } inline int Fingering::getCurrFret(void)const { return mCurrFret; } inline void Fingering::setCurrFret(int currFret) { mCurrFret=currFret; } #endif