首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用音频指纹技术测量延迟(Java)

用音频指纹技术测量延迟(Java)
EN

Stack Overflow用户
提问于 2017-04-20 15:42:24
回答 1查看 112关注 0票数 1

我想用音频指纹来测量两个不同平台上一个实时流之间的延迟。目前,我正在使用用于Java的musicg库。我可以获得诸如光谱图和指纹之类的信息,但是我想不出如何用这些数据来测量延迟。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 16:07:26

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

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

另外,我不确定您的类用于指纹数据,所以对于我的示例,我将它称为FingerprintData

代码语言:javascript
复制
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();
     }

  }

这可能需要调整一点,但本质上,我相信这是你正在寻找的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43524153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档