Jag har precis börjat lära mig Python så jag har inte kommit så långt än,
men ett "Hello world" program har jag gjort i alla fall.

print "Hello, World!"

Efter att jag hittat ett par böcker i ämnet Python så har jag återupptagit mina irrfärder i
pythonjungeln med tilltagande intresse. Enda besväret är att syntaxen inte alltid påminner
om t.ex. Matlab eller C, men andra fördelar är väldigt tilltalande. Jag hittade mutagen
som är ett bibliotek eller modul kanske man skall kalla det för att hantera metadata för ljudfiler.
Metadatan är den informationen som lagras om en låt i t.ex. em mp3-fil, för mp3 kallas nuvarande
standard ID3v2. Om du vill läsa mer om standarden ID3 rekomenderar jag sidan: www.ID3.org
För att få tillgång till de funktioner som ingår i mutagen skriver man:

from mutagen.easyid3 import EasyID3

Om man vill läsa av låttitel (altså inte filnamnet utan det är ID3-taggen som gäller), artist och skivtitel
kan man skriva följande kod:

audio = MP3(filnamn)
songtitle = audio["TIT2"]
artist = audio["TPE1"]
album = audio["TALB"]
print songtitle
print artist
print album

Inte vackert men det fungerar alldeles utmärkt så länge det finns en ID3-tagg i mp3-filen.
Om man istället vill skriva till ID3-taggen kan man använda följande kod:

# Imports
from mutagen.id3 import ID3, TRCK, TIT2, TPE1, TALB, TDRC, TCON, COMM

# Set file
audio = ID3("Track 1.mp3")
# Add tags

audio.add(TRCK(encoding=3, text=u"Track_nr"))
audio.add(TIT2(encoding=3, text=u"Song_title"))
audio.add(TPE1(encoding=3, text=u"Artist"))
audio.add(TALB(encoding=3, text=u"Album_title"))
audio.add(TDRC(encoding=3, text=u"2011"))
audio.add(TCON(encoding=3, text=u"Genre"))
audio.add(COMM(encoding=3, text=u"Comment"))

audio.save()
# Print tags
print audio.pprint()


Om man istället vill skriva ut all information som finns i ID3-taggen:

# Imports
from mutagen.id3 import ID3, TRCK, TIT2, TPE1, TALB, TDRC, TCON, COMM

# Set file
audio = ID3("Track 1.mp3")
print audio.pprint()


Ovanstående kod är ju användbar om man har en låt att ändra ID3-taggen på men om man har ett
helt album blir det lite tjatigt och svårarbetat så därför satte jag mig och letade upp lämpligt
sätt att skriva en loop för att göra jobbet effektivare. Det var inte speciellt svårt, men då
uppenbarade sig ett annat problem, nämligen teckenkodning. å ä ö gick inte att skriva till ID3 taggen
utan det blev alldeles knasiga tecken eftersom python (tror jag) tolkade å ä ö som helt andra tecken.
Efter en stunds sökande hittade jag en lösning på problemet. Om man bara skriver så här:

audio.add(TIT2(encoding=3, text=Song_title))

så fungerar det alldeles utmärkt med låttitlar som innehåller A-Z, a-z, 0-9. Men om åäö kommer med så
blir det alldeles galet. Om man däremot lägger till:

.decode('utf-8')

till:

audio.add(TIT2(encoding=3, text=Song_title.decode('utf-8')))

så kan man utan problem använda åäö, smidigt eller hur?
Än så länge har jag inte kommit fram till att kunna läsa in filnamnen från ett album utan får mata in
dem för hand, lite bökigt men man måste lära sig krypa innan man går som min moster alltid sade.
Nu ser koden ut så här:

# -*- coding: utf-8 -*-

Artist ='artist'
Albumtitle ='albumtitle'
year ='2022'
Genre ='genre'
Comment ='comment'

tracknr='1','2','3','4','5','6','7'
tracks='title 1','title 2','title 3','title 4','title 5','title 6','title 7'
filenames='track 1.mp3','track 2.mp3','track 3.mp3','track 4.mp3','track 5.mp3',
'track 6.mp3','track 7.mp3'

# Imports
from mutagen.id3 import ID3, TRCK, TIT2, TPE1, TALB, TDRC, TCON, COMM
ii=0
while ii < len(tracks):
audio = ID3(filenames[ii])
audio.add(TRCK(encoding=3, text=tracknr[ii]))
audio.add(TIT2(encoding=3, text=tracks[ii].decode('utf-8')))
audio.add(TPE1(encoding=3, text=Artist.decode('utf-8')))
audio.add(TALB(encoding=3, text=Albumtitle.decode('utf-8')))
audio.add(TDRC(encoding=3, text=year))
audio.add(TCON(encoding=3, text=Genre.decode('utf-8')))
audio.add(COMM(encoding=3, text=Comment.decode('utf-8')))
audio.save()
# Print tags
print audio.pprint()
print "---"
ii+=1


Med denna kod kan man alltså manipulera låttitlar, artist, albumtitel, genre, år och lägga till en kommentar för ett album
eller ett antal låtar.
Men om man nu vill slippa gå in och ändra i källkoden för varenda skiva man skall manipulera så gäller det att
automatisera programmet en hel del. Eftersom detta bara behövs när CD-skivan inte finns med i t.ex. www.freedb.org
så har jag inte lagt till den möjligheten att hämta information från den databasen även om jag börjat experimentera med
att göra detta i Python.
Efter lite pysslande har jag hittat dels ett bättre sätt att dels presentera programkod,
dels bättre kod för att manipulera ID3-taggen.