As this old fake webcomic I made shows, I consider song length to be a measure of a artist's, shall we say, "hardcoreitude". I quantify this by the average length of their songs. I originally checked this using an Excel spreadsheet as I use to do so many other musical statistics, but this approach had several problems which I have now fixed with a smarter Python script. This list shows the 20 artists in my library with the longest average song length, along with the number of songs by them I have for comparison. (Esoteric with 35 songs averaging 13:37 is more impressive than Lustre averaging 16:08 with 5 songs--particularly because it makes Esoteric 'leet') The results turned out to be a mix of post rock, atmospheric black metal, progressive rock, and classical music.
- Godspeed You! Black Emperor - 18:05 , 14
- Lustre - 16:08 , 5
- Darkestrah - 14:38 , 6
- Esoteric - 13:37 , 35
- Neal Morse - 13:11 , 11
- Darkspace - 12:10 , 17
- Altar of Plagues - 12:10 , 14
- Berlioz - 12:00 , 5
- Transatlantic - 11:01 , 21
- Beethoven - 10:56 , 30
- Wolves in the Throne Room - 10:54 , 21
- Krallice - 10:15 , 19
- Moonsorrow - 9:53 , 34
- Schubert - 9:38 , 13
- Guilt Machine - 9:36 , 6
- Negura Bunget - 9:10 , 8
- Conrad Herwig - 9:02 , 6
- Strauss - 8:57 , 8
- Hindemith - 8:52 , 3
- Brahms - 8:43 , 18
And for my fellow nerds out there, here is my script. Note that I now interface with my iTunes library metadata through the XML file iTunes saves for this purpose rather than through arbitrary text files. If anyone wants the module used for this, contact me.
import sys
import os
import os.path
sys.path.append('%s' % (os.path.abspath(os.path.join(os.curdir, 'BansheeMeld'))))
import xmlIO
if len(sys.argv) > 1:
numtoprint = int(sys.argv[1])
else:
numtoprint = 20
lib = xmlIO.lib()
artistlengths = dict()
def good(song):
return song['Track Number'] is not None and song['Track Count'] is not None and song['Genre'] != 'Podcast'
def converttime(t):
m, s = divmod(t, 60)
return "%d:%02d" % (int(m), int(s))
for song in lib[0]:
if good(song):
if 'Album Artist' in song and song['Album Artist'] is not None:
artist = song['Album Artist']
else:
artist = song['Artist']
if artist in artistlengths:
artistlengths[artist][0] += song['Time']
artistlengths[artist][1] += 1
else:
artistlengths[artist] = [song['Time'], 1]
averages = [((v[0] * 1.0 / v[1]), k, v[1]) for k, v in artistlengths.iteritems()]
averages.sort(reverse=True)
for i in xrange(numtoprint):
print averages[i][1],'-',converttime(averages[i][0]),',',averages[i][2]
No comments:
Post a Comment