@
raiz 严格意义上来说单纯依靠单片机是不能实现的,但是我们可以将一些工作先在高性能计算机上做好,感觉 LZ 不是太熟悉机器学习这一块的东西,那我用我自己比较熟悉的 SVM 做例子讲一个可能的解决方案吧
1. 设置好观测方式,也就是<属性>(单纯的波形很难来做分类,可以先获取节拍、波形突变的数量等等,没学过乐理,只能随便举点例子)
2. 批量获取一些已经知道风格的音乐的属性,也就是获取<样本>,同时要考虑这部分的功能能迁移到你的单片机上
3. 将这些样本带入 SVM 中进行学习,根据实际情况选择适当的<核函数>、<SVM 训练方法>与<参数>,获取<分类器>,一般来说 SVM 的分类器可以用一个矩阵来存储,落实到 C 语言的环境里面的话可以考虑数组储存
4. 将<核函数>、<参数>与<分类器>封装成模块,烧录进入单片机,同时将( 2 )中的样本获取模块烧录进去
其实要获取一个分类器并不是很难,现在除了 SVM 以外还有很多算法可以搞定,我觉得难点在于怎么去设置好<属性>并且较为精确的获取,这一块就是靠人工的事儿了。有一句话不是说“人工智能,越多人工,越多智能”嘛 XD