gpt4 book ai didi

java - 使用 Java Sound API 从麦克风阵列同步录音

转载 作者:行者123 更新时间:2023-11-30 05:30:54 32 4
gpt4 key购买 nike

我已经浏览过the tutorials for the Java Sound API我已成功从麦克风读取数据。

我现在想更进一步,从麦克风阵列中的多个麦克风(例如 PS3 Eye 或 Respeaker)同步获取数据

我可以为每个麦克风获取一个 TargetDataLine 并打开/启动/写入缓冲区的输入 - 但我不知道如何以一种可以提供数据的方式执行此操作然后按时间排列(我想最终进行波束成形)

当从像 ALSA 这样的东西读取时,我会同时从不同的麦克风获取字节,所以我知道每个麦克风的每个字节都来自同一时刻 - 但 Java Sound API 似乎有一个抽象,混淆了这个 b/c 您只是从单独的行缓冲区中转储/写入数据并对其进行处理,并且每行都单独运行。您不会立即与整个设备/麦克风阵列交互

但是我发现有人设法用 Java 进行波束成形 with the Kinect 1.0所以我知道这应该是可能的。问题在于 secret 武器位于 .jar 内的自定义 Mixer 对象内,该对象是从其他软件中提取出来的。所以我没有任何简单的方法来弄清楚他们是如何提取它的关闭

最佳答案

如果底层硬件驱动程序支持,您将只能将来自多个源的数据与时间同步精度对齐以执行波束形成。

如果底层硬件为您提供多个同步数据流(例如以 2 个 channel 录制 - 立体声),那么您的阵列数据将实现时间同步。

如果您依赖操作系统简单地为您提供两个独立的流,那么也许您可以依赖时间戳。你得到第一个元素的时间戳吗?如果是这样,那么您可以根据采样率删除样本来重新对齐数据。您可能会在波束形成算法中考虑最终的差异 (delta-t)。

阅读有关 PS3 Eye(具有麦克风阵列)的内容后,如果音频驱动程序同时提供所有 channel ,您将能够做到这一点。

对于 Java,这可能意味着“您可以使用包含 4 个 channel 的 AudioFormat 打开 channel 吗”?如果是,那么您的样本将包含多个帧,并且解码的帧数据将(几乎肯定)是时间对齐的。 引用Java docs :“一帧包含特定时间所有 channel 的数据”。

关于java - 使用 Java Sound API 从麦克风阵列同步录音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586408/

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