实现一个基于android/java的应用程序,该应用程序接收音频文件并生成音频文件的吉他标签?

实现一个基于android/java的应用程序,该应用程序接收音频文件并生成音频文件的吉他标签?,java,android,audio,fft,midi,Java,Android,Audio,Fft,Midi,在JAVA中,哪种音频格式更容易使用?MIDI还是MP3? 如何在java中从音频文件中提取音符频率? 以及如何能够显示与导入到应用程序的音频曲目相关的吉他选项卡?有好的JavaAPI可以使用吗 找到了将信号从其原始域转换为FFT的算法 使用MIDI比使用MP3文件容易得多。Java公开MIDI,MIDI直接将标准键盘音符音高编码为整数。使用MIDI文件时,不需要对原始音频数据进行任何频率分析。此外,解码MP3需要使用外部库,就JavaFX和音频数据解压而言,我可能是错误的,并且提出了一个问题,

在JAVA中,哪种音频格式更容易使用?MIDI还是MP3? 如何在java中从音频文件中提取音符频率? 以及如何能够显示与导入到应用程序的音频曲目相关的吉他选项卡?有好的JavaAPI可以使用吗


找到了将信号从其原始域转换为FFT的算法

使用MIDI比使用MP3文件容易得多。Java公开MIDI,MIDI直接将标准键盘音符音高编码为整数。使用MIDI文件时,不需要对原始音频数据进行任何频率分析。此外,解码MP3需要使用外部库,就JavaFX和音频数据解压而言,我可能是错误的,并且提出了一个问题,即您是否需要向MP3专利的所有者支付许可费

如果您使用MIDI,转换为吉他标签是相当容易的。例如,MIDI音符值69是A-440,它是第四个字符串,第二个fret。减去12,得到57,你得到了A-220,这是第二个字符串,是吗?我可能在倒数我的琴弦,或者在八度之外!我不喜欢吉他的细节。在任何情况下,在线查找图表都很容易:

有关使用MIDI的更多信息,请参阅Java教程:我想您应该注意ShortMessage.NOTE_on以阅读注释值


另一方面,加载和播放声音文件比MIDI文件更容易。然而,提取给定乐器的音高所需的分析,特别是如果还有其他乐器也在演奏的话,远远超出了我所知道的方法。

你的问题太广泛了,不是一个单一的问题。请参阅。我建议在学术文献中搜索关于尝试解决方案的研究论文,也许可以在MIREX竞争论坛上。裸FFT在提取音符基音频率时非常不可靠。