音乐播放逻辑:Intro + loop 时间算法
- Jaan Wang
- Sep 9, 2021
- 2 min read
我今后会写一些科普向音乐的基础知识。

从一些能够帮助游戏制作人和,需要应用的人的角度,希望能帮到大家。
要计算时间。首先需要理解音乐当中的关于时间的几个术语:速度Tempo,拍号Time Signature,小节Bar/measure,拍子Beat。
速度:单位是BPM,beat per minute。意思是一分钟的节拍数。60BPM代表60拍一分钟,1拍一秒。
拍号:x/y。X代表多少拍一小节,Y代表一拍等于几分音符。比如2/2是指,2拍为一小节。一拍等于一个二分音符的长度。
小节:一个小节为X个Y分音符的长度。
那么关于时间算法就是:
当前速度下,在速度的度量单位和拍号相同时,每一拍的时长:60/速度 (秒)
比如文件名为: XXXX_XXXX_XXX_T34_150BPM_L24M_P4M
看到T34,代表3/4, 代表以4分音符为一拍,150BPM代表速度为四分音符=150。一拍的长度(四分音符)为60/150 = 0.4秒
再根据音频文件中标的”LXM“代表长度为X小节。来计算intro或loop的本体时长。
关于为什么需要这样计算,而不是直接看音频文件时间长度。
原因是:声音存在自然衰减和起振时间,pre-entry或post-exit。也就是说,可能存在一定存在的提前进入或小尾巴。这些的存在是为了声音更加自然和好听,而不是整个把音频在某个时间点切断。会导致不自然的声音衰减和起振。产生失真。
文件名显示L24M,代表有24小节。在 3/4拍的情况下。刚才算得一拍长度为0.4秒。
3拍为一小节
一小节长度为3x0.4=1.2秒
24小节长度为24x1.2=28.8秒
即音乐本体时长为28.8秒。
或许你会发现音频时常或许是35秒
造成这个原因就是我刚才提到的有pre-entry和post-exit。
这时看文件名PXM代表了pre-entry(post-exit不需要额外计算长度,原因是这个音频文件自动播放完就行了,会自动播放结尾)
看到这个文件名P4M,代表有4小节的pre-entry。也就是说,这个音频文件需要提前4小节播放。即需提前4x1.2=4.8秒播放。
关于这个音频的本体结束点为,pre-entry长度+本体长度。也就是说假设需要有另一个音频再这个音频结束时播放,那么另一个音频需要将本体的开始点位,即pre-entry结束的地方,对齐第一个音频的本体结束的地方。
比如
XXXX_XXXX_XXX_T34_150BPM_L24M_P4M
这个音频的结束点位为4.8+28.8=33.6秒。因为音频时常为35秒,也就是说有1.4秒的post-exit。但我们不用过多去在意它。
也就是说任何两个音频的链接,都是本体与本体的链接。如果有pre-entry,需要提前播放。提前量为pre-entry的时长。

XXXX_XXXX_XXX_T34_150BPM_L24M_P4M
假设这是一个loop。
那么循环一定是指本体与本体的循环。也就是第一遍本体的结束连接着第二遍本体的开始。
第一遍播放之后,第二遍播放的点位算法为:
Pre-entry长度+本体长度-第二遍pre-entry长度。因为是同一首循环。所以第一遍第二遍pre-entry长度一样抵消。
因此在第一遍播放至本体长度的时间时开始播放第二遍,就可以连接上。即28.8秒。(当然,开始播放第二首时,第一首要自然播放至音频结束)
假设第一首第二首不是一样的音乐。
那么分别计算即可。
Commentaires