Commit 2a138a00 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Add script to generate a set of test songs for evaluation.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 9b87c34a
- bit error rate evaluation
- use both channels for decoding
- non-blind decoder
- test set (20 songs)
- standard tests (-> mp3, ->ogg, ...)
- refactor fft
- peaq scores
......
......@@ -408,23 +408,63 @@ get_watermark (const string& origfile, const string& infile, const string& orig_
printf ("bit_error_rate %.3f %%\n", double (100.0 * bit_errors) / bits);
}
}
return 0;
}
int
gentest (const string& infile, const string& outfile)
{
printf ("generating test sample from '%s' to '%s'\n", infile.c_str(), outfile.c_str());
WavData wav_data;
if (!wav_data.load (infile))
{
fprintf (stderr, "audiowmark: error loading %s: %s\n", infile.c_str(), wav_data.error_blurb());
return 1;
}
const vector<float>& in_signal = wav_data.samples();
vector<float> out_signal;
int offset = 30 * wav_data.n_channels() * int (wav_data.mix_freq());
int n_samples = 10 * wav_data.n_channels() * int (wav_data.mix_freq());
if (in_signal.size() < (offset + n_samples))
{
fprintf (stderr, "audiowmark: input file %s too short\n", infile.c_str(), wav_data.error_blurb());
return 1;
}
for (size_t i = 0; i < n_samples; i++)
{
out_signal.push_back (in_signal[i + offset]);
}
WavData out_wav_data (out_signal, wav_data.n_channels(), wav_data.mix_freq(), wav_data.bit_depth());
if (!out_wav_data.save (outfile))
{
fprintf (stderr, "audiowmark: error saving %s: %s\n", outfile.c_str(), wav_data.error_blurb());
return 1;
}
return 0;
}
int
main (int argc, char **argv)
{
if (strcmp (argv[1], "add") == 0 && argc == 5)
string op = (argc >= 2) ? argv[1] : "";
if (op == "add" && argc == 5)
{
return add_watermark (argv[2], argv[3], argv[4]);
}
else if (strcmp (argv[1], "get") == 0 && argc == 4)
else if (op == "get" && argc == 4)
{
return get_watermark (argv[2], argv[3], /* no ber */ "");
}
else if (strcmp (argv[1], "cmp") == 0 && argc == 5)
else if (op == "cmp" && argc == 5)
{
return get_watermark (argv[2], argv[3], argv[4]);
}
else if (op == "gentest" && argc == 4)
{
return gentest (argv[2], argv[3]);
}
else
{
fprintf (stderr, "audiowmark: error parsing commandline args\n");
......
#!/bin/bash
seq=1
cat test_list | while read f
do
audiowmark gentest "$f" test/T$(printf "%02d__%s" $seq $(echo $f | sed 's, ,_,g;s,.*/,,g')).wav
((seq++))
done
/home/stefan/files/music/artists/air/2009__love_2/09_sing_sang_sung.flac
/home/stefan/files/music/artists/jamie_cullum/the_pursuit/12_music_is_through.flac
/home/stefan/files/music/artists/gotye/making_mirrors/10 - Giving Me A Chance.flac
/home/stefan/files/music/artists/alice_cooper/the_definitive_alice_cooper/18_how_you_gonna_see_me_now.flac
/home/stefan/files/music/artists/mendelssohn/The Hebrides, Symphonies Nos.1, 4/02 - Symphony No. 1 C minor Op. 11 - Allegro di molto.flac
/home/stefan/files/music/artists/daft_punk/tron_legacy/15 - Solar Sailer.flac
/home/stefan/files/music/artists/depeche_mode/the_singles_81_to_85/09 - Love In Itself.flac
/home/stefan/files/music/artists/beethoven/Klavierkonzerte Nrr.3 & 4 (CD 2)/02 - Klavierkonzert Nr. 3 C-moll - 2. Largo.flac
/home/stefan/files/music/artists/joe_henderson/page_one/05 - Jinrikisha.flac
/home/stefan/files/music/artists/boehse_onkelz/gehasst_verdammt_vergoettert/15_fr_immer.flac
/home/stefan/files/music/artists/dj_bobo/because_of_you/03 - Because Of You (Twister Hard Club - Radio Edit).flac
/home/stefan/files/music/artists/mixed/the_world_of_trance_2/cd1/10 - Nature One - The Sense Of Live (Hurricanmix).flac
/home/stefan/files/music/artists/charles_mingus/Mingus Plays Piano/08 - Meditations for Moses.flac
/home/stefan/files/music/artists/lena/good_news/06 - Mama Told Me.flac
/home/stefan/files/music/artists/scriabin/Horowitz Plays Scriabin/06 - Scriabin - Prelude, Op.11, No.16.flac
/home/stefan/files/music/artists/paniq/beyond_good_and_evil/paniq - Beyond Good and Evil - 02 Tartaros (The Barren Acres of Open Source).flac
/home/stefan/files/music/artists/mixed/Katia Marielle Labeque - Rhapsody in Blue/05 - Strawinsky: Petrushka_Volksfest waehrend der Fastnacht.flac
/home/stefan/files/music/artists/rosenstolz/mondkuss_cd1/09_die_zigarette_danach.flac
/home/stefan/files/music/artists/tears_for_fears/the_collection/03 - Shout.flac
/home/stefan/files/music/artists/duke_ellington/Kings of Swing - Anthology/18 - The Hawk Talks.flac
/home/stefan/files/music/artists/ich__ich/gute_reise__cd_1/09_stein.flac
/home/stefan/files/music/artists/brahms/Double Concerto for Violin and Cello 1 Am Op102/05 - Brahms Double Concerto for Violin and Cello 2 Am Op102 Andante.flac
/home/stefan/files/music/artists/mixed/Katia Marielle Labeque - Rhapsody in Blue/01 - Gershwin: Rhapsody in Blue.flac
/home/stefan/files/music/artists/loreena_mckennitt/collection/04 - Loreena Mckennitt - Caravanserai.flac
/home/stefan/files/music/artists/mumford_and_sons/sigh_no_more/05 - White Blank Page.flac
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment