我正在嘗試將MPMediaItem實例轉換爲caf格式的音頻文件。我一直在關注克里斯·亞當森和他的崗位的工作對From iPod Library to PCM Samples in Far Fewer Steps Than Were Previously Necessary如何使用AVAssetWriterInput實例創建outputSettings字典<String. Any>?
我正四處尋找如何在迅速做到這一點我碰到 亞伯Domingues github上FileConverter.swift來抓斯威夫特只是在做這個。
然後,我設置轉換爲Swift 3作爲協議的擴展。 一切都很順利,直到我嘗試運行它。它在assetWriterInput
對象創建時崩潰,似乎與outputSettings
變量有關。
var outputSettings = [
AVFormatIDKey: kAudioFormatLinearPCM,
AVSampleRateKey: 44100,
AVNumberOfChannelsKey: 2,
AVChannelLayoutKey: NSData(bytes:&channelLayout, length:MemoryLayout<AudioChannelLayout>.size),
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsNonInterleaved: false,
AVLinearPCMIsFloatKey: false,
AVLinearPCMIsBigEndianKey: false
] as [String : Any]
// create an asset writer input
let assetWriterInput = AVAssetWriterInput(mediaType:AVMediaTypeAudio, outputSettings:outputSettings as NSDictionary as! [String : Any])
我收到錯誤信息是:
-[_SwiftValue unsignedIntValue]: unrecognized selector sent to instance 0x1704407b0 2016-10-13 18:34:52.032784 Testie[3098:1535938] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_SwiftValue unsignedIntValue]: unrecognized selector sent to instance 0x1704407b0'
我已經尋找這樣的例子,但必須職位在Objective-C和/或與設置在字典視頻。
這是與音頻有關AVAssetWriterInput源文件:
對於AVMediaTypeAudio下面的鍵不當前 支持outputSettings詞典:AVEncoderAudioQualityKey和 AVSampleRateConverterAudioQualityKey。使用此初始化程序時,必須完整指定 音頻設置字典,這意味着它必須包含AVFormatIDKey,AVSampleRateKey和 AVNumberOfChannelsKey。如果沒有可用的其他通道佈局信息 ,則AVNumberOfChannelsKey值爲1將導致單聲道 輸出,值爲2將導致立體聲輸出。如果 AVNumberOfChannelsKey指定的通道數大於2,那麼 字典還必須爲AVChannelLayoutKey指定一個值。對於 kAudioFormatLinearPCM,必須包含所有相關的AVLinearPCM *鍵密鑰 ,並且對於kAudioFormatAppleLossless,必須包含AVEncoderBitDepthHintKey 鍵。請參閱 -initWithMediaType:outputSettings:sourceFormatHint:用於避免必須爲每個鍵指定值的方法。
那麼在字典中是什麼導致了錯誤?
我可以發佈更多的代碼,我只是不想淹死這個問題了。 –