gpt4 book ai didi

swift - 通过 AVMetaDataItem 写入 ID3 标签

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:39 25 4
gpt4 key购买 nike

我正在使用 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

请注意,这是打印在控制台中的简单错误,而不是异常!

同时将它写成 StringInt 甚至 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),而不是日期对象。

enter image description here

关于swift - 通过 AVMetaDataItem 写入 ID3 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33582845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com