2010-11-11 38 views
1

我有一种情况,我可以通过从音轨末尾取出一些操纵缓冲区并将它们写入到输出文件的开头来保存音频的后处理传递。ExtAudioFileSeek和ExtAudioFile一起写在同一个文件上

我本来以为我可以通过重新使用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遍中完成没有问题。以编程方式,我怎样才能在不破坏数据的情况下实现同样的目标,变得效率低下(与我的目标相反),或者可能会破坏宇宙?

回答

1

是的,使用单个音频文件进行读写可能会像爆炸一样破坏宇宙,或者至少会导致其他问题。我认为解决这个问题的关键是在步骤4中,你应该把输出写到一个新文件中,而不是试图“回收”初始写文件。处理完成后,您可以简单地删除中间写入文件。

还是我误解了这个问题?

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

+0

感谢您的帮助。它不是实时的,所以它不应该是一个问题。想尝试一下我现在看到的实施问题? http://stackoverflow.com/questions/4159653/mixing-down-two-files-together-using-extended-audio-file-services – coneybeare 2010-11-11 21:56:28

+1

同意,你应该只写一个新的文件。试图变得聪明并且保存一步可能会在以后叮you你。 – lucius 2010-11-22 05:21:23