据我了解, Random.Next() 使用系统时间来获取种子,但是当快速迭代循环时,系统时间没有改变或几乎没有改变,给了我相同的“随机”数字。我正在尝试使用随机选择起始位置来开始将字节写入音乐文件中大约 2 秒的静态时间,选择了 30 个不同的位置,但它们几乎相同。我从一开始就几乎是连续的静态,在几秒钟内中断了大约 3 次,然后在大约 30 秒后恢复正常播放音乐;这不是我想要的,我需要它在整个剪辑中展开。“int pos”是问题,它不是随机的,每个起始位置几乎与其他所有位置相同,所以我有很长的静态量,不是静态的随机散布在整个音乐中。我的随机数也是静态的。
FileStream stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);
for (int i = 0; i < 20; i++)
{
int pos = rand2.Next(75000, 4000000 /*I've been too lazy to get the file length, so I'm using 4000000*/ );
for (int x = 0; x < 500000/*500000 is a little over 2 seconds of static*/; x++)
{
byte number = array[rand.Next(array.Length)];
stream.Position = pos;
pos++;
stream.WriteByte(number);
}
}
我假设每次写入需要 5 秒左右(在我的慢速 CPU 上),这足以让下一次随机给我一个与前一个不同或非常接近的位置。就目前而言,每次我似乎获得约 90000 的初始位置(音乐的前几秒);所有接下来的都在 20 秒内。所以我的问题是,为了达到我想要的结果,我需要做些什么修改/做不同的事情?我想要几秒钟的静电散布在整个剪辑中,而不是聚集在一起。
我有一个字节数组来存储我的十六进制数字,这些数字是随机选择的,看起来工作正常,只是书写位置的随机性根本不是随机的,它们都非常接近。
byte[] array = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F };
谢谢。
PS 我知道我应该为 FileStream 使用块,当我找到它时我会添加它。