swift – 通过AVMetaDataItem编写ID3标签
发布时间:2020-12-14 04:30:39 所属栏目:百科 来源:网络整理
导读:我正在使用AVMetaDataItem将ID3标签写入文件 var soundFileMetadata = [AVMetadataItem]()soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyArtist,"MyArtist")!)soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyS
我正在使用AVMetaDataItem将ID3标签写入文件
var soundFileMetadata = [AVMetadataItem]() soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyArtist,"MyArtist")!) soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeySongName,"MySong")!) soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyAlbum,"MyAlbum")!) soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyUserGenre,"MyGenre")!) soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyComposer,"MyComposer")!) 这是createMetadata方便的方法: func createMetadata(tagKey: String,_ tagValue: AnyObject?,keySpace:String = AVMetadataKeySpaceiTunes) -> AVMutableMetadataItem? { if let tagValue = tagValue { let tag = AVMutableMetadataItem() tag.keySpace = keySpace tag.key = tagKey tag.value = (tagValue as? String) ?? (tagValue as? Int) return tag } return nil } 然后我尝试写年份标签,但没有成功: let comps = NSDateComponents() comps.year = 2010; let yearTag = AVMutableMetadataItem() yearTag.keySpace = AVMetadataKeySpaceID3 yearTag.key = AVMetadataID3MetadataKeyYear yearTag.value = NSCalendar.currentCalendar().dateFromComponents(comps) soundFileMetadata.append(yearTag) 在这种情况下,我收到此错误: FigMetadataCreateConverter signalled err=-12482 (kFigMetadataConverterError_UnsupportedFormat) (Unsupported format conversion) at /SourceCache/CoreMedia/CoreMedia-1562.238/Prototypes/Metadata/Converters/FigMetadataConverterCommon.c line 118 请注意,这是在控制台中打印的简单错误,不例外! 将它写为字符串,作为Int甚至是Float,也会导致我出现同样的错误. 第一个问题是:如何写出来? 我还有另一个问题. 目前我有一个AVAudioRecorder,我发现无法直接将标签写入录像机的输出文件,因此我提交录像机文件,用AVURLAsset打开它并用AVAssetExportSession重新导出: self.recorder.stop() let urlAsset = AVURLAsset(URL: srcSoundFileURL) let assetExportSession: AVAssetExportSession! = AVAssetExportSession(asset: urlAsset,presetName: AVAssetExportPresetPassthrough) assetExportSession.outputFileType = AVFileTypeAppleM4A assetExportSession.outputURL = tmpSoundFileURL assetExportSession.metadata = soundFileMetadata assetExportSession.exportAsynchronouslyWithCompletionHandler({ .... }) 第二个问题是:有没有办法避免这种双步行动? 解决方法
我已经设法在您的代码中添加年份标记并进行了一些修改:
let yearTag = AVMutableMetadataItem() yearTag.keySpace = AVMetadataKeySpaceiTunes yearTag.key = AVMetadataiTunesMetadataKeyReleaseDate yearTag.value = "2123" 我无法使用ID3键,所以我认为这可能是问题,实际上它适用于这些iTunes键.此外,值必须是String(或NSString),而不是日期对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |