8

我正在尝试实现一个系统,该系统可以在演奏钢琴曲时为它制作一张乐谱,也就是说,它应该是实时转录,而不是录制的曲子。

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

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

4

1 回答 1

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/声卡,然后使用该板通过转录管道传输不是更容易吗?你也可以在有足够处理器让你的 Matlab 运行愉快的云服务器(如 google appengine 或 AWS)上运行你的软件。

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

最后,关于代码,我建议您将代码从 Matlab 转换为 Python(如果您不想编写 C/C++ 代码),它将运行得更快。因此,您可以弄清楚 Matlab 有多糟糕,当我为 IRCAM 工作时,我编写了一个将 Matlab 源代码转换为 C++ 源代码的工具,编译后的结果速度提高了 40 倍。

高温高压

于 2013-06-26T09:30:59.660 回答