Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (void) setOptimalTone:(int)minTone :(int)maxTone
- {
- static const int kDiapason = 12; // 1 octave == 12 semitone
- int cnt = maxTone - minTone + 1 - (kDiapason - 1);
- if( cnt > 1 )
- {
- int *tones = (int*)malloc(sizeof(int)*cnt);
- memset(tones, 0, sizeof(int)*cnt);
- for(int g=0, h=minTone; g < cnt; ++h, ++g)
- {
- for(int i=0; i < _lines.countLines; ++i)
- {
- for(int m=0; m < _lines.line[i].countNotes; ++m)
- {
- int tone = _lines.line[i].note[m].tone;
- if( tone >= h && tone < h+kDiapason )
- {
- ++tones[g];
- }
- }
- }
- }
- int idxDiapason = 0;
- int optimalDiapason = 0;
- for(int i=0; i < cnt; ++i)
- {
- if( optimalDiapason < tones[i] )
- {
- optimalDiapason = tones[i];
- idxDiapason = i;
- }
- }
- free(tones);
- _lines.optimalMinTone = idxDiapason + minTone;
- _lines.optimalMaxTone = idxDiapason + minTone + kDiapason - 1;
- }
- else
- {
- BOOL b = NO;
- while(maxTone - minTone + 1 < kDiapason)
- {
- b = !b;
- b ? ++maxTone : --minTone;
- }
- _lines.optimalMinTone = minTone;
- _lines.optimalMaxTone = maxTone;
- }
- //----------------------------------------------------------------------
- for(int i=0; i < _lines.countLines; ++i)
- {
- for(int m=0; m < _lines.line[i].countNotes; ++m)
- {
- if(_lines.line[i].note[m].tone > _lines.optimalMaxTone)
- _lines.line[i].note[m].tone = _lines.optimalMaxTone;
- if(_lines.line[i].note[m].tone < _lines.optimalMinTone)
- _lines.line[i].note[m].tone = _lines.optimalMinTone;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement