在Android中将录制音频的声音转换为字节数组

在Android中将录制音频的声音转换为字节数组,android,audio,fft,mediarecorder,Android,Audio,Fft,Mediarecorder,我正在开发一款类似Shazam的Android音乐识别应用程序。我在网上搜索,找到了很多文章。但是我发现最好的一个是因为它有简单的代码,作为一个教程解释,并且解释清楚 但是在安卓系统中,我不能完全遵循代码,因为有些代码在安卓系统中没有,有些代码在语法上不同。正如您在链接中看到的,它记录声音并最终将其转换为字节数组。但在安卓系统中,我所做的是使用MideaRecorder录制歌曲,并将其保存到扩展名为.3gp或.mp3的媒体文件中。现在我正在保存为.3gp。在我下面的链接中,它直接记录声音并将声音

我正在开发一款类似Shazam的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的字节数组

“并将其保存到扩展名为.3gp或.mp3的媒体文件中”Android没有mp3编码器(默认情况下也没有)。您当前使用AMR-NB的设置可能不是一个好主意,因为AMR-NB限制在8000 Hz和非常低的比特率。如果您想要未压缩的PCM,那么为什么不改用?但将文件转换为字节数组仍然可以用于TTF过程?那么,请问我应该使用什么设置和录音?请给我一个示例代码好吗?
AudioRecord
不会将数据保存到文件中。您可以在
字节[]
中获得数据块,然后可以将其写入更大的缓冲区,直到您有足够的数据,或者您想对其执行的任何操作。对于示例代码,请使用google.Ok。非常感谢。“并将其保存到扩展名为.3gp或.mp3的媒体文件”Android没有mp3编码器(默认情况下也没有)。您当前使用AMR-NB的设置可能不是一个好主意,因为AMR-NB限制在8000 Hz和非常低的比特率。如果您想要未压缩的PCM,那么为什么不改用?但将文件转换为字节数组仍然可以用于TTF过程?那么,请问我应该使用什么设置和录音?请给我一个示例代码好吗?
AudioRecord
不会将数据保存到文件中。您可以在
字节[]
中获得数据块,然后可以将其写入更大的缓冲区,直到您有足够的数据,或者您想对其执行的任何操作。对于示例代码,请使用google.Ok。非常感谢你。