我正在尝试将便条时间和这个网格同步起来:(放大以正确地查看网格)

(注意其中2行对齐不对齐),但我尝试的每一件事似乎都不起作用。我的主要问题是这个必须实时完成,我不能对它进行预处理。(它已经足够慢了)
为了解释这个图像:
图像的第一行是音符播放的最大速度。它是20 NPS (音符每秒)。第二行与网格不对齐,为13.25 NPS。第3批10名NPS。第四批为6.25NPS。其余的都是从3到20的n为20/n。
如果我们将网格的每个部分称为“帧”,并且考虑到20个NPS与帧匹配,那么我们就有20个FPS。我在这里唯一能做的就是选择在哪一帧中播放音符。也就是说,对于20个NPS,我在每个帧上播放一个音符,而对于10个NPS,我跳过每个音符一个帧,等等……
我要做的是想出一个跳过帧的算法,这样13.25 NPS歌曲听起来仍然不错,即使我必须匹配/对齐20 NPS/FPS网格的音符。
对我怎么做有什么想法吗?
你可以看到我在这里已经尝试过的一切:https://github.com/SoniEx2/NBSPlayer/commits/eef9ad465a1e337b17ad4e27e9a22d8a9dddfe4d/ats
发布于 2015-05-12 13:51:32
链接的代码将永远无法工作,因为有一个带有makes ()的错误使其睡眠时间过长。但这里有一个解决办法:
与其直接调用睡眠(),不如按如下方式调用它:
local function sleep_workaround(d)
local t = d * 20
for i=1,math.floor(t) do
sleep(0.05) -- 0.05s sleeps don't trigger the bug
end
end这是由于错误的ComputerCraft代码执行x -= 0.05每个滴答,这会导致浮点错误,而不是将输入转换为整数,并在每个滴答中执行x -= 1。由于ComputerCraft使用Java,这是一些简单的Java代码,显示了bug:
for (double d : new double[]{0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0}) {
int i;
double in = d;
for (i = 0; d > 0.0; i++, d -= 0.05) {}
System.out.println(in + " " + i);
}发布于 2014-12-03 08:42:06
我不认为如果没有高利率的抽样,任何变化都不会有任何好处。
1. if you align 13.25nps to 10 nps instead
- then of coarse you are out of sync in time anyway resp. out of wanted tempo
,所以我认为是使用更高采样率的唯一方法,
如何实现变量跳过
ix,ix+1,ix+2,...cnt?,f?变量即可。(cnt?<0)或使用framerates-1来实现不同的对齐/混叠样式。https://stackoverflow.com/questions/27260688
复制相似问题