我正在为 iPad 开发带有音序器的鼓计算机。鼓计算机工作得很好,编写音序器也不是什么大问题。但是,音序器目前只能进行直拍(每个步进的持续时间相同)。我想添加一个摇摆(或某些人似乎称之为随机播放)选项,但我无法弄清楚如何。
如果我理解正确的话,摇摆几乎是通过以可配置的数量抵消 1-2-3-4 之间的八分音符来实现的。所以而不是
1 + 2 + 3 + 4 +
它变成了类似的东西
1 +2 +3 +4 +
链接的 MIDI 文件更好地说明了这一点......
但是,音序器以 1/16 甚至 1/32 步进工作,所以如果 2/8(4/16)音符被偏移,那将如何影响 5/16 音符。
我可能没有以正确的方式接近这个。任何指针?
定序器代码
这是我如何实现音序器的基础知识。我认为在某些点改变 stepDuration 应该会给我想要的挥杆效果,但是如何?
#define STEPS_PER_BAR 32
// thread
- (void) sequencerLoop
{
while(isRunning)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
// prepare for step
currentStep++;
if(currentStep >= STEPS_PER_BAR * activePatternNumBars)
currentStep = 0;
// handle the step/tick
...
//calculate the time to sleep until the next step
NSTimeInterval stepDuration = (60.0f / (float)bpm) / (STEPS_PER_BAR / 4);
nextStepStartTime = nextStepStartTime + stepDuration;
NSTimeInterval now = [NSDate timeIntervalSinceReferenceDate];
// sleep if there is time left
if(nextStepStartTime > now)
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceReferenceDate:nextStepStartTime]];
else {
NSLog(@"WARNING: sequencer loop is lagging behind");
}
[pool release];
}
}
编辑:添加代码