ExtAudioFileSeek и ExtAudioFileWrite вместе в одном файле - PullRequest
1 голос
/ 11 ноября 2010

У меня есть ситуация, когда я могу сохранить проход постобработки через аудио, беря некоторый манипулированный буфер с конца дорожки и записывая их в начало моего выходного файла.

Первоначально я думал, что смогу сделать это путем сброса указателя записи, используя 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 Ответ

1 голос
/ 11 ноября 2010

Да, использование одного аудиофайла для чтения и записи может, как вы говорите, взорвать вселенную или, по крайней мере, привести к другой злобе. Я думаю, что ключ к решению этой проблемы находится на шаге 4, где вы должны записать вывод в новый файл, а не пытаться «переработать» исходный файл записи. После завершения обработки вы можете просто удалить промежуточный файл записи.

Или я неправильно понял проблему?

О, а также, вы должны использовать ExtAudioFileWriteAsync вместо ExtAudioFileWrite для ваших записей, если вы делаете это в режиме реального времени. В противном случае загрузка ввода-вывода вызовет пропадание звука.

...