一、音效基础与硬件探秘:声音的物理本质
各位同学,欢迎来到《自制游戏机音频驱动与音效生成》的第一章。
我是你们的讲师,一个在嵌入式音频和游戏音效领域摸爬滚打了十几年的老工程师。今天咱们不聊虚的,直接切入正题——声音到底是个什么东西?游戏机又是怎么把它折腾出来的?
嗯,先别急着翻数据手册。咱们从最基础的东西开始。
1.1 声音的物理本质:频率、振幅、波形
声音的本质是什么?说白了,就是空气的振动。你敲一下桌子,桌面振动,推动空气分子,形成疏密波,传到你的耳朵里,鼓膜跟着振,大脑就告诉你:「嗯,听到了。」
但作为工程师,我们不能只停留在「振动」这个层面。我们需要三个核心参数来描述它:频率、振幅、波形。
频率(Frequency)
频率决定了音高。单位是赫兹(Hz),表示每秒振动多少次。
- 440Hz 是标准A音,也就是钢琴上那个「啦」。
- 人耳能听到的范围大约是20Hz到20kHz。
- 低于20Hz叫次声波,高于20kHz叫超声波——咱们做游戏音效,基本就在这个范围内折腾。
我个人习惯把频率想象成「速度」:振动越快,声音越尖;振动越慢,声音越沉。你想想看,低音炮为什么能震得胸口发闷?因为它频率低,振动慢,但能量大。
振幅(Amplitude)
振幅决定了音量大小。振幅越大,空气振动越剧烈,声音越响。
但注意,人耳对音量的感知不是线性的。你增加一倍振幅,人耳感觉到的音量变化并不是一倍。所以咱们用分贝(dB)这个对数单位来描述。0dB是参考点,每增加6dB,振幅翻倍。
在游戏机里,振幅通常用一个数字值来表示。比如8位PWM,取值范围是0到255。255就是最大振幅,0就是静音。这个后面会细讲。
波形(Waveform)
波形决定了音色。这是最有趣的部分。
同样的频率、同样的振幅,为什么钢琴和小提琴听起来完全不同?因为波形不同。
- 正弦波:最纯净的声音,没有泛音。听起来像「嘟——」。常用于测试信号。
- 方波:包含大量奇次谐波,听起来尖锐、电子感强。Game Boy的经典音色就是方波。
- 锯齿波:包含所有整数次谐波,听起来明亮、饱满。适合做贝斯或主旋律。
- 三角波:谐波衰减较快,听起来柔和、空灵。适合做Pad或背景音。
我记得刚入行时,总以为音色很玄学。后来用示波器一看,波形清清楚楚摆在那里。说白了,音色就是「谐波成分的分布」。你控制好谐波,就能控制音色。
1.2 游戏机音频硬件架构:以Game Boy为例
好了,理论讲完了。咱们来看看真实世界里的游戏机是怎么处理声音的。
我选Game Boy作为例子,原因很简单:它够老、够简单、够经典。而且它的音频架构非常清晰,非常适合入门学习。
Game Boy的音频系统概览
Game Boy使用一颗8位CPU(Z80变种),主频约4.19MHz。音频部分集成在同一个芯片里,没有独立的音频DSP。这意味着所有音效生成都得靠CPU硬算,或者靠硬件定时器直接产生。
它一共有4个声音通道:
| 通道 | 类型 | 特点 |
|---|---|---|
| 通道1 | 方波(可调占空比) | 带包络和扫频,适合旋律 |
| 通道2 | 方波(可调占空比) | 带包络,无扫频,适合和声 |
| 通道3 | 波形存储器(WAV) | 可自定义波形,4位采样 |
| 通道4 | 噪声 | 伪随机序列,适合打击乐 |
你想想看,就这四个通道,撑起了《宝可梦》《塞尔达》《俄罗斯方块》的整个声音世界。是不是很神奇?
硬件寄存器映射
每个通道都有对应的寄存器,CPU通过写这些寄存器来控制音高、音量、包络等。比如通道1的频率控制寄存器在地址 FF1D 和 FF1E。
我建议你记住一个原则:硬件是死的,驱动是活的。你只要把寄存器写对,硬件就会乖乖干活。
1.3 PWM与DAC基础原理
好,接下来是本章的重头戏。游戏机是怎么把数字信号变成声音的?
答案有两个:PWM 和 DAC。
PWM(脉冲宽度调制)
PWM说白了就是「用数字引脚模拟模拟信号」。你有一个引脚,只能输出高电平(比如3.3V)或低电平(0V)。但如果你快速切换高低电平,并且控制高电平持续的时间(占空比),那么平均电压就会变化。
比如:
- 占空比50%:平均电压1.65V
- 占空比25%:平均电压0.825V
- 占空比100%:平均电压3.3V
然后你用一个低通滤波器(一个电阻加一个电容)把高频开关成分滤掉,剩下的就是平滑的模拟电压。这个电压驱动喇叭,就发出声音了。
Game Boy用的就是PWM。它的PWM频率大约是2MHz左右,远超人耳能听到的范围。所以滤波后基本听不到开关噪声。
DAC(数模转换器)
DAC是更直接的方式。它内部有一组精密的电阻网络或电容阵列,输入一个数字值,输出对应的模拟电压。
比如一个8位DAC,输入0输出0V,输入255输出参考电压(比如3.3V)。中间线性对应。
DAC的优点是精度高、噪声低。缺点是贵、占芯片面积。所以老游戏机很少用,现代设备才普遍采用。
我个人习惯在原型验证时用PWM,因为便宜、简单。但正式产品如果对音质有要求,我会换成DAC。记得有一次做一款复古掌机,为了省成本用了PWM,结果底噪太大,被测试部门打回来三次。后来换了DAC,世界清净了。
PWM vs DAC:怎么选?
| 对比项 | PWM | DAC |
|---|---|---|
| 成本 | 低(只需一个定时器引脚) | 高(需要专用芯片或模块) |
| 音质 | 一般(有开关噪声) | 好(低噪声、高精度) |
| 实现难度 | 简单(软件控制占空比) | 中等(需要配置DAC寄存器) |
| 适用场景 | 低成本、低功耗、对音质不敏感 | 高保真、专业音频设备 |
嗯,这里要注意:咱们做游戏机音频驱动,PWM是绕不开的。因为很多老硬件只有PWM。但如果你自己设计新硬件,我建议至少用12位以上的DAC。
小结
这一章咱们聊了声音的三个基本属性:频率、振幅、波形。然后解剖了Game Boy的音频硬件,最后搞清楚了PWM和DAC的原理。
说白了,声音就是「控制电压随时间变化」。频率控制变化快慢,振幅控制变化幅度,波形控制变化形状。而PWM和DAC,就是实现这种变化的工具。
下一章,咱们会真正动手写代码,让Game Boy发出第一个声音。准备好了吗?
好了,今天就到这里。我是你们的讲师,咱们下章见。