view tests/test-jams-writer/test-jams-writer.sh @ 269:39fb206b1153 piper-nopiper

Filter out Xing/LAME info frames, rather than letting them go to the mp3 decoder as if they were audio frames. Fixes the 1152-sample zero pad at start of some decoded mp3 files (distinct from decoder delay). The logic here is based on the madplay code.
author Chris Cannam
date Thu, 24 Nov 2016 13:32:04 +0000
parents c17b184c16db
children c9be1a6f7d74
line wrap: on
line source
#!/bin/bash

. ../include.sh

tmpjson=$mypath/tmp_1_$$.json

silentfile=$audiopath/20sec-silence.wav
infile=$audiopath/3clicks8.wav

trap "rm -f $tmpjson" 0

transformdir=$mypath/transforms

mandatory="-w jams"

# First check that the JSON is valid for all outputs

for output in instants curve-oss curve-fsr curve-fsr-timed curve-vsr grid-oss grid-fsr notes-regions; do

    $r -d "$testplug:$output" $mandatory --jams-one-file "$tmpjson" --jams-force "$silentfile" 2>/dev/null || \
	fail "Failed to run for plugin $testplug with output $output"

    check_json "$tmpjson" "test plugin output $output"

done

# If JAMS is installed, we can report on whether the outputs are valid
# JAMS schema files or not -- unfortunately we can't comply with the
# schema for most real plugins, so we can only make indicative reports
# for most. This is such a limited test that we make it optional; it's
# a bit much to expect everyone to have JAMS installed just for
# this. Also the JAMS verifier doesn't currently always work for me
# (e.g. it doesn't seem to work correctly with Python 3 at the moment)
# so let's not make this fatal either.

if jams_to_lab.py --help >/dev/null 2>&1; then

    $r -t "$transformdir/onsets.n3" $mandatory --jams-one-file "$tmpjson" --jams-force "$infile" 2>/dev/null || \
	fail "Failed to run for onsets"

    if ! jams_to_lab.py "$tmpjson" test; then
	echo "WARNING: JAMS schema verification failed for onsets"
    fi
fi

# Now check against expected output, for a subset

for output in instants curve-fsr grid-oss notes-regions; do

    $r -d "$testplug:$output" $mandatory --jams-one-file "$tmpjson" --jams-force "$silentfile" 2>/dev/null || \
	fail "Failed to run for plugin $testplug with output $output"

    expected="$mypath/expected/$output.json"
    jsoncompare "$tmpjson" "$expected" || \
	faildiff "Output differs from expected for $output" "$tmpjson" "$expected"

done

# Test digits option, with an output that has lots of digits to round

for digits in 0 6 2; do

    $r -t "$transformdir/af.n3" $mandatory --jams-digits "$digits" --jams-one-file "$tmpjson" --jams-force "$infile" 2>/dev/null || \
	fail "Failed to run for af with digits = $digits"

    expected="$mypath/expected/af-$digits.json"
    jsoncompare "$tmpjson" "$expected" || \
	faildiff "Output differs from expected for af with digits = $digits" "$tmpjson" "$expected"

done