2017-04-20 103 views
1

我想测量使用音频指纹识别的两个不同平台上的一个实时流之间的延迟。目前我正在使用Java的musicg库。我可以获得信息,如光谱图和指纹,但我无法弄清楚如何使用这些数据来测量延迟。使用音频指纹识别测量延迟(Java)

我的问题是音乐库是否足够进行这种操作。如果是这样,我如何使用我获得的数据来找到两个流之间的延迟。

在此先感谢。

回答

0

这是我会做的。我会创建2 HashMap<FingerprintData, Long> s。本质上你是从你的流映射指纹数据到System.nanoTime()的回复。

然后,我会创建一个“游戏循环”,运行“永远”,或者直到您不再需要它,每次迭代我都会从每个流中获取指纹数据,并检查是否有HashMap.keySet().contains(theFingerPrintData)相反的流。如果是这样,你会从HashMap中释放它,并执行数学计算以找到如下延迟:

另外,我不确定你的班级是用于指纹数据的,所以对于我的示例,我将叫它FingerprintData

Map<FingerprintData, Long> stream1Timestamps = new HashMap<>(); 
Map<FingerprintData, Long> stream2Timestamps = new HashMap<>(); 

StreamClass stream1 = howEverYouFetchStream(1); 
StreamClass stream2 = howEverYouFetchStream(2); 

while(true /*or if you have conditional to terminate place it here*/){ 
    FingerprintData stream1fpd = stream1.getFingerprintData(); 
    FingerprintData stream2fpd = stream2.getFingerprintData(); 

    if(stream1Timestamps.keySet().contains(stream2fpd)){ 
     Long firstHeard = stream1Timestamps.get(stream2fpd); 
     System.out.println("stream 2 is delayed:" +System.nanoTime()-firstHeard + " nanoseconds"); 
     stream1Timestamps.remove(stream2fpd); 
    }else{ 
     stream2Timestamps.put(stream2fpd, System.nanoTime(); 
    } 

    if(stream2Timestamps.keySet().contains(stream1fpd)){ 
     Long firstHeard = stream2Timestamps.get(stream1fpd); 
     System.out.println("stream 1 is delayed:" +System.nanoTime()-firstHeard + " nanoseconds"); 
     stream2Timestamps.remove(stream1fpd); 
    }else{ 
     stream1Timestamps.put(stream1fpd, System.nanoTime(); 
    } 

    } 

这可能需要进行调整了一点点,但本质上,我相信这是你在找什么。