我尝试导出wav 32位文件,但AVAssetWriter无法添加输入
let setting = [
AVFormatIDKey : kAudioFormatLinearPCM,
AVSampleRateKey : 44100,
AVNumberOfChannelsKey : 2,
AVLinearPCMBitDepthKey : 32,
AVLinearPCMIsNonInterleaved : false,
AVLinearPCMIsFloatKey : true,
AVLinearPCMIsBigEndianKey : false,
]
// 设置 reader & writer
let reader = try! AVAssetReader(asset: composition)
let readerOutput = AVAssetReaderAudioMixOutput(audioTracks: composition.tracks(withMediaType: .audio), audioSettings: nil)
readerOutput.audioMix = mix
reader.add(readerOutput)
let writer = try! AVAssetWriter(outputURL: outputTempURL, fileType: .wav)
let writerInput = AVAssetWriterInput(mediaType: .audio,
outputSettings: exportSetting)
if writer.canAdd(writerInput) {
writer.add(writerInput)
} else {
// will be here
return
}
那么我怎样才能导出32位WAV文件
如果您添加输入而不询问是否可能,则会在控制台中记录一个描述性错误:
*** -[AVAssetWriter addInput:] WAVE 文件不能包含浮点 LPCM
这个关于 WAVE 文件的说法实际上似乎并不正确但是
AVAssetWriter
相信它,所以如果你想要一个 32 位浮点 wav 文件,你可能需要尝试另一个 API 或库。
如果您对 32 位 integer 样本感到满意,请将
AVLinearPCMIsFloatKey
设置为 false
。