当前位置: 首页 >名曲赏析 >将音乐变成色彩 一块Wi-Fi芯片拥有意想不到的能力.

将音乐变成色彩 一块Wi-Fi芯片拥有意想不到的能力.

2022-01-05 23:24:34


 
↑点击上方“IEEE中国”免费订阅


微信公众号全面升级啦!        

新增会议服务和用户服务两大功能,为粉丝提供IEEE会议查询,热门会议、举办会议,同行查找等功能,欢迎试用!




作者:Charles Lohr

 

几年前,我写了可以将色彩分配给每个音符的算法,叫做ColorChord。它的奇妙之处在于,我每弹一个音符,就会分配给它一个颜色(同一个音符颜色相同)——无论是否有八度音阶。利用这些色值来控制LED,我有了一种把和弦与旋律视觉化的全新方式。可惜的是,算法有点粗糙。当时可用的奔腾处理器在实时运行算法方面存在困难,迫使我使用了专用的图形处理器。

 

几年后,一位朋友研究了我的算法,发现可以极大地提高它的速度。在他的基础上,我又把算法重写了两次。最终,它可以很轻松地在台式机的CPU上运行了,经过进一步的调整和修改,它可以在168兆赫STM32F407/417微控制器上运行。最后,我又想,它还能不能在更简单的设备上运行呢,比如Wi-Fi桥接模块一类的设备?

 

平心而论,我确实想到了一款Wi-Fi桥接设备:性能优越的ESP8266,来自乐鑫信息科技(上海)有限公司(以下简称乐鑫公司)。ESP的功能差不多相当于一个连接Wi-Fi设备的串口,可以将它插入你最喜欢的控制器里,利用AT格式的调制解调器命令接入无线网络。但黑客社区很快意识到,可以对ESP的板载处理器进行重设,实现更多功能。

 

ESP8266使用的是泰思立达处理器核心,出厂设置为80兆赫,但可以超频运行160兆赫。它的特性包括通用输入/输出端口(GPIO);具备直接内存访问(DMA)的集成芯片间声音(I2S),可进行快速数据传输;提供脉宽调制硬件支持,以及一个模数转换器(ADC)。通过在ESP上运行代码,可以让物联网设备和服务器拥有丰富的基于网络配置的图形用户界面。有了WebSockets,运行在ESP上的应用程序会以超过600赫兹的速度更新并接收远程用户的输入。

 

黑客社区开发了固件工具、一台编译器、演示和集成开发环境(IDE),可以实现在ESP上运行ArduinoNodeMCU代码。幸运的是,乐鑫公司抓住了这一机遇,发布并更新了其软件开发工具包(SDK),并发布了文档,而非把它藏在堆成山的保密协议后面。结果,ESP也从一块价值2美元的芯片(分线板大概价值10美元)发展成为一个32位的全功能无线微控制器,且追随者越来越多。

 

我想在ESP上运行ColorChord,以便它听声音、判断色值,然后再用它们去控制一系列WS2812B LEDWS2812B是可分别单独控制的色彩LED模块。每个LED都会接受一个串行信号,具体说明某一颜色的8比特RGB(红-绿-蓝)值。在串行里,每个模块会从它看到的前3个字节里选取它的颜色,脱去这些字节,然后将剩余内容传递给下一个模块。

 

对很多项目来说,许多人认为Arduino IDE和它的Wiring语言是理想选择。不过,我选择的是C语言,再搭配官方的Espressif SDK来打造我自己的固件。虽然它使用起来不太方便,但SDK提供了所需的所有功能,并提供了优化代码的能力。可以利用GCC编译器和SDK制作固件,然后通过一个串行端口将它上传至ESP

 

在为我的项目写软件的时候,我便知道需要对板载ADC进行采样,分析来自附属连接的驻极体麦克风的声音。虽然官方SDK提供了可读取ADC的功能,但并没有精准到足以产生ColorChord算法所需的连续波形音频。在做了一些网上调查研究后,我找到了能够解决利用精确处理器中断请求读取ADC的人。通过中断请求,我发现我能以16千赫的速度读取ADC,并获得一个没有跳跃或抖动的恰当波形。

 

下一个问题是控制WS2812B串行。它们需要精确的计时操作,而要移出一长串行的所有色值需要花费一点时间。我想起了ESPI2S总线和DMAI2S总线一般用于读取或写入音频数据,不过也可以用做一个美化后的移位寄存器。将这条总线与DMA引擎连接起来,大量缓冲数据便能通过一个单独的引脚移至LED模块了,整个过程都没怎么使用CPU

 

大部分低层输入和输出都是由配套硬件处理的,所以ESP核心便得到了解放,无须运行ColorChord算法这一繁重的任务。我把用于桌面版、经过高度优化的ColorChord C代码放在ESP上,然后运行。令我震惊的是,ESP竟然没有崩溃。它与我家的网络相连,当访问它的网页界面时,一切好像都在运行。为了让自己相信它真的在运行,我对着麦克风哼哼——LED发出了亮黄色。而且ESP的运行速度是80 兆赫,还不到它潜力速度的一半!对网页界面添加了其他特性后,我可以对算法进行设置、调整,查看所有音符的状态,甚至还能通过示波器看到麦克风收到的波形。我成功了!

 

整个装置很小巧,足以附着在萨克斯风上。然后我把LED放在萨克斯风管口里面,这样的话,有人吹萨克斯风时——比如我的朋友大卫·查普曼(David Chapman)——它不仅能发出声音,还能亮出颜色。

 

ESP8266一次又一次地震惊到了我。乐鑫公司还在向我们展示这块芯片能做什么,esp8266.com社区也在探索乐鑫公司尚未想到的可能性。我会继续搜寻、编程,学习更多更多知识。


IEEE中国

长按二维码
关注IEEE


↓点击下方“阅读原文”查看更多