use*_*056 2 android bluetooth fft audiorecord audiotrack
想法是Phone A同时发送声音信号和蓝牙信号,Phone B将计算两个信号之间的延迟.
在实践中,我得到了不一致的结果,延迟时间从90ms到160ms.我尽可能地尝试优化两端.
在输出端:
在AudioTrack.write和AudioTrack处于流模式之后,
一旦蓝牙和音频输出都有自己的线程
蓝牙仅输出,就会生成音调,因此它
应该在写入完成之前开始输出.
在接收端:
再次两个单独的线程
在每个AudioRecord.read之前记录系统时间
采样规格:
44.1khz
读取整个缓冲区
使用fft一次采样100个样本
考虑自初始读取后转换的样本数量()
您的方法在整个管道中基本上依赖于零延迟,这实际上是不可能的.你无法以这种准确度同步它.如果你可以将延迟降低到5-6毫秒,那么它可能是可能的,但在此之前你会先敲击键盘.即使这样,它也可能精确到1.5米左右.
考虑一下你收到的延误的低端.在90ms内,声音可以略微超过30米.这是市场上蓝牙系列的终结,甚至没有考虑到你可能处于非理想的传输条件.
这是一个讨论Android中低延迟音频的线程.TL; DR是它糟透了,但越来越好了.假设您运行一些手动调谐的音频功能,使用最新的API和最新的设备,您可以将其降低到30ms左右.这里没有简单的AudioTrack.即便如此,这仍然是一个很好的10米圆形错误概率.
编辑:
假设您可以同步设备的时钟,更好的方法是使用简单的am/fm调制或脉冲序列在音频信号中嵌入时间戳.然后你可以在另一端解码它,并知道它何时被发送.您仍然需要处理延迟问题,但它可以很好地简化整个过程.根本不需要蓝牙,因为它无论如何都不是真正可靠的时钟,因为它可以被视为具有自己的延迟问题.
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |