开发者

ExtAudioFileSeek and ExtAudioFileWrite together on the same file

开发者 https://www.devze.com 2023-01-24 06:18 出处:网络
I have a situation where I can save a post-processing pass through the audio by taking some manipulated buffer from the end of the track and writing them to the beginning of my output file.

I have a situation where I can save a post-processing pass through the audio by taking some manipulated buffer from the end of the track and writing them to the beginning of my output file.

I originally thought I could do this by resetting the write pointer using ExtAudioFileSeek, and was about to implement it when I saw this line in the docs

开发者_JAVA百科
Ensure that the file you are seeking in is open for reading only. This function’s behavior with files open for writing is undefined.

Now I know I could close the file for writing then reopen it, but the process is a little more complicated than that. Part of the manipulation I am doing is reading from buffers that are in the file I am writing to. The overall process looks like this:

  1. Read buffers from the end of the read file
  2. Read buffers from the beginning of the write file
  3. Process the buffers
  4. Write the buffers back to the beginning of the write file, overwriting the buffers I read in step 2

Logically, this can be done in 1 pass no problem. Programmatically, how can I achieve the same thing without corrupting my data, becoming less-efficient (opposite of my goal) or potentially imploding the universe?


Yes, using a single audio file for both reading and writing may, as you put it, implode the universe, or at least lead to other nastiness. I think that the key to solving this problem is in step 4, where you should write the output to a new file instead of trying to "recycle" the initial write file. After your processing is complete, you can simply scrap the intermediate write file.

Or have I misunderstood the problem?

Oh, and also, you should use ExtAudioFileWriteAsync instead of ExtAudioFileWrite for your writes if you are doing this in realtime. Otherwise the I/O load will cause audio dropouts.

0

精彩评论

暂无评论...
验证码 换一张
取 消