Вопрос

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

Я изначально думал, что могу сделать это, сбросив указатель записи, используя 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, где вы должны написать вывод в новый файл вместо того, чтобы попытаться «перерабатывать» начальный файл записи. После завершения вашей обработки вы можете просто ловить промежуточный файл записи.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top