Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (void) setOptimalTone:(int)minTone :(int)maxTone
  2. {
  3.     static const int kDiapason = 12; // 1 octave == 12 semitone
  4.    
  5.     int cnt = maxTone - minTone + 1 - (kDiapason - 1);
  6.     if( cnt > 1 )
  7.     {
  8.         int *tones = (int*)malloc(sizeof(int)*cnt);
  9.         memset(tones, 0, sizeof(int)*cnt);
  10.        
  11.         for(int g=0, h=minTone; g < cnt; ++h, ++g)
  12.         {
  13.             for(int i=0; i < _lines.countLines; ++i)
  14.             {
  15.                 for(int m=0; m < _lines.line[i].countNotes; ++m)
  16.                 {
  17.                     int tone = _lines.line[i].note[m].tone;
  18.                     if( tone >= h && tone < h+kDiapason )
  19.                     {
  20.                         ++tones[g];
  21.                     }
  22.                 }
  23.             }
  24.         }
  25.        
  26.         int idxDiapason = 0;
  27.         int optimalDiapason = 0;
  28.         for(int i=0; i < cnt; ++i)
  29.         {
  30.             if( optimalDiapason < tones[i] )
  31.             {
  32.                 optimalDiapason = tones[i];
  33.                 idxDiapason = i;
  34.             }
  35.         }
  36.         free(tones);
  37.        
  38.         _lines.optimalMinTone = idxDiapason + minTone;
  39.         _lines.optimalMaxTone = idxDiapason + minTone + kDiapason - 1;
  40.     }
  41.     else
  42.     {
  43.         BOOL b = NO;
  44.         while(maxTone - minTone + 1  < kDiapason)
  45.         {
  46.             b = !b;
  47.             b ?  ++maxTone : --minTone;
  48.         }
  49.         _lines.optimalMinTone = minTone;
  50.         _lines.optimalMaxTone = maxTone;
  51.     }
  52.     //----------------------------------------------------------------------
  53.     for(int i=0; i < _lines.countLines; ++i)
  54.     {
  55.         for(int m=0; m < _lines.line[i].countNotes; ++m)
  56.         {
  57.             if(_lines.line[i].note[m].tone > _lines.optimalMaxTone)
  58.                 _lines.line[i].note[m].tone = _lines.optimalMaxTone;
  59.             if(_lines.line[i].note[m].tone < _lines.optimalMinTone)
  60.                 _lines.line[i].note[m].tone = _lines.optimalMinTone;
  61.         }
  62.     }
  63.    
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement