I'm looking for a way to modify ID3 tags with Swift. More specifically, I want to write the Album Art image to an mp3/m4a file.
A Swift library would be the best, but I'll take anything that can be done natively in Swift. I don't want to rely on another language's library.
I had a quick look at AVFoundation, but it looks like it's only for audio/video playback and conversion. This is about the closest I found from ID3 tags: https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAsset_Class/
Any suggestion?
ID3 tags are a critical component of audio files, particularly MP3s. In simple terms, ID3 tags are the metadata for an audio file to make sure they are displayed correctly in computer software such as a DAW, a DJ streaming software, or a music streaming app like Apple Music.
Simply select the track, or tracks, that you wish to remove ID3 tags for, then right click them in the Music Tag file list. On the menu that appears, click the "Remove Tags" option. You'll be presented with a box wish asks you to confirm that you would like to remove the tags, and that the operation is irreversible.
ID3 tags are embedded in your Mp3 files. ID3 tags are not an official specification of the format. (Definition from Apple support) The definition we like better reads something like: ID3 tags allow information such as the title, artist, album, track number, and other information about the file.
I was faced with this same problem over and over so I decided to make a swift framework for it. You can find it here: https://github.com/philiphardy/ID3Edit
Add it into your Xcode project and then make sure to embed it by going to your project settings > General > Embedded Binaries
Here is how to implement it in your code:
import ID3Edit
...
do
{
// Open the file
let mp3File = try MP3File(path: "/Users/Example/Music/example.mp3")
// Use MP3File(data: data) data being an NSData object
// to load an MP3 file from memory
// NOTE: If you use the MP3File(data: NSData?) initializer make
// sure to set the path before calling writeTag() or an
// exception will be thrown
// Get song information
print("Title:\t\(mp3File.getTitle())")
print("Artist:\t\(mp3File.getArtist())")
print("Album:\t\(mp3File.getAlbum())")
print("Lyrics:\n\(mp3File.getLyrics())")
let artwork = mp3File.getArtwork()
// Write song information
mp3File.setTitle("The new song title")
mp3File.setArtist("The new artist")
mp3File.setAlbum("The new album")
mp3File.setLyrics("Yeah Yeah new lyrics")
if let newArt = NSImage(contentsOfFile: "/Users/Example/Pictures/example.png")
{
mp3File.setArtwork(newArt, isPNG: true)
}
else
{
print("The artwork referenced does not exist.")
}
// Save the information to the mp3 file
mp3File.writeTag() // or mp3.getMP3Data() returns the NSData
// of the mp3 file
}
catch ID3EditErrors.FileDoesNotExist
{
print("The file does not exist.")
}
catch ID3EditErrors.NotAnMP3
{
print("The file you attempted to open was not an mp3 file.")
}
catch {}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With