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

extaudiofileseek和extaudiofilewrite在同一个文件上

  •  1
  • coneybeare  · 技术社区  · 14 年前

    在这种情况下,我可以通过从音轨末尾提取一些经过处理的缓冲区,并将它们写入输出文件的开头,来保存经过音频的后处理过程。

    我原本以为我可以通过重置写指针 ExtAudioFileSeek 当我在文档中看到这行代码时

    Ensure that the file you are seeking in is open for reading only. This function’s behavior with files open for writing is undefined.
    

    现在我知道我可以关闭文件进行写入,然后重新打开它,但是这个过程比这要复杂一些。我所做的操作的一部分是从我正在写入的文件中的缓冲区读取数据。整个过程如下:

    1. 从读取文件末尾读取缓冲区
    2. 从写入文件的开头读取缓冲区
    3. 处理缓冲区
    4. 将缓冲区写回到写文件的开头,覆盖我在步骤2中读取的缓冲区。

    从逻辑上讲,这可以在一通中完成。没问题。从程序上讲,我如何在不破坏数据、降低效率(与我的目标相反)或潜在地破坏宇宙的情况下实现相同的目标?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Nik Reiman    14 年前

    是的,用一个音频文件来读写,正如你所说,可能会使宇宙内爆,或者至少导致其他的污秽。我认为解决这个问题的关键是在步骤4中,您应该将输出写入一个新文件,而不是尝试“回收”初始写入文件。处理完成后,您可以简单地废弃中间写入文件。

    还是我误解了问题?

    哦,还有,你应该用 ExtAudioFileWriteAsync 而不是 ExtAudioFileWrite 如果你是实时写的话。否则,I/O负载将导致音频中断。