From: <pst...@us...> - 2008-03-21 05:56:36
|
Revision: 344 http://jazzplusplus.svn.sourceforge.net/jazzplusplus/?rev=344&view=rev Author: pstieber Date: 2008-03-20 22:56:35 -0700 (Thu, 20 Mar 2008) Log Message: ----------- Started cleaning up the harmony browser analyzer. Modified Paths: -------------- trunk/jazz/src/HarmonyBrowserAnalyzer.cpp trunk/jazz/src/HarmonyBrowserAnalyzer.h Modified: trunk/jazz/src/HarmonyBrowserAnalyzer.cpp =================================================================== --- trunk/jazz/src/HarmonyBrowserAnalyzer.cpp 2008-03-21 05:54:35 UTC (rev 343) +++ trunk/jazz/src/HarmonyBrowserAnalyzer.cpp 2008-03-21 05:56:35 UTC (rev 344) @@ -31,13 +31,17 @@ #include <cmath> HBAnalyzer::HBAnalyzer(HBContext **s, int n) + : seq(s), + max_seq(n), + start_clock(0), + stop_clock(0), + eighths_per_chord(1), + mSteps(0), + mpFilter(0), + mpTrack(0), + count(0), + delta(0) { - seq = s; - max_seq = n; - - count = 0; - delta = 0; - steps = 0; } @@ -47,30 +51,32 @@ } -void HBAnalyzer::Init(tFilter *f, int epc) +void HBAnalyzer::Init(tFilter* pFilter, int epc) { Exit(); // cleanup from previous run - filter = f; - start_clock = f->FromClock; - stop_clock = f->ToClock; + mpFilter = pFilter; + start_clock = pFilter->FromClock; + stop_clock = pFilter->ToClock; eighths_per_chord = epc; if (eighths_per_chord == 0) - steps = max_seq; // map number of chords to selection + { + mSteps = max_seq; // map number of chords to selection + } else { - JZBarInfo BarInfo(filter->Song); + JZBarInfo BarInfo(mpFilter->mpSong); BarInfo.SetClock(start_clock); int start_bar = BarInfo.BarNr; BarInfo.SetClock(stop_clock); int stop_bar = BarInfo.BarNr; - steps = (stop_bar - start_bar) * 8L / eighths_per_chord; + mSteps = (stop_bar - start_bar) * 8L / eighths_per_chord; } - count = new int* [steps]; - delta = new int* [steps]; - for (int i = 0; i < steps; i++) + count = new int* [mSteps]; + delta = new int* [mSteps]; + for (int i = 0; i < mSteps; i++) { count[i] = new int[12]; delta[i] = new int[12]; @@ -85,7 +91,7 @@ void HBAnalyzer::Exit() { - for (int i = 0; i < steps; i++) + for (int i = 0; i < mSteps; i++) { delete [] count[i]; delete [] delta[i]; @@ -94,26 +100,26 @@ delete [] delta; count = 0; delta = 0; - steps = 0; + mSteps = 0; } -int HBAnalyzer::Analyze(tFilter *f, int qbc) +int HBAnalyzer::Analyze(tFilter* pFilter, int qbc) { - Init(f, qbc); - if (steps < max_seq) + Init(pFilter, qbc); + if (mSteps < max_seq) { IterateEvents(&HBAnalyzer::CountEvent); CreateChords(); - return steps; + return mSteps; } return 0; } -int HBAnalyzer::Transpose(tFilter * f, int qbc) +int HBAnalyzer::Transpose(tFilter* pFilter, int qbc) { - f->Song->NewUndoBuffer(); - Init(f, qbc); + pFilter->mpSong->NewUndoBuffer(); + Init(pFilter, qbc); IterateEvents(&HBAnalyzer::CountEvent); GenerateMapping(); IterateEvents(&HBAnalyzer::TransposeEvent); @@ -123,14 +129,14 @@ void HBAnalyzer::IterateEvents(void (HBAnalyzer::*Action)(tKeyOn *on, JZTrack *t)) { - tTrackIterator Tracks(filter); + tTrackIterator Tracks(mpFilter); JZTrack *t = Tracks.First(); while (t) { if (!t->IsDrumTrack()) { tEventIterator Events(t); - JZEvent *e = Events.Range(filter->FromClock, filter->ToClock); + JZEvent *e = Events.Range(mpFilter->FromClock, mpFilter->ToClock); while (e) { tKeyOn *on = e->IsKeyOn(); @@ -149,14 +155,14 @@ int HBAnalyzer::Step2Clock(int step) { - int fr = filter->FromClock; - int to = filter->ToClock; - return (step * (to - fr)) / steps + fr; + int fr = mpFilter->FromClock; + int to = mpFilter->ToClock; + return (step * (to - fr)) / mSteps + fr; } void HBAnalyzer::CountEvent(tKeyOn *on, JZTrack *t) { - for (int i = 0; i < steps; i++) + for (int i = 0; i < mSteps; i++) { int start = Step2Clock(i); int stop = Step2Clock(i+1); @@ -176,9 +182,9 @@ } -void HBAnalyzer::TransposeEvent(tKeyOn *on, JZTrack *track) +void HBAnalyzer::TransposeEvent(tKeyOn *on, JZTrack* pTrack) { - for (int i = 0; i < steps; i++) + for (int i = 0; i < mSteps; i++) { int start = Step2Clock(i); int stop = Step2Clock(i+1); @@ -202,8 +208,8 @@ { tKeyOn *cp = (tKeyOn *)on->Copy(); cp->Key += delta[i][on->Key % 12]; - track->Kill(on); - track->Put(cp); + pTrack->Kill(on); + pTrack->Put(cp); // do not transpose again break; @@ -247,7 +253,7 @@ void HBAnalyzer::GenerateMapping() { int step; - for (step = 0; step < steps; step++) + for (step = 0; step < mSteps; step++) { int j; @@ -325,7 +331,7 @@ void HBAnalyzer::GenerateMapping() { int step; - for (step = 0; step < steps; step++) + for (step = 0; step < mSteps; step++) { int i, j; @@ -381,8 +387,8 @@ void HBAnalyzer::CreateChords() { - int* pBest = new int[steps]; - for (int i = 0; i < steps; i++) + int* pBest = new int[mSteps]; + for (int i = 0; i < mSteps; i++) { pBest[i] = -1; } @@ -393,7 +399,7 @@ const HBContext &ct = iter.Context(); const HBChord chord = ct.Chord(); const HBChord scale = ct.Scale(); - for (int i = 0; i < steps; i++) + for (int i = 0; i < mSteps; i++) { int err = 0; for (int k = 0; k < 12; k++) Modified: trunk/jazz/src/HarmonyBrowserAnalyzer.h =================================================================== --- trunk/jazz/src/HarmonyBrowserAnalyzer.h 2008-03-21 05:54:35 UTC (rev 343) +++ trunk/jazz/src/HarmonyBrowserAnalyzer.h 2008-03-21 05:56:35 UTC (rev 344) @@ -32,27 +32,27 @@ class HBAnalyzer { public: + HBAnalyzer(HBContext **seq, int n_seq); + ~HBAnalyzer(); + int Analyze(tFilter *f, int eighth_per_chord = 8); + int Transpose(tFilter *f, int eighth_per_chord = 8); void Init(tFilter *f, int steps_per_bar); + void Exit(); - int Steps() const { return steps; } + + int Steps() const; + int Step2Clock(int step); - HBContext * GetContext(int step) const { return seq[step % max_seq]; } + HBContext* GetContext(int step) const; + private: - HBContext **seq; - int max_seq; - int start_clock, stop_clock; - int eighths_per_chord; - int steps; - tFilter* filter; - JZTrack* track; - void IterateEvents(void (HBAnalyzer::*Action)(tKeyOn *on, JZTrack *t)); void CountEvent(tKeyOn *on, JZTrack *t); void TransposeEvent(tKeyOn *on, JZTrack *t); @@ -61,8 +61,31 @@ int MaxCount(int i, const HBChord &done); void GenerateMapping(); - int **count; - int **delta; + private: + + HBContext** seq; + int max_seq; + + int start_clock, stop_clock; + int eighths_per_chord; + int mSteps; + tFilter* mpFilter; + JZTrack* mpTrack; + + int** count; + int** delta; }; +inline +int HBAnalyzer::Steps() const +{ + return mSteps; +} + +inline +HBContext* HBAnalyzer::GetContext(int step) const +{ + return seq[step % max_seq]; +} + #endif // !defined(JZ_HARMONYBROWSERANALYZER_H) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |