簡體   English   中英

比較兩個字節的數組並獲取Java中的百分比?

[英]Compare Two Byte Arrays & Get The Percentage in Java?

我們想用Java編程語言創建一個系統來比較兩個音頻文件並獲得比較的百分比。 文件將被轉換為字節數組的指紋。

誰能幫助我提供一種解決方案,比較兩個字節數組並以百分比形式獲得相似性?

使用musicg API。 您必須使用Wave對象,而不是它們的指紋,但是如果可以生成指紋,則可以輕松獲得Wave對象。

Wave waveA = ...
Wave waveB = ...
FingerprintSimilarity similarity;
similarity = waveA.getFingerprintSimilarity(waveB);
float result = similarity.getSimilarity();

result是作為浮點數的相似性。 乘以100得到一個百分比

/** Returns percentage (0.0-100.0) of not matching bytes. If arrays are not of equal length, nonexisting bytes in the smaller array will be treated as not matching. */
public double compareByteArrays(byte[] a, byte[] b) {
  int n = Math.min(a.length, b.length), nLarge = Math.max(a.length, b.length);
  int unequalCount = nLarge - n;
  for (int i=0; i<n; i++) 
    if (a[i] != b[i]) unequalCount++;
  return unequalCount * 100.0 / nLarge;
}

實際上,這只是比較字節本身(如標題中所述)。 您也可以在兩個向量之間進行某種距離(特征空間中的距離)。 或者您可以做一百萬種其他事情之一,您可以在Google學術搜索中找到...

編輯:您告訴我們您使用musicg-api ,因此您可以像這樣比較不同的Waves:

String track1 = "track1.wav", track2 = "track2.wav";
Wave wave1 = new Wave(track1), wave2 = new Wave(track2);

FingerprintSimilarity similarity;

// compare fingerprints:
similarity = wave1.getFingerprintSimilarity(wave2);
System.out.println("clip is found at "
                + similarity.getsetMostSimilarTimePosition() + "s in "
                + song1+" with similarity " + similarity.getSimilarity());

啊哈! 我發現了通過指紋比較兩個波形文件的功能。 做這項工作的musicg-api函數是= FingerprintSimilarityComputer

這是我的C#代碼,但是您也了解Java的想法:

public static int MatchFingerPrint(Byte[] SuspectFingerPrint, Byte[] SampleFingerPrint)
        {

            FingerprintSimilarityComputer fpComputer = new FingerprintSimilarityComputer(SuspectFingerPrint, SampleFingerPrint);
            FingerprintSimilarity fpmSimilarity = fpComputer.getFingerprintsSimilarity();
            return (int)(fpmSimilarity.getScore()*100.0f);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM