FEATURED · 精选文章

示波器音乐:用X-Y模式让音频信号画出动态图案

发布时间 / 2026/8/31 23:10:33
来源 / 创域科博编辑部
栏目 / 资讯中心
示波器音乐:用X-Y模式让音频信号画出动态图案 我第一次看到示波器音乐是在一个满屏波形的深夜工作间隙刷到一支视频屏幕上一条光滑的蓝色曲线正随着音乐节奏扭动鼓点一到就迸成一个旋转的多面体。当时我以为是后期特效后来才确认这是真实信号驱动下示波器 X-Y 模式直接“画”出来的画面。这就是 Oscilloscope Music示波器音乐不是拿示波器当波形监视器看信号而是把立体声的左右声道分别接进示波器的 X 轴和 Y 轴让音频信号本身变成一支矢量画笔。它能做什么对硬件工程师来说这是理解李萨如曲线、相位关系、信号调制最直观的玩法学具对音乐人和视觉创作者来说这是低成本又能输出特色画面的矢量视觉方案对喜欢硬核折腾的玩家来说这是把数学、音频、测量仪器串在一起的高级玩具。这篇内容适合完全没有示波器使用经验的新手也适合想做出成熟作品的进阶折腾党。下面我按“原理 → 工具选型 → 实操 → 问题排查 → 扩展”的顺序把我自己从零折腾一圈的经验完整写出来。1. 示波器音乐的核心原理从波形到画面1.1 普通示波模式与 X-Y 模式的本质区别常规情况下大家用示波器看信号时基电路会按照时间从左到右扫描X 轴固定是时间Y 轴显示电压幅度。你看到的是一段波形随时间被“铺开”的样子。这种模式下示波器本质上是一台“电压-时间记录仪”。示波器音乐的关键在于切换工作模式。X-Y 模式彻底关闭了内部时基扫描把 X 轴也变成外部信号的输入通道。双通道示波器里一路信号驱动 X 轴偏转另一路信号驱动 Y 轴偏转。此时显示不再表示“电压随时间变化”而是表示“Y 电压相对 X 电压的关系曲线”。这套机制最初是为了看两个信号的相位关系而设计的李萨如曲线就是最典型的产物。打个比方普通模式像一个人在纸上从左往右匀速写字X-Y 模式则像是在纸上任意方向移动笔尖笔尖能画圈、画弧线、画任何二维轨迹。只要你能让两路信号精确控制笔尖的位置就能在屏幕上“作画”。1.2 李萨如曲线公式为什么两个正弦波就能画出图案当两路输入都是正弦波时屏幕上显示的图形就是经典的李萨如曲线。数学上可以写成x(t) A1 · sin(2π·f1·t φ1) y(t) A2 · sin(2π·f2·t φ2)其中 A1、A2 是两个声道的振幅f1、f2 是频率φ1、φ2 是初始相位。屏幕上的最终图案由两个参数决定频率比 f1/f2 和相位差 φ2 - φ1。频率比的变化会让图形从简单到复杂频率比 1:1 时看到的是直线、椭圆或圆具体形状取决于相位差2:1 时出现类似“8”字的抛物线形3:2 时像三叶草5:4 时会变成四叶玫瑰7:5 则出现更多花瓣和交错的曲线。频率比越复杂图形越丰富。但有个前提只有当 f1/f2 是整数比时曲线才会在有限时间内闭合形成稳定图像。如果两路频率比不是整数比比如 550 Hz 和 441 Hz图形就会缓慢旋转看起来像在“自转”。这在做动画时很有用但做稳定静态图案时必须避开。1.3 立体声通道示波器音乐的必备前提示波器的 X-Y 模式需要两路独立输入这正是立体声音频天生适合的原因左声道接 X 轴右声道接 Y 轴。一首立体声歌曲的每一小段音频都可以被看成一组随时间变化的 (X, Y) 坐标点。播放音乐时示波器就相当于在逐点重放这段坐标轨迹。需要注意的是人耳听到的声音和示波器看到的图案并不是一回事。普通音乐虽然也是双声道但两个声道的信号各自独立、互不相关映射到 X-Y 屏幕上大多是一团模糊的杂乱线条。想要看到漂亮的图案必须在生成音频时就刻意设计两路信号的数学关系。这也是为什么市面上的示波器音乐作品几乎都是专门合成的音频而不是拿普通歌曲硬接示波器。我自己最常用的方法是把所有图形拆成独立的“图案函数”。每个图案用两路正弦波或正弦波叠加构成再给整个图案加上音量包络控制出现时间和持续时间。波形在示波器上留下的余晖会自然形成一层漂亮的荧光效果。2. 工具选型与方案对比三条路线怎么选2.1 播放现成曲目最低成本的入门方式最省事的方式是找已经做好的示波器音乐音频素材直接播放。这类素材往往是一个完整音频文件左右声道已经预先算好你只需要一台双通道示波器、一个音频播放设备、一根转接线就能看到画面。这种方式优点很明显不用写任何代码插上线就能动。适合第一次体验、想验证硬件连接是否正确或者纯粹为了图一乐的人。但它也有明显边界你只能看到作者设计好的图案不能实时修改图形也不能把画面和自己的音乐做一个真正同步的创作。对于只想感受一下效果的人来说完全够但如果你想把示波器音乐变成自己的创作工具这条路线很快就会到天花板。2.2 网页端工具随手可玩的快速验证方案很多人觉得示波器音乐必须要有昂贵设备其实完全不是。现在浏览器足够强大用 Web Audio API 可以实时合成两路信号输出到声卡。你只需要把电脑耳机口接出示波器再打开网页工具或自己写一段 JS就能边改参数边看画面。这个方案最适合验证想法。比如你想知道频率比改成 11:7 会画出什么图案写一个简单的 HTML 页面可能比改 Python 脚本更快。网页端调试参数的即时反馈非常爽我建议所有新手都先从这一步入手把频率比、相位差、振幅这些基础参数玩熟再进入更复杂的工程化实现。2.3 代码生成方案创作自由的终极形态如果你想把示波器音乐做成一首完整的作品或者和现有的音乐制作流程结合那代码生成是绕不开的路。我推荐 Python NumPy 做信号合成再通过 sounddevice 或 PyAudio 播放。数据流大致是先用数学函数生成音频样本 → 写入缓冲区 → 声卡输出 → 示波器显示。代码方案看起来麻烦但好处是能做任意形状多边形、螺旋线、文字轮廓、3D 投影路径甚至把 SVG 图形转成 X-Y 信号。下面这张表是我做工具选型时的对比总结供你参考方案上手难度硬件要求可定制性适合场景播放现成曲目低示波器 播放器差初次体验、验证连接网页端工具中电脑 示波器中参数学习、快速原型Python 代码生成中高电脑 示波器高完整创作、定制视觉2.4 硬件准备清单示波器、声卡和线材先说示波器。绝大多数双通道数字示波器都支持 X-Y 模式比如常见的 DS1054Z、TBS2000 系列等。如果是模拟示波器效果反而更有味道荧光余晖自然平滑。核心要求只有两条必须有双通道输入必须支持 X-Y 模式。再说音频输出。电脑板载声卡、USB 声卡都可以但建议尽量用有线连接不要走蓝牙。蓝牙音频链路有编码延迟和采样率转换画面会抖动或不同步。如果声卡有噪声先检查接地和线材屏蔽。线材这块最简单的连接方式是“3.5mm 转双 BNC”或者“3.5mm 转双 RCA 再转 BNC”。把左声道接到示波器 CH1右声道接到 CH2然后根据示波器手册搞清楚 X-Y 模式的通道映射。我手头这台机器在 X-Y 模式下默认是 CH1 驱动 Y 轴、CH2 驱动 X 轴但不同型号可能有差异。接完先放一个两路同频同相的信号看是否出现一条 45 度斜线就能验证映射关系。3. 从零做起用 Python 生成第一段示波器音乐3.1 硬件连接与示波器安全设置动手前先把安全习惯养好。示波器通道输入一般有最大电压限制虽然音频信号通常只有几百毫伏到几伏远低于安全阈值但如果从功放、调音台输出可能带有直流成分或较大功率直接怼进示波器输入口有风险。我的习惯是播放器音量先调到 10% 再开声看到屏幕上出现小图形后慢慢放大示波器垂直档位先放在 1V/div 或更大衰减档位图形过小再减小档位。连接顺序也有讲究。先接好示波器和电脑之间的线缆再把示波器切到 X-Y 模式最后开始播放音频。如果顺序反了拔插线缆的瞬间可能产生脉冲尖峰虽然大多数时候没事但没必要冒这个险。还有一个容易被忽略的点示波器垂直通道请务必设置为直流耦合或者按信号特性来选。如果用了高通滤波器AC 耦合低频图形会变形。注意模拟示波器最怕“烧屏”CRT 荧光屏上长时间固定显示同一个亮点会留下永久暗斑数字示波器的 LCD 屏幕则没有这个问题但也不建议把亮度拉到最高连续数小时。3.2 第一个图案四叶玫瑰理论说完直接上代码。我强烈建议把采样率固定在 44100 Hz和 CD 音质一致兼容性最好。下面这段代码生成一个平滑的四叶玫瑰图案import numpy as np import sounddevice as sd sr 44100 duration 4.0 t np.linspace(0, duration, int(sr * duration), endpointFalse) # 以 110 Hz 为基准音高A2 # 左声道 5 倍频右声道 4 倍频频率比 5:4 f1 110.0 * 5 f2 110.0 * 4 left np.sin(2 * np.pi * f1 * t) right np.sin(2 * np.pi * f2 * t np.pi / 2) signal np.stack((left, right), axis1) signal * 0.3 sd.play(signal, sr) sd.wait()左右声道分别叠加 550 Hz 和 440 Hz 的正弦波。频率比是 5/4理论上会产生四叶玫瑰线相位差取 π/2 是为了让图案中心对称、分布饱满避免出现压扁的形态。乘以 0.3 是让信号在示波器上显示一个合适幅度而不是直接削波。为什么要用 110 Hz 这个基准因为它本身的频率不会太低导致图形闪烁也不会太高导致采样点数不足产生毛刺。5 倍和 4 倍之后分别是 550 Hz 和 440 Hz这两个频率在音频里正好构成一个大三度音程听感上也很和谐。当然画图用的频率和听感不矛盾你完全可以用任何倍频关系。3.3 相位调制让静止图案动起来一个固定的四叶玫瑰线虽然好看但看久了就腻。示波器音乐真正迷人的地方在于画面能跟着音乐情绪“流动”。最简单有效的手法是相位调制。# 相位随时间缓慢变化产生扭动动画 mod_freq 0.5 phase np.sin(2 * np.pi * mod_freq * t) * np.pi right np.sin(2 * np.pi * f2 * t phase)这里不再给右声道一个固定相位而是用 0.5 Hz 的低频信号去调制相位。效果是四叶玫瑰线的“叶瓣”会像活物一样慢慢展开又收拢图形在示波器上形成一个动态扭动效果。调制频率越低动画越柔和调制幅度越大图形扭曲越夸张。如果你想做节奏感强的画面可以把调制频率改成和节拍相关的数值比如 BPM 120 对应的每分钟 120 拍每秒 2 拍那调制频率 2 Hz 就是一个很好的选择。相位调制只是其中一种手法还可以做频率扫描把 f1、f2 在每段内从某值滑到另一值、振幅调制让某一路的图形逐渐变宽变窄、画多个图形的叠加等。这些方法本质上都在改变李萨如曲线的两个核心变量频率比和相位差。3.4 多段拼接构建有结构的示波器音乐作品单个图形做熟了下一步就是把多个图形拼成完整作品。我的做法是先把整首作品的段落结构画在纸上比如“引子 → 主题 A → 过渡 → 主题 B → 结束”然后为每段定义一组参数频率比、相位曲线、持续时间、音量包络。拼接时最核心的坑是“段落衔接处容易削波或响度突变”。两段信号直接硬接如果相位不连续可能会在接缝处产生很大的冲击信号示波器上表现为一条闪亮的乱线。我通常会给每段加一个 50 到 100 毫秒的淡入淡出包络并且把所有段落整体归一化到 0.3 到 0.5 的峰值幅度以下给剪辑和混音留余量。下面是一个多段拼接的骨架代码具体参数你可以按自己设计的图形来填def envelope(t, attack0.05, release0.05): n len(t) a int(attack * sr) r int(release * sr) env np.ones(n) env[:a] np.linspace(0, 1, a) env[-r:] np.linspace(1, 0, r) return env def segment(f1, f2, phase_shift, dur): t_seg np.linspace(0, dur, int(sr * dur), endpointFalse) left np.sin(2 * np.pi * f1 * t_seg) right np.sin(2 * np.pi * f2 * t_seg phase_shift) env envelope(t_seg) return np.stack((left * env, right * env), axis1) seg1 segment(110.0 * 3, 110.0 * 2, np.pi / 2, 4.0) seg2 segment(110.0 * 5, 110.0 * 4, np.pi / 3, 6.0) song np.vstack((seg1, seg2)) song * 0.35 sd.play(song, sr) sd.wait()如果想再进一步可以把每个图形设计成一个“对象”记录它的出现时间、持续时间和动画参数然后用一个循环把所有图形按时间轴排布。这样做的好处是你可以在后期快速调整某个图形的出场时机而不必重写整段生成逻辑。我自己的作品就是这么组织的类似于一个极简版音序器。4. 常见问题与排查技巧实录折腾示波器音乐的时候我踩过的坑真不少。有些问题看起来像是设备坏了其实只是参数设置不当。这里整理成一张速查表再挑几个高频问题单独展开。现象常见原因快速排查只有横线或竖线某一声道没信号、通道映射错误检查线材切换 X-Y 通道映射图形不断旋转两路频率比不是精确整数比用整数比频率重新计算频率图形整体倾斜、不圆左右声道幅度不均衡调整声卡左右平衡或代码中的振幅图形一半被切掉信号幅度过大或直流偏置减小音量检查 AC/DC 耦合画面发虚、亮度不均扫描速度差异大、余辉时间短开示波器余辉模式降低显示亮度声音正常但画面静止不动两个信号频率完全相同且相位不变调整相位调制或频率比图形闪烁、抖动蓝牙音频延迟、采样率不稳换有线连接固定采样率4.1 图形倾斜和椭圆变扁先查幅度平衡第一次跑四叶玫瑰代码时我把电脑音量旋钮随手拧了一下结果屏幕上出现一个被压扁的图形怎么看都别扭。当时的第一反应是代码写错了排查半天才发现是左右声道音量不平衡。示波器 X 轴和 Y 轴的偏转灵敏度如果对应信号幅度不一致图形就会被横向或纵向拉伸圆变成椭圆对称图案变得歪歪扭扭。排查方法很简单用一段左、右声道完全相同频率和幅度的信号比如 440 Hz 正弦波显示出来如果是 45 度斜线说明两个通道增益一致如果斜线明显偏向某一侧说明音量不平衡去系统音频设置里调整左右平衡即可。另外注意示波器两个通道的垂直档位也要调成一样不然即使信号幅度相同图形也会变形。4.2 画面永远在旋转频率比的整数性陷阱做旋转动画时我有一次把两路频率设成 550 Hz 和 441 Hz结果图案一直在慢慢转动以为是相位调制代码写错了。实际上原因很简单441 和 550 之间不是整数比关系两个信号无法在一个公共周期内闭合图形每帧都比上一帧多走一点看起来就像在自转。如果这就是你想要的效果那当然没问题但如果你要稳定图案就必须保证两个频率能整除到同一个基准频率。计算闭合周期有个实用公式把两个频率写成最简整数比 f1:f2 m:n则图案循环一圈需要的时间是 m/f1 或 n/f2。比如 550:440 5:4循环周期是 20/440 秒约 45 毫秒。这个周期足够短肉眼看到的就是平滑稳定的图案。如果比例是 997:991 这样的大质数比循环周期会变得很长画面就会出现可见的“缓慢转动”做特效可以做稳定图案不行。4.3 亮度不均和边缘发虚余辉设置是关键模拟 CRT 示波器上电子束扫描速度快的地方荧光粉发光时间短画面看起来就暗扫描慢的地方则更亮。同一幅图案里曲线转角处和直线段的速度不一样亮度差异是自然现象。数字示波器虽然不存在荧光粉但默认显示模式也类似刷新率不足时快速扫过的部分会显得若隐若现。解决办法是打开示波器的余辉persistence功能把余辉时间调长让尾部轨迹保留几十毫秒。这样快速扫过的线条能留下足够长的视觉残留画面更接近“画笔在画布上持续发光”的质感。不过余辉太长也有副作用动态图形的尾迹会变得拖沓看起来脏兮兮的。我一般把余辉设在 20 到 50 毫秒之间视觉上干净又有层次。4.4 音量与削波一个容易被低估的隐藏变量很多人觉得音量只要“能听到”就行但在示波器音乐里音量直接决定画面大小和线条质量。音量太小图形在屏幕上只占一小块看不清细节音量太大信号被削波波形顶部变成平顶图案边缘会出现硬切和断裂。数字域里削波还会产生高频谐波让原本干净的曲线变得模糊。我的经验是先把示波器垂直档位设为最大的衰减再逐步调高音量直到图形占屏幕 60% 左右的高度和宽度然后停止。音量宁小勿大因为声卡的输出电平在不同系统上差异很大同一份代码在笔记本和 USB 声卡上的实际输出可能相差数倍。代码里先统一乘 0.2 到 0.4 的系数比调系统音量更可控。4.5 声音和画面不同步用固定采样率和缓冲做示波器音乐时声音和画面严格来说是同步的因为同一个信号既驱动扬声器如果有又驱动示波器输出的就是同一份数据。但如果你用浏览器播放页面做演示会遇到音频缓冲区造成的轻微延迟或者蓝牙音频编解码带来的时间偏移。画面和声音本身都是从声卡输出不会出现内部分裂唯一的解决思路是用有线输出并且不要用系统音频增强效果。如果用人耳监听最好用耳机接在声卡的另一个输出口而不是从示波器后面并接因为示波器输入阻抗很高对声音的负载效应很小但直接并接信号可能让耳机听到的声音变小、变浑浊。保持监听和输出独立排查问题会容易不少。5. 示波器音乐还能玩出什么扩展方向与应用场景5.1 从平面到立体3D 投影的思路既然 X-Y 模式能把二维路径映射到屏幕那能不能把三维物体投影到二维平面再通过旋转产生立体感当然可以。方法是对三维空间中的点做绕轴旋转然后投影到 X-Y 平面把投影后的 x、y 坐标转成两路信号。随着旋转角度随时间变化屏幕上的投影轮廓会跟着旋转人眼通过透视关系可以脑补出“立体”效果。这种“伪 3D”技术早期在矢量游戏和雷达系统里很常用。示波器音乐的 3D 视觉延续了这一思路但本质仍是两路信号。实现时注意3D 投影出来的图形往往比简单的李萨如曲线复杂得多信号带宽需求也会上升。建议先从简单的立方体或线框球开始把投影矩阵和采样点数调好再扩展复杂的网格模型。5.2 把图形信号和音乐制作流程打通除了独立的代码生成示波器音乐也完全可以融入主流 DAW。做法是把左右声道分别当成两轨音频用合成器或 LFO 驱动两个信号再通过效果器、压缩器做后期处理。这样你就能让示波器图形和鼓点、贝斯、和声真正联动实现“波形跟着音乐走”的现场感。我见过一种很聪明的做法用侧链压缩把 808 鼓点的包络映射到正弦波的振幅上鼓点一响示波器上的图形就“炸开”鼓点结束图形又收回。这种视觉效果和音乐律动强绑定的创作方式是单纯播放音频文件很难做到的。关键是你在 DAW 里做的所有自动化参数最后都同时作用于声音和画面天然就是音画同步的。5.3 互动与现场演出把示波器变成演出设备示波器音乐也非常适合现场演出。把 MIDI 控制器接到合成器或脚本上实时调制参数让图形随演奏变化观众看到的就不再是静态曲线而是一台会呼吸的视觉乐器。这种演出的信息密度非常低反而带来很强的沉浸感适合小型电子乐现场、氛围音乐演出、以及艺术装置展。我自己试过给示波器接上音频接口由键盘手控制一个低频旋钮从简单的圆变成复杂的花形整个过程流畅自然现场反馈很热烈。当然现场演出要格外注意系统的可靠性。电脑死机、声卡断流、线缆松动都可能在演出中造成画面消失建议准备备份播放文件并提前把整套连接反复测试几遍。5.4 从娱乐到教育信号的直观化教学最后补充一个不那么炫酷但很有价值的方向示波器音乐作为教学工具。李萨如曲线、相位调制、频比、余辉这些概念在课本上很抽象但一旦变成真实的视觉演示理解成本立刻降低一个量级。很多教信号处理或电子电路的老师会在课堂上用示波器音乐演示这些基础概念学生在惊讶之余往往比记公式记得更牢。如果你在带社团、带实验课或者自己做家庭实验室不妨把示波器音乐当成一个入坑项目。它涉及信号生成、音频输出、模拟测量、数学建模几个维度自然融合对新手来说比单纯的“搭电路测波形”有趣得多。说点个人体会吧。示波器音乐最打动我的不是它有多炫技而是它把三个不起眼的东西——测量仪器、正弦波、立体声——组合成了一套让人愿意反复调试的创作系统。每改一个参数屏幕上的曲线就换一副表情这种即时反馈的乐趣是写普通软件很难体会到的。如果你手头正好有一台闲置的示波器强烈建议花一个晚上连上线先跑出第一个圆再顺着自己的好奇心折腾下去。你能得到的远不只是一段奇特的音乐。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻