实时音乐转录

use*_*542 7 matlab real-time arduino

我正在尝试实现一种系统,可以为钢琴片制作一张音乐作品,当它正在播放时,也就是说,它应该是一个实时的转录,而不是一个录制的片段.

到目前为止,我一直在测试wav文件,使用FFt on MATLAB,但是当涉及到实时,系统需要非常快.

关于我可以使用什么样的方法,董事会类型(我已经考虑过使用Arduino)的任何建议.我可以使用,因为我想直接转移我MATLAB code而不是将其转换为C.

zmo*_*zmo 1

关于我可以使用哪种方法、电路板类型的任何建议(我考虑过使用 Arduino)。我可以使用,因为我想直接传输我的 MATLAB 代码而不是将其转换为 C。

你可以对你的项目采取我能想到的不同方法:

  1. 首先,有些钢琴有一个电子设备,可以通过 MIDI 接口输出弹奏的音符,包括速度和位置。它是跟踪演奏音符的最准确、最快速的解决方案,尽管没有太多 DIY 功能。在计算机方面,您只需要一个 MIDI 接口(可以使用 arduino 轻松完成)并拥有一个将 MIDI 音符转换为乐谱的软件;
  2. 然后,您可以通过将钢琴键盘连接到能够测量速度和已弹奏的音符的传感器来模仿这种行为。您可以使用多种策略(从在机械上使用激光到压力开关......),这一切都取决于您准备进行的投资;arduino(如 mega 或 due)可能是一个很好的解决方案。
  3. 但当您谈论 FFT 时,我假设您想要记录钢琴发出的声音并检测琴键。在那里你接触到了音乐研究的最先进知识,你将遇到的问题是复调音乐中的多重 f0 检测,尽管有针对钢琴的策略,但它仍然是一个非常活跃的研究领域。
  4. 假设您只对转录进行单声道检测。问题是 Arduino 中包含的模拟数字转换器很糟糕,它的 10 位定义太低,无法检测到任何有用的东西。使用 Arduino DUE,您可能会有更多的定义,因为它具有 16 通道 12 位 1Msps ADC。对于一个好的转录来说,这还不够。因此,您要么必须使用外部 ADC,例如Linear LTC2383-16,它是 16 位 1Msps,并具有 SPI 接口,这是开始播放的最低要求。在此之后,您需要找到正确的麦克风并在 ADC 和麦克风之间创建良好的电子设备(我对此不太了解)。
  5. 最后,使用一台小型计算机(例如Beaglebone或 RaspberryPI 5),插入一个非常好的 USB ADC/声卡,然后使用该板通过管道传输转录不是更容易吗?您也可以在云服务器(例如 google appengine 或 AWS)上运行您的软件,该服务器具有足够的处理器以使您的 Matlab 愉快地运行。

因此,要制作出良好的实时嵌入式音乐转录,最好的解决方案是第一个解决方案(如果您真的想 DIY,则可以选择第二个解决方案)。如果你真的想通过“空中”接口,我认为最好的解决方案是第五种。

最后,关于代码,我建议您将代码从 Matlab 转换为 Python(如果您不想编写 C/C++ 代码),它将运行得更快。所以你可以看出Matlab有多糟糕,当我在IRCAM工作时,我编写了一个工具,可以将Matlab源代码转换为C++源代码,一旦编译结果快了40倍。

华泰