#!/usr/bin/env bash # render_opl.sh — render tunes through OPL3 FM (authentic Sound Blaster # flavour, no soundfont). Usage: # ./tools/render_opl.sh [tune.mid ...] (default: all midi/*.mid) # OPL_MODEL=4 ./tools/render_opl.sh ... (4 = Apogee/Duke Nukem volumes) # # Volume models: 2 NativeOPL3 (id-style) 3 DMX (Doom, default) # 4 APOGEE (Duke Nukem 3D) 8 AIL 10 HMI set -euo pipefail cd "$(dirname "$0")/.." [ -x tools/opl/render_opl ] || ./tools/opl/build.sh mkdir -p build/opl MODEL="${OPL_MODEL:-3}" files=("$@") if [ ${#files[@]} -eq 0 ]; then files=(midi/*.mid); fi for f in "${files[@]}"; do dur=$(python3 -c " import sys; sys.path.insert(0,'lib') from midikit import read print(read('$f')['duration_sec'] + 3)") out="build/opl/$(basename "${f%.mid}").wav" echo "== $f -> $out (model $MODEL)" ./tools/opl/render_opl "$f" "$out" "$dur" "$MODEL" python3 tools/check_wav.py "$out" "$dur" done