5426| 3
|
宅家一起云合奏(MQTT+ESP8266) |
本帖最后由 szjuliet 于 2021-2-25 10:17 编辑 MELODY - 宅家一起云合奏(MQTT+ESP8266)简介:MELODY - 宅家一起云合奏 居家工作有许多优势及技术解决方案,但是同事间制定和创建生活连接的难度仍很大。MELODY是一款数字实体设备,可以创建协作式短音乐节拍。同事之间可以协调时间,设备通过玩家的轮次和不同的随机声音设置韵律节拍。第一个参与者设置特定的节奏,然后每个参与者添加与设置的节奏相对应的自己的音乐片段。为了使没有乐理背景的用户更容易使用,软件通过对用户的点击进行采样并调整为适当的节奏来帮助用户保持节奏一致。约3分钟后,所有参与者都完成自己的录音,音乐节拍结束。 简介:MELODY是如何工作的? Melody基于ESP2866硬件,该硬件通过MQTT协议与Node-Red服务器通信。设备将玩家的音符转换成字符串并发送到服务器,又将字符串从服务器发送回其他玩家。这样每个人都可以播放和收听音乐,而不会受到网络连接的干扰。 MELODY有两个主要的视觉指示。一个是LED灯带,可让玩家知道音乐节奏循环何时开始及结束,并指示是否轮到自己了。另一个是位于设备中央的LED显示屏,用于可视地显示目前的旋律。从3倒数到1表示倒计时开始播放,并且定时显示指示用户何时以及如何参与合奏。录制的旋律会自动保存到公司的云中,以备将来使用。 这个项目是由位于Herzliya(IDC)跨学科中心的媒体创新实验室(MiLab)的四名学生Shahar Agassy,Eden Bar-Tov,Gal Eshchar和Gad Stern设计的。在Zvika Markfeld,Netta Ofer和Michal Leschinsky的协助及Noa Morag和Oren Zuckerman的指导下完成。 感谢汤姆·格兰诺特(Tom Granot)制作的项目,他的项目帮助我如何在本项目中实现某些步骤(这些步骤是仿照他的项目实现的)。 材料:
步骤1:理解任务流这个项目我们要解决以下问题:
音乐的时间安排和序列化 为了解决第一个问题,我们研究了MIDI协议并试着用了一下,发现它比我们实际需要的功能更复杂,想简化后构建第一个有效的原型。我们从MIDI中汲取了灵感,并用一串数字(从0-5)乘以循环次数再乘以玩家人数来表示一段音乐循环(我们将在后面解释所有音乐中的数学)。 在音乐中,我们将节奏分成音乐小节。每个小节基本上都是一小段时间, 然后将每个节拍拆分为4个采样窗口,演奏的每个音符将自动对齐以保持整齐,还可以将一首歌曲表示为一串数字发送到服务器。 为了对没有音乐背景的玩家友好,我们做了三件事:
通讯协议 在了解音乐背后的逻辑之后,如何让玩家进行交流? 我们使用MQTT - 一种在设备之间传输消息的发布-订阅网络协议。 每个玩家都订阅了两个主题:循环loop(获取最新的循环)和轮次turn(获取当前玩家的ID用于同步)。 轮到某个玩家时,当TA演奏完后,按下UP按钮,循环loop(更新后的循环)会发送到MQTT代理,MQTT再将循环传输给所有玩家的循环频道。 旧的循环会保持“休眠”状态,直到新的循环播放完毕并将其替换。这个过程对玩家是透明的。由于新循环保存在当前玩家的本地设备,因此音乐没有网络延迟,故此我们解决了第二个问题。 步骤2:设定服务器-Ngrokngrok是一种隧道服务。它可以将本地运行的服务(示例中为Node-RED)暴露给外界 - 没有设置服务器或处理DNS记录的麻烦。只需在计算机上运行Node-RED,然后在运行Node-RED的同一端口上运行ngrok。 好了-接下来你会得到一个URL,使用这个地址从世界任何地方访问Node-RED。 安装与配置
步骤3:服务器设置-Node-RedNode-RED项目的服务器逻辑是一个可视化编程环境,它可以连接各种软件(及硬件!)。 这里我们对所有玩家之间的沟通逻辑进行设置(共享及接收循环、协调玩家轮次) 安装Node-Red 按照以下步骤在本地计算机上加载Node-RED流: 现在已经安装好了Node-RED,按照上述步骤中的说明运行它,在http://127.0.0.1:1880页面下会看到一个空白的画布。 现在需要导入用于该项目的流程,可以在这里找到它,点击导入import添加JSON文件,点击Deploy分发。 安装Node-Red: 查看此步骤所附的图像,则可以看到我们有2个主要的“动作”:从某个玩家那里接收当前循环并传送到其他玩家;向所有玩家广播新的轮次以保持游戏同步。 步骤4:设定服务器-MQTT(Mosquitto)传感器和激活器需要通过MQTT进行通信,由于Node-RED没有自己的MQTT代理,因此我们使用专用的MQTT代理。我们会使用Node-RED建议的Mosquitto。有关MQTT以及为何在物联网项目中经常使用MQTT等相关信息,参见此处。(译注:原文没有附链接) 安装与配置
监控MQTT流量 我使用MQTTfx监控流量,这是一个出色的工具,GUI非常简单。 步骤5:代码代码在[GitHub](https://github.com/edenbartov/Melody_中(包含所有数据文件和config.h) 安装依赖库 在将代码加载到esp2866之前,需要安装一些库:
使用SPIFF将声音上传到ESP:
设置参数: 之后转到config.h文件添加所需的数据,例如WIFI密码及上一步中的ngrok URL和端口(查看图片参考)。 ps-我还添加了自动连接功能,可以从智能手机设置WIFI和ngrok数据。这只是概念的第一个证明,希望有一天能添加这个功能。 设置玩家数量(此游戏最适合2-3个玩家,并且开箱已经加载了2个玩家的声音)。但可以轻松调整更多操作: 每个玩家都可以在 node-red中添加另一个流,以在特定用户的主题下发布循环。 此外还可以通过将以下数组设置为自定义声音来编辑音乐声音: 在这里可以看到有3种乐器(玩家0的Chrods,玩家1的Lead,玩家2的Bass) const char * path [NUMofNotes] = {“ /blank1.wav"、"/Chords_Am.wav"、"/Chords_F.wav"、"/Chords_C.wav"、"/Chords_G.wav"、"/Chords_Dm.wav” ,“ / blank2.wav”,“ / Lead_C.wav”,“ / Lead_D.wav”,“ / Lead_E.wav”,“ / Lead_G.wav”,“ / Lead_A.wav”,“ / blank0.wav”, “ /Bass_C3.wav”、“/Bass_D3.wav”、“/Bass_F3.wav”、“/Bass_G3.wav”、“/Bass_A3.wav”}}; 步骤6:打印3D模型第一步,下载并打印STL。 打印的支架可能需要打磨一下(取决于打印机的精度) 涂成所需的颜色 模型文件在附件中。 步骤7:组装和焊接这一步是真正神奇的地方。 按照以下原理图将所有内容焊接在一起。 注意,你可以更改接的引脚,同时在代码中同步更改。 A0和I2S已经固定好了: 因为A0是电阻桥(我们用电流的差来知道5个按键中哪个被按下了-类似于这个Instructables)。 I2S有特定的代码,可以在这里找到 第8步:与朋友一起弹奏
|
7.4 KB, 下载次数: 0
源代码等
5.74 MB, 下载次数: 0
模型文件
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed