实时音乐转录

时间:2013-06-26 05:36:25

标签: matlab arduino real-time

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

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

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

1 个答案:

答案 0 :(得分:1)

  

关于我可以使用什么样的方法,董事会的类型(我想过使用Arduino)的任何建议。我可以使用,因为我想直接传输我的MATLAB代码而不是将其转换为C.

您可以对我的项目采用不同的方法:

  1. 首先有一些钢琴有一个电子设备可以通过midi界面输出演奏音符,速度和位置。这是跟踪演奏音符最准确,最快速的解决方案,虽然不是很多DIY。在计算机方面,你只需要一个midi界面(可以使用arduino轻松完成)并拥有一个可以将MIDI音符转换为乐谱的软件;
  2. 然后,您可以通过将钢琴键盘连接到能够测量速度和已播放音符的传感器来模仿该行为。您可以使用许多策略(从机械上使用激光器到压力开关......),这一切都取决于您准备进行的投资;有一个arduino(比如mega或者应该)可以是一个很好的解决方案。
  3. 但是当你在谈论FFT时,我假设你想录制钢琴发出的声音并检测琴键。在那里你获得了关于音乐研究的最新知识,你会遇到的问题是multiple f0 detection in polyphonic music,虽然有strategies specific to piano,但它仍然是一个非常活跃的研究领域。
  4. 我们假设您只对转录进行单声道检测。问题在于Arduino中包含的模拟数字转换器很糟糕,它有一个10bit的定义,它太低而无法检测到任何有用的东西。使用Arduino DUE,您可能会有更多的定义,因为它具有16通道12位1Msps ADC。对于良好的转录,这仍然不是很多。所以你要么必须创建一个像Linear LTC2383-16那样的外部ADC,它是16位1Msps并且有一个SPI接口,这是开始播放的最小值。在此背后,您需要找到正确的麦克风,并在ADC和麦克风之间创建良好的电子设备(我不太了解)。
  5. 最后,拿一台小型计算机(如Beaglebone或RaspberryPI 5)会更容易,插入一个非常好的USB ADC /声卡,并使用该板管道通过转录?您也可以在具有足够处理器的云服务器(如google appengine或AWS)上运行您的软件,以使您的Matlab运行愉快。
  6. 因此,为了实现良好的实时和嵌入式音乐转录,最好的解决方案是第一种解决方案(如果你真的想要DIY,那就是第二种解决方案)。如果你真的想要通过“空中”接口,我认为好的解决方案是第五个。

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

    HTH