Godot 录音 Demo 拆解:4 步把麦克风声音存成 WAV
【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects
这个官方 Demo 演示了 Godot 录音的最小完整链路:麦克风输入经专用总线进入 AudioEffectRecord(录音效果器),停止后回放,或一键导出 WAV 文件。
最终交付物:一个 640x480 的窗口,点 Record 开始录、再点一次停止,Play 可回放刚才的声音,Save WAV To 把结果写到user://record.wav。没有任何波形界面,产出就是"一段可播放、可落盘的录音"。
🏁 跑起来之前的三件事
- 引擎版本:Godot 4.7,渲染器用 Compatibility(Compatibility 渲染器),见 project.godot
- 入口场景:MicRecord.tscn,已配置为 main scene,直接按 F5 运行
- 麦克风权限:项目设置里开了
enable_audio_input=true,这是 Godot 4 捕获音频输入的总开关,本地跑一般直接生效
仓库克隆下来后进入audio/mic_record目录打开项目即可,没有第三方依赖。
🔍 拆解核心链路
整条链路就四步:建总线 → 挂麦克风流 → 切录制状态 → 回放/导出。全部逻辑在 MicRecord.gd 一个脚本里。
1. 建一条静音的 Record 总线
录音的前提是有一条"只录不播"的总线。配置在 default_bus_layout.tres:
bus/1/name = &"Record" bus/1/mute = true bus/1/effect/0/effect = SubResource("AudioEffectRecord_fo272")注意mute = true这个细节:这条总线被静音,意味着麦克风的声音会经过总线(被录进去)但不会送进扬声器。跑起来你会发现,不静音的话你会实时听到自己的声音,外放设备直接啸叫。
2. 把麦克风流挂到这条总线上
场景里有一个隐藏的AudioStreamPlayer,它的 stream 是AudioStreamMicrophone(麦克风音频流):
stream = SubResource("1") # AudioStreamMicrophone autoplay = true bus = &"Record"三个属性就是全部接线工作:自动播放、输出到 Record 总线。麦克风数据从进入这条总线的那一刻起就持续被 AudioEffectRecord 缓存,与录制开关无关。
3. 用按钮切换录制状态
_ready()里先按名字拿到效果器实例,之后 Record 按钮只做开关动作:
if effect.is_recording_active(): recording = effect.get_recording() effect.set_recording_active(false) else: effect.set_recording_active(true)get_recording()返回的是AudioStreamWAV(WAV 音频流对象),此时数据已在内存里。紧接着三行set_mix_rate / set_format / set_stereo把界面上选的参数应用到这个对象上——这就是为什么下拉框改动会立即生效,无需重新录。
4. 回放并导出 WAV
回放只把流对象塞给播放器:
$AudioStreamPlayer.stream = recording $AudioStreamPlayer.play()导出则是一个方法调用:
recording.save_to_wav(save_path)save_path来自 LineEdit,默认user://record.wav。界面上"Open User Folder"按钮调用OS.shell_open直接打开用户目录,方便确认文件落盘位置。
📋 参数速查
界面下拉框对应 MicRecord.gd 里的三个变量,录完再改也即时生效:
| 参数 | 可选值 | 适用场景 |
|---|---|---|
| Format | 8-bit / 16-bit / IMA ADPCM | 语音用 16-bit 足够;想压小体积用 ADPCM |
| Mix rate | 11025 / 16000 / 22050 / 32000 / 44100 / 48000 Hz | 默认 44100,接近 CD 音质 |
| Stereo | 开 / 关 | 关成单声道,数据量减半 |
| 保存路径 | 任意,默认user://record.wav | 相对用户目录,可改任意 res/user 路径 |
⚠️ 常见卡点
- 录出来是静音:九成是项目设置里
enable_audio_input没开。Godot 4 里这是独立开关,不开的话麦克风流没有数据。 - 实时听到自己声音 / 啸叫:检查 Record 总线是否静音。本 Demo 的静音是刻意的,改总线布局时别顺手把
mute关掉。 - 找不到保存的 WAV:
user://不是项目目录,是各平台独立的用户数据目录(Windows 下在%APPDATA%或用户目录中)。点界面上的"Open User Folder",或看状态栏打印的globalize_path绝对路径。
🧭 延伸方向
recording.get_data()能拿到原始 PCM 字节,喂给_draw()就能画振幅波形- 参考仓库里 audio/spectrum 的做法,把频谱分析叠在录音界面上
- 复制一条 Record 总线挂不同音源,可以试验"录环境音 + 录人声"分开落盘
这条"总线 + AudioEffectRecord + AudioStreamWAV"的链路对任何需要本地拾音的场景(语音聊天、口述记录、调试工具)都直接可复用;平台权限相关的坑,建议直接翻仓库 issues 搜 "audio input",前人踩过的都有记录。
【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址: https://gitcode.com/GitHub_Trending/go/godot-demo-projects
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考