【问题标题】:Real time music transcription [closed]实时音乐转录[关闭]
【发布时间】:2013-06-26 05:36:25
【问题描述】:

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

到目前为止,我一直在使用 FFt on MATLABwav 文件进行测试,但在实时性方面,系统需要非常非常快

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

【问题讨论】:

  • +1 有趣的项目,我还没有进行音乐转录,但我认为您需要将作品录制成小片段并转录。
  • 我猜这种方法只适用于转录独立笔记。转录和弦可能不会带来任何好的结果。 MIDI 键盘会容易得多。
  • 非常有趣的项目。您能告诉我们您当前基于 fft 的实现工作的速度有多快吗?我以为 fft 应该是 O(n log(n)),这已经非常快了。
  • 我认为您应该记住,您还需要一个节拍识别算法,否则将无法正确放置条形。作为一名吉他手、物理学家和 matlab 程序员,我对您的解决方案非常感兴趣。
  • 我不确定 arduino 对于这样的项目是否足够快,最高速度为 16MHz。也许吧,但这取决于你的采样率有多高。最好使用某种 Cortex 板,它们通常达到 80MHz。更好的是,使用专用的 DSP 处理器——尽管价格差异令人恐惧!你决定采样率了吗?您可以使用 PLC 或 FPGA 进行快速处理,然后使用 arduino 进行决策、输入、输出等。或者使用 arduino 作为硬件接口并使用 Raspberry Pi、Beaglebone Black、Olinuxino 进行处理。

标签: matlab arduino real-time


【解决方案1】:

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

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

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

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

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

HTH

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多