Я записываю аудио, используя AVFoundation в LPCM, а затем разбиваю его на несколько частей в зависимости от времени.
Я сталкивался с несколькими различными способами разделения:
Рассматривайте запись как AVAsset
, а затем используйте AVAssetExportSession
или несколько (см. Ниже).
Просто разбейте необработанный двоичный файл записи на основеколичество выборок, как в принятом ответе на этот вопрос .
AVAssetExportSession
кажется немного ориентированным на видео, и, как я его вижу, мне нужносоздать отдельный сеанс экспорта для каждого чанка.Я обеспокоен этим, и, честно говоря, это уводит меня в ад обратного вызова.
В настоящее время у меня есть что-то вроде этого псевдокода:
currentAsset!.loadValuesAsynchronously(forKeys: ["exportable"]) {
if status is ok {
export()
}
}
func export() {
for chunk in chunks {
exportChunk(chunkTime)
}
}
func exportChunk() {
if let exporter = AVAssetExportSession(asset: currentAsset!, presetName: AVAssetExportPresetPassthrough) {
// set exporter parameters
exporter.exportAsynchronously(completionHandler: {
// check status, update progress etc.
}
}
}
Выполнение чанкинга на основеобразцы кажутся простой вещью.Я думаю, я мог бы легко разделить его на последовательную очередь GCD.
Есть какие-нибудь проблемы?Я что-то упускаю?Как бы вы подошли к этому?