我遇到了使用Web Audio API播放原始PCM数据的问题。我通过Web套接字接收原始PCM数据并创建缓冲区并使用AudioContext.createBufferSource排队。 PCM数据是正确的,但音频的时间是关闭的。
在接收功能中我缓冲,直到我有大约1秒的音频,然后播放它。后续接收在它们进入后立即排队。这确保音频块在播放器到达之前排队。这是排队功能:http://pastebin.com/KXn6kEYw
以下是示例输出,显示在前一个块完成播放之前处理音频块:
Current time: 2.449705215419501 Duration: 0.7964172335600908 Play at: 2.499705215419501 End at: 3.2961224489795917 Current time: 2.9257142857142857 Duration: 0.58 Play at: 3.2961224489795917 End at: 3.876122448979592 Current time: 3.3436734693877552 Duration: 0.58 Play at: 3.876122448979592 End at: 4.456122448979592 Current time: 3.645532879818594 Duration: 0.58 Play at: 4.456122448979592 End at: 5.036122448979592 Current time: 3.982222222222222 Duration: 0.58 Play at: 5.036122448979592 End at: 5.616122448979592
以下是不稳定音频的示例:http://protological.com/plfiles/choppy.mp3
似乎正在播放所有音频数据,只是段之间存在间隙
有趣的是音频中的间隙与音频块的时间长度大致相同。较小的段具有较小的间隙,几乎就像音频播放持续时间的2倍一样。