2012-04-05 3 views
0

私は自分のオーディオプログラムのテストを書こうとしています。まず、60行×10000列のテーブルを用意しました。各セルには、ON、OFF、またはLEFTの値があります(これは私の左にある最も近いON/OFFと同じ値です)。私はいつでもランダムに20行から40行をランダムにしたい。それぞれランダムに6〜200個のセルが必要です。 ONまたはOFFを設定するコマンドは、行と列で順序付けする必要があります。私は座標キーとオン/オフ値で出てくる疎な辞書を描いています。私が理解できないことは、現在の行がONかOFFかを簡単に判断できるように、ON/OFFセルを保存する方法です。助けて?御時間ありがとうございます。ランダム(Gantt-ish)チャートを作成する

答えて

0

さらにこれを考えた後、私は2回のパスでそれを行うことができることを実感しました。ここで私は結局何をしました。このアプローチについてご意見をお寄せください:

 var table = new byte[60, 10000]; 
     for(int i = 0; i < 60; i++) 
     { 
      // we want at least half the row to be blank 
      int j = 0; 
      while(j < 10000) 
      { 
       var width = rand.Next(7, 200); 
       j += width * 2; 
       var vol = (byte)rand.Next(50, 125); 
       for(int k = j - width; k < Math.Min(10000, j); k++) 
        table[i, k] = vol; 
      } 
     } 

     var midiEvents = new List<BASS_MIDI_EVENT>(); 
     midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_PROGRAM, 0, 0, 0, 0)); 

     for(int j = 0; j < 10000; j++) 
     { 
      for(int i = 0; i < 60; i++) 
      { 
       var cur = (int)table[i, j]; 
       var left = j > 0 ? table[i, j - 1] : 0; 
       if(cur > 0 && left == 0) 
       { 
        cur <<= 8; 
        cur |= i + 33; 
        midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_NOTE, cur, 0, j, 0)); 
       } 
       else if(cur == 0 && left > 0) 
       { 
        midiEvents.Add(new BASS_MIDI_EVENT(BASSMIDIEvent.MIDI_EVENT_NOTE, i + 33, 0, j, 0)); 
       } 
      } 
     } 
関連する問題