什么是Digital Audio
我们能听到声音是因为我们的耳朵可以捕捉到声波,digital audio指的是将声波进行数字化,比如将声音按照数字形式进行存储。
Web Audio API
使用web audio api的话,那么可以帮助我们避免处理像-128、127这些比较nasty的值;
在web audio api中,audio的样本值是存储为float的形式,值的范围是+1 ~ -1,这样的话编程会更容易;
当程序output后,这个float值就会转换为2 bytes的表示然后发送出去。
Clicks
咔哒声。
Click sounds 在目前样本和下一个样本的difference很大的时候会出现;
因为这时候发音的speaker需要在很短的时间内从第一个地方很快地移动到第二个地方,当speaker做这种push or pull的动作的时候,因为是很快地,所以会对空气造成一个迅速冲击,click的声音就发出了。下图举例:
PCM Values & Clicks
PCM = Pulse Code Modulation;
PCM是样本保存的方式,PCM = “stored without any clever tricks”;
如果PCM sample sequence 是 …, -1.0, 1.0, …,这时候因为相对的difference会产生click
Clipping 截断
如果样本经过加工后,新的样本值超过了允许的level,那么就叫做clipping。
上面的这个图中,加工后的waveform部分是超过了max和min,那么直接的clipping后果就是直接从和max和min相交的地方进行切割,这样的话,超过max的那一段就成了从min开始的一段弧,低于min的那一段上浮,成了从max开始的那一段弧。
注意到clipping后的图中,有四个click。
Handling Clipping
因为上面直接任其自然的那种clipping会产生较多的click,这是我们不想要的。所以可以考虑clipping发生的时候,做一些控制,从而使得这个audio sequence更加合适。
即使你可以控制clipping让它更加appropriate,但是还是有害的,因为这样的话,the audio will not be the same as the original.
所以最好避免clipping这种情况。
How many samples?
sample rate是每一秒中对audio取的样本个数,比如如果sample rate = n,那么这个audio每秒都会被取3个点作为samples。
Amplitude Control 振幅控制
振幅就是samples values的绝对值中最大值,它是影响声音的大小的。对于audio processing operations来讲,amplitude control是最普遍和基础的操作(调音量)。
对于简单的振幅控制,可以将samples的值乘以一个常数即可:
1 如果提高音量,则所有的samples的值都需要乘以一个>1的value;
2 如果降低音量,则所有的samples的值都需要乘以一个<1的value。
After Multiplying the Amplitude
对于正数和负数而言效果都是相等的;
digital waveform的基本形状相似,但是它目前按照正方形or反方向stretched了;
mean value 还是0。