17

可以将语音与手机中已录制的语音进行比较。基于比较,我们可以评价为好、非常好、优秀等。大多数封闭的声音获得高评价。

有人知道在Android中可以吗?

帮助是非常可观的。

4

2 回答 2

3

对于一般的音频处理库,我可以推荐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 支持的语音识别,并使用动态时间规整等东西来比较输出。本文档很好地描述了该过程。

于 2013-01-08T23:49:04.597 回答
0

使用“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);

    }
于 2021-01-29T13:45:07.147 回答