Same Artist with Different MBIDs: MusicBrainz, LastFM (and Spotify)

TL;DR ==> Skip the Introduction and scroll to “The Actual Tests”

Introduction

One of the cooler (to me) features of my PopRock app is it combines related artists for some of the charts–if the same artist is in multiple bands, for example, like Ronnie James Dio was in Dio, ElfBlack Sabbath, Rainbow, and so on. That was fun to work on and most triumphant when I finally got it to work.

MusicBrainz and LastFM, however, have provided me with a somewhat similar challenge. In my first post about using the MusicBrainz and LastFM APIs, I mentioned that Alice Cooper has two MBIDs–one for the band (1964-1975 according to MusicBrainz) and another for the lead singer cum solo artist (or is it “solo artist née lead singer”?). I’ve stored those two MBIDs, along with several others, in a python list that I loop through to get data about multiple artists. I wasn’t yet ready to store this data in my database, so I was saving each artist’s daily data in a JSON file (which Python makes so freaking easy, by the way!) like so:

artistNameFor_file_name = artistName.replace(‘ ‘, ”)

dateFor_file_name = time.strftime(“%m-%d-%y”)

artistJSON = json.dumps(artist, indent=4)

f = open (‘data/’ + artistNameFor_file_name + ‘_‘ + dateFor_file_name + ‘.json‘, ‘w’)

f.write (artistJSON)

f.close()

It works totally awesome — even for artists with unusual characters in their name such as Mötley Crüe. It doesn’t work so well for artists with exactly the same name such as Alice Cooper and Alice Cooper. In the latter case, data for the second Alice Cooper overwrites the file and data for the first Alice Cooper.

I could use the ‘a’ (instead of the ‘w’) argument to append it but for it to merge the data how I want it* isn’t really worth the time and effort it would take to write that script. What I’ll do, instead, is write the PHP for putting both sets of data where it belongs in my MySQL database which I have to do anyway. What I noticed while writing that previous post was LastFM isn’t a pretentious wiener like the guys who work for Championship Vinyl in High Fidelity (and MusicBrainz contributors). LastFM uses only one of those MBIDs for  Alice Cooper. I just have to test both MBIDs again to see which one — then I can write … wait … I could add some … other string from an artist’s data to the filename … OR I could include the time in addition to the date … and that might be helpful for … something else as well. But, as I said, I need this PHP written as well.

Back to the primary topic:

I need a script (and maybe a … are they called “lookup” tables?) that knows to put data from both Alice Cooper MBID … crap … no, wait … because these are hard, quantifiable (yes, I know I’m mis-using that word … be thankful I didn’t say “mis-abusing”) numbers I can add them! That’s the whole purpose behind getting LastFM data in the first place!

I am hoping Joan Jett is equally easy. For some reason, MusicBrainz contributors have her under Joan Jett and Joan Jett and the Blackhearts. I have no idea why. She’s never done anything without the Blackhearts. This is not a Tom Petty and Tom Petty & the Heartbreakers situation … aw, man! … I also need to deal with Tom Petty.

Spotify has one artist id for all Alice Cooper albums as well as Joan Jett. They have different, separate ids for the two Tom Petty entities which I’m okay with (and I’m sure Spotify is relieved). There are other issues with Spotify both odd but whatever as well as inaccurate but … that’s a whole different, well, issue.

The Actual Tests

TEST #1 – Part 1

First, I’ll demonstrate the “problem” by showing the response to a request to MusicBrainz for the Alice Cooper group’s Release Groups (a list of albums containing all the different releases–like other countries, etc.–of that album).

ACgroup_MB_ReleaseGroups.png
The Alice Cooper band MBID data includes 25 release groups (for only 7 “real life” albums! Still only 8 if you include Greatest Hits).

OMG! I just noticed there is a “type” property with a “Group” value! Woo-hoo! That is going to make everything sooooo easy.

ACperson_MB_ReleaseGroups.png
MusicBrainz has 25 release groups for Alice Cooper as a solo artist. Exactly the same amount as the group which is odd considering he has 20 studio albums (which doesn’t include live albums or compilations). That … is weird.

I notice, with a smile, this MBID has a “type” of “person” key/value pair.

I have to note that the Alice Cooper discography Wikipedia page combines solo artist and group lists for studio albums, live albums, and compilations but separates group and solo artist singles. Alice Cooper is just a mess. 😉

Important part: Each MBID has 25 albums for a total of 50. Yes, I read all of that and know each MBID has a different list of albums.

TEST #1 – Part 2

Artist Info from LastFM using the person vs band MBIDs

ACcombined_LastFM_artistInfo.png

The LastFM response using the person MBID gets me artist info for the same MBID.

The LastFM response using the group MBID redirects me to the artist info for the person MBID and the data is the same — note the listeners and playcount values.

Moral: I only need to use one MBID for getting info from LastFM — the person MBID.

Let’s try Joan Jett.

JJperson_MB_ReleaseGroups.png
MusicBrainz has 9 release groups for Joan as an individual.

I’m amused they have hometowns (“begin_area”) for both Alice (Detroit) and Joan (Wynnewood) but for the Alice Cooper group (Pheonix) and JJ & the Blackhearts (Los Angeles) they have the city in which the band was formed.

JJperson_MB_ReleaseGroups.png
MusicBrainz has 25 release groups for Joan Jett and the Blackhearts!

Joan Jett & Company isn’t quite as simple with LastFM.

JJperson_LastFM_artistInfo.png
Joan Jett individual MBID stats from LastFM

Joan Jett the person is, apparently, similar to neither the artist who inspired everything about her (Suzi Quatro) nor her contemporary, Pat Benatar.  Okay.

JJband_LastFM_artistInfo.png
Joan Jett and the Blackhearts MBID stats from LastFM

JJ & the BHs are, unsurprisingly, similar to her old band The Runaways and, well, Lita Ford (lead guitarist for The Runaways).

Neither “solo” or with the BHs (and those should be, in truth, the same MBID) is similar to Evil Stig (a band for which JJ sang 100% the lead vocals, not just some as she did with the Runaways).

Most importantly and irritatingly, the MBIDs have different values for listeners and playcount. I can still simply add them but this requires me to fetch each MBID in Last FM separately (for the time being, while I’m using my Python script to put the responses into JSON files).

Update: I’ve made a little lookup-ish table.

queryForMBID.png

I know I don’t need the name columns, but it helps me. This is for artists that are identical in the real world to make sure data from LastFM goes where it should — Alice Cooper has all Alice Cooper stats, albums, and tracks and Joan Jett gets all her stuff.

Speaking of Joan Jett, I am about to–any second now–make a lookup-ish table for related artists so I don’t need my “manual” group charts below.

steveTaylorGroup.png
This chart uses arrays containing an artist and groups for which they were the only lead singer.

On a related note, I’ll make a “related albums” table for artists who were only on some of a band’s albums — for example, any Dio-related query knows to get only those Rainbow and/or Black Sabbath albums for which he was the lead singer.

An issue that will still remain is albums for which an artist is only on one or some of the songs:

  • My albums table won’t accept albums if the artistID exists in the artist table which means neither The Rocky Horror Show nor The Rocky Horror Picture Show get inserted because they’re cast albums with various singers–Meat Loaf‘s artistID won’t match the artistID for those albums and “Various” or whatever isn’t in the artists table.
  • Ted Nugent‘s Free for All album doesn’t display for Meat Loaf queries despite Loaf singing some of the songs — he isn’t the “artist” for the album. Hmm … I should look and see if he shows up in any of properties for that album in any of my data sources … my goodness but this app is becoming wicked cool wicked fast!

Footnotes

*Once I increase my MongoDB and CouchDB knowledge, perhaps it won’t be such a time-consuming task.

Advertisements

First Tiny Bits o’ Data from LastFM

I can’t even begin to tell you how much fun I’m having with this mixture of Python, the MusicBrainz API, and the LastFM API. Much more to come about the process itself but, for now, just know that the number of Alice Cooper listeners rose from 1,365,754 on Feb 14, 2019 to 1,365,860 on Feb 15 for a total increase of 106. His total playcount rose from 31,123,429 to 31,126,727 — an increase of 3,298 plays. Lovely data viz will follow the procedural tutorial.

Using the Last.fm and MusicBrainz APIs

I am quite pleased with my app that uses the Spotify Web API for creating data visualizations using the popularity data of artists, albums, and tracks. That popularity score, however, is a relative number so I can’t truly compare much in a useful way, however pretty my UX is.

Now is the time on Sprockets where we start a new project using the Last.fm API to get real, quantifiable data — the number of listeners for each entity (artist, album, track) and playcount for each. I’m very interested to find how those numbers differ.

Spotify and the Spotify Web API make it very easy to get ID numbers for each artist, album IDs for each artist and track IDs for each album. In fact, the documentation shows they might even be making an effort to be stupid. The example URL in their documentation for getting info about an artist is:

/2.0/?method=artist.getinfo&artist=Cher&api_key=YOUR_API_KEY&format=json

So any spelling errors or similar names will make your life miserable. Fortunately, their database uses (for the most part–I’ll get to that in a moment) the mbid or MusicBrainz ID for everything so you can, instead, write the above like this:

/2.0/?method=artist.getinfo&mbid=bfcc6d75-a6a5-4bc6-8282-47aec8531818&api_key=YOUR_API_KEY&format=json

Unfortunately, there’s no Last.fm equivalent to Spotify‘s utterly delightful endpoint for getting all albums by an artist:

/artists/{id}/albums

Fortunately, the MusicBrainz API has such an animal but it’s a little more complicated and it took me a bit of trial and error to figure out quite how it works. I’d like to share it with you. Here are the steps I’ll need to complete to get all of the information about an artist, their albums, and the tracks from those albums with an extra curveball just to make it fun.

Step #1 – Search MusicBrainz.org for the desired artist

In this case, I chose Alice Cooper.

aliceCooperSearchResults.png

For the uninititated, not only would using the search term “alice cooper” bring up tribute bands but the fans (I count myself among them) who insist on differentiating between the group and the solo artist mean I have to use not one but two MBID numbers for this single artist.

Step #2 – Get the Artist’s MBID from MusicBrainz

Click the artist name in the search results then click the Details tab on the artist page.

aliceCooperDetailsTab.png

Step #3 – Get the Artist’s release-groups from MusicBrainz

Copy the artist MBID and paste it into a MusicBrainz web service URL using the artist entity and a ?inc=release-groups parameter like so:

/ws/2/artist/ee58c59f-8e7f-4430-b8ca-236c4d3745ae?inc=release-groups&fmt=json

to get a list of “release groups.”

AC_MB_info_browser.png

I broke up with Dreamweaver a while back, dumping it for the far smarter, cuter, cooler VS Code but ol’ DW will always have a special place in my heart because of cool commands like Edit > Code > Apply Source Formatting which does this:

beforeAfter.png

Remember, you have to do that twice for Alice Cooper. Because we, his fans, are pricks like that.

Step #4 – Get the Artist’s Releases from MusicBrainz

A release is an album — like Zipper Catches Skin or Billion Dollar Babies. A release group is all editions and versions of that album. To see exactly what that means, we copy the id for the Constrictor release-group from line 26 in the above image and construct the URL below using the release-group entity and inc=releases parameter.

/ws/2/release-group/24c4fdde-4494-3837-a288-5b4fdbe966eb?inc=releases&fmt=json

That gets us all six releases in the Constrictor release-group:

  • United States with “packaging”: “Cardboard/Paper Sleeve” (a vinyl record)
  • United States with “packaging”: “Jewel Case” (a CD)
  • Japan CD
  • United States with “packaging”: “” (digital?)
  • Germany with “packaging”: null
  • United Kingdom with “packaging”: null

I don’t know what null packaging means.

The first time I get data from Last.fm, I’ll try all of these and hypothesize “Cardboard/Paper Sleeve” will have a zero playcount.

Step #5 – Get a Release’s Recordings from MusicBrainz

A recording is a “track.”

Construct a URL using the individual release entity and inc=recordings parameter.

/ws/2/release/1189de93-7e9f-3b47-a9df-e2599e62f75d?inc=recordings&fmt=json

The UK release of Constrictor has 10 tracks. There will probably never be a deluxe or remastered edition. Which is a damn shame.

Step #6 – Get an Artist’s data from Last.fm

Using the artist MBID, method=artist.getinfo, and an API Key as parameters, assemble a Last.fm URL like so:

/2.0/?method=artist.getinfo&mbid=ee58c59f-8e7f-4430-b8ca-236c4d3745ae&api_key=YOURAPIKEY&format=json

The resulting JSON for Alice Cooper the man includes a bio, birthday, similar artists, genres, and–for me–the important bit:

"stats": {
"listeners": "1362113",
"playcount": "31011489"
}

You’re dying to know how that compares to Alice Cooper the group, amiright?

"stats": {
"listeners": "1362113",
"playcount": "31011489"
}

Well, check that shizzle out! We only need to run what will be this query once for Alice Cooper! Both MBIDs get the exact same data. Wanna know something nerdy and cool?

The artist entity URLs I used earlier to get the release groups differ …

  • Alice Cooper the person has a gender of “male.” Alice Cooper the band has a gender of “null.”
  • The person has a “begin_area” of Detroit, MI while the band has Pheonix, AZ
  • The band has a life-span of 1964-1975 with “ended”: true while the person’s life-span begins with “1948-02-04” and ends with “null” and “ended” is false.
  • Type properties are “group” and “person”

Step #7 – Get Album Info from Last.fm

We’ll go with Constrictor again. Using album.getinfo this time.

/2.0/?method=album.getinfo&mbid=1189de93-7e9f-3b47-a9df-e2599e62f75d&api_key=YOURAPIKEY&format=json

  • listeners: 64,771
  • playcount: 545,070

For comparison (the entire purpose of this whole exercise), let’s also get Billion Dollar Babies:

Well, I’ll be horn-swaggled! There were three Billion Dollar Babies release-groups in my JSON file but none of their IDs worked so I searched at MusicBrainz and got the actual mbid for the release-group which had 13 releases in it! How do you pick? Eventually, I’ll get all of them but …

First choice didn’t work … this is going to get tedious …

Okay, second try gets me some stats

  • listeners: 169,768
  • playcount: 1,222,112

Yeah, see that’s a significant difference.

Step #8 – Get Track Info from Last.fm

I went for “The World Needs Guts” from Constrictor using the track.getInfo method as a parameter.

/2.0/?method=track.getInfo&mbid=70bd458f-c62d-4014-99e7-233c3c0b8f96&api_key=YOURAPIKEY&format=json

  • listeners: 11,332
  • playcount: 38,656

Which I’m sure is tiny crumbs compared to even one instance of “School’s Out” let alone adding all of the recordings of “School’s Out” together.

Conclusion

It will take me a lot longer to get the data from Last.fm that I need than it does to get data from Spotify but it will also be data I can use!

Detroit Rock Ranked by Spotify

I finally added a bunch of Detroit artists. Eminem jumped straight to the top of all artists (not just those from Detroit) in my little database. Before you complain about a couple, skip to the explanation at the bottom.

DetroitRanking.jpg

The J. Geils Band not only because of “Detroit Breakdown” but because so many people used to think they were from Detroit because of their popularity in the city.

I am allowing Meat Loaf because … well, I’m biased — he’s like my favorite … but, also … his first album was on the Motown label and he sang lead on Ted Nugent‘s second solo album.

I feel kinda bad that Ted Nugent is at the same level as The Hives.

The Hollywood Vampires are on the list — despite the fact that they suck — because Alice Cooper.

The one Iggy Pop and James Williamson album is SOOOOO underrated. Way better than the last album or two by the Stooges and several of Iggy‘s solo efforts.

I feel kinda bad that Was (Not Was) is at the same level as Esham. Nothing against either The Hives or Esham but … seriously.

The Frost suffers from sharing the same Artist ID # as some chump who calls himself Frost. I’ve told Spotify about this but, obviously, they haven’t fixed it.

Dick Wagner deserves better. Much better.

Adding Genres to my Rockin App

Currently, I have an empty genres table that looks like this:

emptyGenres.png

My thought when I created it was I’d just use booleans for each column (except artistID, of course). I was going to use these as a short list of categories to create charts with but I’m now thinking I want to use all of the genres Spotify may provide.

Their console gave me the following genres for Alice Cooper:

  "genres": [
    "album rock",
    "classic rock",
    "comic",
    "glam metal",
    "glam rock",
    "hard rock",
    "metal",
    "protopunk",
    "rock"
  ]

I’m fine with that. I wrote about Spotify genres once before, wondering how artists were assigned genres. Were tracks and albums assigned genres and the artist was then assigned all of those? That makes the most sense to me, but I don’t think that’s how Spotify does it.

I wanted to test and dig around but despite the fact that Alice Cooper has tracks that might not fit any of those genres, I couldn’t think of an Alice Cooper album that would go beyond those listed above. So I did Iggy Pop:

"genres": [
    "alternative rock",
    "classic rock",
    "dance rock",
    "garage rock",
    "glam rock",
    "new wave",
    "permanent wave",
    "protopunk",
    "punk",
    "rock"
  ]

The first thing I notice is Alice didn’t get “punk” despite being voted “Punk of the Year” in 1973 by Cream magazine readers. I don’t even know what “permanent wave” is. Anyway, I chose Iggy because I wondered what genre his two French language jazz albums might fall under.

Preliminaires (33EUXrFKGjpUSGacqEHhU4)

"genres": []

One version of Preliminaires has a genres property but no values.

Preliminaires (0bwmAmXOTTfX1PMS0psdjM)

"genres": []

Same.

Après

"genres": []

Same. No surprise.

As a “control group,” I also tried:

  • Raw Power – nope, no genres
  • Lust for Life – no genres

Anyway … what I’m wondering is — can I use Spotify’s genres in the way that I want to? If I want a list of punk bands, will One Bad Pig appear or not? If they don’t, I can add the genres myself … the question really is, I guess … how do I design the table(s)? Maybe just a two-column table (artistID, genre) with an index for each. And … create a function that

  1. gets an artist
  2. gets the genres array
  3. for each genre in genre, insert a row with the artistID and the genre

Man, I hope the spelling for their genres is standardized … like … no “Funk” and “Phunk” or some such nonsense.

Yeah, that’s what I’ll do.

One Bad Pig, by the way, gets:

"genres": [
    "christian metal",
    "christian punk",
    "deep christian rock"
  ]

See, this is why I didn’t want to use Spotify’s genres. I have to write extra code to make sure a “punk” chart includes “punk” but also “protopunk” as well as “christian punk” and … whatever else. Seriously — ew.

The silver lining is, it will all make for a killer relationship chart.

Major Milestone Monday

After lots of hard work, I have D3 not only working with my database but have album art to go with the albums. It took me a while — even after I got the album covers to appear — to get the covers to display where I wanted them. I had to do math a lot. Still not “done,” but this is a big, big deal. This is my #BadAssTakeover.

I have cron jobs that regularly reach out to Spotify and store the popularity of artists, albums, and tracks. Here is a sampling of the bar graphs I can now do. Albums are in chronological order and the numbers are the popularity scores as of Sunday, April 22, 2018. Their popularity scores are relative to all albums on Spotify but I don’t know how they work … I don’t know if an album’s popularity takes into consideration the tracks’ popularity.

Click all images for full size

Alice Cooper

aliceCooper_01

Alice has tons of compilations which is frustrating for multiple reasons. He’s one of the artists that makes me think a vertical graph might be better.

aliceCooper_02

David Bowie

davidBowie_01

As you might expect, Bowie has a ton of albums even without compilations.

davidBowie_02

I’m not sure what the albums without art are … their titles are visible in a sortable table on a different page but I’m busy at the moment …

Bride

I chose them as a sample for a couple reasons. One, they have relatively few albums and two, they were played last night on IntenseRadio during The Great Scott Diversion.

bride

Deliverance

I really don’t like Deliverance but a lot of people do and they have a new album out.

deliverance

Iron Maiden

I feel like I should like Iron Maiden more than I do. Today was a bad Iron Maiden day for me. I’ve been trying to find a relatively inexpensive used copy of Live After Death (on vinyl) and finally found one at a local used record shop but they wouldn’t sell it to me because it wasn’t priced yet. How do I know it was relatively inexpensive if it wasn’t priced yet? The cover was in horrible condition.

ironMaiden

Led Zeppelin

I chose them because I wanted to show some really tall columns … all that “gray space” in the screen shots is how high up the columns could go.

ledZeppelin

Led Zeppelin is another reason my recent … I’ve started buying records again — for the first time in over 30 years — and it’s a lot less fun than I thought it would be.

Meat Loaf

meatLoaf

I think all those blank spaces are compilations. He’s like Alice that way. Ew.

Mortification

Mortification, like Deliverance, are in my database because I wanted a health selection of thrash and black metal and similar artists to compare to each other.

mortification

One Bad Pig

Because I love them.

oneBadPig

They only have four albums which is sad. Well, they’ve also got a demo and a live album but those aren’t on Spotify.

Resurrection Band/Rez Band/Rez/Resurrection Band

rez

For some reason, there’s at least one … wait … it does say Resurrection Band … I thought Ampendectomy was a Glenn Kaiser solo album. Can you believe Lament isn’t their most popular album? People are dumb.

Spotify Genres

I created a little genres table recently to categorize the artists I’ve entered into my little database. I created columns for these crude descriptions:

  • rock
  • xian
  • rap
  • alt
  • hardrock
  • electronic
  • metal

I can’t believe I didn’t include “classic rock” considering it was my shower thoughts about that genre that inspired this whole project.

Every Noise at Once lists all 1,523 genres Spotify uses (as of the last time ENaO updated their little page). They get a wee more “granular” (as the kids today say) than I did.

ENaO lists 142 rock genres including

  • alternative rock
  • indie rock
  • alt-indie rock
  • indie rockism
  • Russian (and many other nationalities) rock
  • classic rock
  • classic Russian rock
  • spanish rock
  • spanish indie rock
  • rock en espanol
  • space rock
  • deep space rock
  • deep soft rock

Spotify has 13 christian (not to be confused with gospel or uplift) genres including

  • christian rock
  • deep christian rock
  • christian alternative rock
  • latin christian
  • deep latin christian

There’s also

  • 48 jazz
  • 10 gothic
  • 12 dark
  • 7 industrial
  • 127 deep
  • 24 tech (tech, techno, technical, aggrotech, ghettotech, etc.)
  • 23 rap, not to be confused with
  • 47 hip hop

Of course, each artist can have multiple genres attached to them.

Alice Cooper, for example, falls under

  • album rock
  • blues-rock
  • classic rock
  • glam metal
  • glam rock
  • hard rock
  • heavy christmas
  • mellow gold
  • metal
  • protopunk
  • rock

I don’t know which comes first, the artist’s genres or if the songs and/or albums get a genre and all of those genre are applied to the artist.

I’m choosing Alice Cooper because his career has included so many types of music … his album Alice Cooper Goes to Hell falls under … well, how about that … it seems albums don’t have genres. They have a genre property but, so far, none of the albums I’ve seen have any values for the genre property.

Tracks from Get an Album’s Tracks don’t have a genre property at all. Using “I’m the Coolest” from Goes to Hell, I checked the large Track object and it doesn’t have a genre property either.

I’ll tell ya, I’d be rather pissed if someone recommended Alice to me because I like metal so I left the record store with Pretties for You, DaDa, From the Inside and Zipper Catches Skin. For the record, all of those albums are way better than Raise Your Fist and Yell, Along Came A Spider, Dragontown and Brutal Planet.

Let’s try Steve Taylor. I predict (see what I did there?) a combination of christian, punk, new wave, and rock. Spotify says

  • christian metal
  • deep christian rock

I would never in a million years have even imagined metal. I don’t know what deep means.

Steve Taylor & The Perfect Foil has no genre values so I fully expected Steve Taylor & The Danielson Foil to have none but they also fall under deep christian rock. For those of you who know who Mr. Taylor is, I’m obligated to report Chagall Guevara are also deep christian rock.

Finally working some D3 into this sweet little app o’ mine … ta-da!

SFCgraphNoCovers.png

After well over a year of scraping every spare couple of minutes of learning to create things with code, one of the original two purposes is finally being realized! Had to learn PHP, SQL, jQuery, and D3 (and Python along the way) for the above and it’s now still just a skeleton of my full vision.

For genres, I expected S.F.C. to have christian, rap, hip hop, or a combination of two or more. What do they have? None. Search for christian hip hop and you’ll definitely get square miles of piled high landfills of crap like Lacrae but no SFC. Sad. Rigged.

Yo, yo, yo! I just noticed artists have a followers property which I’m totally going to start grabbing. Is there a benefit to following other than having artists appear under My Music > Artists?

I wonder if albums have a saved/saves property … nope … but that would be interesting, I think.

Hmm … Freedom of Soul, however, is deep east coast hip hop. No christian or uplift, though.

  • 12th Tribe is null
  • Playdough is christian hip hop — finally!
  • Say What? is null

Last try is for One Bad Pig. I’m not optimistic. I feel pretty dissed.

Holy crap. One Bad Pig is

  • christian metal
  • christian punk
  • deep christian rock

I accept that.

I wonder why they don’t fall under “christian” and “punk” separately. Or, maybe … no, probably not.