diff --git a/make-mb-release-alignments b/make-mb-release-alignments new file mode 100755 index 0000000000000000000000000000000000000000..0d6a646f961a72d36a2a75baae6cfbd12247209f --- /dev/null +++ b/make-mb-release-alignments @@ -0,0 +1,26 @@ +#!/usr/bin/perl + +my @releases = ( + { opera => 'das-rheingold', + recording => 'Neuhold1993', + release => '468d27f6-b1c2-4c4e-be5e-591703800a60' }, + + { opera => 'das-rheingold', + recording => 'Bohm1966', + release => '98f65dd0-e887-4d7a-af35-85d488bd7eb9' }, + + { opera => 'das-rheingold', + recording => 'Krauss1953', + release => 'c988df46-9359-4148-836b-4c67cc5e280e' }, + + { opera => 'das-rheingold', + recording => 'Thielemann2008', + release => 'e0cb99c2-4b0d-4bb9-9ce0-750646326dde' }, + ); + + +mkdir '.release-cache'; + +map { my ($op, $rl, $rc) = ($_->{opera}, $_->{release}, $_->{recording}); + `curl -s -H "Accept: application/xml" http://musicbrainz.org/ws/2/release/$rl?inc=recordings |xmllint --format - > .release-cache/$rl.xml` unless -e ".release-cache/$rl.xml"; + `xsltproc --stringparam opera $op --stringparam recording $rc templates/release2alignment.xslt .release-cache/$rl.xml |xmllint --format - >>$op-alignment.xml`; } @releases; diff --git a/templates/release2alignment.xslt b/templates/release2alignment.xslt new file mode 100644 index 0000000000000000000000000000000000000000..d3866e5abc11f7348c690d5e26645d4c1486d402 --- /dev/null +++ b/templates/release2alignment.xslt @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8" ?> + +<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:mb="http://musicbrainz.org/ns/mmd-2.0#" + version="1.0"> + +<xsl:param name="opera" /> +<xsl:param name="recording" /> + +<xsl:output method="xml" /> + +<xsl:template match="/"> + <xsl:variable name="release-id"><xsl:value-of select="//mb:release[1]/@id" /></xsl:variable> + <back> + <timeline + id="recording-{$recording}" + unit="s"> + <xsl:apply-templates select="//mb:track" mode="when" /> + </timeline> + <linkGrp + type="audio-cues" + domains="#{$opera} #recording-{$recording} http://musicbrainz.org/release/{$release-id}"> + <xsl:apply-templates select="//mb:track" mode="link" /> + </linkGrp> + </back> +</xsl:template> + +<xsl:template match="mb:track[not(preceding::mb:track)]" mode="when"> + <when id="when-{$recording}/CD{ancestor::mb:medium/mb:position}:{mb:position}" absolute="unknown" /> +</xsl:template> + +<xsl:template match="mb:track[preceding::mb:track]" mode="when"> + <xsl:variable name="preceding-track" select="preceding::mb:track[1]" /> + <xsl:variable name="preceding-when-id"><xsl:value-of select="$recording" />-CD<xsl:value-of select="$preceding-track/ancestor::mb:medium/mb:position" />-<xsl:value-of select="$preceding-track/mb:position" /></xsl:variable> + + <when id="when-{$recording}/CD{ancestor::mb:medium/mb:position}:{mb:position}" interval="{format-number(number(preceding::mb:track[1]/mb:length) div 1000,0)}" since="#when-{$preceding-when-id}" /> +</xsl:template> + +<xsl:template match="mb:track" mode="link"> + <xsl:variable name="cue-id"><xsl:value-of select="$recording" />-CD<xsl:value-of select="ancestor::mb:medium/mb:position" />-<xsl:value-of select="mb:position" /></xsl:variable> + <link target="#cue-{$cue-id} #when-{$cue-id} #{@id}" /> +</xsl:template> + +</xsl:transform>