如何在 iOS 上使用 AVAssetWriter 导出 32 位 WAV 文件?

问题描述 投票:0回答:1

我尝试导出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文件

ios avfoundation core-audio audiotoolbox
1个回答
0
投票

如果您添加输入而不询问是否可能,则会在控制台中记录一个描述性错误:

*** -[AVAssetWriter addInput:] WAVE 文件不能包含浮点 LPCM

这个关于 WAVE 文件的说法实际上似乎并不正确但是

AVAssetWriter
相信它,所以如果你想要一个 32 位浮点 wav 文件,你可能需要尝试另一个 API 或库。

如果您对 32 位 integer 样本感到满意,请将

AVLinearPCMIsFloatKey
设置为
false

© www.soinside.com 2019 - 2024. All rights reserved.