作者stu87616 (DoubleLight)
看板Programming
标题[问题] 系统对音乐速度的严谨度
时间Fri Mar 1 12:30:57 2013
因为个人兴趣的关系,经常会处理一些音乐专案,
这边先提一下一些音乐小知识,
音乐有所谓BPM(beats per minute),
也就是一分钟会有几拍,通常古典音乐会在120-150左右,
现代摇滚180左右,都是作曲家(和演奏家)随自己意思决定这样。
这边可以看出音乐速度系统是非常"类比"的(这样形容不知道对不对),
电脑的作业方式是依靠tick运作,速度越快的音乐tick间隔越短,
将tick与拍子进行同步,就能依照速度播放音乐了,
但要如何做?
将BPM逆算回来,求出一拍的间隔就是60 / bpm
拿现代摇滚180来说,这麽一算正好是1/3,除不尽呀,
还没算上分音符,音符流动最小间隔不是只有一拍,
通常还会有8分音符 16分音符,过分一点还有32分音符,
这样就还要再除8,才能满足所有最小间隔。
因为绝大多数的BPM算出来都是循环小数,
那作业系统是怎麽处理那些除不尽的余数呢?
有多精细?毫秒?微秒?奈秒?
怎麽处理?直接舍去?
--
我觉得
安丽是世界上最强的直销了
秀丞科美如雅葡贺美安 ◥▁▁▁▁ ◢
其他的应该废除
得燕士安新芳众宝乐丽 ◤
██ /-
美公威公公公公芙家公
□–□◢◤
如果各位有兴趣的话可以加入我们
安丽 公司公司司司司公公司
▼ㄑ ◢
但是要经过选拔
司 司 司司 ▼ㄧ /◣
因为我们只会接受精英 绝对不会接受
垃圾@
图ψ ◢ /◣– ◤ /█◣
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.125.7.37
1F:→ kdjf:输出的DA也只跑在90khz.... 再高上去也没有用 140.112.245.32 03/01 17:07
2F:→ uranusjr:准到毫秒的话 1/3 一秒也只会差一毫秒 220.133.47.18 03/01 18:13
3F:→ uranusjr:也就是曲子要超过 16 分钟才会有一秒误差 220.133.47.18 03/01 18:14
4F:→ uranusjr:对人类而言根本没差... 220.133.47.18 03/01 18:14
对,我知道音乐这种东西毕竟是要给人类听的,不必太在意细节,
但我想知道...有没有某种大家都讲好的协定?
如果不同的音讯处理用不同的频率算法,
歌曲一长,最後还是会听得出来吧?
※ 编辑: stu87616 来自: 120.125.7.18 (03/01 18:59)
5F:推 snowlike:唔..我不太明白为什麽误差可以累增近一秒 114.44.108.14 03/01 20:01
6F:→ kdjf:先想想看你的"音开始"要怎麽在声波中定义 140.112.245.32 03/02 22:53
7F:→ kdjf:看对声波要多久取一个样,接着就把拍子round 140.112.245.32 03/02 22:55
8F:→ kdjf:到对接近的点 140.112.245.32 03/02 22:55
9F:推 shietsd:精细度跟你用到的硬体有关 61.57.152.2 03/03 18:48
10F:→ shietsd:如果你是用mcu类的发音 处理器都是MHZ等级 61.57.152.2 03/03 18:49
11F:→ shietsd:精细度至少是 us 如果是说win 平台上的音 61.57.152.2 03/03 18:50
12F:→ shietsd:效卡之类的 上面的处理器应该更快 61.57.152.2 03/03 18:50
13F:推 shietsd:至於除不尽的问题 基本上算式是以 MCU 产 61.57.152.2 03/03 18:54
14F:→ shietsd:生多少波形来算的(方波) 所以每次都会更新 61.57.152.2 03/03 18:54
15F:→ shietsd:波形数 理论上误差不应该会累积 61.57.152.2 03/03 18:54
16F:→ kdjf:音效最高只有看过19xkHz的...,重点在有DA所以 140.112.245.32 03/04 01:42
17F:→ kdjf:不是方波吧 140.112.245.32 03/04 01:42
18F:推 shietsd:因为原PO问题在於音乐曲调与电脑运作的差 61.57.152.2 03/04 19:00
19F:→ shietsd:异 所以我直觉是认为他是在问 AD 的误差 61.57.152.2 03/04 19:01
抱歉,其实我根本看不懂AD和DA这些缩写是啥(汗
看你们提到波型之类的,似乎是指wav音频,
我主要是想问,像是midi这类由电脑自行生成的类型,
速度的储存位址可能就只有一个数字(BPM),那能够多严谨?
※ 编辑: stu87616 来自: 1.163.69.63 (03/05 00:24)
20F:→ azureblaze:midi的bpm是推算出来的 118.168.57.194 03/05 01:37
21F:→ azureblaze:实际储存的是每拍时间长度(整数微秒) 118.168.57.194 03/05 01:38
↑↑↑↑就是这个
这个"整数微秒"怎麽决定好的?
如我在意的,一定除不乾净嘛,怎麽处理那些余数?
22F:→ azureblaze:另外再一个整数决定每拍几个tick 118.168.57.194 03/05 01:38
23F:→ azureblaze:所有的事件都会发生再tick上 118.168.57.194 03/05 01:38
24F:→ azureblaze:所以其实全部都是整数运算 118.168.57.194 03/05 01:39
25F:→ azureblaze:至於跟实际时间的差距 118.168.57.194 03/05 01:39
26F:→ azureblaze:一般应用会以音乐时间为准 118.168.57.194 03/05 01:40
27F:→ azureblaze:所以根本不会去理实际时间 118.168.57.194 03/05 01:43
※ 编辑: stu87616 来自: 1.162.164.225 (03/05 10:40)
28F:→ azureblaze:除不乾净就除不乾净啊 1.171.59.231 03/05 10:53
29F:→ azureblaze:从计时器开始就不准了 1.171.59.231 03/05 10:54