Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 实时音乐转录_Matlab_Arduino_Real Time - Fatal编程技术网

Matlab 实时音乐转录

Matlab 实时音乐转录,matlab,arduino,real-time,Matlab,Arduino,Real Time,我正在尝试实现一个系统,它可以在钢琴演奏时为钢琴作品制作一张乐谱,也就是说,它应该是实时转录,而不是录制的作品 到目前为止,我已经在wav文件上进行了测试,使用MATLAB上的FFt,但是说到实时性,系统需要非常非常快速 关于我可以使用哪种方法的建议,关于董事会类型的建议(我考虑过使用Arduino)。我可以使用,因为我想直接传输我的MATLAB代码,而不是将其转换为C 关于我可以使用哪种方法的任何建议,董事会的类型(我曾想过使用Arduino)。我可以使用,因为我想直接传输我的MATLAB代码

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

到目前为止,我已经在
wav
文件上进行了测试,使用MATLAB上的
FFt
,但是说到实时性,系统需要非常非常快速

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

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

你可以有不同的方法来完成你的项目,我可以想到:

  • 首先,有些钢琴有一个电子设备,可以通过midi接口输出演奏的音符,具有速度和位置。这是追踪演奏音符的最准确、最快速的解决方案,尽管不是很多DIY。在计算机方面,你只需要一个midi接口(使用arduino可以很容易地完成)和一个将midi音符转换成乐谱的软件
  • 然后,你可以通过将钢琴的键盘连接到传感器来模拟这种行为,传感器将能够测量速度和弹奏的音符。你可以使用很多策略(从机械上使用激光,到压力开关……),这一切都取决于你准备进行的投资;在那里,arduino(如mega或due)可能是一个很好的解决方案
  • 但是当你在谈论FFT时,我假设你想要记录钢琴发出的声音并检测琴键。你在音乐研究方面的最新知识,你会遇到的问题是,尽管有,它仍然是一个非常活跃的研究领域
  • 让我们假设您只对转录进行单声道检测。问题是Arduino中包含的模拟数字转换器非常糟糕,它的10位定义太低,无法检测任何有用的东西。随着Arduino到期,您可能会有更多的定义,因为它具有16通道12位1Msps ADC。这对于一个好的抄本来说还不算多。因此,您必须创建或使用一个外部ADC,如16位1MSP,并具有SPI接口,这是开始播放的最低要求。在这之后,您需要找到正确的麦克风,并在ADC和麦克风之间创建良好的电子设备(我不太了解)
  • 最后,带上一台小型计算机(如或RaspberryPI),插入一个非常好的USB ADC/声卡,并使用该板通过管道进行转录不是更容易吗?您也可以在云服务器(如google appengine或AWS)上运行您的软件,该服务器有足够的处理器使您的Matlab愉快地运行
  • 因此,要制作一个好的实时和嵌入式音乐转录,最好的解决方案是第一个解决方案(或者如果你真的想自己动手做的话,第二个)。如果你真的想通过“空中”接口,我认为好的解决方案是第五种

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

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