我遇到这种情况,我可以通过从轨道末端取一些操作缓冲区并将它们写入输出文件的开头来保存音频的后处理传递。
我原本以为我可以通过使用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次传递中完成没问题。从编程上来说,如何在不破坏我的数据,变得效率低下(与我的目标相反)或可能破坏宇宙的情况下实现同样的目标?
答案 0 :(得分:1)
是的,正如您所说,使用单个音频文件进行读取和写入可能会破坏宇宙,或至少导致其他肮脏。我认为解决此问题的关键在于步骤4,您应该将输出写入新文件,而不是尝试“回收”初始写入文件。处理完成后,您可以简单地废弃中间写文件。
或者我误解了这个问题?
哦,而且,如果您是实时执行此操作,则应使用ExtAudioFileWriteAsync
代替ExtAudioFileWrite
进行写入。否则,I / O负载将导致音频丢失。