- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 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
请注意,这是打印在控制台中的简单错误,而不是异常!
同时将它写成 String
,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 key 一起使用,所以我认为这可能是问题所在,而且它确实可以与这些 iTunes key 一起使用。此外,该值必须是字符串(或 NSString),而不是日期对象。
关于swift - 通过 AVMetaDataItem 写入 ID3 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33582845/
我有一个 AVMetadataItem,它的字段以 CP1251(西里尔文)编码。阅读 item.stringValue 后,我得到了垃圾 - 编码不正确的字符串。我已经尝试将该字符串转换为原始 UT
我有一些文件,-m4a -mp4 -mp3 等等。我想更改这些详细信息 AVMetadataItem AVMetadataCommonKeyArtwork AVMetadataCommonKeyArt
我想通过AVMetadataItem类获取媒体标题 /* provides the value of the metadata item */ @NSCopying public var v
描述: 我正在尝试在 swift3 中设置 AVMetadataItem 的 identifier,如 this apple video 中所述.但是,该视频是 pre-swift3。 在 swift
我正在使用 AVMetaDataItem 将 ID3 标签写入文件 var soundFileMetadata = [AVMetadataItem]() soundFileMetadata.appen
在它起作用之前我无法理解问题是什么 - (NSString *)titleForAudioFileModel:(APAudioPlayerModel *)audioFileModel { A
我想获取本地 iTunes 歌曲的 ISRC 代码。我可以通过以下代码获取元数据: MPMusicPlayerController *mp= mp = [MPMusicPlayerControlle
我正在尝试识别 iPad 上视频的不同元数据项。到目前为止,我已经能够成功地使用 AVAsset 库找到文件,并使用 metadataForFormat: 生成一个 AVMetadataItems 数
我是一名优秀的程序员,十分优秀!