三、声音传奇

第9课 看见声音

任务场景:看见声音
任务场景:看见声音

一、任务目标

理解高低条,能观察安静时柱子矮、出声时变高,并指出「读音量 → 映射 → 画点 → 左移」四步。

二、我们要学什么

  • 学习要点:读音量 → 「映射」 到列高 → 画一列像素 → 左移显示;仿真映射上限用 4095
  • 本课过关:能完成:安静时柱矮、出声时变高;能指出「画点在 for 里、左移在 for 外」。
  • 示例对齐:体验题对应 「3-1-1 看见声音」;完整代码对应 「3-1-2 正向看见声音」。

三、本节要点

本节把「听见」变成点阵柱。MixVM 空闲音量约 2048,映射 fromHigh 要用 4095,不能再用真机常见的 0~100。

1读场景明确真实任务
2对要点音量映射成柱高再左移
3载入运行兴趣课程积木/代码

四、解题思路

  • 输入:麦克风声音量。
  • 输出:点阵上一列柱高,并向左推移。
  • 生活对照:音乐播放器的频谱条。
  • 验证现象:安静柱矮、出声变高;不会整屏一直满格。

本课主要用到:声音传感、点阵屏。

  1. 1明确任务「看见声音」:输入是音量,输出是列高。
  2. 2「映射」 把 0~4095 压到 0~8(或 8~-1 的正向柱)。
  3. 3for 里只画像素;左移显示 和延时放在 for 外面,否则每画一个点就挪一次屏。
  4. 4载入后先 print 原始音量,再看柱高是否跟着变。

流程示意(可对照左侧文字)

任务:看见声音「映射」 把 0~4095 压到 0~8(或 8~-1 的正向柱)for 里只画像素运行后对照现象

五、图形块功能讲解

下面只列出本课首次出现的 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。载入后运行。

八、课堂练习

先完成两道判断题,再完成选择题;全部选定后点「检查」。

  1. 判断:本课主要是把灯调得越来越亮,点阵只是装饰。

  2. 判断:若把仿真音量按 0~100 去映射,空闲时柱子也会经常顶满。

  3. 左移显示 应放在?

  4. 本课仿真里 「映射」 的 fromHigh 更合理的是?

九、本节小结

本课主题是看见声音:读音量后映射到列高,画一列像素再左移显示。体验程序安静时柱矮、出声时变高;完整程序用正向映射更直观。要能指出画点在循环里、左移在循环外。