代码之家  ›  专栏  ›  技术社区  ›  Cactus

如何等待异步AudioTrack.write文件结束?

  •  0
  • Cactus  · 技术社区  · 6 年前

    AudioTrack 我的计划是基本上做到以下几点:

    while (!done)
    {
      frame = synthesize();
      audio.waitForWrite(); // XXX
      audio.write(frame, 0, frameSize, WRITE_NON_BLOCKING);
    }
    audio.waitForWrite(); // XXX
    

    但是,没有 waitForWrite 音轨 我可以在这里使用;如果我只是做一个非阻塞写入,第二帧将替换中间的第一帧,也就是说,合成一个20ms的帧需要5ms,然后第一帧播放5ms,然后在5ms之后被第二帧替换,以此类推,这显然不是我想要的。

    另一方面,如果我使用阻塞写入,那么我就不能在上一帧已经播放的情况下合成下一帧。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gabe Sechan    6 年前

    你误解了流媒体模式。写作不需要花太多的时间来演奏。写入将它复制到另一个缓冲区。在阻塞模式下,它将等待整个缓冲区被复制,但不会等到它被播放。在非阻塞模式下,它将立即复制尽可能多的内容并立即返回。不需要等待它在任何一种模式下播放,也没有理由等待。