我用 ESP32 实现了童年的音乐梦

Table of Contents

背景

我一直很喜欢听各种轻音乐和钢琴曲。幼儿园的时候父母就带我去学过钢琴,然而学了没几天我性格里的 Ti 就发作,很想研究钢琴的原理,去钢琴上爬上爬下观察,甚至想拆了钢琴,当时弄的老师火大,最后没有学成。

但这个经历一直没有抵挡我追求音乐的心,我经常感觉自己想要学习一些乐器,目的是在于我想要用自己内心的节奏去演奏一份独特的旋律,可以表达独特的一份情感。

但是,时间已经被更多有趣的事情压垮的我,怎么办呢?

偶然的发现

有一次和朋友出门逛街发现了一个小玩具:

朋友刚好在跟我讨论,转盘上面的两个磁铁是做什么用的,旁边似乎没有找到可以吸上去的东西。

然后我一看,转盘,播放器进度条,按钮,让我想到了黑胶唱片。

继续去想,如果我们能给音乐做 FFT,播放的时候以我们转动转盘的速度 IFFT 播放出来,这样既能保持原有的音符和节奏,又可以控制自己喜欢的节奏播放出来,这样就可以在不学习乐器的情况下也满足目的了。

童年的梦想居然要被自己制作的小玩具实现了?

制作

随后,我开始思考起了整个架构:

如何用传感器收集转盘的位置

我想到既然有磁铁,在不改变这个立牌正面观感的情况下,我们可以用磁铁传感器( Hall Sensor )来收集磁场强度,而 Analog 的霍尔传感器还能在我们进行了一些函数拟合后提供更加确切的位置。

与此同时,我们注意到转盘上有2个磁铁,我们可以精确测量的位置数量是 lcm(传感器数量, 磁铁数量),所以我们需要保证传感器数量为奇数(否则是浪费的),我们注意到传感器数量为 5 的时候,lcm(5,2) = 10,可以精确测量到 36 度的量级。

最终结果如下:

https://github.com/cyyself/VibeRhythmWheel

如何收集传感器数据:

用 ESP32 ,用 BLE 把数据传到手机即可,需要简单 Vibe 一下,不过发现在有 GPT-5.6 Sol 的今天,也就是一个晚上的事情。而 ESP32 也很便宜,只要 20-30 元即可。

Vibe Coding 的时候我用 Apple Pencil 给 AI 画了个传感器排列,和两个磁铁的草图,然后 AI 帮我收集数据拟合函数图像,一晚上就弄出来了。

手机端如何设计

对于 Android 用户很简单,Android App 很容易 Vibe Coding 出一个我想要的效果。

对于 iOS 咋办呢,上架 App Store 维护成本太高了,企业证书也搞不定。

后来刚好在研究 BLE eSIM 的时候发现,虽然 iOS 的 Safari 并不支持 WebBLE,但我们可以安装一个 Bluefy 软件,即可支持 iOS 网页端 BLE 功能,剩下的网页端也就靠 Vibe Coding 即可。

最后成品

网页端:https://viberhythm.cyyself.name/
Android App: VibeRhythm-Android

网页端和 Android App 都自带了一些经典的交响乐。其中网页端仅支持 MIDI 导入,Android App 支持导入任意音频导入,不过实测了一下导入任意音频的效果一般。

组装

由于原来上面有一层塑料膜,因此我们很容易用铅笔做标记,因此找到72度角把直线画上。

让灯光往下照,给圆心位置用铅笔做标记。

用热熔胶固定 Hall Sensor,再用无痕胶固定 ESP32.

最后盖上磨砂亚克力盖板,起保护作用也让外观更好看。

效果

写在最后

在 AI 能帮助我们做大量事情的今天,正在赋予我们每个人低成本实现梦想的权利,我很难想象这样的东西最初的 PoC 只花了一个下午 + 一个晚上就做了出来,若纯手写代码我觉得这对我来说是1-2周的工作量。

作为博客分享出来,也是希望给更多读者启发,在这个实现成本已经被显著降低的时代,找到自己想要实现的东西,去实现梦想吧!

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to Top