三、声音传奇
第9课 看见声音

一、任务目标
理解高低条,能观察安静时柱子矮、出声时变高,并指出「读音量 → 映射 → 画点 → 左移」四步。
二、我们要学什么
- 学习要点:读音量 → 「映射」 到列高 → 画一列像素 → 左移显示;仿真映射上限用 4095
- 本课过关:能完成:安静时柱矮、出声时变高;能指出「画点在 for 里、左移在 for 外」。
- 示例对齐:体验题对应 「3-1-1 看见声音」;完整代码对应 「3-1-2 正向看见声音」。
三、本节要点
本节把「听见」变成点阵柱。MixVM 空闲音量约 2048,映射 fromHigh 要用 4095,不能再用真机常见的 0~100。
四、解题思路
- 输入:麦克风声音量。
- 输出:点阵上一列柱高,并向左推移。
- 生活对照:音乐播放器的频谱条。
- 验证现象:安静柱矮、出声变高;不会整屏一直满格。
本课主要用到:声音传感、点阵屏。
- 1明确任务「看见声音」:输入是音量,输出是列高。
- 2「映射」 把 0~4095 压到 0~8(或 8~-1 的正向柱)。
- 3for 里只画像素;左移显示 和延时放在 for 外面,否则每画一个点就挪一次屏。
- 4载入后先 print 原始音量,再看柱高是否跟着变。
流程示意(可对照左侧文字)
五、图形块功能讲解
下面只列出本课首次出现的 Mixly 图形块(真积木截图)。已在前面课讲过的不再重复;先认新块,再点「载入」对照拖搭。
| 图形块 | 分类 | 作用 | 本课用法 |
|---|---|---|---|
![]() | 板载传感 | 读取麦克风音量大小。 | 每圈 print(soundlevel()),再拿去映射。 |
![]() | 数学 | 把数字字符串解析为数值。 | 把映射结果转成 int,作为 for 的终点。 |
![]() | 数学 | 把数值从一组范围线性映射到另一组范围。 | 仿真:0~4095 映射到柱高 0~8。 |
![]() | 板载显示 | 控制点阵上某一个点的亮灭。 | 在 x=11 画一列。 |
![]() | 板载显示 | 把当前画面向某方向平移。 | 画完一列后再 左移显示(1)。 |
六、知识点讲解
「看见声音」把麦克风音量变成点阵上的高低条:越吵柱子越高,再向左推移,形成会流动的音量图。声音强度是一个数:soundlevel() 给出当前响度。真机常见大约 0~100;MixVM 仿真约 0~4095,空闲时常在 2000 附近。它不是「录下波形」,只是这一瞬间有多吵。对着板子说话、拍手,数应变大;安静时应变小。映射:音量 → 柱高:点阵一列只有有限行(示例映射到 0~8)。math map 把仿真的 0~4095 线性压到 0~8,再取整。映射反了(大音量对应矮柱)就会「正向看见」对不上直觉。画一列再平移:在固定 x(如第 11 列)从下往上点亮若干像素,show 后 左移显示,旧的一列被推走,新的一列从右边长出来,看起来像频谱在滚动。
对照与过关:循环太快会刷成一片,太慢会「跟不上拍手」。0.1 秒一级延时是常见节奏,可对照改一处看拖影。先用打印看原始 soundlevel,再看映射后的高度,才能判断是传感没变还是映射写反。安静时柱子矮、出声时变高,并能指出程序里「读音量 → 映射 → 画点 → 左移」四步。先弄清输入是音量、输出是点阵列高,再载入示例对着麦克风对照。
七、编程练习
点「载入」打开 MixVM(board=mini_design)。默认图形化积木;起步程序与积木均来自 MixGo MINI 兴趣课程/学期2。在 Mixly 工具栏点「运行 / 停止」,「检查」做关键字核对。请先读本页「四、解题思路」与「五、图形块功能讲解」,再点载入。
兴趣课程:3-1-1 看见声音.mix。载入后运行。
正在载入编程环境
正在载入 MixGo MINI 仿真编程环境…
八、课堂练习
先完成两道判断题,再完成选择题;全部选定后点「检查」。
判断:本课主要是把灯调得越来越亮,点阵只是装饰。
判断:若把仿真音量按 0~100 去映射,空闲时柱子也会经常顶满。
左移显示 应放在?
本课仿真里 「映射」 的 fromHigh 更合理的是?
九、本节小结
本课主题是看见声音:读音量后映射到列高,画一列像素再左移显示。体验程序安静时柱矮、出声时变高;完整程序用正向映射更直观。要能指出画点在循环里、左移在循环外。




