我正在开发像Shazam这样的Android音乐识别应用。我在网上搜索,发现了很多文章。但我找到的最好的是https://www.toptal.com/algorithms/shazam-it-music-processing-fingerprinting-and-recognition因为它有简单的代码,作为教程解释并清楚地解释。
但是在android中,我无法完全遵循代码,因为某些代码在android中没有,有些代码在语法上有所不同。正如您在链接中看到的,它记录声音并最终将其转换为字节数组。但在Android中,我正在做的是使用MideaRecorder录制歌曲并将其保存到扩展名为.3gp或.mp3的媒体文件中。现在我保存为.3gp。在我关注的链接中,它直接记录声音并将声音数据(频率,振动等)转换为字节数组。
我在android中实际做的是尝试将媒体文件转换为字节数组。所以我的问题是,当我将音频文件转换为字节数组时,我是否会获得需要像Shazam一样处理的声音数据?我能这样做吗?我这样做是对的吗?我可以对从录制中接收的字节数组进行傅里叶变换吗?
我正在录制这样的声音:
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath()+"/recording.3gp";
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(outputFile);
mediaRecorder.prepare();
mediaRecorder.start();
我正在尝试将该文件转换为FFT的字节数组。