.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 $<
