Как записать данные буфера в середину файла вместо добавления в конец файла?

#ios #swift #avaudioengine

#iOS #swift #avaudioengine

Вопрос:

Я могу записывать аудио в аудиофайл, добавляя данные буфера в КОНЕЦ аудиофайла со следующим кодом:

 // AVAudioFile uses the Core Audio Format (CAF) to write to disk.
// So we're using the caf file extension.
file = try AVAudioFile(forWriting: FileManagerHelper.recordingLocalURL(), settings: format.settings)

tapNode.installTap(onBus: 0, bufferSize: bufferSize, format: format, block: {
  (buffer, _) in
  do {
    buffer.frameLength = 1024 // Tap is now called every 40ms. By default, tap is called every 0.375s
    try self.file?.write(from: buffer)
    self.delegate?.recorderDidRecieveAudioBuffer(self, buffer: buffer)
    semaphore.signal()
  } catch {
    log("Error writing mic data to file.", msgType: .error)
  }
})
  

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

Спасибо

Ответ №1:

Согласно документам Apple:

var framePosition: AVAudioFramePosition: позиция в файле, в которой будет выполняться следующая операция чтения или записи.

Итак, вам просто нужно установить framePosition в любую позицию в кадре, которую вы хотите, чтобы начать запись новых аудиоданных.

Комментарии:

1. Возможно, я ошибаюсь, но, насколько я помню, это перезапишет существующие данные. Это действительно то, чего вы пытаетесь достичь?

2. Да, похоже на то, как диктофон работает в голосовых заметках

3. Однако установка framePosition, похоже, вызывает «ошибку -66568». Не уверен, что это значит