唱歌鱼改造文档

声       明

本文中提到的本人所有代码及文档均遵守CC0开源协议。

注意:本改造方案仅能让鱼根据PC的指令张嘴、摆动。

【适宜人群】

需要有一定的电路、编程基础和动手能力,还需要一个电烙铁。

运行效果请看:

改造方案介绍:

整体思路

由PC开启UDP服务器,与鱼进行内网通信,先用PC解算出音频中的人声和鼓点信息,在播放音频的时候同步将当前的人声和鼓点响度发送给鱼,鱼在接收到响度信息后判断是否超过阈值,超过则张嘴抬尾,实现跟随音乐做动作的目的。

硬件部分

硬件接线

硬件:

大嘴巴比利巴斯(唱歌鱼)、MX1508电机驱动板、ESP8266开发板。

工具:

螺丝刀、电烙铁、热熔胶(选用)

如果想要固定各个板子,可选用热熔胶进行固定。

这里补充说明一下,供电方案使用原版的4节5号电池,在满电的情况下输出为6V,普通5号电池续航有点疲软,这里推荐使用充电电池会好一些。或者使用更高电压的串联锂电池,降压后接入整个系统中。

软件部分

代码链接:

度盘链接:https://pan.baidu.com/s/1Qglqg2zsDfkddlem3Yf6yw?pwd=k6jo 

提取码:k6jo

鱼客户端C++代码:

烧录软件使用ArduinoIDE,烧录前需要添加链接中带有的MX1508运行库

MX1508运行库需自行百度ArduinoIDE运行库添加方法

在硬件改造完毕后,建议先不要安装后盖,先进行电机测试。

修改代码底部loop代码块,取消最后一行test();的注释,将其他代码注释掉,如下:

烧录代码后即可看见鱼张嘴抬头摆尾,以下是测试代码:

由代码可知,测试动作顺序为:

张嘴,抬头

等待1秒

闭嘴,低头,抬尾

等待1秒

重复循环

测试通过将代码还原,并修改账号密码为你的wifi名称和密码:

PC端Python代码

需要手动安装ffmpeg并配置环境变量。

pip安装依赖包:

这里使用了spleeter音频分轨模块,它的GUI版也非常好用

想单独使用的话可以到这里下载:https://makenweb.com/SpleeterGUI

将需要播放的音乐文件放入mp3文件夹,或者你有wav文件可以直接放入wav文件夹内

然后在代码第18行修改:

运行Python文件,第一次运行需要下载分轨用的模型文件,耐心等待一会。

如果PC能正常播放音乐,同时鱼跟随音乐做动作,则说明所有功能测试通过,可放心安装后盖。

至此,唱歌鱼改造完毕。

后记

目前这个项目并不完美,还有各种各样的bug和问题:

比如鱼的软件部分,我采用的是严格控制的方案,写的很啰嗦很麻烦,c++代码也是刚学,只会一点ctrl C、ctrl V,难免会有一些bug;

还有就是一首歌的解算时间非常长,在我的笔记本上,一个5M大小的音频文件的解算时间大约为30秒,也就是运行程序以后要等待30秒才能开始播放,能不能直接解算mp3文件,或者在播放音频的同时直接从人声和鼓的音轨文件上读取响度信息;

而且解算结果有时并不是很准确,有些疑似人声的部分会让鱼张嘴,Spleeter的代码我还没来得及好好研究,可能换一套高效的模型可能会更好一点;

另一个亟待解决的问题是每首歌的人声和鼓点的响度都不一样,比如在播放一首激烈的摇滚乐时鱼可能一直张着嘴,在播放另一首安静的摇篮曲时鱼可能一动也不动。

这也是我制作这个视频写下这篇专栏的目的——将我写的这坨代码拉出来给大家尝尝咸淡,就算作是抛砖引玉,希望有相同爱好的同学互相学习交流。

附:

原蓝牙版改造方案:

作者:唐纳德·贝尔  Donald Bell

https://maker.pro/arduino/projects/how-to-animate-billy-bass-with-bluetooth-audio-source

代码:

https://github.com/TensorFlux/BTBillyBass

原文中并未提及是否开源或出示相关协议,请大家自行斟酌。

资源下载: