可以将语音与手机中已录制的语音进行比较。基于比较,我们可以评价为好、非常好、优秀等。大多数封闭的声音获得高评价。
有人知道在Android中可以吗?
帮助是非常可观的。
对于一般的音频处理库,我可以推荐marsyas。不幸的是,官方主页目前已关闭。
Marsyas 甚至提供了一个示例 android 应用程序。获得合适的信号分析框架后,您需要分析您的信号。例如,marsyas 的AimC实现可用于比较语音。
我建议在您的计算机上安装 marsyas 并使用 python 示例脚本。
对于您的语音分析,您可以使用这样的网络:
vqNetwork = ["Series/vqlizer", [
"AimPZFC/aimpzfc",
"AimHCL/aimhcl",
"AimLocalMax/aimlocalmax",
"AimSAI/aimsai",
"AimBoxes/aimBoxes",
"AimVQ/vq",
"Gain/g",
]
该网络获取您的音频数据并对其进行转换,就像人耳处理它一样。之后,它使用矢量量化将许多可能的矢量减少为具有 200 个条目的非常特定的码本。然后,您可以将网络的输出转换为可读字符(例如 utf8),然后您可以使用字符串编辑距离(例如 Levenshtein 距离)之类的东西进行比较。
另一种可能性是使用 MFCC(梅尔频率倒谱系数)进行marsyas 支持的语音识别,并使用动态时间规整等东西来比较输出。本文档很好地描述了该过程。
使用“Musicg”库,您可以比较两个语音(.wav 格式)文件。使用 Wave 对象加载要在 pgm 中实例化的波形文件。这里使用 FingerPrintSimilarity 函数传递预先录制的 wav 文件以获取输出。android gradle 依赖:实现组:'com.github.fracpete',名称:'musicg',版本:'1.4.2.2'
for more:
https://github.com/loisaidasam/musicg
sample code:
private void compareTempFile(String str) {
Wave w1 = new Wave(Environment.getExternalStorageDirectory().getAbsolutePath()+"/sample1.wav");
Wave w2 = new Wave(Environment.getExternalStorageDirectory().getAbsolutePath()+"/sample2.wav");
println("Wave 1 = "+w1.getWaveHeader());
println("Wave 2 = "+w2.getWaveHeader());
FingerprintSimilarity fpsc1 = w2.getFingerprintSimilarity(w1);
float scorec = fpsc1.getScore();
float simc= fpsc1.getSimilarity();
tvSim.setText(" Similarity = "+simc+"\nScore = "+scorec);
println("Score = "+scorec);
println("Similarity = "+simc);
}