По умолчанию AVAssetExportPresetAppleM4A
предназначен для создания файлов m4a, а не файлов wav. Для wav, попробуйте предустановку passthrough: AVAssetExportPresetPassthrough
и удалите файлы, оставшиеся от предыдущих запусков:
let export: AVAssetExportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough)!
export.outputURL = URL(fileURLWithPath: exportPath)
export.outputFileType = .wav
try? FileManager.default.removeItem(at: export.outputURL!) // otherwise export can fail :(
export.exportAsynchronously {
// etc
}
Примечание: при AVAssetExportPresetPassthrough
ваши входные аудиофайлы, вероятно, тоже должны быть в формате wav, и, возможно, даже иметь тот же формат. Если это не подходит для вас, попробуйте один из AVAssetWriter
, AVAudioFile
или ExtAudioFile
API.
p.s. если вам интересно, какие комбинации AVAssetExportSession
preset, AVAsset/AVAssetComposition
и AVFileType
поддерживаются, вы можете использовать функцию determineCompatibility
:
AVAssetExportSession.determineCompatibility(ofExportPreset: AVAssetExportPresetPassthrough, with: composition, outputFileType: .wav) { ok in
print("COMPUTER SAYS \(ok)")
}
хотя это, в основном, пробный экспорт, за исключением проверки file-url-Уже существует и иногда полезной Error
превратилась в бесполезную логическую переменную, так что я думаю, что это вообще ничего не добавляет.