2013-06-26 47 views
6

我试图实现一个系统,可以产生一张钢琴作品的音乐作为和当它被播放时,也就是说,它应该是一个实时转录,而不是一个录制的片。实时音乐转录

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

什么样的方式,我可以使用,则型板的任何建议(我想用Arduino的)。我可以用的,因为我想直接转移我MATLAB code,而不是将其转换为C.

+1

+1有趣的项目,我没有音乐转录工作还,但在我看来,你需要记录小片段片和成绩单他们。 –

+0

我想这种方法只适合转录独立笔记。转录和弦可能不会带来好的结果。一个midi键盘会容易得多。 –

+0

非常有趣的项目。你能告诉我们目前基于fft的实施工作有多快?我以为fft应该是O(n log(n)),这已经很快了。 – Oli

回答

1

任何建议上,我可以用什么样的方式,主板的类型(我想用的Arduino的)。我可以用的,因为我想直接转移我的MATLAB代码,而不是将其转换为C.

你可以有不同的方法到您的项目,我能想到的:

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

因此,要制作一个良好的实时和音乐嵌入式转录,最好的解决方案是第一个解决方案(或第二,如果你真的想去DIY)。如果你真的想要通过“空气”接口,我认为最好的解决方案是第五个。最后,关于代码,我建议你将你的代码从Matlab转换到Python(如果你不想编写C/C++代码),它将运行得更快。所以你可以弄清楚Matlab有多糟糕,当我为IRCAM工作时,我已经写了一个将Matlab源代码转换为C++源代码的工具,一旦编译结果速度提高了40倍。

HTH