我正在尝试为我的一个音频程序编写测试,但我无法将我的大脑包裹在这个测试设置中。首先,我有一个需要填充的 60 行 x 10000 列的表。每个单元格都有一个值 ON、OFF 或 LEFT(这意味着我的值与我左边最近的 ON/OFF 相同)。我希望在任何给定时间随机打开 20 到 40 行。每个都必须打开随机 6 到 200 个单元格。设置 ON 或 OFF 的命令必须按行然后按列排序。我正在描绘一个带有坐标键和开/关值的稀疏字典。我不明白的是如何存储我的开/关单元格,以便我可以轻松确定当前行是开还是关。帮助?谢谢你的时间。
问问题
198 次
1 回答
0
经过进一步思考,我意识到我可以分两次完成。这就是我最终的结果。随意评论这种方法:
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));
}
}
}
于 2012-04-05T14:48:36.367 回答