比较Android中的两个声音

时间:2013-01-08 10:39:12

标签: android

可以比较手机中已录制语音的语音。基于比较,我们可以评价良好,非常好,优秀等。大多数封闭声音得到高评价。

有人知道Android有可能吗?

帮助非常明显。

2 个答案:

答案 0 :(得分:3)

对于一般音频处理库,我可以推荐marsyas。不幸的是official home page目前正在关闭。

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 supports as well并使用某些东西,例如Dynamic Time Warping来比较输出。 This document很好地描述了这个过程。

答案 1 :(得分:0)

使用“Musicg”库,您可以比较两个语音(.wav 格式)文件。 使用 Wave 对象加载要在 pgm 中实例化的 wave 文件。 这里使用 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);

    }