.SECONDARY: $(%.frames) RATE = 50 #RATE = 25 #RATE = 20 #RATE = 10 RESOLUTION = 108 #RESOLUTION = 72 #RESOLUTION = 54 #GSPAGES = -dLastPage=500 #PAGES = --last-page=800 ANTIALIAS = -dTextAlphaBits=2 -dGraphicsAlphaBits=2 #ANTIALIAS = %.pdf: %.mid %.options src/Main.hs cabal run boomwhacker -j3 --ghc-option=-j3 --builddir=/ram/cabal --disable-documentation -- \ --rate $(RATE) $$(cat $*.options) $< $@ %.pdf: %.mid src/Main.hs cabal run boomwhacker -j3 --ghc-option=-j3 --builddir=/ram/cabal --disable-documentation -- \ --rate $(RATE) $< $@ %.wav: %.mid timidity --preserve-silence -A300 -Ow $< %-inspect.csv: %.mid midicsv "$<" "$@" %.mid: %.csv csvmidi "$<" "$@" %-utf8.csv: %.csv iconv -f latin1 -t utf8 $< >$@ %.csv: %.fods ods2csv --sheetnumber 1 "$<" | iconv -f utf8 -t latin1 >"$@" # Resolution is one Postscript point (1/72 inch). # https://stackoverflow.com/questions/4548919/any-tips-for-speeding-up-ghostscript # Ist pdftoppm schneller? # https://stackoverflow.com/questions/14678276/converting-pdf-to-png-why-does-ghostscript-take-forever %.frames: %.pdf mkdir -p /tmp/$*-frames rm -f /tmp/$*-frames/* gs-parallel $(PAGES) -j6 $< /tmp/$*-frames/%04d.png -- \ -dNOPAUSE -dBATCH \ -sDEVICE=png16m $(ANTIALIAS) \ -dDEVICEHEIGHT=$(RESOLUTION)0 -r$(RESOLUTION) touch $@ # is DEVICEHEIGHT necessary? # -c "30000000 setvmthreshold" %.flv: %.frames %.mp3 ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.mp3 \ -vcodec flashsv -acodec copy -y $@ %.flv: %.frames %.aac ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.aac \ -vcodec flashsv -acodec copy -y $@ %.flv: %.frames %.wav ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.wav \ -vcodec flashsv -acodec copy -y $@ %.mp4: %.frames %.mp3 ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.mp3 \ -b:v 8000k -acodec copy -y $@ %.mp4: %.frames %.aac ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.aac \ -b:v 8000k -acodec copy -y $@ %.mp4: %.frames %.flac ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.flac \ -b:v 8000k -acodec copy -y $@ %.mp4: %.frames %.wav ffmpeg -r $(RATE) -f image2 -i /tmp/$*-frames/%04d.png -i $*.wav \ -b:v 8000k -acodec flac -y $@ # -b:v 8000k -acodec flac -strict -2 -y $@ # -b:v 8000k -b:a 256k -y $@ %.mp4: %.flv ffmpeg -y -i $< -acodec copy -b:v 8000k $@ RoboterBass.options: RoboterBass.jpeg echo >$@ --background $< --full-range --used-cups-only ILikeFlowers.options: ILikeFlowers.jpeg echo >$@ --background $< --full-range ILikeFlowers.jpeg: background/image-from-rawpixel-id-12043082-jpeg.jpg jpegtran -crop 1788x1080+96+0 $< >$@ # mp3wrap concatenates MP3 files ILikeFlowers.mp3: ILikeFlowers2023-08-17.mp3 # sox -n -c2 -r 44100 /tmp/silence.mp3 trim 0 2.56 sox -n -c2 -r 44100 /tmp/silence.mp3 trim 0 3.584 mp3wrap /tmp/output /tmp/silence.mp3 $< mv /tmp/output_MP3WRAP.mp3 $@ KleinerGrünerKaktus.options: KleinerGrünerKaktus.jpeg echo >$@ --background $< --used-cups-only --full-range KleinerGrünerKaktus.jpeg: KleinerGrünerKaktusHoch.jpeg jpegtran -crop 1920x1080+0+200 $< >$@ KleinerGrünerKaktus.flac: KleinerGrünerKaktusLeise.mp3 sox $< $@ gain -n -3 pad 2.040 LettiSpieluhr.options: LettiSpieluhr.jpeg echo >$@ --background $< --title Die Spieluhr --title-duration 3 --full-range # echo >$@ --background $< --track 1 --track 4 --track 5 --full-range # echo >$@ --background $< --track 4 --track 2 --zerokey 72 --full-range LettiSpieluhr.mp3: LettiSpieluhrLangsam.mp3 sox -n -c2 -r 44100 /tmp/silence.mp3 trim 0 3.0 mp3wrap /tmp/output /tmp/silence.mp3 $< mv /tmp/output_MP3WRAP.mp3 $@ Herbst.options: Herbst.jpeg echo >$@ --background $< # echo >$@ --background $< --title Wenn es Herbst ist --title-duration 3 Herbst.mp3: HerbstOrig.mp3 sox -n -c2 -r 44100 /tmp/silence.mp3 trim 0 2.5 mp3wrap /tmp/output /tmp/silence.mp3 $< mv /tmp/output_MP3WRAP.mp3 $@ HerbstInstrumental.mp4: Herbst.mp4 HerbstInstrumental.mp3 ffmpeg -i Herbst.mp4 -i HerbstInstrumental.mp3 -map 0:0 -map 1:0 -vcodec copy -acodec copy $@ Aschenbrödel.mp3: AschenbrödelEingezählt.mp3 sox -n -c2 -r 44100 /tmp/silence.mp3 trim 0 3.0 mp3wrap /tmp/output /tmp/silence.mp3 $< mv /tmp/output_MP3WRAP.mp3 $@ # https://unix.stackexchange.com/questions/481794/how-shall-i-pass-a-newline-character-to-a-command-in-a-script Aschenbrödel.options: Aschenbrödel.jpeg echo >$@ --background $< --title Drei Haselnüsse␤für Aschenbrödel --title-duration 3 # echo >$@ --title Drei Haselnüsse␤für Aschenbrödel --title-duration 3 # echo >$@ --title '"Drei Haselnüsse\nfür Aschenbrödel"' --title-duration 3 LichterAngezündetLeicht.options: LichterAngezündet.jpeg echo >$@ --background $< --title Sind die Lichter␤angezündet LichterAngezündetFlöte.mp4: LichterAngezündetLeicht.mp4 LichterAngezündetFlöte.mp3 ffmpeg -i LichterAngezündetLeicht.mp4 -i LichterAngezündetFlöte.mp3 -map 0:0 -map 1:0 -vcodec copy -acodec copy $@ LichterAngezündetSchwierig.options: LichterAngezündet.jpeg echo >$@ --background $< --title Sind die Lichter␤angezündet StilleNacht.options: StilleNacht.jpeg echo >$@ --background $< --full-range --used-cups-only --title Stille Nacht,␤heilige Nacht %.ps: %.hp hp2ps -c $< boomwhacker.hp: src/Main.hs cabal run boomwhacker --builddir=/ram/cabal -j3 --ghc-option=-j3 \ --disable-documentation --enable-profiling --enable-library-profiling -- \ --rate 5 RoboterBass.mid /ram/roboter.pdf +RTS -hc # es ist besser Roboter.wav und Roboter.aac gemeinsam in Audacity zu laden play-roboter: pmidi -p 128:0 Roboter.mid & mplayer -quiet Roboter.aac # (sleep 1.23; timidity Roboter.mid) & mplayer -quiet -volume 50 Roboter.aac run-test: update-test runhaskell Setup configure --user --enable-tests runhaskell Setup build runhaskell Setup test apportionment-test --show-details=streaming update-test: doctest-extract-0.1 -i src/ -o test/ --import-tested --executable-main=Main.hs Utility ReadMe.html: ReadMe.md pandoc --standalone $< --output $@ boomwhacker.1: ReadMe.md pandoc --standalone --to man $< --output $@ man: boomwhacker.1 man -l $<