我正在开发一个用于鼓声音的步进音序器程序。它采用 16 位二进制模式示例:"1010010100101001",然后将二进制模式分解为如下所示的块:10, 100, 10, 100, 10, 100, 1。然后,它根据有多少个块为每个块分配一个时间值。数字。原因是有些鼓样本声音发出的声音比 1 节拍的长度长,所以分块解决了这部分。(例如,如果节拍为 60bpm 1 位 = 1 秒)“10”= 2 秒,“100”= 3 秒,“1”= 秒。(允许我在模式中将声音修剪到适当的长度,并使用 ffmpeg 将其连接成最终的 wav)另外 1 = 鼓击 / 0 = 无声击......这种方法非常适合我的需要。
现在我可以制作完美的节拍循环......并且我想在其之上添加速度模式层,以允许幽灵音符/为我的鼓模式添加人的感觉/动态。我决定对速度模式使用 0、1、2、3、4 值系统。“0”= 0% 体积,“1”= 25% 体积,“2”= 50% 体积,“3”= "0"= 0% 体积,"1"= 25% 体积,"2"= 50% 体积,"3"= 75% 体积,"4"= %100 体积。(音量为 0,这样我就可以添加打开踩镲/铙钹碰撞硬停止,而二进制模式中的 0 则不会这样做)因此,除了"1111111111111111"模式外,您还会看到一个速度模式层,例如"4242424242424242"(该速度模式交替使用 100% 击打和 50% 击打,使用踩镲听起来不错/就像真正的鼓手)
我使用 PHP 将 16 位二进制模式分解为一个块数组。"1001110011110010"将是
['100','1','1','100','1','1','1','100','10']
现在通过循环,我需要将 0、1、2、3、4 位数字的另一个 16 位数字层模式映射到每个块的第一位数字。
示例1:
Velocity Pattern: '4242424242424242'
Binary Pattern: '1001110011110010'
Array = ['100','1','1','100','1','1','1','100','10']
'100' = 4 (1st digit in 4242424242424242 pattern)
'1' = 2 (4th digit in 4242424242424242 pattern)
'1' = 4 (5th digit in 4242424242424242 pattern)
'100' = 2 (6th digit in the 4242424242424242 pattern)
'1' = 4 (9th digit in the 4242424242424242 pattern)
'1' = 2 (10th digit in the 4242424242424242 pattern)
'1' = 4 (11th digit in the 4242424242424242 pattern)
'100' = 2 (12th digit in the 4242424242424242 pattern)
'10' = 4 (15th digit in the 4242424242424242 pattern)
示例2:
Velocity Pattern: '4242424242424242'
Binary Pattern: '1111111111111111'
Array = ['1','1','1','1','1','1','1','1','1','1','1','1','1','1','1','1']
阿波罗的战车
料青山看我应如是