我正在尝试将 MPMediaItem 实例转换为 caf 格式的音频文件。我一直在关注 Chris Adamson 的工作以及他在从 iPod 库到 PCM 样本的帖子,其步骤比以前需要的要少得多
当我四处寻找如何快速执行此操作时,我遇到了 Abel Domingues github FileConverter.swift ,因为我在 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*Key 键,对于 kAudioFormatAppleLossless,必须包括 AVEncoderBitDepthHintKey 键。请参阅 -initWithMediaType:
那么字典中的什么导致了错误?