我想用音频指纹来测量两个不同平台上一个实时流之间的延迟。目前,我正在使用用于Java的musicg库。我可以获得诸如光谱图和指纹之类的信息,但是我想不出如何用这些数据来测量延迟。
我的问题是musicg库是否足以进行这种操作。如果是这样的话,我如何使用我所获得的数据来找到这两个流之间的延迟。
提前谢谢。
发布于 2017-04-20 16:07:26
我会这么做的。我会创建2个HashMap<FingerprintData, Long>,本质上是将指纹数据从您的流映射到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();
}
}这可能需要调整一点,但本质上,我相信这是你正在寻找的。
https://stackoverflow.com/questions/43524153
复制相似问题