斯威夫特 如何在 macOS 中编辑.mp3文件的元数据 (ID3)



Swift 如何在 macOS 中编辑.mp3文件的元数据 (ID3)

我正在编写一个 macOS 应用程序,并且一直在尝试更改.mp3中"更多信息"部分中的措辞,并且对 SO 进行了大量搜索,并找到了 2 个将读取元数据的代码片段,但只有一个实际输出现有键,但我不明白如何将新数据写入其中任何一个。我实际上想将数据写入我创建的.mp3文件,并在可能的情况下添加图像,作为具有 Swift 3 知识的新手,任何人都可以提供帮助。下面的输出来自我复制到桌面的测试歌曲(Imagine_Test_Song)。

我在通过AVMetaDataItem编写ID3标签的SO上发现了这个,但是在这些行中出现编译错误:-

soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeyArtist, "MyArtist")!) // compiler error here
soundFileMetadata.append(createMetadata(AVMetadataiTunesMetadataKeySongName, "MySong")!)
….

其中说:- 调用中缺少参数标签"标签键"。功能是这样的:-

func createMetadata(tagKey: String, _ tagValue: AnyObject?,
keySpace:String = AVMetadataKeySpaceiTunes) -> AVMutableMetadataItem? {
if let tagValue = tagValue {
let tag = AVMutableMetadataItem()
tag.keySpace = keySpace
tag.key = tagKey as NSCopying & NSObjectProtocol
tag.value = (tagValue as? String as! NSCopying & NSObjectProtocol) ?? (tagValue as? Int as! NSCopying & NSObjectProtocol)
return tag
}
return nil
}

第二个代码段是我下面的代码,它确实编译并输出各种数据,但您如何编辑文本并保存更改。理想情况下,我也想添加"艺术品",这可能吗?

let homeUrl = NSHomeDirectory()
let sourceFilePath = String(format: "%@/Desktop/%@.mp3", homeUrl, " Imagine_Test_Song")
let fileUrl = NSURL(fileURLWithPath: sourceFilePath)
var asset = AVAsset(url: fileUrl as URL) as AVAsset
//using the asset property to get the metadata of file
for metaDataItems in asset.commonMetadata {
//getting the title of the song
if metaDataItems.commonKey == "title" {
let titleData = metaDataItems.value as! NSString
print("title = (titleData)")
}
//getting the "Artist of the mp3 file"
if metaDataItems.commonKey == "artist" {
let artistData = metaDataItems.value as! NSString
print("artist = (artistData)")
}
//getting the "creator of the mp3 file"
if metaDataItems.commonKey == "creator" {
let creatorData = metaDataItems.value as! NSString
print("creator = (creatorData)")
}
//getting the "Album of the mp3 file"
if metaDataItems.commonKey == "albumName" {
let albumNameData = metaDataItems.value as! NSString
print("albumName = (albumNameData)")
}

输出:-

title = Imagine
creator = John Lennon
type = Singer-Songwriter
albumName = Imagine

任何帮助将不胜感激,提前感谢。

在对此问题进行大量研究之后,由于 MP3 文件的许可问题,使用 AVFoundation API 调用(即使 mp3 文件类型被列为选项)似乎无法使用 AVMetaDataItems 修改和保存到 MP3 文件的能力。 因此,据我所知,执行此操作的唯一方法是滚动自己的id3标签编辑器,或使用其他作者的库/框架。

我个人不喜欢使用其他作者不提供完整源代码的框架或库,因为当作者停止维护项目并且 Apple 更改某些内容并且更改破坏我的应用程序时,我遇到了问题。

但是,我找到了Fabrizio Duroni的ID3TagEditor库。 完整的源代码可以在github上找到。这是一个简单易用的库。 在撰写本文时,Fabrizio 正在积极维护代码。

最新更新