Benutzer:Zykure/lilypond-svg

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Ein nützliches Skript, um mit Lilypond Musiknotationen als SVG zu erzeugen. Falls im Quellcode definiert, wird auch eine passende MIDI-Datei erzeugt. Bei der Umwandlung wird zunächst eine Postscript-Datei erzeugt, die dann in ein PDF konvertiert wird.

Das PDF wird dann mit Hilfe von pdfcrop automatisch zugeschnitten, bevor es durch pdf2svg in ein SVG umgewandelt wird. Beim SVG wird zudem die fehlende DTD ergänzt. Die hiermit erzeugten Dateien sollten ohne weitere Änderungen für Commons geeignet sein. Sicherheitshalber können die SVG-Dateien vorher noch mit Jarry1250's SVG-Checker geprüft werden.

Beispiel[Bearbeiten | Quelltext bearbeiten]

Der oben gezeigte Auszug als MIDI-Datei/?

Quellcode[Bearbeiten | Quelltext bearbeiten]

#!/bin/bash

# This script creates cropped (!) PDF and SVG file from a
# lilypond source. For this to work porperly, you have to
# make sure that the lilypond sheet only contains the stuff
# you want, and especially no headers/footers/pagenumbers ...
# To achieve this, use the following options in the .ly file:
#   \paper {
#     oddHeaderMarkup = ""
#     evenHeaderMarkup = ""
#     oddFooterMarkup = ""
#     evenFooterMarkup = ""
#   }


# Get Lilypond filename from 1st command line parameter
# (Other parameters can be used for the lilypond command itself)
basename=`basename "$1" .ly`
shift 1

# Get necessary filenames
lyfile=${basename}.ly
pdffile=${basename}.pdf
svgfile=${basename}.svg
midifile=${basename}.midi
midfile=${basename}.mid

# Convert .ly to .ps with Lilypond
# (This also will create .midi files if specified in the .ly file)
lilypond $@ --pdf "$lyfile"

# Auto-crop the .pdf file, keeping some margin around the contents
pdfcrop --margin 5 "$pdffile" "$pdffile.tmp" && mv -v "$pdffile.tmp" "$pdffile"

# Finally convert the .pdf into a .svg file
pdf2svg "$pdffile" "$svgfile.tmp"

# Add the missing DTD to the .svg file (using some dirty hacks)
head -n 1 "$svgfile.tmp" > "$svgfile"
echo "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">" >> "$svgfile"
tail -n +2 "$svgfile.tmp" >> "$svgfile"

# Remove temporary files that were created by this script
rm "$svgfile.tmp"

# Convert .midi file to .mid for compatibility
if [ -f "$midifile" ]; then
    mv "$midifile" "$midfile"
fi

## END