gpt4 book ai didi

java - 使用音频指纹测量延迟 (Java)

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:34 25 4
gpt4 key购买 nike

我想使用音频指纹来测量两个不同平台上的一个直播流之间的延迟。目前我正在使用 Java 的 musicg 库。我可以获得频谱图和指纹等信息,但我不知道如何使用这些数据来测量延迟。

我的问题是musicg库是否足以进行这种操作。如果是这样,我如何使用我获取的数据来查找两个流之间的延迟。

提前致谢。

最佳答案

这就是我要做的。我会创建 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();
}

}

这可能需要稍微调整一下,但本质上我相信这就是您正在寻找的。

关于java - 使用音频指纹测量延迟 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43524153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com