1

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

我原本以为我可以通过使用 重置写指针来做到这一点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 遍中完成,没有问题。以编程方式,我怎样才能在不破坏数据、效率降低(与我的目标相反)或潜在地破坏宇宙的情况下实现相同的目标?

4

1 回答 1

1

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

还是我误解了这个问题?

哦,而且,如果您实时执行此操作,您应该使用ExtAudioFileWriteAsync而不是您的写入。ExtAudioFileWrite否则 I/O 负载会导致音频丢失。

于 2010-11-11T08:43:16.413 回答