news 2026/9/18 2:25:05

Godot 录音 Demo 拆解:4 步把麦克风声音存成 WAV

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Godot 录音 Demo 拆解:4 步把麦克风声音存成 WAV

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 里的三个变量,录完再改也即时生效:

参数可选值适用场景
Format8-bit / 16-bit / IMA ADPCM语音用 16-bit 足够;想压小体积用 ADPCM
Mix rate11025 / 16000 / 22050 / 32000 / 44100 / 48000 Hz默认 44100,接近 CD 音质
Stereo开 / 关关成单声道,数据量减半
保存路径任意,默认user://record.wav相对用户目录,可改任意 res/user 路径

⚠️ 常见卡点

  • 录出来是静音:九成是项目设置里enable_audio_input没开。Godot 4 里这是独立开关,不开的话麦克风流没有数据。
  • 实时听到自己声音 / 啸叫:检查 Record 总线是否静音。本 Demo 的静音是刻意的,改总线布局时别顺手把mute关掉。
  • 找不到保存的 WAVuser://不是项目目录,是各平台独立的用户数据目录(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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 2:23:55

AI 推理请求从 M8 Ultra 发出,TaoToken 只给 Key 和端点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 2:23:09

容器化部署从入门到实战:Docker核心技术解析与踩坑指南

“容器化部署”这个词,这几年几乎成了后端开发和运维圈绕不开的话题。无论是新项目落地,还是老系统改造,只要聊到环境一致性、资源利用率、快速交付,最后基本都会落到 Docker 上。很多人第一次听到 Docker,可能是从一个…

作者头像 李华
网站建设 2026/9/18 2:22:12

IDEA中输出SQL的七种方法:日志配置、插件还原与脚本生成实战

平时排查接口问题,十次里有八次都要看SQL。你在IDEA里写Java项目,会写SQL只是基本功,能在日志里把SQL准确捞出来、带上参数还原成一条能直接执行的语句,这才是日常开发中最有价值的技能之一。这篇文章就把我在IDEA里弄出SQL语句的…

作者头像 李华
网站建设 2026/9/18 2:19:43

MySQL与Oracle核心差异:事务、分页、运维的实战分叉点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 2:19:26

Git版本回退全指南:文件恢复、提交撤销、远端回退与reflog兜底

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 2:17:16

STM32F4+ADS1292R医疗级ECG信号链设计与BLE 5.0传输实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华