在过去的几天里,我一直在开发我的应用程序的一部分,我需要同时播放和录制音频文件。我需要完成的任务只是将录音与播放的音频文件进行比较并返回匹配的百分比。这是我到目前为止所做的事情以及我的问题的一些背景:
目标 API >15
我决定使用 .wav 音频文件格式来简化文件的解码
- 我使用 AudioRecord 进行录制,使用 MediaPlayer 播放音频文件
- 我创建了一个决策类以传递我的音频文件并将其转换为 PCM 以执行匹配分析
- 我使用以下规格来录制 AudioFormat (CHANNEL_MONO, 16 BIT, SAMPLE_RATE = 44100)
- 将音频文件传递给解码器后,我继续将其传递给 FFT 类,以获得分析所需的频域数据。
以下是我的几个问题:
- 当我使用 AudioRecord 录制音频时,默认格式是 PCM 还是我需要如何指定?
- 我正在尝试将记录传递给 FFT 类,以获取频域数据以执行我的匹配分析。有没有办法在不保存用户设备上的录音的情况下做到这一点?
- 对两个文件执行 FFT 分析后,是否需要将数据存储在文本文件中才能执行匹配分析?有哪些选择或可能的方法来做到这一点?
- 在进行了大量研究之后,我发现的所有来源都涵盖了如何将录音与数据库中包含的歌曲/音乐进行匹配。我的目标是查看两个特定音频文件的匹配程度,我将如何处理?- 我需要创建/使用散列函数来实现我的目标吗?对此的详细答案将非常有帮助
- 目前我有一个单独的线程用于录制;用于解码音频文件的单独活动;FFT 分析的单独活动。我计划在单独的线程或 AsyncTask 中运行匹配分析。您认为这种结构是最优的还是有更好的方法来做到这一点?另外,我应该在单独的线程中将我的音频文件传递给解码器,还是可以在录制线程或 MatchingAnalysis 线程中进行?
- 在进行匹配比较之前,我是否需要在对音频文件的操作中执行窗口化?
- 我需要解码 .wav 文件还是可以直接比较 2 个 .wav 文件?
- 在比较之前我需要对音频文件进行低音操作吗?
- 为了进行匹配比较,我需要生成哪些数据(功率谱、能谱、频谱图等)?
我是以正确的方式解决这个问题还是我错过了什么?