debian/0000755000000000000000000000000011705237525007175 5ustar debian/source/0000755000000000000000000000000011705237525010475 5ustar debian/source/format0000644000000000000000000000001411705237447011706 0ustar 3.0 (quilt) debian/changelog0000644000000000000000000000602211705237466011053 0ustar quelcom (0.4.0-13) unstable; urgency=low * Convert to dpkg-source 3.0 (quilt) * Standards-version 3.9.2 * Lintian fixes -- Devin Carraway Tue, 17 Jan 2012 01:09:33 -0800 quelcom (0.4.0-12) unstable; urgency=low * 11_info_section.patch: Specify info section in texinfo file * Standards-version 3.7.3 * Use debhelper compatibility v6 * When building, Specify LD_LIBRARY_PATH for dpkg-shlibdeps * 12_qwavsilence_language.patch: Fix word choice in qwavsilence.1 manpage; thanks to A. Costa (Closes: #458992) * 13_gcc4.3-fixes.patch: patch in various missing #includes for gcc 4.3 (Closes: #455144) -- Devin Carraway Thu, 10 Jan 2008 01:46:40 -0800 quelcom (0.4.0-11) unstable; urgency=low * 10_doc_makefile_bashism.patch: Remove a bash-specific glob pattern * Standards-version 3.7.2 * Update FSF address -- Devin Carraway Sat, 29 Jul 2006 13:41:30 -0700 quelcom (0.4.0-10) unstable; urgency=low * Fix EINVAL errors on file creation under 2.6.12 and later kernels caused by new SuSv3 compliancy in mmap() handling of zero-length maps. (Closes: #331651) * changelog Fix FTBFS under old (pre-3.0) gcc/stdc++ versions where stdint.h isn't included by sys/types.h (Closes: #332243) -- Devin Carraway Sun, 9 Oct 2005 03:52:12 -0700 quelcom (0.4.0-9) unstable; urgency=low * Fix FTBFS on LP64 archs with gcc4, e.g. amd64 (Closes: #322896) -- Devin Carraway Sun, 14 Aug 2005 14:06:35 -0700 quelcom (0.4.0-8) unstable; urgency=low * gcc4 ABI rebuild * Fix FTBFS in lib/qwavsample.cc under gcc4 * Standards-Version 3.6.2 -- Devin Carraway Sun, 31 Jul 2005 19:42:16 -0700 quelcom (0.4.0-7) unstable; urgency=low * Standards-Version 3.6.1 -- Devin Carraway Thu, 9 Sep 2004 01:35:54 -0700 quelcom (0.4.0-6) unstable; urgency=low * Change maintainer address * In case the wrapper script fails its exec, don't proceed to show the commandline usage. -- Devin Carraway Sat, 22 Feb 2003 00:03:03 -0800 quelcom (0.4.0-5) unstable; urgency=low * Don't use echo -e, for sake of POSIX/SuS.3 (Closes: #175719) * Move to Standards-Version 3.5.8 -- Devin Carraway Wed, 8 Jan 2003 00:36:53 -0800 quelcom (0.4.0-4) unstable; urgency=low * Endian fixes for MP3 files (Closes: #163828) * Proper $@ argument quoting in wrapper script -- Devin Carraway Sun, 27 Oct 2002 16:52:55 -0800 quelcom (0.4.0-3) unstable; urgency=low * Compile library code as PIC (Closes: #163381) * Endian fixes for WAV files -- Devin Carraway Thu, 10 Oct 2002 03:46:42 -0700 quelcom (0.4.0-2) unstable; urgency=low * Build-depend on texinfo, gettext (Closes: Bug#163114) * gcc3 fixes -- Devin Carraway Wed, 2 Oct 2002 14:32:04 -0700 quelcom (0.4.0-1) unstable; urgency=low * Initial Debianization -- Devin Carraway Tue, 17 Sep 2002 22:32:38 -0700 debian/patches/0000755000000000000000000000000011705237525010624 5ustar debian/patches/12_qwavsilence_language.patch0000644000000000000000000000205410741371553016333 0ustar diff -aruN quelcom-0.4.0.upstream/doc/old.man.pages/qwavsilence.1 quelcom-0.4.0/doc/old.man.pages/qwavsilence.1 --- quelcom-0.4.0.upstream/doc/old.man.pages/qwavsilence.1 2008-01-10 01:33:39.000000000 -0800 +++ quelcom-0.4.0/doc/old.man.pages/qwavsilence.1 2008-01-10 01:33:17.000000000 -0800 @@ -23,7 +23,7 @@ show a brief help and exit. .TP \fB\-S\fR, \fB\-\-shrink\fR -when this option is set, all the silent sequences greater than \fIduration\fR will be shrinked down to \fIduration\fR and the file size truncated accordingly. +when this option is set, all the silent sequences greater than \fIduration\fR will be shrunk down to \fIduration\fR and the file size truncated accordingly. .TP \fB\-t\fR <\fIthreshold\fR>, \fB\-\-threshold\fR=<\fIthreshold\fR> \fIthreshold\fR is a percentage value respect the maximum (absolute) sample value. samples whose value is under the given \fIthreshold\fR are considered silent. for example, a value of 2 means that all samples with absolute value under the 2% will be treated as silent samples. the default value is 0. debian/patches/10_doc_makefile_bashism.patch0000644000000000000000000000061410741357003016247 0ustar diff -aruN quelcom-0.4.0.orig/doc/makefile quelcom-0.4.0/doc/makefile --- quelcom-0.4.0.orig/doc/makefile 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/doc/makefile 2006-07-29 13:09:32.000000000 -0700 @@ -15,7 +15,7 @@ cp quelcom.info $(INFODIR) clean: - rm -f quelcom.{html,info,txt} + rm -f quelcom.html quelcom.info quelcom.txt # installs the deprecated man pages installman: debian/patches/13_gcc4.3-fixes.patch0000644000000000000000000000551010741371553014245 0ustar diff -aruN quelcom-0.4.0_12/bin/qmp3report.cc quelcom-0.4.0/bin/qmp3report.cc --- quelcom-0.4.0_12/bin/qmp3report.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3report.cc 2008-01-10 01:38:14.000000000 -0800 @@ -5,6 +5,8 @@ # include // scandir # include // getcwd # include // errno +# include // strerror, strrchr, strlen +# include // strncasecmp # include "qmp3.hh" # include "qfile.hh" # include "qexception.hh" diff -aruN quelcom-0.4.0_12/bin/qwavheaderdump.cc quelcom-0.4.0/bin/qwavheaderdump.cc --- quelcom-0.4.0_12/bin/qwavheaderdump.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/bin/qwavheaderdump.cc 2008-01-10 01:41:04.000000000 -0800 @@ -1,6 +1,7 @@ # include // getopt # include // u_int16_t, u_int32_t # include // uintptr_t, ISO C99 types +# include // strncpy # include "qfile.hh" # include "qwavheader.hh" # include "qexception.hh" diff -aruN quelcom-0.4.0_12/bin/qwavsilence.cc quelcom-0.4.0/bin/qwavsilence.cc --- quelcom-0.4.0_12/bin/qwavsilence.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/bin/qwavsilence.cc 2008-01-10 01:44:55.000000000 -0800 @@ -1,4 +1,5 @@ # include // getopt +# include // strtod # include "qwav.hh" # include "qwavsample.hh" # include "qexception.hh" diff -aruN quelcom-0.4.0_12/lib/qcuthandler.cc quelcom-0.4.0/lib/qcuthandler.cc --- quelcom-0.4.0_12/lib/qcuthandler.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/lib/qcuthandler.cc 2008-01-10 01:39:44.000000000 -0800 @@ -3,6 +3,7 @@ */ #include +#include // strchr # include "qcuthandler.hh" # include "qmisc.hh" diff -aruN quelcom-0.4.0_12/lib/qtag.cc quelcom-0.4.0/lib/qtag.cc --- quelcom-0.4.0_12/lib/qtag.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/lib/qtag.cc 2008-01-10 01:41:26.000000000 -0800 @@ -3,6 +3,7 @@ */ #include +#include // strncpy # include "qtag.hh" # include "qmisc.hh" diff -aruN quelcom-0.4.0_12/lib/qwavheader.cc quelcom-0.4.0/lib/qwavheader.cc --- quelcom-0.4.0_12/lib/qwavheader.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/lib/qwavheader.cc 2008-01-10 01:42:48.000000000 -0800 @@ -2,6 +2,8 @@ * implementation functions for class qwavheader */ +# include // memmove + # include "qwavheader.hh" # include "qexception.hh" # include "qmisc.hh" diff -aruN quelcom-0.4.0_12/lib/qwavsample.cc quelcom-0.4.0/lib/qwavsample.cc --- quelcom-0.4.0_12/lib/qwavsample.cc 2008-01-10 01:33:58.000000000 -0800 +++ quelcom-0.4.0/lib/qwavsample.cc 2008-01-10 01:43:42.000000000 -0800 @@ -3,6 +3,7 @@ */ # include +# include // abs # include "qwavsample.hh" # include "qexception.hh" # include "endian.hh" debian/patches/03_debugbuild.patch0000644000000000000000000000242107606743462014263 0ustar diff -Nbaur quelcom-0.4.0_02/bin/makefile quelcom-0.4.0/bin/makefile --- quelcom-0.4.0_02/bin/makefile 2002-10-10 02:02:33.000000000 -0700 +++ quelcom-0.4.0/bin/makefile 2002-10-10 02:03:37.000000000 -0700 @@ -13,9 +13,9 @@ # if you don't want to include native language support (=get quelcom messages # in a different language than english) remove -DNLS and -DLOCALEDIR... below # -CXXFLAGS=-DNLS -Wall -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" -DLOCALEDIR=\"$(LOCALEDIR)\" -I./../lib +CXXFLAGS=-g -DNLS -Wall -DVERSION=\"$(VERSION)\" -DPACKAGE=\"$(PACKAGE)\" -DLOCALEDIR=\"$(LOCALEDIR)\" -I./../lib -LDFLAGS=-lm -L./../lib +LDFLAGS=-g -lm -L./../lib $(MP3BINOBJ) $(WAVBINOBJ): %.o: %.cc $(CXX) $(CXXFLAGS) -DAPPNAME=\"$*\" -o $@ -c $< diff -Nbaur quelcom-0.4.0_02/lib/makefile quelcom-0.4.0/lib/makefile --- quelcom-0.4.0_02/lib/makefile 2002-10-10 02:02:33.000000000 -0700 +++ quelcom-0.4.0/lib/makefile 2002-10-10 02:03:46.000000000 -0700 @@ -7,8 +7,8 @@ # if you don't want to include native language support (=get quelcom messages # in a different language than english) remove -DNLS below # -CXXFLAGS=-DNLS -Wall -fPIC -LDFLAGS=-lm +CXXFLAGS=-g -DNLS -Wall -fPIC +LDFLAGS=-g -lm MP3LIB=qmp3 qmp3frameheader qtag qreport MP3LIBSOURCES=$(addsuffix .cc,$(MP3LIB)) debian/patches/00_gcc3-fixes.patch0000644000000000000000000015573107606743462014122 0ustar diff -aru quelcom-0.4.0.pristine/bin/qmp3check.cc quelcom-0.4.0/bin/qmp3check.cc --- quelcom-0.4.0.pristine/bin/qmp3check.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3check.cc 2002-10-02 21:44:43.000000000 -0700 @@ -15,9 +15,9 @@ #endif void usage () { - - cerr.form(_(" %s: check and clean mp3 streams\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << APPNAME << ": " << _("check and clean mp3 streams") << '\n'; + cerr << ' ' << _("syntax") << APPNAME + << ' ' << _("[option]... file...") << '\n'; cerr << _(" -D, --delete: delete invalid frames and garbage. use with care\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -q, --quiet: no output messages\n"); @@ -76,11 +76,12 @@ verbose=true; quiet=false; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -144,8 +145,8 @@ skipped = frame->getMap()-file.getMap(); if (skipped) { if (!quiet) - cerr.form(_("%s: skipped %d bytes of garbage at the beginning\n"), - *argv,skipped); + cerr << *argv << ": " << _("skipped") << ' ' << skipped << ' ' + << _("bytes of garbage at the beginning") << '\n'; total_skipped += skipped; stream_length -= skipped; } @@ -156,8 +157,9 @@ } else if (!quiet) - cerr.form(_("%s: first frame incomplete: %d of %d bytes\n"), - *argv,stream_length,frame->getLength()); + cerr << *argv << ": " << _("first frame incomplete") << ": " + << stream_length << _(" of ") << frame->getLength() + << ' ' << _("bytes") << '\n'; while (stream_length) { @@ -166,10 +168,11 @@ } catch (qexception e) { if (!quiet) - cerr.form(_("%s: %d bytes of garbage at the end"), - *argv,stream_length); + cerr << *argv << ": " << stream_length + << _(" bytes of garbage at the end"); if (verbose) - cerr.form(" (%d..%d)",file.getSize()-stream_length,file.getSize()); + cerr << " (" << file.getSize()-stream_length + << ',' << file.getSize() << ')'; if (!quiet) cerr << endl; total_skipped += stream_length; @@ -179,11 +182,11 @@ if (skipped) { if (!quiet) - cerr.form(_("%s: skipped %d bytes"),*argv,skipped); + cerr << *argv << _(": skipped") << skipped << _(" bytes"); if (verbose) - cerr.form(" (%d..%d)", - clean_block_end-file.getMap()+1, - frame->getMap()-file.getMap()-1); + cerr << " (" << clean_block_end-file.getMap()+1 + << ".." << frame->getMap()-file.getMap()-1 << ')'; + if (!quiet) cerr << endl; @@ -191,15 +194,14 @@ (clean_offset!=file.getMap()-1)) { if (del) { if (!quiet) - cerr.form(_("%s: moving %d bytes"), - *argv, - clean_block_end-clean_block_begin+1); + cerr << *argv << _(": moving ") + << clean_block_end-clean_block_begin+1 + << _(" bytes"); if (verbose) - cerr.form(" (%d..%d) <-- (%d..%d)", - clean_offset-file.getMap()+1, - clean_offset-file.getMap()+1+clean_block_end-clean_block_begin, - clean_block_begin-file.getMap(), - clean_block_end-file.getMap()); + cerr << " (" << clean_offset-file.getMap()+1 + << ".." << clean_offset-file.getMap()+1+clean_block_end-clean_block_begin + << ") <-- (" << clean_block_begin-file.getMap() + << ".." << clean_block_end-file.getMap() << ")"; if (!quiet) cerr << endl; @@ -223,8 +225,9 @@ } else { if (!quiet) - cerr.form(_("%s: last frame (%d+1) truncated: %d of %d bytes\n"), - *argv,frames,stream_length,frame->getLength()); + cerr << *argv << _(": last frame (") << frames << _(") truncated: ") + << stream_length << _(" of ") << frame->getLength() + << _(" bytes\n"); total_skipped += stream_length; stream_length = 0; break; @@ -237,14 +240,13 @@ if (del) { if (!quiet) - cerr.form(_("%s: moving %d bytes"), - *argv,clean_block_end-clean_block_begin+1); - if (verbose) - cerr.form(" (%d..%d) <-- (%d..%d)", - clean_offset-file.getMap()+1, - clean_offset-file.getMap()+1+clean_block_end-clean_block_begin, - clean_block_begin-file.getMap(), - clean_block_end-file.getMap()); + cerr << *argv << _(": moving ") + << clean_block_end-clean_block_begin+1 << _(" bytes"); + if (verbose) + cerr << " (" << clean_offset-file.getMap()+1 + << ".." << clean_offset-file.getMap()+1+clean_block_end-clean_block_begin + << ") <-- (" << clean_block_begin-file.getMap() + << ".." << clean_block_end-file.getMap() << ')'; if (!quiet) cerr << endl; @@ -261,7 +263,7 @@ if (del) { if (delTag) { if (!quiet) - cerr.form(_("%s: skipping tag"),*argv); + cerr << *argv << _(": skipping tag"); if (verbose) cerr << " (" << qtag::LENGTH << " bytes)"; if (!quiet) @@ -274,13 +276,13 @@ (u_int32_t)(tag->getMap()-file.getMap()+qtag::LENGTH-1), (u_int32_t)(clean_offset+1-file.getMap())); if (!quiet) - cerr.form(_("%s: moving tag (%d bytes)"),*argv,qtag::LENGTH); + cerr << *argv << _(": moving tag (") << qtag::LENGTH << ")"; if (verbose) - cerr.form(" (%d..%d) <-- (%d..%d)", - clean_offset-file.getMap()+1, - clean_offset-file.getMap()+1+qtag::LENGTH-1, - tag->getMap()-file.getMap(), - tag->getMap()-file.getMap()+qtag::LENGTH-1); + + cerr << " (" << clean_offset-file.getMap()+1 + << ".." << clean_offset-file.getMap()+1+qtag::LENGTH-1 + << ") <-- (" << tag->getMap()-file.getMap() + << ".." << tag->getMap()-file.getMap()+qtag::LENGTH-1 << ')'; if (!quiet) cerr << endl; } @@ -293,12 +295,12 @@ if (total_skipped) { if (!quiet) - cerr.form(_("%s: %d of %d discardable bytes\n"), - *argv,total_skipped,file.getSize()); + cerr << *argv << ": " << total_skipped << _(" of ") << file.getSize() + << _(" discardable bytes\n"); if (del) { if (!quiet) - cerr.form(_("%s: truncating to %d bytes\n"), - *argv,file.getSize()-total_skipped); + cerr << *argv << _(": truncating to ") << file.getSize()-total_skipped + << _(" bytes\n"); file.truncate(file.getSize()-total_skipped); } } @@ -309,8 +311,8 @@ cerr << mp3 << endl; // quedaria millor la versió 'verbose...' } else - cerr.form(_("%s: %d frames, %d bytes\n"), - *argv,frames,clean_offset-file.getMap()+1); + cerr << *argv << ": " << frames << _(" frames, ") + << clean_offset-file.getMap()+1 << _(" bytes\n"); } if (hasTag) @@ -327,5 +329,5 @@ } while (*++argv); if (error_files && verbose) - cerr.form(_("%d error files found\n"),error_files); + cerr << error_files << _(" error files found\n"); } diff -aru quelcom-0.4.0.pristine/bin/qmp3cut.cc quelcom-0.4.0/bin/qmp3cut.cc --- quelcom-0.4.0.pristine/bin/qmp3cut.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3cut.cc 2002-10-02 21:57:24.000000000 -0700 @@ -11,9 +11,8 @@ #endif void usage () { - - cerr.form(_(" %s: extract and/or delete parts of a mp3 file\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file\n"),APPNAME); + cerr << ' ' << APPNAME << _(": extract and/or delete parts of a mp3 file\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file\n"); cerr << _(" options:\n"); cerr << _(" -B, --set-begin : set the first frame from the beginning of the file\n"); cerr << _(" -b, --set-begin-from-eof : set the first frame from the end of the file\n"); @@ -102,13 +101,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -140,7 +140,7 @@ qmp3 mp3 (infile,mode); if (verbose) - cerr.form(_("scanning '%s'..."),infile.c_str()); + cerr << _("scanning '") << infile << "'..."; mp3.scan(); if (verbose) cerr << "ok." << endl; diff -aru quelcom-0.4.0.pristine/bin/qmp3info.cc quelcom-0.4.0/bin/qmp3info.cc --- quelcom-0.4.0.pristine/bin/qmp3info.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3info.cc 2002-10-02 22:37:01.000000000 -0700 @@ -11,9 +11,8 @@ #endif void usage () { - - cerr.form(_(" %s: show info from mp3 files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << ' ' << APPNAME << _(": show info from mp3 files\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file...\n"); cerr << _(" -c, --check: check the entire stream (slower but accurate)\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -s, --summary-only: show only the summary\n"); @@ -69,13 +68,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -136,15 +136,22 @@ optind++; } - cout.form (_("%u file%c"),files,files>1?'s':0); + cout << files << _(" file") << (files>1?"s":""); if (errors) - cout.form (" (%u error%c)",errors,errors>1?'s':0); - if (verbose) - cout.form (" => %d:%02d.%03d %u frames %u bytes\n", - total_msduration/60000,(total_msduration/1000)%60, - total_msduration%1000,total_frames,total_bytes); - else - cout.form (" => %d:%02d\n", - total_msduration/60000,(total_msduration/1000)%60); - + cout << errors << _(" error") << (errors>1?"s":""); + if (verbose) { + cout << " => " << total_msduration/60000 << ":"; + cout.width(2); + cout.fill('0'); + cout << (total_msduration/1000)%60 << '.'; + cout.width(3); + cout.fill('0'); + cout << total_msduration%1000 << " " << total_frames << " " + << total_bytes << " bytes\n"; + } else { + cout << " => " << total_msduration/60000 << ':'; + cout.width(2); + cout.fill('0'); + cout << (total_msduration/1000)%60 << '\n'; + } } diff -aru quelcom-0.4.0.pristine/bin/qmp3join.cc quelcom-0.4.0/bin/qmp3join.cc --- quelcom-0.4.0.pristine/bin/qmp3join.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3join.cc 2002-10-02 21:56:02.000000000 -0700 @@ -11,9 +11,8 @@ #endif void usage () { - - cerr.form(_(" %s: join mp3 files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file1 file2...\n"),APPNAME); + cerr << ' ' << APPNAME << _(": join mp3 files\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file1 file2...\n"); cerr << _(" -f, --force: force join bypassing bit rate checks\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -o, --output : send output to . otherwise, append to \n"); @@ -68,13 +67,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -95,7 +95,7 @@ if (outfile!="") { mp3 = new qmp3(*argv); if (verbose) - cerr.form(_("copying '%s' to '%s'..."),*argv,outfile.c_str()); + cerr << _(" copying '") << *argv << _("' to '") << outfile << "'..."; mp3->dup(outfile); if (verbose) cerr << "ok." << endl; @@ -106,7 +106,7 @@ mp3 = new qmp3(*argv,qmp3::READWRITE); if (verbose) - cerr.form(_("scanning '%s'..."),mp3->getName().c_str()); + cerr << _("scanning '") << mp3->getName() << "'..."; mp3->scan(); if (verbose) @@ -117,14 +117,14 @@ qmp3 mm(*argv); if (verbose) - cerr.form(_("scanning '%s'..."),mm.getName().c_str()); + cerr << _("scanning '") << mm.getName() << "'..."; mm.scan(); if (verbose) cerr << "ok." << endl; if (verbose) - cerr.form(_("appending '%s' to '%s'..."), - mm.getName().c_str(),mp3->getName().c_str()); + cerr << _("appending '") << mm.getName() << _("' to '") + << mp3->getName() << "'..."; mp3->append(mm,force); if (verbose) cerr << "ok." << endl; diff -aru quelcom-0.4.0.pristine/bin/qmp3report.cc quelcom-0.4.0/bin/qmp3report.cc --- quelcom-0.4.0.pristine/bin/qmp3report.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qmp3report.cc 2002-10-02 21:28:43.000000000 -0700 @@ -11,6 +11,8 @@ # include "qreport.hh" # include "qmisc.hh" +using namespace std; + #ifdef NLS # include # include @@ -30,8 +32,9 @@ void usage () { - cerr.form(_(" %s: generate reports from mp3 files and directories\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << ' ' << APPNAME + << ": generate reports from mp3 files and directories\n"; + cerr << " syntax: " << APPNAME << " [option]... file...\n"; cerr << _(" options:\n"); cerr << _(" -a, --all-files: report all files, not just *.mp3\n"); cerr << _(" -A, --show-all: implies -d, -f, -s\n"); @@ -58,7 +61,7 @@ if (opts.all) { qfile f(filename); if (opts.verbose) - cerr.form (_("reporting file '%s'\n"),filename.c_str()); + cerr << _("reporting file") << " '" << filename << "'\n"; qreport r(f); if (opts.showfiles) { if (opts.html) { @@ -89,7 +92,7 @@ mp3.scan(); } if (opts.verbose) - cerr.form (_("reporting mp3 file '%s'\n"),mp3name.c_str()); + cerr << _("reporting mp3 file") << " '" << mp3name << "'\n"; qreport r(mp3); if (opts.showfiles) { if (opts.html) { @@ -110,13 +113,13 @@ qreport report_directory (string dirname, struct options &opts) { if (opts.verbose) - cerr.form (_("reporting directory '%s'\n"),dirname.c_str()); + cerr << _("reporting directory") << " '" << dirname << "'\n"; qreport dirreport(dirname); if (!opts.recursive) { if (opts.verbose) - cerr.form(_("%s: '%s' is a directory\n"),APPNAME,dirname.c_str()); + cerr << APPNAME << ": '" << dirname << ' ' << _("is a directory") << '\n'; return dirreport; } @@ -125,17 +128,18 @@ ofstream *out; if (opts.split) { if (getcwd(previous_wd,sizeof(previous_wd))==NULL) { - cerr.form(_("cannot get current directory (%s): %s\n"), - dirname.c_str(),strerror(errno)); + cerr << _("cannot get current directory") << " (" + << dirname << "): " << strerror(errno) << '\n'; return dirreport; } if (chdir(dirname.c_str())) { - cerr.form(_("cannot move to dir %s: %s\n"),dirname.c_str(),strerror(errno)); + cerr << _("cannot move to dir") + << dirname << ": " << strerror(errno) << '\n'; return dirreport; } if (getcwd(wd,sizeof(wd))==NULL) { - cerr.form(_("cannot get current directory (%s): %s\n"), - dirname.c_str(),strerror(errno)); + cerr << _("cannot get current directory") + << " (" << dirname << "): " << strerror(errno) << '\n'; return dirreport; } char *index = strrchr(wd,'/'); @@ -150,7 +154,7 @@ outfilename += string(".txt"); if (opts.verbose) - cerr.form(_("opening output file '%s'\n"),outfilename.c_str()); + cerr << _("opening output file") << " '" << outfilename << "'\n"; out = opts.out; opts.out = new ofstream(outfilename.c_str()); @@ -162,7 +166,7 @@ struct dirent **namelist; if ((n = scandir(dirname.c_str(),&namelist,0,alphasort))<0) { - cerr.form(_("%s: cannot scan '%s'\n"),APPNAME,dirname.c_str()); + cerr << APPNAME << ':' << _("cannot scan") << " '" << dirname << "'\n"; return dirreport; } @@ -181,8 +185,9 @@ filepathname = dirname + string("/") + string(namelist[i]->d_name); if (stat(filepathname.c_str(),&filestat)) { - cerr.form(_("%s: error reading '%s' status: %s\n"), - APPNAME,dirname.c_str(),strerror(errno)); + cerr << APPNAME << ": " << _("error reading") + << " '" << dirname << "' status: " + << strerror(errno) << '\n'; continue; } @@ -284,13 +289,14 @@ case 'S': opts.split = true; break; case 'v': opts.verbose = true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -304,12 +310,12 @@ qreport base; - opts.out = new ofstream(1); + opts.out = new ofstream; if (opts.split) opts.out = new ofstream("/dev/null"); else { - opts.out = new ofstream(1); + opts.out = new ofstream; if (opts.html) *opts.out << "\nqmp3report\n\n\n\n"; } @@ -319,8 +325,9 @@ struct stat filestat; if (stat(argv[optind],&filestat)) { - cerr.form(_("%s: error reading '%s' status: %s\n"), - APPNAME,argv[optind],strerror(errno)); + cerr << APPNAME << ": " << _("error reading") << " '" + << argv[optind] << "' " << _("status") << ": " + << strerror(errno) << '\n'; continue; } @@ -358,7 +365,7 @@ cout << base << endl; } else { - base.html(new ofstream(1)); + base.html(new ofstream); cout << "
" << endl; } } diff -aru quelcom-0.4.0.pristine/bin/qwavcut.cc quelcom-0.4.0/bin/qwavcut.cc --- quelcom-0.4.0.pristine/bin/qwavcut.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavcut.cc 2002-10-02 22:26:52.000000000 -0700 @@ -2,6 +2,8 @@ # include "qwav.hh" # include "qexception.hh" +#include + #ifdef NLS # include # include @@ -11,9 +13,8 @@ #endif void usage () { - - cerr.form(_(" %s: extract and/or delete parts of a wav file\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file\n"),APPNAME); + cerr << ' ' << APPNAME << _(": extract and/or delete parts of a wav file\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file\n"); cerr << _(" options:\n"); cerr << _(" -B, --set-begin : set the first sample from the beginning of the file\n"); cerr << _(" -b, --set-begin-from-eof : set the first sample from the end of the file\n"); @@ -102,13 +103,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } diff -aru quelcom-0.4.0.pristine/bin/qwavfade.cc quelcom-0.4.0/bin/qwavfade.cc --- quelcom-0.4.0.pristine/bin/qwavfade.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavfade.cc 2002-10-02 22:19:10.000000000 -0700 @@ -4,6 +4,8 @@ # include "qexception.hh" # include "qmisc.hh" +#include + #ifdef NLS # include # include @@ -14,8 +16,8 @@ void usage () { - cerr.form(_(" %s: fade in/out wav files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << " " << APPNAME << _(": fade in/out wav files\n"); + cerr << " " << _("syntax: ") << APPNAME << _("[option]... file...\n"); cerr << _(" -d, --duration [j|s|m|b|k|M]: set the fade duration\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -i, --in: just fade in\n"); @@ -95,13 +97,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -118,7 +121,7 @@ while (argv[optind]) { if (verbose) - cerr.form(_("fading '%s'...\n"),argv[optind]); + cerr << _("fading '") << argv[optind] << "'...\n"; qwav *wav = new qwav(argv[optind],wavmode); u_int32_t nsamples = wav->getSample(duration); // dins del rang? @@ -142,7 +145,7 @@ wav->cut(h); if (verbose) - cerr.form(_("created testfile '%s'\n"),name.c_str()); + cerr << _("created testfile '") << name << "'\n"; delete wav; wav = new qwav(name,qwav::READWRITE); @@ -157,7 +160,8 @@ } if (verbose) - cerr.form(_("faded in %d samples in '%s'\n"),nsamples,wav->getName().c_str()); + cerr << _("faded in ") << nsamples << _(" samples in '") << wav->getName() + << "'\n"; } delete wav; @@ -176,7 +180,7 @@ wav->cut(h); if (verbose) - cerr.form(_("created testfile '%s'\n"),name.c_str()); + cerr << _("created testfile ") << name << "'\n"; delete wav; wav = new qwav(name,qwav::READWRITE); @@ -191,7 +195,8 @@ } if (verbose) - cerr.form(_("faded out %d samples in '%s'\n"),nsamples,wav->getName().c_str()); + cerr << _("faded out ") << nsamples << _(" samples in '") + << wav->getName() << "'\n"; } optind++; diff -aru quelcom-0.4.0.pristine/bin/qwavheaderdump.cc quelcom-0.4.0/bin/qwavheaderdump.cc --- quelcom-0.4.0.pristine/bin/qwavheaderdump.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavheaderdump.cc 2002-10-02 22:15:01.000000000 -0700 @@ -3,6 +3,12 @@ # include "qfile.hh" # include "qexception.hh" +/* caved in and used C's printf in a few places that don't seem to + * be expressible with ios + */ +#include +#include + #ifdef NLS # include # include @@ -36,8 +42,8 @@ void usage () { - cerr.form(_(" %s: dump (and fix) wav header\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + fprintf(stderr,_(" %s: dump (and fix) wav header\n"),APPNAME); + fprintf(stderr,_(" syntax: %s [option]... file...\n"),APPNAME); cerr << _(" -F, --fix: correct header. use with care\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -q, --quiet: no output messages\n"); @@ -86,13 +92,14 @@ quiet=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -113,8 +120,8 @@ qfile f(argv[optind],openmode); if (f.getSize()riff); + printf("\triff: '%.4s'\n",header->riff); if (strncmp(header->riff,"RIFF",4)) { if (!quiet) - cerr.form(_("\t\triff field should be 'RIFF'\n")); + fprintf(stderr,_("\t\triff field should be 'RIFF'\n")); if (fix) { strncpy(header->riff,"RIFF",4); if (!quiet) @@ -136,10 +143,10 @@ } } - cout.form(_("\triff length: %d\n"),header->rifflength); + printf(_("\triff length: %d\n"),header->rifflength); if (header->rifflength!=f.getSize()-8) { if (!quiet) - cerr.form(_("\t\triff length field should be %d\n"),f.getSize()-8); + fprintf(stderr,_("\t\triff length field should be %d\n"),f.getSize()-8); if (fix) { header->rifflength = f.getSize()-8; if (!quiet) @@ -147,10 +154,10 @@ } } - cout.form("\twave: '%.4s'\n",header->wave); + printf("\twave: '%.4s'\n",header->wave); if (strncmp(header->wave,"WAVE",4)) { if (!quiet) - cerr.form(_("\t\twave field should be 'WAVE'\n")); + fprintf(stderr,_("\t\twave field should be 'WAVE'\n")); if (fix) { strncpy(header->wave,"WAVE",4); if (!quiet) @@ -158,10 +165,10 @@ } } - cout.form("\tfmt: '%.4s'\n",header->fmt_); + printf("\tfmt: '%.4s'\n",header->fmt_); if (strncmp(header->fmt_,"fmt ",4)) { if (!quiet) - cerr.form(_("\t\tfmt field should be 'fmt '\n")); + fprintf(stderr,_("\t\tfmt field should be 'fmt '\n")); if (fix) { strncpy(header->fmt_,"fmt ",4); if (!quiet) @@ -169,10 +176,10 @@ } } - cout.form(_("\tfmt length: %d\n"),header->fmtlength); + printf(_("\tfmt length: %d\n"),header->fmtlength); if (header->fmtlength!=16) { if (!quiet) - cerr.form(_("\t\tfmt length field should be %d\n"),16); + fprintf(stderr,_("\t\tfmt length field should be %d\n"),16); if (fix) { header->fmtlength = 16; if (!quiet) @@ -180,10 +187,10 @@ } } - cout.form("\tformat: %d\n",header->format); + printf("\tformat: %d\n",header->format); if (header->format!=1) { if (!quiet) - cerr.form(_("\t\tformat field should 1 (pcm tag)\n"),16); + fprintf(stderr,_("\t\tformat field should 1 (pcm tag)\n")); if (fix) { header->format = 1; if (!quiet) @@ -191,10 +198,10 @@ } } - cout.form(_("\tchannels: %d\n"),header->channels); + printf(_("\tchannels: %d\n"),header->channels); if (header->channels!=2 && header->channels!=1) { if (!quiet) - cerr.form(_("\t\tchannels field should be 1 (mono) or 2 (stereo)\n")); + fprintf(stderr,_("\t\tchannels field should be 1 (mono) or 2 (stereo)\n")); if (fix) { cerr << _("\t\tdon't know which value must be set...\n") << endl; if (!quiet) @@ -202,33 +209,33 @@ } } - cout.form(_("\tsample rate: %d\n"),header->samplerate); + printf(_("\tsample rate: %d\n"),header->samplerate); if (header->samplerate>48000 || header->samplerate<8000) { if (!quiet) - cerr.form(_("\t\tsample rate field should be between 8000 and 48000\n")); + fprintf(stderr,_("\t\tsample rate field should be between 8000 and 48000\n")); if (fix) cerr << _("\t\tdon't know which value must be set...\n") << endl; } - cout.form(_("\tbytes/second: %d\n"),header->bytespersec); + printf(_("\tbytes/second: %d\n"),header->bytespersec); - cout.form(_("\tbytes/sample: %d\n"),header->bytespersample); + printf(_("\tbytes/sample: %d\n"),header->bytespersample); if (header->bytespersample!=1 && header->bytespersample!=2 && header->bytespersample!=4) { if (!quiet) - cerr.form(_("\t\t bytes/sample field should be 1, 2 or 4\n")); + fprintf(stderr,_("\t\t bytes/sample field should be 1, 2 or 4\n")); if (fix) cerr << _("\t\tdon't know which value must be set...\n") << endl; } - cout.form(_("\tbits/sample: %d\n"),header->bitspersample); + printf(_("\tbits/sample: %d\n"),header->bitspersample); - cout.form("\tdata: '%.4s'\n",header->data); + printf("\tdata: '%.4s'\n",header->data); if (strncmp(header->data,"data",4)) { if (!quiet) - cerr.form(_("\t\tdata field should be 'data'\n")); + fprintf(stderr,_("\t\tdata field should be 'data'\n")); if (fix) { strncpy(header->data,"data",4); if (!quiet) @@ -236,10 +243,10 @@ } } - cout.form(_("\tdata length: %d\n"),header->datalength); + printf(_("\tdata length: %d\n"),header->datalength); if (header->datalength!=f.getSize()-44) { if (!quiet) - cerr.form(_("\t\tdata length field should be %d\n"),f.getSize()-44); + fprintf(stderr,_("\t\tdata length field should be %d\n"),f.getSize()-44); if (fix) { header->datalength = f.getSize()-44; if (!quiet) diff -aru quelcom-0.4.0.pristine/bin/qwavinfo.cc quelcom-0.4.0/bin/qwavinfo.cc --- quelcom-0.4.0.pristine/bin/qwavinfo.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavinfo.cc 2002-10-02 22:23:16.000000000 -0700 @@ -4,6 +4,9 @@ # include "qwav.hh" # include "qexception.hh" +#include +#include + #ifdef NLS # include # include @@ -14,9 +17,8 @@ void usage () { - - cerr.form(_(" %s: show info from wav files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << ' ' << APPNAME << _(": show info from wav files\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file...\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -s, --summary-only: show only the summary\n"); cerr << _(" -v, --verbose: verbose\n"); @@ -66,13 +68,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -124,14 +127,14 @@ optind++; } - cout.form (_("%u file%c"),files,files>1?'s':0); + printf (_("%u file%c"),files,files>1?'s':0); if (errors) - cout.form (" (%u error%c)",errors,errors>1?'s':0); + printf (" (%u error%c)",errors,errors>1?'s':0); if (verbose) - cout.form (_(" => %d:%02d.%03d %u samples %u bytes\n"), + printf (_(" => %d:%02d.%03d %u samples %u bytes\n"), total_msduration/60000,(total_msduration/1000)%60, total_msduration%1000,total_samples,total_bytes); else - cout.form (" => %d:%02d\n", + printf (" => %d:%02d\n", total_msduration/60000,(total_msduration/1000)%60); } diff -aru quelcom-0.4.0.pristine/bin/qwavjoin.cc quelcom-0.4.0/bin/qwavjoin.cc --- quelcom-0.4.0.pristine/bin/qwavjoin.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavjoin.cc 2002-10-02 22:25:34.000000000 -0700 @@ -2,6 +2,8 @@ # include "qwav.hh" # include "qexception.hh" +#include + #ifdef NLS # include # include @@ -12,9 +14,8 @@ void usage () { - - cerr.form(_(" %s: join wav files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file1 file2...\n"),APPNAME); + cerr << ' ' << APPNAME << _(": join wav files\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file1 file2...\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -o, --output : send output to . otherwise, append to \n"); cerr << _(" -v, --verbose: verbose\n"); @@ -64,13 +65,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -91,7 +93,7 @@ if (outfile!="") { wav = new qwav(*argv); if (verbose) - cerr.form(_("copying '%s' to '%s'..."),*argv,outfile.c_str()); + cerr << _("copying '") << *argv << _("' to '") << outfile << "'..."; wav->dup(outfile); if (verbose) cerr << "ok." << endl; @@ -106,8 +108,8 @@ qwav ww(*argv); if (verbose) - cerr.form(_("appending '%s' to '%s'..."), - ww.getName().c_str(),wav->getName().c_str()); + cerr << _("appending '") << ww.getName() << _("' to '") + << wav->getName() << "'..."; wav->append(ww); if (verbose) cerr << "ok." << endl; diff -aru quelcom-0.4.0.pristine/bin/qwavsilence.cc quelcom-0.4.0/bin/qwavsilence.cc --- quelcom-0.4.0.pristine/bin/qwavsilence.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/qwavsilence.cc 2002-10-02 22:21:50.000000000 -0700 @@ -4,6 +4,9 @@ # include "qexception.hh" # include "qmisc.hh" +#include +#include + #ifdef NLS # include # include @@ -14,9 +17,8 @@ void usage () { - - cerr.form(_(" %s: detect and shrink silence sequence in wav files\n"),APPNAME); - cerr.form(_(" syntax: %s [option]... file...\n"),APPNAME); + cerr << ' ' << APPNAME << _(": detect and shrink silence sequence in wav files\n"); + cerr << _(" syntax: ") << APPNAME << _(" [option]... file...\n"); cerr << _(" -d, --duration [j|s|m|b|k|M]: set the minimum silence duration.\n"); cerr << _(" -h, --help: show this help and exit\n"); cerr << _(" -l, --length [[h:]m:]s[.ms]: set the minimum silence duration.\n"); @@ -84,7 +86,7 @@ case 't': temp = strtod(optarg,0); if (temp<0 || temp>100) { - cerr.form(_("%s: threshold must be 0..100 (%d)\n"),APPNAME,temp); + fprintf(stderr,_("%s: threshold must be 0..100 (%d)\n"),APPNAME,(int)temp); return 1; } threshold = (u_int32_t)temp; @@ -93,13 +95,14 @@ verbose=true; break; case 'V': - cerr.form(_("%s - version %s - build %s\n"),APPNAME,VERSION,__DATE__); + cerr << APPNAME << " - " << _("version") << ' ' << VERSION + << _("build") << ' ' << __DATE__ << '\n'; return 0; break; case '?': default: - cerr.form(_("%s: option '%s' is not recognized or bad used\n"), - APPNAME,argv[optind-1]); + cerr << APPNAME << ": " << _("option") << " '" << argv[optind-1] + << "' " << _("is not recognized or bad used") << '\n'; usage(); return 1; } @@ -173,12 +176,12 @@ mssec_end = (1000LL*silent_samples)/wav.getSampleRate(); if (!verbose) - cout.form(_("%s: %d:%02d of silence at %d:%02d\n"), + printf(_("%s: %d:%02d of silence at %d:%02d\n"), argv[optind], mssec_end/60000,(mssec_end/1000)%60, mssec_begin/60000,(mssec_begin/1000)%60); else - cout.form(_("%s: %d:%02d.%03d (%d samples) at %d:%02d:%03d (sample %d)\n"), + printf(_("%s: %d:%02d.%03d (%d samples) at %d:%02d:%03d (sample %d)\n"), argv[optind], mssec_end/60000,(mssec_end/1000)%60,mssec_end%1000, silent_samples, @@ -190,11 +193,11 @@ if (shrink) { u_int32_t shrinkable_samples = silent_samples - duration_samples; - cerr.form(_("shrink %d samples at %d\n"), + fprintf(stderr,_("shrink %d samples at %d\n"), shrinkable_samples,sample_index - shrinkable_samples - 1); if (shrinked_samples) { u_int32_t samples_moved = sample_index-shrinkable_samples-(first_shrinkable_sample+shrinked_samples+1); - cerr.form(_("move %d..%d (%d samples) to %d..%d\n"), + fprintf(stderr,_("move %d..%d (%d samples) to %d..%d\n"), first_shrinkable_sample+shrinked_samples+1, sample_index-shrinkable_samples-1, samples_moved, @@ -232,7 +235,7 @@ else { // sortim del bucle pq s'ha acabat el fitxer... if (shrink && shrinked_samples) { u_int32_t samples_moved = sample_number-(first_shrinkable_sample+shrinked_samples+1); - cerr.form(_("move %d..%d (%d samples) to %d..%d\n"), + fprintf(stderr,_("move %d..%d (%d samples) to %d..%d\n"), first_shrinkable_sample+shrinked_samples+1, sample_number, samples_moved, @@ -247,7 +250,7 @@ if (verbose) { u_int32_t mssec = 1000LL*total_silent_samples/wav.getSampleRate(); - cerr.form(_("%s: total silence reported: %d:%02d.%02d (%d samples)\n"), + fprintf(stderr,_("%s: total silence reported: %d:%02d.%02d (%d samples)\n"), argv[optind],mssec/60000,(mssec/1000)%60,(mssec%1000)/10, total_silent_samples); } @@ -267,5 +270,5 @@ } if (errors) - cout.form ("%u error%c\n",errors,errors>1?'s':0); + printf ("%u error%c\n",errors,errors>1?'s':0); } Only in quelcom-0.4.0/doc: quelcom Only in quelcom-0.4.0.pristine/doc: quelcom.html Only in quelcom-0.4.0.pristine/doc: quelcom.info Only in quelcom-0.4.0.pristine/doc: quelcom.txt diff -aru quelcom-0.4.0.pristine/lib/qcuthandler.cc quelcom-0.4.0/lib/qcuthandler.cc --- quelcom-0.4.0.pristine/lib/qcuthandler.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qcuthandler.cc 2002-10-02 13:24:41.000000000 -0700 @@ -2,6 +2,8 @@ * implementation functions for class qcuthandler */ +#include + # include "qcuthandler.hh" # include "qmisc.hh" # include "qexception.hh" diff -aru quelcom-0.4.0.pristine/lib/qcuthandler.hh quelcom-0.4.0/lib/qcuthandler.hh --- quelcom-0.4.0.pristine/lib/qcuthandler.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qcuthandler.hh 2002-10-02 13:13:42.000000000 -0700 @@ -8,7 +8,9 @@ # include # include "qvf.hh" - + +using namespace std; + /*! * \brief class for file-cut specifications * diff -aru quelcom-0.4.0.pristine/lib/qexception.hh quelcom-0.4.0/lib/qexception.hh --- quelcom-0.4.0.pristine/lib/qexception.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qexception.hh 2002-10-02 13:10:06.000000000 -0700 @@ -5,6 +5,8 @@ # ifndef _qexception_hh_ # define _qexception_hh_ +using namespace std; + #include /*! diff -aru quelcom-0.4.0.pristine/lib/qfile.hh quelcom-0.4.0/lib/qfile.hh --- quelcom-0.4.0.pristine/lib/qfile.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qfile.hh 2002-10-02 13:14:16.000000000 -0700 @@ -9,6 +9,7 @@ # include // struct stat, fstat # include // u_int32_t +using namespace std; /*! * \brief class for mapped files. diff -aru quelcom-0.4.0.pristine/lib/qmisc.cc quelcom-0.4.0/lib/qmisc.cc --- quelcom-0.4.0.pristine/lib/qmisc.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qmisc.cc 2002-10-02 14:23:40.000000000 -0700 @@ -7,7 +7,7 @@ # include # include # include "qexception.hh" -# include +# include # include #ifdef NLS diff -aru quelcom-0.4.0.pristine/lib/qmp3.cc quelcom-0.4.0/lib/qmp3.cc --- quelcom-0.4.0.pristine/lib/qmp3.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qmp3.cc 2002-10-02 13:55:01.000000000 -0700 @@ -2,6 +2,10 @@ * implementation functions for class qmp3 */ +using namespace std; + +#include + # include "qmp3.hh" # include "qexception.hh" # include "qmisc.hh" @@ -67,7 +71,7 @@ } -qmp3::qmp3(string name, u_int32_t flags=READ) +qmp3::qmp3(string name, u_int32_t flags) : qfile (name,flags), qmp3frameheader (qfile::getMap()), qtag (qfile::getMap()+getSize()-qtag::LENGTH) { @@ -114,7 +118,7 @@ return false; } -u_int32_t qmp3::scan (u_int32_t bufsize=0) { +u_int32_t qmp3::scan (u_int32_t bufsize) { if (!bufsize) bufsize = getStreamLength(); @@ -178,8 +182,13 @@ *os << "[vbr]"; msduration = getMsDuration(); - os->form(" %d:%02d.%03d ", - msduration/60000,(msduration/1000)%60,msduration%1000); + *os << " " << msduration/60000 << ":"; + os->width(2); + os->fill('0'); + *os << (msduration/1000)%60 << '.'; + os->width(3); + os->fill('0'); + *os << msduration%1000 << " "; if (hasTag) this->qtag::print(os); diff -aru quelcom-0.4.0.pristine/lib/qmp3.hh quelcom-0.4.0/lib/qmp3.hh --- quelcom-0.4.0.pristine/lib/qmp3.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qmp3.hh 2002-10-02 13:27:05.000000000 -0700 @@ -5,6 +5,8 @@ # ifndef _qmp3_hh_ # define _qmp3_hh_ +using namespace std; + # include # include "qfile.hh" diff -aru quelcom-0.4.0.pristine/lib/qmp3frameheader.hh quelcom-0.4.0/lib/qmp3frameheader.hh --- quelcom-0.4.0.pristine/lib/qmp3frameheader.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qmp3frameheader.hh 2002-10-02 13:55:25.000000000 -0700 @@ -7,6 +7,9 @@ # include # include +# include + +using namespace std; /*! * \brief class for mp3 frame headers diff -aru quelcom-0.4.0.pristine/lib/qreport.cc quelcom-0.4.0/lib/qreport.cc --- quelcom-0.4.0.pristine/lib/qreport.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qreport.cc 2002-10-02 14:12:55.000000000 -0700 @@ -165,7 +165,18 @@ // if (msduration>0) { // no ho deixis així!!!! int dur = msduration; - os->form("%3d:%02d:%02d",dur/3600000,(dur%3600000)/60000,(dur%60000)/1000); + + os->width(3); + os->fill('0'); + *os << dur/3600000 << ':'; + os->width(2); + os->fill('0'); + *os << (dur%3600000) << ':'; + os->width(2); + os->fill('0'); + *os << (dur%60000)/1000; + +// os->form("%3d:%02d:%02d",dur/3600000,(dur%3600000)/60000,(dur%60000)/1000); // } // else // *os << " "; @@ -176,7 +187,9 @@ case 0: *os << " "; break; case (u_int32_t)(-1): *os << " [vbr] "; break; default: - os->form("%3d kbps",bitrate); + os->width(3); + *os << bitrate << " kbps"; +// os->form("%3d kbps",bitrate); } *os << " - "; @@ -190,7 +203,9 @@ */ // if (size>0) - os->form("%4.2f Mb",(double)size/(1024*1024)); + os->precision(2); + *os << (double)size/(1024*1024) << " Mb"; +// os->form("%4.2f Mb",(double)size/(1024*1024)); // else // *os << " "; @@ -233,11 +248,15 @@ *os << "" << name << ": "; else */ - os->form("%-64s",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s",name.c_str()); break; case MP3: // *os << "bliblablo"; - os->form("%-64s",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s",name.c_str()); break; case DIR: /* @@ -245,10 +264,14 @@ *os << "" << name << ": "; else */ - os->form("%-64s ",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s ",name.c_str()); if (directories>1) // other than itself *os << directories-1 << _(" directories "); - os->form("%3d file%c ",files,(files==1)?' ':'s'); + os->width(3); + *os << files << " file" << (files==1)?' ' : 's'; +// os->form("%3d file%c ",files,(files==1)?' ':'s'); break; } @@ -265,7 +288,17 @@ // if (msduration>0) { // no ho deixis així!!!! int dur = msduration; - os->form("%3d:%02d:%02d",dur/3600000,(dur%3600000)/60000,(dur%60000)/1000); + + os->width(3); + os->fill('0'); + *os << dur/3600000 << ':'; + os->width(2); + os->fill('0'); + *os << (dur%3600000) << ':'; + os->width(2); + os->fill('0'); + *os << (dur%60000)/1000; + //os->form("%3d:%02d:%02d",dur/3600000,(dur%3600000)/60000,(dur%60000)/1000); // } // else // *os << " "; @@ -277,7 +310,9 @@ case 0: *os << " "; break; case (u_int32_t)(-1): *os << " [vbr] "; break; default: - os->form("%3d kbps",bitrate); + os->width(3); + *os << bitrate << " kbps"; +// os->form("%3d kbps",bitrate); } *os << " - "; @@ -291,7 +326,9 @@ */ // if (size>0) - os->form("%4.2f Mb",(double)size/(1024*1024)); + os->precision(2); + *os << (double)size/(1024*1024) << " Mb"; +// os->form("%4.2f Mb",(double)size/(1024*1024)); // else // *os << " "; @@ -328,11 +365,15 @@ *os << "" << name << ": "; else */ - os->form("%-64s",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s",name.c_str()); break; case MP3: // *os << "bliblablo"; - os->form("%-64s",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s",name.c_str()); break; case DIR: /* @@ -340,10 +381,14 @@ *os << "" << name << ": "; else */ - os->form("%-64s ",name.c_str()); + os->width(64); + *os << name; +// os->form("%-64s ",name.c_str()); if (directories>1) // other than itself *os << directories-1 << _(" directories "); - os->form("%3d file%c ",files,(files==1)?' ':'s'); + os->width(3); + *os << files << " file" << (files==1)?' ':'s'; +// os->form("%3d file%c ",files,(files==1)?' ':'s'); break; } diff -aru quelcom-0.4.0.pristine/lib/qreport.hh quelcom-0.4.0/lib/qreport.hh --- quelcom-0.4.0.pristine/lib/qreport.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qreport.hh 2002-10-02 13:13:23.000000000 -0700 @@ -11,6 +11,7 @@ # include "qfile.hh" # include "qmp3.hh" +using namespace std; class qreport { diff -aru quelcom-0.4.0.pristine/lib/qtag.cc quelcom-0.4.0/lib/qtag.cc --- quelcom-0.4.0.pristine/lib/qtag.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qtag.cc 2002-10-02 13:58:28.000000000 -0700 @@ -2,6 +2,8 @@ * implementation functions for class qtag */ +#include + # include "qtag.hh" # include "qmisc.hh" # include "qexception.hh" @@ -118,8 +120,13 @@ void qtag::print (ostream *os) { - - os->form ("%-0.30s - %-0.30s - %-0.30s",tag->artist,tag->album,tag->title); + os->width(30); + *os << tag->artist << " - "; + os->width(30); + *os << tag->album << " - "; + os->width(30); + *os << tag->title; +// os->form ("%-0.30s - %-0.30s - %-0.30s",tag->artist,tag->album,tag->title); } diff -aru quelcom-0.4.0.pristine/lib/qtag.hh quelcom-0.4.0/lib/qtag.hh --- quelcom-0.4.0.pristine/lib/qtag.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qtag.hh 2002-10-02 13:14:09.000000000 -0700 @@ -8,6 +8,7 @@ # include "qfile.hh" # include +using namespace std; /*! * \brief class for mp3 tags diff -aru quelcom-0.4.0.pristine/lib/qvf.cc quelcom-0.4.0/lib/qvf.cc --- quelcom-0.4.0.pristine/lib/qvf.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qvf.cc 2002-10-02 14:54:37.000000000 -0700 @@ -4,6 +4,8 @@ # include // sscanf +using namespace std; + #ifdef NLS # include # include @@ -54,7 +56,7 @@ } -qvf::qvf(u_int32_t v, enum format f=SPECIFIC):value(v),format(f) { } +qvf::qvf(u_int32_t v, enum format f):value(v),format(f) { } qvf::qvf(char *s) { diff -aru quelcom-0.4.0.pristine/lib/qvf.hh quelcom-0.4.0/lib/qvf.hh --- quelcom-0.4.0.pristine/lib/qvf.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qvf.hh 2002-10-02 14:54:39.000000000 -0700 @@ -5,9 +5,10 @@ # ifndef _qvf_hh_ # define _qvf_hh_ -# include // ostream +# include // ostream # include +using namespace std; /*! \class qvf * \brief class for value-format pairs. @@ -89,7 +90,7 @@ * \param v the value * \param f the format */ - void set (unsigned int v, enum format f=SPECIFIC); + void set (unsigned int v, enum format f); /*! \fn void print (ostream *os) * \brief print the vf characteristics on the given output stream diff -aru quelcom-0.4.0.pristine/lib/qwav.cc quelcom-0.4.0/lib/qwav.cc --- quelcom-0.4.0.pristine/lib/qwav.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qwav.cc 2002-10-02 15:01:52.000000000 -0700 @@ -2,6 +2,8 @@ * implementation functions for class qwav */ +#include + # include "qwav.hh" # include "qexception.hh" @@ -37,16 +39,28 @@ msduration = getMsDuration(); // cal posar les milèssimes? + *os << getName() << ": " << getSampleRate() << " Hz " + << getBitsPerSample() << " bits " + << ((getChannels()==1)?"mono":"stereo") << ' '; + os->width(2); + *os << msduration/60000 << ':'; + os->width(2); + os->fill('0'); + *os << (msduration/1000)%60 << '.'; + os->width(2); + os->fill('0'); + *os << (msduration%1000)/10; + /* os->form("%s: %u Hz %u bits %s %2u:%02u.%02u", getName().c_str(), getSampleRate(),getBitsPerSample(), ((getChannels()==1)?"mono":"stereo"), msduration/60000,(msduration/1000)%60,(msduration%1000)/10); - + */ } -qwav::qwav(string name, u_int32_t flags=READ) +qwav::qwav(string name, u_int32_t flags) : qfile (name,flags), qwavheader(getMap(),getSize()) { diff -aru quelcom-0.4.0.pristine/lib/qwavheader.cc quelcom-0.4.0/lib/qwavheader.cc --- quelcom-0.4.0.pristine/lib/qwavheader.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qwavheader.cc 2002-10-02 14:17:31.000000000 -0700 @@ -18,7 +18,7 @@ const u_int32_t qwavheader::HEADERSIZE = sizeof(struct header); -qwavheader::qwavheader (caddr_t p, u_int32_t wavlength=0) { +qwavheader::qwavheader (caddr_t p, u_int32_t wavlength) { header = (struct header *)p; diff -aru quelcom-0.4.0.pristine/lib/qwavsample.cc quelcom-0.4.0/lib/qwavsample.cc --- quelcom-0.4.0.pristine/lib/qwavsample.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qwavsample.cc 2002-10-02 14:22:46.000000000 -0700 @@ -21,7 +21,7 @@ #endif -qwavsample::qwavsample (qwav *wav, u_int32_t s=1) { +qwavsample::qwavsample (qwav *wav, u_int32_t s) { sample = (union sample*) (wav->getMap()+wav->getOffset(s)); @@ -88,7 +88,7 @@ } -qwavsample::qwavsample(caddr_t pointer, enum type t=STEREO16) { +qwavsample::qwavsample(caddr_t pointer, enum type t) { sample = (union sample*) pointer; type = t; @@ -119,7 +119,7 @@ throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } -void qwavsample::set(int left, int right=0) { +void qwavsample::set(int left, int right) { switch (type) { case MONO8: sample->mono8=left; break; @@ -131,7 +131,7 @@ } } -bool qwavsample::isSilence(u_int32_t threshold=0) { +bool qwavsample::isSilence(u_int32_t threshold) { switch (type) { case MONO8: return (u_int32_t)abs(sample->mono8)<=threshold; @@ -173,10 +173,15 @@ void qwavsample::print(ostream &os) { switch (type) { - case MONO8: os.form("(%d)",sample->mono8); break; - case MONO16: os.form("(%d)",sample->mono16); break; - case STEREO8: os.form("(%d,%d)",sample->stereo8.left,sample->stereo8.right); break; - case STEREO16: os.form("(%d,%d)",sample->stereo16.left,sample->stereo16.right); break; + case MONO8: os << '(' << sample->mono8 << ')'; break; + case MONO16: os << '(' << sample->mono16 << ')'; break; + case STEREO8: + os << '(' << sample->stereo8.left << ',' << sample->stereo8.right << ')'; + break; + case STEREO16: + os << '(' << sample->stereo16.left << ',' << sample->stereo16.right << ')'; + break; + default: throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } Only in quelcom-0.4.0.pristine/po: ca.mo Only in quelcom-0.4.0.pristine/po: es.mo debian/patches/04_wavheader-endian.patch0000644000000000000000000001426207606743462015366 0ustar diff -Nbaur quelcom-0.4.0_03/lib/endian.hh quelcom-0.4.0/lib/endian.hh --- quelcom-0.4.0_03/lib/endian.hh 1969-12-31 16:00:00.000000000 -0800 +++ quelcom-0.4.0/lib/endian.hh 2002-10-11 02:26:29.000000000 -0700 @@ -0,0 +1,36 @@ +#ifndef _endian_hh_ +#define _endian_hh_ + +/* quick and dirty endian conversion macros; applicable on big-endian + * architectures. This works okay on big- and little-endian machines, but + * not on middle-endian ones, should the "Linux on PDP-11" thing ever get + * past the April Fool's stage. + */ + +#if __BYTE_ORDER == __BIG_ENDIAN + +static inline u_int16_t letohs(u_int16_t n) { return (n<<8)|(n>>8); } +static inline u_int32_t letohl(u_int32_t n) { + return (n<<24) | ((n&0xff00)<<8) | ((n&0xff0000)>>8) | (n>>24); +} +static inline u_int16_t htoles(u_int16_t n) { return letohs(n); } +static inline u_int32_t htolel(u_int32_t n) { return letohl(n); } + +static inline int16_t letohs_s(int16_t n) { + unsigned char *p = (unsigned char *)&n, tmp; + tmp = p[0]; p[0] = p[1]; p[1] = tmp; + return n; +} +static inline int16_t htoles_s(int16_t n) { return letohs_s(n); } +#elif __BYTE_ORDER == __LITTLE_ENDIAN +static inline u_int16_t letohs(u_int16_t n) { return n; } +static inline u_int32_t letohl(u_int32_t n) { return n; } +static inline u_int16_t htoles(u_int16_t n) { return n; } +static inline u_int32_t htolel(u_int32_t n) { return n; } + +static inline int16_t letohs_s(int16_t n) { return n; } +static inline int16_t htoles_s(int16_t n) { return n; } +#endif + +#endif + diff -Nbaur quelcom-0.4.0_03/lib/qwav.hh quelcom-0.4.0/lib/qwav.hh --- quelcom-0.4.0_03/lib/qwav.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qwav.hh 2002-10-11 02:26:54.000000000 -0700 @@ -28,6 +28,14 @@ qwav (string filename, u_int32_t flags = READ); /*! + * copy constructor, ensuring that both the qfile and qwavheader + * superclasses get copied (qwavheader needs a deep copy) + */ + qwav(const qwav &w) + :qfile(w),qwavheader(w) + {} + + /*! * \brief compares both wavs whether they're compatible or not * \param wav the wav to check for compatibility * \return whether compatible or not diff -Nbaur quelcom-0.4.0_03/lib/qwavheader.cc quelcom-0.4.0/lib/qwavheader.cc --- quelcom-0.4.0_03/lib/qwavheader.cc 2002-10-11 02:24:55.000000000 -0700 +++ quelcom-0.4.0/lib/qwavheader.cc 2002-10-11 02:46:54.000000000 -0700 @@ -5,6 +5,7 @@ # include "qwavheader.hh" # include "qexception.hh" # include "qmisc.hh" +# include "endian.hh" #ifdef NLS # include @@ -15,12 +16,13 @@ #endif -const u_int32_t qwavheader::HEADERSIZE = sizeof(struct header); +const u_int32_t qwavheader::HEADERSIZE = sizeof(struct wavheader); qwavheader::qwavheader (caddr_t p, u_int32_t wavlength) { - header = (struct header *)p; + header = new wavheader(p); + mappedheader = (struct wavheader *)p; valid(); @@ -28,10 +30,14 @@ validLength(wavlength); } +qwavheader::~qwavheader() +{ + delete header; +} void qwavheader::remap(caddr_t p) { - - header = (struct header*)p; + mappedheader = (struct wavheader *)p; + header->headerCopy(p); } @@ -41,6 +47,9 @@ header->datalength = n*header->bytespersample; header->rifflength = header->datalength+36; + mappedheader->datalength = htolel(header->datalength); + mappedheader->rifflength = htolel(header->rifflength); + #ifdef QVERBOSE cerr << "sample number set to " << n << endl; #endif @@ -70,12 +79,6 @@ } -void qwavheader::write(caddr_t p) { - - memmove(p,header,HEADERSIZE); -} - - bool qwavheader::valid () { if (!strcmpn(header->riff,"RIFF",4) || @@ -164,4 +167,20 @@ u_int32_t qwavheader::getBytesPerSample() { return header->bytespersample; } bool qwavheader::getStereo() { return header->channels==2; } +void qwavheader::wavheader::headerCopy(caddr_t p) +{ + memmove(this, p, HEADERSIZE); + +#if __BYTE_ORDER != __LITTLE_ENDIAN + rifflength = letohl(rifflength); + fmtlength = letohl(fmtlength); + format = letohs(format); + channels = letohs(channels); + samplerate = letohl(samplerate); + bytespersec = letohl(bytespersec); + bytespersample = letohs(bytespersample); + bitspersample = letohs(bitspersample); + datalength = letohl(datalength); +#endif +} diff -Nbaur quelcom-0.4.0_03/lib/qwavheader.hh quelcom-0.4.0/lib/qwavheader.hh --- quelcom-0.4.0_03/lib/qwavheader.hh 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qwavheader.hh 2002-10-11 02:28:57.000000000 -0700 @@ -20,9 +20,11 @@ /*! * \brief struct for wav headers * - * this struct is defined to match exactly with a 'canonical' wav header with no change on a little-endian machine + * this struct is defined to match exactly with a 'canonical' wav header with no + * change on a little-endian machine; on other architectures the alignment will + * match but int values will need conversion */ - struct header { + struct wavheader { // riff chunk char riff[4]; /*!< should be 'RIFF' */ @@ -41,10 +43,19 @@ char data[4]; /*!< should be 'data' */ u_int32_t datalength; /*!< data block length (file size - 44) */ - }; + + wavheader(caddr_t p) { headerCopy(p); } + + /*! + * Copies WAV header from little-endian to host order + * \param p the memory address where the header is located + * \param nativeendian whether the struct is already in native byte ordering + */ + void headerCopy(caddr_t p); + } __attribute__ ((__packed__)); //! pointer to the header (memory location where it is located) - struct header *header; + wavheader *header, *mappedheader; public: @@ -58,6 +69,15 @@ */ qwavheader (caddr_t p, u_int32_t length=0); + /*! deep-copy */ + qwavheader (const qwavheader& qwh) + :header(new wavheader(*qwh.header)), mappedheader(qwh.mappedheader) {} + + /*! + * releases storage allocated for header + */ + ~qwavheader(); + /*! * \brief gets the number of samples * \return the number of samples @@ -147,11 +167,6 @@ * \return whether is valid or not */ bool validLength(u_int32_t length); - /*! - * \brief write (copy) the header to the given address - * \param a the memory address where to write the header - */ - void write(caddr_t ); }; # endif debian/patches/06_wavsample-endian.patch0000644000000000000000000001056510322171174015403 0ustar diff -aruN quelcom-0.4.0.orig/lib/qwavsample.cc quelcom-0.4.0/lib/qwavsample.cc --- quelcom-0.4.0.orig/lib/qwavsample.cc 2005-10-09 03:23:24.000000000 -0700 +++ quelcom-0.4.0/lib/qwavsample.cc 2005-10-09 03:28:37.000000000 -0700 @@ -2,9 +2,10 @@ * implementation functions for class qsample */ +# include # include "qwavsample.hh" # include "qexception.hh" - +# include "endian.hh" #ifdef NLS # include @@ -26,6 +27,9 @@ sample = (union sample*) (wav->getMap()+wav->getOffset(s)); if (wav->getBitsPerSample()==16) { + if ((uintptr_t)sample % sizeof(int16_t) != 0) + throw qexception(__PRETTY_FUNCTION__, _("misaligned 16-bit sample")); + if (wav->getChannels()==2) { type = STEREO16; } @@ -60,6 +64,8 @@ sample = (union sample*) pointer; if (bitspersample==16) { + if ((uintptr_t)sample % sizeof(int16_t) != 0) + throw qexception(__PRETTY_FUNCTION__, _("misaligned 16-bit sample")); if (channels==2) { type = STEREO16; return; @@ -99,9 +105,9 @@ switch (type) { case MONO8: return sample->mono8; - case MONO16: return sample->mono16; + case MONO16: return letohs_s(sample->mono16); case STEREO8: return sample->stereo8.left; - case STEREO16: return sample->stereo16.left; + case STEREO16: return letohs_s(sample->stereo16.left); } throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); @@ -112,9 +118,9 @@ switch (type) { case MONO8: return sample->mono8; - case MONO16: return sample->mono16; + case MONO16: return letohs_s(sample->mono16); case STEREO8: return sample->stereo8.right; - case STEREO16: return sample->stereo16.right; + case STEREO16: return letohs_s(sample->stereo16.right); } throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } @@ -123,9 +129,9 @@ switch (type) { case MONO8: sample->mono8=left; break; - case MONO16: sample->mono16=left; break; + case MONO16: sample->mono16=htoles_s(left); break; case STEREO8: sample->stereo8.left=left;sample->stereo8.right=right; break; - case STEREO16: sample->stereo16.left=left;sample->stereo16.right=right; break; + case STEREO16: sample->stereo16.left=htoles_s(left);sample->stereo16.right=htoles_s(right); break; default: throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } @@ -135,13 +141,13 @@ switch (type) { case MONO8: return (u_int32_t)abs(sample->mono8)<=threshold; - case MONO16: return (u_int32_t)abs(sample->mono16)<=threshold; + case MONO16: return (u_int32_t)abs(letohs_s(sample->mono16))<=threshold; case STEREO8: return ((u_int32_t)abs(sample->stereo8.left)<=threshold) && ((u_int32_t)abs(sample->stereo8.right)<=threshold); case STEREO16: - return ((u_int32_t)abs(sample->stereo16.left)<=threshold) && - ((u_int32_t)abs(sample->stereo16.right)<=threshold); + return ((u_int32_t)abs(letohs_s(sample->stereo16.left))<=threshold) && + ((u_int32_t)abs(letohs_s(sample->stereo16.right))<=threshold); } throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } @@ -174,12 +180,12 @@ switch (type) { case MONO8: os << '(' << sample->mono8 << ')'; break; - case MONO16: os << '(' << sample->mono16 << ')'; break; + case MONO16: os << '(' << letohs_s(sample->mono16) << ')'; break; case STEREO8: os << '(' << sample->stereo8.left << ',' << sample->stereo8.right << ')'; break; case STEREO16: - os << '(' << sample->stereo16.left << ',' << sample->stereo16.right << ')'; + os << '(' << letohs_s(sample->stereo16.left) << ',' << letohs_s(sample->stereo16.right) << ')'; break; default: @@ -189,12 +195,16 @@ void qwavsample::prod(double d) { - switch (type) { case MONO8: sample->mono8*=d; break; - case MONO16: sample->mono16*=d; break; + case MONO16: + sample->mono16 = htoles_s(short(letohs_s(sample->mono16)*d)); + break; case STEREO8: sample->stereo8.left*=d; sample->stereo8.right*=d; break; - case STEREO16: sample->stereo16.left*=d; sample->stereo16.right*=d; break; + case STEREO16: + sample->stereo16.left = htoles_s(short(letohs_s(sample->stereo16.left)*d)); + sample->stereo16.right = htoles_s(short(letohs_s(sample->stereo16.right)*d)); + break; default: throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } debian/patches/09_zerolengthmmap-fix.patch0000644000000000000000000001137110322163460015766 0ustar diff -aruN quelcom-0.4.0.orig/lib/qfile.cc quelcom-0.4.0/lib/qfile.cc --- quelcom-0.4.0.orig/lib/qfile.cc 2005-10-09 02:05:49.000000000 -0700 +++ quelcom-0.4.0/lib/qfile.cc 2005-10-09 02:29:48.000000000 -0700 @@ -35,7 +35,9 @@ const u_int32_t qfile::NEW = qfile::READWRITE|qfile::TRUNCATE|O_CREAT; -qfile::qfile(string filename, u_int32_t f) { +qfile::qfile(string filename, u_int32_t f) +:map(NULL) +{ name = filename; flags = f; @@ -62,11 +64,19 @@ size = stat.st_size; - if ((map=(caddr_t)mmap((caddr_t)0,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) { - close(fd); - throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + /* Concerning the length argument to mmap(), the SuSv3 specification + * document states "If len is zero, mmap() shall fail and no mapping shall + * be established." As of v2.6.12, the Linux kernel returns MAP_FAILED when + * a zero length argument is given; prior versions returned NULL. To + * accomodate the possibility of a qfile instantiated on a zero-length file, + * mmap() calls are avoided and the pointer left NULL. + */ + if (size>0) { + if ((map=(caddr_t)mmap((caddr_t)0,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) { + close(fd); + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + } } - #ifdef QVERBOSE cerr << "file '" << *this << "' successfully mapped at address " << (void*)getMap() << endl; #endif @@ -76,15 +86,16 @@ qfile::~qfile() { // munmap always gives an error when unmapping empty files... - if (size>0) + if (size>0 && map!=NULL) if (munmap(map,size)) throw qexception(__PRETTY_FUNCTION__,strerror(errno)); - if (close(fd)) + if (fd>=0) + if (close(fd)) #ifdef QVERBOSE - cerr << getName() << ": altre cop el close" << endl; + cerr << getName() << ": altre cop el close" << endl; #else - ; + ; #endif } @@ -94,16 +105,19 @@ if (newsize>=size) return size; - if (munmap(map,size)) - throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + if (map!=NULL && size>0) + if (munmap(map,size)) + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + map = NULL; if (ftruncate(fd,newsize)) throw qexception(__PRETTY_FUNCTION__,strerror(errno)); size = newsize; - if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) - throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + if (size>0) + if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); return size; } @@ -124,6 +138,9 @@ if (end>size) end = size; + if (size==0 || map==NULL) + return 0; + if (dest+end-start+1>size) end = start+(size-dest)-1; @@ -137,7 +154,7 @@ u_int32_t qfile::cut (u_int32_t start, u_int32_t end) { - if (start>size) + if (start>size || size==0) return size; if (end0) + if (munmap(map,size)) + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + map = NULL; + if (lseek(fd,0,SEEK_END)==-1) throw qexception(__PRETTY_FUNCTION__,strerror(errno)); @@ -169,8 +188,9 @@ size += f.getSize(); - if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) - throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + if (size>0) + if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); return size; } @@ -211,9 +231,10 @@ u_int32_t qfile::append (caddr_t pointer, u_int32_t appsize) { - if (size) + if (map!=NULL && size>0) if (munmap(map,size)) throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + map = NULL; if (lseek(fd,0,SEEK_END)==-1) throw qexception(__PRETTY_FUNCTION__,strerror(errno)); @@ -223,8 +244,9 @@ size += appsize; - if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) - throw qexception(__PRETTY_FUNCTION__,strerror(errno)); + if (size>0) + if ((map=(caddr_t)mmap(map,size,mapflags,MAP_SHARED,fd,0))==MAP_FAILED) + throw qexception(__PRETTY_FUNCTION__,strerror(errno)); return size; } @@ -237,8 +259,9 @@ if ((newfd=creat(newname.c_str(),CREATION_MASK))==-1) throw qexception(__PRETTY_FUNCTION__,newname+string(strerror(errno))); - if (write(newfd,getMap(),getSize())!=(int)getSize()) - throw qexception(__PRETTY_FUNCTION__,newname+string(strerror(errno))); + if (getMap() != NULL && getSize() > 0) + if (write(newfd,getMap(),getSize())!=(int)getSize()) + throw qexception(__PRETTY_FUNCTION__,newname+string(strerror(errno))); close (newfd); debian/patches/05_wavheaderdump-endian.patch0000644000000000000000000001241510322171174016233 0ustar diff -aruN quelcom-0.4.0.orig/bin/qwavheaderdump.cc quelcom-0.4.0/bin/qwavheaderdump.cc --- quelcom-0.4.0.orig/bin/qwavheaderdump.cc 2005-10-09 03:24:10.000000000 -0700 +++ quelcom-0.4.0/bin/qwavheaderdump.cc 2005-10-09 03:24:33.000000000 -0700 @@ -1,7 +1,10 @@ # include // getopt # include // u_int16_t, u_int32_t +# include // uintptr_t, ISO C99 types # include "qfile.hh" +# include "qwavheader.hh" # include "qexception.hh" +# include "endian.hh" /* caved in and used C's printf in a few places that don't seem to * be expressible with ios @@ -35,7 +38,7 @@ char data[4]; u_int32_t datalength; -}; +} __attribute__((packed)); const unsigned int HEADERSIZE = sizeof(struct header); @@ -126,6 +129,17 @@ continue; } + if ((uintptr_t)f.getMap() % sizeof(u_int32_t) != 0) { + // should never happen with a mapping at offset 0, but if it does, + // we need to catch it rather than tossing subtle memory misread + // bugs. 32-bit alignment is adequate since no integer in a WAV header + // is longer + cerr << APPNAME << _(": mapping of header in '") << f.getName() + << _("' is not 32-bit aligned\n"); + optind++; + continue; + } + struct header *header = (struct header*) f.getMap(); cout << f.getName() << " (" << f.getSize() << " bytes):" << endl; @@ -143,12 +157,12 @@ } } - printf(_("\triff length: %d\n"),header->rifflength); - if (header->rifflength!=f.getSize()-8) { + printf(_("\triff length: %d\n"),letohl(header->rifflength)); + if (letohl(header->rifflength)!=f.getSize()-8) { if (!quiet) fprintf(stderr,_("\t\triff length field should be %d\n"),f.getSize()-8); if (fix) { - header->rifflength = f.getSize()-8; + header->rifflength = htolel(f.getSize()-8); if (!quiet) cerr << _("\t\tfixed\n"); } @@ -176,30 +190,31 @@ } } - printf(_("\tfmt length: %d\n"),header->fmtlength); - if (header->fmtlength!=16) { + printf(_("\tfmt length: %d\n"),letohl(header->fmtlength)); + if (letohl(header->fmtlength)!=16) { if (!quiet) fprintf(stderr,_("\t\tfmt length field should be %d\n"),16); if (fix) { - header->fmtlength = 16; + header->fmtlength = htolel(16); if (!quiet) cerr << _("\t\tfixed\n"); } } - printf("\tformat: %d\n",header->format); - if (header->format!=1) { + printf("\tformat: %d\n",letohs(header->format)); + if (letohs(header->format)!=1) { if (!quiet) fprintf(stderr,_("\t\tformat field should 1 (pcm tag)\n")); if (fix) { - header->format = 1; + header->format = htoles(1); if (!quiet) cerr << _("\t\tfixed\n"); } } - printf(_("\tchannels: %d\n"),header->channels); - if (header->channels!=2 && header->channels!=1) { + printf(_("\tchannels: %d\n"),letohs(header->channels)); + if (letohs(header->channels)!=2 && + letohs(header->channels)!=1) { if (!quiet) fprintf(stderr,_("\t\tchannels field should be 1 (mono) or 2 (stereo)\n")); if (fix) { @@ -209,28 +224,29 @@ } } - printf(_("\tsample rate: %d\n"),header->samplerate); - if (header->samplerate>48000 || header->samplerate<8000) { + printf(_("\tsample rate: %d\n"),letohl(header->samplerate)); + if (letohl(header->samplerate)>48000 || + letohl(header->samplerate)<8000) { if (!quiet) fprintf(stderr,_("\t\tsample rate field should be between 8000 and 48000\n")); if (fix) cerr << _("\t\tdon't know which value must be set...\n") << endl; } - printf(_("\tbytes/second: %d\n"),header->bytespersec); + printf(_("\tbytes/second: %d\n"),letohl(header->bytespersec)); - printf(_("\tbytes/sample: %d\n"),header->bytespersample); - if (header->bytespersample!=1 && - header->bytespersample!=2 && - header->bytespersample!=4) { + printf(_("\tbytes/sample: %d\n"),letohs(header->bytespersample)); + if (letohs(header->bytespersample)!=1 && + letohs(header->bytespersample)!=2 && + letohs(header->bytespersample)!=4) { if (!quiet) fprintf(stderr,_("\t\t bytes/sample field should be 1, 2 or 4\n")); if (fix) cerr << _("\t\tdon't know which value must be set...\n") << endl; } - printf(_("\tbits/sample: %d\n"),header->bitspersample); + printf(_("\tbits/sample: %d\n"),letohs(header->bitspersample)); printf("\tdata: '%.4s'\n",header->data); if (strncmp(header->data,"data",4)) { @@ -243,12 +259,12 @@ } } - printf(_("\tdata length: %d\n"),header->datalength); - if (header->datalength!=f.getSize()-44) { + printf(_("\tdata length: %d\n"),letohl(header->datalength)); + if (letohl(header->datalength)!=f.getSize()-44) { if (!quiet) fprintf(stderr,_("\t\tdata length field should be %d\n"),f.getSize()-44); if (fix) { - header->datalength = f.getSize()-44; + header->datalength = htolel(f.getSize()-44); if (!quiet) cerr << _("\t\tfixed\n"); } debian/patches/01_pic.patch0000644000000000000000000000074307606743462012733 0ustar diff -aur quelcom-0.4.0.pristine/lib/makefile quelcom-0.4.0/lib/makefile --- quelcom-0.4.0.pristine/lib/makefile 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/makefile 2002-10-04 22:26:17.000000000 -0700 @@ -7,7 +7,7 @@ # if you don't want to include native language support (=get quelcom messages # in a different language than english) remove -DNLS below # -CXXFLAGS=-DNLS -Wall +CXXFLAGS=-DNLS -Wall -fPIC LDFLAGS=-lm MP3LIB=qmp3 qmp3frameheader qtag qreport debian/patches/14_info_direntry0000644000000000000000000000046111705237447013732 0ustar --- a/doc/quelcom.texinfo +++ b/doc/quelcom.texinfo @@ -6,6 +6,10 @@ @setfilename quelcom.info @settitle quelcom tools @value{VERSION} @dircategory Audio editors +@direntry +* Quelcom: (quelcom). .wav and .mp3 file editing utilities +@end direntry + @finalout @setchapternewpage odd debian/patches/series0000644000000000000000000000054611705237447012051 0ustar 00_gcc3-fixes.patch 01_pic.patch 02_optionalstrip.patch 03_debugbuild.patch 04_wavheader-endian.patch 05_wavheaderdump-endian.patch 06_wavsample-endian.patch 07_mp3frameheader-endian.patch 08_gcc4-fixes.patch 09_zerolengthmmap-fix.patch 10_doc_makefile_bashism.patch 11_info_section.patch 12_qwavsilence_language.patch 13_gcc4.3-fixes.patch 14_info_direntry debian/patches/02_optionalstrip.patch0000644000000000000000000000260207606743462015064 0ustar diff -Nbaur quelcom-0.4.0_03/bin/makefile quelcom-0.4.0/bin/makefile --- quelcom-0.4.0_03/bin/makefile 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/bin/makefile 2002-10-09 02:29:25.000000000 -0700 @@ -22,11 +22,11 @@ $(MP3BIN): %: %.o $(CXX) -o $@ $< -L./../lib -lqextra -lqmp3 - strip $@ + $(STRIP) $@ $(WAVBIN): %: %.o $(CXX) -o $@ $< -L./../lib -lqextra -lqwav - strip $@ + $(STRIP) $@ install: all mkdir -p $(BINDIR) diff -Nbaur quelcom-0.4.0_03/lib/makefile quelcom-0.4.0/lib/makefile --- quelcom-0.4.0_03/lib/makefile 2002-10-09 02:27:32.000000000 -0700 +++ quelcom-0.4.0/lib/makefile 2002-10-09 02:28:56.000000000 -0700 @@ -30,15 +30,15 @@ libqextra.so: $(EXTRAHEADERS) $(EXTRASOURCES) $(EXTRAOBJECTS) $(CXX) $(CXXFLAGS) -o $@ -shared $(EXTRAOBJECTS) - strip $@ + $(STRIP) $@ libqwav.so: $(WAVLIBSOURCES) $(WAVLIBHEADERS) $(WAVLIBOBJECTS) $(CXX) $(CXXFLAGS) -o $@ -shared $(WAVLIBOBJECTS) - strip $@ + $(STRIP) $@ libqmp3.so: $(MP3LIBSOURCES) $(MP3LIBHEADERS) $(MP3LIBOBJECTS) $(CXX) $(CXXLIBFLAGS) -o $@ -shared $(MP3LIBOBJECTS) - strip $@ + $(STRIP) $@ install: all mkdir -p $(LIBDIR) diff -Nbaur quelcom-0.4.0_03/makefile quelcom-0.4.0/makefile --- quelcom-0.4.0_03/makefile 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/makefile 2002-10-09 02:28:23.000000000 -0700 @@ -17,6 +17,7 @@ VERSION=0.4.0 CXX=g++ +STRIP=strip DIRS=lib bin doc po debian/patches/11_info_section.patch0000644000000000000000000000061410741357003014617 0ustar diff -aruN quelcom-0.4.0.upstream/doc/quelcom.texinfo quelcom-0.4.0/doc/quelcom.texinfo --- quelcom-0.4.0.upstream/doc/quelcom.texinfo 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/doc/quelcom.texinfo 2008-01-10 00:43:11.000000000 -0800 @@ -5,6 +5,7 @@ @setfilename quelcom.info @settitle quelcom tools @value{VERSION} +@dircategory Audio editors @finalout @setchapternewpage odd debian/patches/08_gcc4-fixes.patch0000644000000000000000000000274310322171174014105 0ustar diff -aruN quelcom-0.4.0.orig/lib/qwavsample.cc quelcom-0.4.0/lib/qwavsample.cc --- quelcom-0.4.0.orig/lib/qwavsample.cc 2005-07-31 19:38:18.000000000 -0700 +++ quelcom-0.4.0/lib/qwavsample.cc 2005-07-31 19:40:39.000000000 -0700 @@ -156,10 +156,10 @@ void qwavsample::setNext() { switch (type) { - case MONO8: ++(char*)sample; break; - case MONO16: ++(short*)sample; break; - case STEREO8: ++(struct stereo8*)sample; break; - case STEREO16: ++(struct stereo16*)sample; break; + case MONO8: sample = (union sample*)((char*)sample + 1); break; + case MONO16: sample = (union sample*)((uint16_t*)sample + 1); break; + case STEREO8: sample = (union sample*)((struct stereo8*)sample + 1); break; + case STEREO16: sample = (union sample*)((struct stereo16*)sample + 1); break; default: throw qexception(__PRETTY_FUNCTION__,_("quelcom internal error")); } @@ -196,11 +196,11 @@ void qwavsample::prod(double d) { switch (type) { - case MONO8: sample->mono8*=d; break; + case MONO8: sample->mono8*=(char)d; break; case MONO16: sample->mono16 = htoles_s(short(letohs_s(sample->mono16)*d)); break; - case STEREO8: sample->stereo8.left*=d; sample->stereo8.right*=d; break; + case STEREO8: sample->stereo8.left*=(char)d; sample->stereo8.right*=(char)d; break; case STEREO16: sample->stereo16.left = htoles_s(short(letohs_s(sample->stereo16.left)*d)); sample->stereo16.right = htoles_s(short(letohs_s(sample->stereo16.right)*d)); debian/patches/07_mp3frameheader-endian.patch0000644000000000000000000002462707606743462016314 0ustar diff -aruN quelcom-0.4.0_06/lib/qmp3frameheader.cc quelcom-0.4.0/lib/qmp3frameheader.cc --- quelcom-0.4.0_06/lib/qmp3frameheader.cc 2001-02-23 04:29:12.000000000 -0800 +++ quelcom-0.4.0/lib/qmp3frameheader.cc 2002-10-27 16:10:10.000000000 -0800 @@ -4,6 +4,7 @@ # include "qmp3frameheader.hh" # include "qexception.hh" +# include "endian.hh" #ifdef NLS # include @@ -46,21 +47,20 @@ static u_int32_t samplesPerFrame[4] = { 1152, 1152, 384, 0 }; -string qmp3frameheader::getLayer() { return string(layers[header->layer]);} -u_int32_t qmp3frameheader::getSamplesPerFrame() { return samplesPerFrame[header->layer]; } -string qmp3frameheader::getVersion() { return string(versions[header->version]);} +string qmp3frameheader::getLayer() { return string(layers[header.layer]);} +u_int32_t qmp3frameheader::getSamplesPerFrame() { return samplesPerFrame[header.layer]; } +string qmp3frameheader::getVersion() { return string(versions[header.version]);} -caddr_t qmp3frameheader::getMap() {return (caddr_t)header;} +caddr_t qmp3frameheader::getMap() {return (caddr_t)mappedheader;} void qmp3frameheader::remap(caddr_t p) { - - header = (struct header*)p; + setHeader(p); } -u_int32_t qmp3frameheader::getSignature() {return (*(u_int32_t*)header)&MASK;} +u_int32_t qmp3frameheader::getSignature() {return letohl(*(u_int32_t *)mappedheader)&MASK;} u_int32_t qmp3frameheader::getSampleRate() { - return samplerates[header->version][header->samplerate]; + return samplerates[header.version][header.samplerate]; } @@ -76,28 +76,32 @@ bool qmp3frameheader::valid (caddr_t p) { + struct header header; + + if (p == NULL) + return false; - struct header *header = (struct header*)p; + copyHeader(&header, p); - return ( (header->sync1 == 0xff) && - (header->sync2 == 0x7) && - (header->version != UNDEFINED_VERSION) && - (header->layer != 0) && - (header->bitrate != 0x0f) && - (header->samplerate != 0x03) && - (header->emphasis != 0x02) ); + return ( (header.sync1 == 0xff) && + (header.sync2 == 0x7) && + (header.version != UNDEFINED_VERSION) && + (header.layer != 0) && + (header.bitrate != 0x0f) && + (header.samplerate != 0x03) && + (header.emphasis != 0x02) ); } bool qmp3frameheader::valid () { - return ! ( (header->sync1 != 0xff) || - (header->sync2 != 0x7) || - (header->version == UNDEFINED_VERSION) || - (header->layer == 0) || - (header->bitrate == 0x0f) || - (header->samplerate == 0x03) || - (header->emphasis == 0x02) ); + return ! ( (header.sync1 != 0xff) || + (header.sync2 != 0x7) || + (header.version == UNDEFINED_VERSION) || + (header.layer == 0) || + (header.bitrate == 0x0f) || + (header.samplerate == 0x03) || + (header.emphasis == 0x02) ); } @@ -105,26 +109,28 @@ bool qmp3frameheader::compatible(caddr_t p, u_int32_t signature) { - return ((*(u_int32_t*)p)&(MASK)) == signature; + return (letohl(*(u_int32_t *)p)&MASK) == signature; } u_int32_t qmp3frameheader::setNext(u_int32_t bufsize) { + caddr_t supposed= (char*)mappedheader+getLength(); - caddr_t supposed= (char*)header+getLength(); + setHeader(seek_header(supposed,bufsize,getSignature())); - header = (struct header*) seek_header(supposed,bufsize,getSignature()); - - return (char*)header-(char*)supposed; + return (char*)mappedheader-(char*)supposed; } u_int32_t qmp3frameheader::setNext(caddr_t endstream) { - caddr_t previous = (caddr_t) header; + caddr_t previous = (caddr_t) mappedheader; + caddr_t next; + + next = seek_header((char*)mappedheader+getLength(),(char*)endstream-(char*)mappedheader+1,getSignature()); - header = (struct header*) seek_header((char*)header+getLength(),(char*)endstream-(char*)header+1,getSignature()); + setHeader(next); - return (char*)header-(char*)previous-getLength(); + return (char*)mappedheader-(char*)previous-getLength(); } @@ -156,7 +162,59 @@ qmp3frameheader::qmp3frameheader(caddr_t p, u_int32_t bufsize, u_int32_t signature) { - header = (struct header*) seek_header(p,bufsize,signature); + setHeader(seek_header(p,bufsize,signature)); +} + + +void qmp3frameheader::setHeader(caddr_t p) +{ + mappedheader = (struct header *)p; + copyHeader(&header, p); +} + +void qmp3frameheader::copyHeader(struct header *header, caddr_t p) +{ + unsigned char b = *(unsigned char *)p; + + header->sync1 = b; + + b = *(++p); + header->protection = b & 0x1; + header->layer = (b>>1) & 0x3; + header->version = (b>>3) & 0x3; + header->sync2 = (b>>5) & 0x7; + + b = *(++p); + header->privat = b & 0x1; + header->padding = (b>>1) & 0x1; + header->samplerate = (b>>2) & 0x3; + header->bitrate = (b>>4) & 0xf; + + b = *(++p); + header->emphasis = b & 0x3; + header->original = (b>>2) & 0x1; + header->copyright = (b>>3) & 0x1; + header->mode_extension = (b>>4) & 0x3; + header->channel_mode = (b>>6) & 0x3; +} + +void qmp3frameheader::copyHeader(caddr_t p, struct header &header) +{ + *(p++) = header.sync1; + + *(p++) = (header.protection | + header.layer << 1 | + header.version << 3 | + header.sync2 << 5); + *(p++) = (header.privat | + header.padding << 1 | + header.samplerate << 2 | + header.bitrate << 4); + *(p++) = (header.emphasis | + header.original << 2 | + header.copyright << 3 | + header.mode_extension << 4 | + header.channel_mode << 6); } @@ -164,20 +222,20 @@ switch (f) { - case SYNC1: return header->sync1; - case SYNC2: return header->sync2; - case _VERSION: return header->version; - case LAYER: return header->layer; - case PROTECTION: return header->protection; - case BITRATE: return header->bitrate; - case SAMPLERATE: return header->samplerate; - case PADDING: return header->padding; - case PRIVAT: return header->privat; - case CHANNEL_MODE: return header->channel_mode; - case MODE_EXTENSION: return header->mode_extension; - case COPYRIGHT: return header->copyright; - case ORIGINAL: return header->original; - case EMPHASIS: return header->emphasis; + case SYNC1: return header.sync1; + case SYNC2: return header.sync2; + case _VERSION: return header.version; + case LAYER: return header.layer; + case PROTECTION: return header.protection; + case BITRATE: return header.bitrate; + case SAMPLERATE: return header.samplerate; + case PADDING: return header.padding; + case PRIVAT: return header.privat; + case CHANNEL_MODE: return header.channel_mode; + case MODE_EXTENSION: return header.mode_extension; + case COPYRIGHT: return header.copyright; + case ORIGINAL: return header.original; + case EMPHASIS: return header.emphasis; default: throw qexception(__PRETTY_FUNCTION__,_("invalid field")); // i pintar el valor... @@ -189,34 +247,35 @@ switch (f) { - case SYNC1: header->sync1 = v; break; - case SYNC2: header->sync2 = v; break; - case _VERSION: header->version = v; break; - case LAYER: header->layer = v; break; - case PROTECTION: header->protection = v; break; - case BITRATE: header->bitrate = v; break; - case SAMPLERATE: header->samplerate = v; break; - case PADDING: header->padding = v; break; - case PRIVAT: header->privat = v; break; - case CHANNEL_MODE: header->channel_mode = v; break; - case MODE_EXTENSION: header->mode_extension = v; break; - case COPYRIGHT: header->copyright = v; break; - case ORIGINAL: header->original = v; break; - case EMPHASIS: header->emphasis = v; break; + case SYNC1: header.sync1 = v; break; + case SYNC2: header.sync2 = v; break; + case _VERSION: header.version = v; break; + case LAYER: header.layer = v; break; + case PROTECTION: header.protection = v; break; + case BITRATE: header.bitrate = v; break; + case SAMPLERATE: header.samplerate = v; break; + case PADDING: header.padding = v; break; + case PRIVAT: header.privat = v; break; + case CHANNEL_MODE: header.channel_mode = v; break; + case MODE_EXTENSION: header.mode_extension = v; break; + case COPYRIGHT: header.copyright = v; break; + case ORIGINAL: header.original = v; break; + case EMPHASIS: header.emphasis = v; break; default: throw qexception(__PRETTY_FUNCTION__,_("invalid field")); // i pintar el valor... } + copyHeader((caddr_t)mappedheader, header); } u_int32_t qmp3frameheader::getLength() { - if (header->layer!=LAYER3) + if (header.layer!=LAYER3) throw qexception (__PRETTY_FUNCTION__,_("layer not supported")); // i dir quin valor... - return (144 * getBitRate() * 1000) / getSampleRate() + header->padding; + return (144 * getBitRate() * 1000) / getSampleRate() + header.padding; } u_int32_t qmp3frameheader::getMsDuration() { @@ -236,13 +295,13 @@ u_int32_t qmp3frameheader::getBitRate() { - if (header->layer!=LAYER3) + if (header.layer!=LAYER3) throw qexception (__PRETTY_FUNCTION__,_("only layer III is supported")); - if (header->version==UNDEFINED_VERSION) + if (header.version==UNDEFINED_VERSION) throw qexception (__PRETTY_FUNCTION__,_("undefined version")); - return layer3_bitrates[header->version][header->bitrate]; + return layer3_bitrates[header.version][header.bitrate]; } diff -aruN quelcom-0.4.0_06/lib/qmp3frameheader.hh quelcom-0.4.0/lib/qmp3frameheader.hh --- quelcom-0.4.0_06/lib/qmp3frameheader.hh 2002-10-15 22:15:59.000000000 -0700 +++ quelcom-0.4.0/lib/qmp3frameheader.hh 2002-10-27 16:33:11.000000000 -0800 @@ -42,9 +42,9 @@ mode_extension:2, /*!< type of joint stereo coding */ channel_mode:2; /*!< mono or which type of stereo */ }; - + //! pointer to the header (memory location where it is located) - struct header *header; + struct header header, *mappedheader; public: @@ -104,6 +104,12 @@ qmp3frameheader(); qmp3frameheader(caddr_t p, u_int32_t bufsize = HEADERSIZE, u_int32_t signature=0); + // copy and endian-translate the frame header + static void copyHeader(struct header *header, caddr_t p); + static void copyHeader(caddr_t p, struct header &header); + + void setHeader(caddr_t p); + // direct access to the header u_int32_t get(); void set(u_int32_t h); debian/compat0000644000000000000000000000000210741357003010364 0ustar 6 debian/wrapper.sh0000644000000000000000000000060207625640055011211 0ustar #!/bin/sh # $Id: wrapper.sh 79 2003-02-22 09:17:33Z aqua $ if [ -z "$LD_LIBRARY_PATH" ] ; then LD_LIBRARY_PATH=/usr/lib/quelcom else LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/quelcom fi export LD_LIBRARY_PATH X=/usr/lib/quelcom/`basename "$0"` if [ -e "$X" ]; then exec $X "$@" exit fi echo usage: for e in /usr/lib/quelcom/q* ; do echo " "`basename "$e"`" [...]" done debian/copyright0000644000000000000000000000171010741357003011120 0ustar This package Debianized by Devin Carraway . It was obtained from http://www.etse.urv.es/~dmanye/quelcom/quelcom.html. Quelcom is Copyright (c) 2001 by David Many'e . Quelcom is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Quelcom is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. On Debian systems, the full text of the GPL can be found in /usr/share/common-licenses/GPL debian/manpages/0000755000000000000000000000000011705237525010770 5ustar debian/manpages/quelcom.10000644000000000000000000000143107625640055012520 0ustar .TH quelcom 1 "september 2002" "quelcom 0.4.0" "quelcom man pages" .SH NAME quelcom \- frontend to the quelcom audio utilities .SH SYNOPSIS .TP .B qmp3check [...] .TP .B qmp3cut [...] .TP .B qmp3info [...] .TP .B qmp3join [...] .TP .B qmp3report [...] .TP .B qwavcut [...] .TP .B qwavfade [...] .TP .B qwavheaderdump [...] .TP .B qwavinfo [...] .TP .B qwavjoin [...] .TP .B qwavsilence [...] .SH DESCRIPTION .LP \fBquelcom\fR is a frontend to the individual quelcom utilities. It should not be called directly. See the individual manpages for particular usage. .SH SEE ALSO .BR qmp3check (1), .BR qmp3cut (1), .BR qmp3info (1), .BR qmp3join (1), .BR qmp3report (1) .BR .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/manpages/qmp3join.10000644000000000000000000000372007625640055012616 0ustar .TH qmp3join 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qmp3join \- join mp3 files .SH SYNOPSIS .na .B qmp3join .RI [ option ]...\ file1\ file2 ... .ad .SH DESCRIPTION .LP .B qmp3join reads a list of mp3 files and joins them in one mp3 file in the specified order. some conditions must be met for the parameters of each of the files (see \fBNOTES\fR section). .SH OPTIONS .TP .BR \-f ,\ \-\-force force join bypassing bit rate checks. by default, to join two files they must be both vbr (have variable bit rate) or have the same bit rate. using this option you can skip this check. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP \fB\-o\fR <\fIoutfile\fR>, \fB\-\-output\fR=<\fIoutfile\fR> .I outfile is the name of the file where all the frames will be copied. if this option is not used, the frames from the second to the last file of the list will be appended to .I file1. .TP .BR \-v ,\ \-\-verbose show which operations are done. .TP .BR \-V ,\ \-\-version show version and exit. .SH NOTES .LP (all) the following parameters are required to be common for two mp3 files to be joined: [fill this!!!]. also, about the bit rate parameter, both mp3 must have the same value or (both) must have a variable bit rate. this restriction would be by-passable with the \fI--force\fR flag. .LP before joining, all the streams are tested for validity. this is a time consuming operation. .LP in any case, \fBqmp3join\fR can be viewed like a \fIbetter but restrictive \fBcat\fR for mp3 files, due to the mp3 file format characteristics. .SH BUGS .LP tests have been done only with mpeg version 1 layer iii streams, though it may (or not) work with other versions/layers. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qmp3info (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) .br .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/manpages/qwavcut.10000644000000000000000000001157307625640055012555 0ustar .TH qwavcut 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavcut \- extract and/or delete parts of a wav file .SH SYNOPSIS .na .B qwavcut .RI [ option ]...\ file .ad .SH DESCRIPTION .LP \fBqwavcut\fR allows to extract and/or delete a fragment of a wav file. some parameters must be supplied in order to define the start/size/end cut points and what to do then: either the fragment must be copied to another file or erased from the file (or both) .SH GENERAL OPTIONS .TP .BR \-d ,\ \-\-delete deletes the fragment from the file. if option \fB\-\-output\fR is used, deletion action is always done after fragment extraction. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP \fB\-o\fR <\fIoutfile\fR>, \fB\-\-output\fR=<\fIoutfile\fR> \fIoutfile\fR is the file where the samples contained in the specified cut will be copied. .TP .BR \-V ,\ \-\-version show version and exit. .SH CUT OPTIONS cut options are used to specify at which sample the fragment begins (options \fB-b\fR or \fB-B\fR), ends (options \fB-e\fR and \fB-E\fR), or which size it has (option \fB-s\fR). at least, one cut option must be specified. neither the options \fB-b\fR and \fB-B\fR, and the options \fB-e\fR and \fB-E\fR can be used together; also, a begin, end and size option can be used at the same time. .LP by default, the fragment begins at the first sample and ends at the last sample; there's no default value for size. .LP all the values are treated as a sample number unless a format specifier is used. see the \fBFORMATS\fR section below for information. all values must be positive integer. .TP \fB\-b\fR <\fIbegin\fR>[<\fIformat\fR>], \fB\-\-set-begin-from-eof\fR=<\fIbegin\fR>[<\fIformat\fR>] \fIbegin\fR specifies the first sample of the file that belongs to the cut counting from the end of the file. .TP \fB\-B\fR <\fIbegin\fR>[<\fIformat\fR>], \fB\-\-set-begin\fR=<\fIbegin\fR>[<\fIformat\fR>] \fIbegin\fR specifies the first sample of the file that belongs to the cut counting from the beginning of the file. .TP \fB\-e\fR <\fIend\fR>[<\fIformat\fR>], \fB\-\-set-end-from-eof\fR=<\fIend\fR>[<\fIformat\fR>] \fIend\fR specifies the last sample of the file that belongs to the cut counting from the end of the file. .TP \fB\-E\fR <\fIend\fR>[<\fIformat\fR>], \fB\-\-set-end\fR=<\fIend\fR>[<\fIformat\fR>] \fIend\fR specifies the last sample of the file that belongs to the cut counting from the beginning of the file. .TP \fB\-s\fR <\fIsize\fR>[<\fIformat\fR>], \fB\-\-set-size\fR=<\fIsize\fR>[<\fIformat\fR>] \fIsize\fR specifies the number of samples contained in the cut. .TP \fB\-S\fR <\fIbegin\fR>\-<\fIend\fR>, \fB\-\-slice\fR <\fIbegin\fR>\-<\fIend\fR> \fIslice\fR specifies the starting and ending points of the cut as a timeslice, which is to say, two time specifications (\fI[[h:]m:]s[.ms]\fR) joined by a hyphen. .SH FORMATS .LP cut options can have also an optional modifier. if this modifier is not used, then the value provided with the corresponding cut option will be interpreted as a number of samples. since most of the times will be difficult to specify a cut in terms of samples, the following modifiers are provided: .TP .B j value is interpreted as milliseconds. .TP .B m value is interpreted as minutes. .TP .B s value is interpreted as seconds. .TP .B b value is interpreted as bytes. .TP .B k value is interpreted as kbytes (1024 bytes). .TP .B M value is interpreted as megabytes (1024 kbytes). .LP in either case, the values specified will be rounded to get an integer number of samples. .SH EXAMPLES .LP here are some examples: .TP to get the last ten seconds of a file: .B qwavcut -b 10s -o outfile.wav infile.wav .TP four ways of getting the first minute of a file: .B qwavcut -S -1:0 -o outfile.wav infile.wav .br .B qwavcut -S -60 -o outfile.wav infile.wav .br .B qwavcut -E 1m -o outfile.wav infile.wav .br .B qwavcut -s 1m -o outfile.wav infile.wav .TP four ways of getting the second quarter of a file: .B qwavcut -S 15:0-30:0 -o outfile.wav infile.wav .br .B qwavcut -B 15m -E 30m -o outfile.wav infile.wav .br .B qwavcut -s 15m -E 30m -o outfile.wav infile.wav .br .B qwavcut -B 15m -s 15m -o outfile.wav infile.wav .SH NOTES .LP if neither the options \fB\-\-output\fR nor \fB\-\-delete\fR are specified, the program will do nothing. .LP when cutting at the end, a simple \fItruncate\fR call is needed. but when cutting in the middle or in the beginning, all the data behind the cut must be moved ahead and, depending on the amount of the data to be moved, this can be a time consuming operation. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qwavfade.10000644000000000000000000001072107625640055012653 0ustar .TH qwavfade 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavfade \- fade in/out wav files .SH SYNOPSIS .na .B qwavfade .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqwavfade\fR modifies a wav file applying on it a fade in or a fade out or both. .LP a fade consists in modifying progressively the level of the wav as if you were slowly increasing or decreasing the volume. a fade in consists in increasing the volume starting from a low level at the beginning of the wav. a fade out consists in decreasing the volume to a low level at the end of the wav. .SH OPTIONS .TP \fB\-d\fR <\fIduration\fR>[<\fIformat\fR>], \fB\-\-duration\fR=<\fIduration\fR>[<\fIformat\fR>] \fIduration\fR is a positive integer that specifies the duration of the fade. the value is treated as a sample number unless a format specifier is used. see the \fBFORMATS\fR section below for information. the default value is five seconds. this option overrides the \fI\-\-length\fR option explained below. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP .BR \-i ,\ \-\-in just fade in. don't fade out. by default, fade in and fade out. .TP \fB\-l\fR <\fItime point\fR>, \fB\-\-length\fR=<\fItime point\fR> \fItime point\fR specifies the length(=duration) of the fade. see the \fBTIME POINTS\fR section below for information. this option is quite similar to the \fI\-\-duration\fR option above. its easier to use though not as powerful than the previous one. the default value is five seconds. this option overrides the \fI\-\-duration\fR option explained above. .TP .BR \-o ,\ \-\-out just fade out. don't fade in. by default, fade in and fade out. .TP .BR \-t ,\ \-\-test this option can be used to create and fade a tests files instead of modifying to original file. a test file will be created for each type of selected fade (in or out). the name of the test file will be \fBfadein.\fR<\fIfile\fR> or \fBfadeout.\fR<\fIfile\fR. the duration of the test files is the fade duration plus two seconds. .TP .BR \-v ,\ \-\-verbose show more detailed info. .TP .BR \-V ,\ \-\-version show version and exit. .SH TIME POINTS the time points is a easier way to specify the length (or duration) of a fade with a millisecond resolution. here's its formal form: [\fIh\fB:\fR[\fIm\fB:\fR]]\fBs\fR[\fB.\fIms\fR] where .TP .B h value is a positive integer meaning hours. .TP .B m value is a positive integer meaning minutes. .TP .B s value is a positive integer meaning seconds. .TP .B ms value is a positive integer meaning milliseconds. .LP only the seconds specifier is required. here are a couple of examples: .TP 1:23:45.67 .TP 2:0.001 .SH FORMATS .LP the \fB\-\-duration\fR option can have also an optional modifier. if this modifier is not used, then the value provided with the corresponding cut option will be interpreted as a number of samples. since most of the times will be difficult to specify a duration in terms of samples, the following modifiers are provided: .TP .B j value is interpreted as milliseconds. .TP .B m value is interpreted as minutes. .TP .B s value is interpreted as seconds. .TP .B b value is interpreted as bytes. .TP .B k value is interpreted as kbytes (1024 bytes). .TP .B M value is interpreted as megabytes (1024 kbytes). .LP in either case, the values specified will be rounded to get an integer number of samples. .SH EXAMPLE suppose you want to fade in and out the fantastic song \fIlive.in.concert.wav\fR using a fade duration of 5 seconds: .TP first we are going to test: .B qwavfade -t -d 7s live.in.concert.wav .TP hear the test fades: .B my-favourite-wav-player fadein.live.in.concert.wav .br .B my-favourite-wav-player fadeout.live.in.concert.wav .LP if you want to try with another duration, jump to the first step and change the duration argument. .TP and if you're happy with the tests: .B qwavfade -d 5s live.in.concert.wav .SH NOTES .LP \fBqwavfade\fR doesn't allow both types of fades (in and out) to overlap. if you want to fade in and out a wav file, and the two regions to fade overlap, then probably you made a mistake. in any case, you can do it fading separately. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavheaderdump (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qwavinfo.10000644000000000000000000000212407625640055012705 0ustar .TH qwavinfo 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavinfo \- show info from wav files .SH SYNOPSIS .na .B qwavinfo .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqwavinfo\fR reads a list of wav files and prints on standard output some of its parameters: sample rate, bits per sample, mono/stereo and duration. a duration summary is appended at the end of the list. .SH OPTIONS .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP .BR \-s ,\ \-\-summary-only show only the summary. do not show info from every file. .TP .BR \-v ,\ \-\-verbose show also the number of bytes and samples. .TP .BR \-V ,\ \-\-version show version and exit. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qwavheaderdump.10000644000000000000000000000220607625640055014071 0ustar .TH qwavheaderdump 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavheaderdump \- dump (and fix) wav headers .SH SYNOPSIS .na .B qwavheaderdump .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqwavheaderdump\fR reads a list of wav files and prints on standard output all its header values in text (no binary) form. also, it has ability to fix some of the headers in case they'd be incorrect. .SH OPTIONS .TP .BR \-F ,\ \-\-fix correct the header if there's any incorrect value. not all the fields are recoverable. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP .BR \-q ,\ \-\-quiet no output messages. don't show detected (and corrected) errors. .TP .BR \-V ,\ \-\-version show version and exit. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qwavsilence.10000644000000000000000000000434107625640055013377 0ustar .TH qwavsilence 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavsilence \- detect and shrink silence sequences in wav files .SH SYNOPSIS .na .B qwavsilence .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP .B qwavsilence reads a list of wav files looking for silence sequences. .SH OPTIONS .TP \fB\-d\fR <\fIduration\fR>[<\fIformat\fR>], \fB\-\-duration\fR=<\fIduration\fR>[<\fIformat\fR>] \fIduration \fRis a positive integer that specifies the minimum duration of a silent sequence on a file to be reported. the value is treated as a sample number unless a format specifier is used. see the \fBFORMATS\fR section below for information. the default value is one second. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP \fB\-S\fR, \fB\-\-shrink\fR when this option is set, all the silent sequences greater than \fIduration\fR will be shrinked down to \fIduration\fR and the file size truncated accordingly. .TP \fB\-t\fR <\fIthreshold\fR>, \fB\-\-threshold\fR=<\fIthreshold\fR> \fIthreshold\fR is a percentage value respect the maximum (absolute) sample value. samples whose value is under the given \fIthreshold\fR are considered silent. for example, a value of 2 means that all samples with absolute value under the 2% will be treated as silent samples. the default value is 0. .TP .BR \-v ,\ \-\-verbose show more detailed info. .TP .BR \-V ,\ \-\-version show version and exit. .SH FORMATS .LP the following modifiers are provided: .TP .B j value is interpreted as milliseconds. .TP .B m value is interpreted as minutes. .TP .B s value is interpreted as seconds. .TP .B b value is interpreted as bytes. .TP .B k value is interpreted as kbytes (1024 bytes). .TP .B M value is interpreted as megabytes (1024 kbytes). .LP in either case, the values specified will be rounded to get an integer number of samples. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavfade (1), .BR qwavheaderdump (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qmp3check.10000644000000000000000000000231207625640055012730 0ustar .TH qmp3check 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qmp3check \- check and clean mp3 streams .SH SYNOPSIS .na .B qmp3check .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqmp3check\fR reads mp3 streams looking for invalid frames or, simply, garbage. it can be used as a mp3 file checker but also as a mp3 file cleaner because it is able to strip garbage bits from the streams. .SH OPTIONS .TP .BR \-D ,\ \-\-delete delete invalid frames and garbage. use with care .TP .BR \-h ,\ \-\-help show a brief help and exit .TP .BR \-q ,\ \-\-quiet no output messages .TP .BR \-T ,\ \-\-delete\-tag delete tag (if exists). option \fB\-\-delete\fR must be set. .TP .BR \-v ,\ \-\-verbose show more detailed info .TP .BR \-V ,\ \-\-version show version and exit .SH BUGS .LP tests have been done only with mpeg version 1 layer iii streams, though it may (or not) work with other versions/layers. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3report (1) .br .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/manpages/qwavjoin.10000644000000000000000000000237007625640055012714 0ustar .TH qwavjoin 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qwavjoin \- join wav files .SH SYNOPSIS .na .B qwavjoin .RI [ option ]...\ file1\ file2 ... .ad .SH DESCRIPTION .LP .B qwavjoin reads a list of wav files and joins them in one wav file in the specified order. the files must have the same parameters (i.e. sampling rate, bytes per sample, ...) in order that the joining can be done. .SH OPTIONS .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP \fB\-o\fR <\fIoutfile\fR>, \fB\-\-output\fR=<\fIoutfile\fR> \fIoutfile\fR is the name of the file where all the samples will be copied. if this option is not used, the samples from the second to the last file of the list will be appended to \fIfile1\fR. .TP .BR \-v ,\ \-\-verbose show which operations are done. .TP .BR \-V ,\ \-\-version show version and exit. .SH BUGS .LP tests has been done only with 44100 Hz 16 bit stereo files, though it may work with mono/stereo 8/16 bits files. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qwavinfo (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) .br .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) debian/manpages/qmp3info.10000644000000000000000000000372707625640055012621 0ustar .TH qmp3info 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qmp3info \- show info from mp3 files .SH SYNOPSIS .na .B qmp3info .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqmp3info\fR reads a list of mp3 files and prints on standard output some of its parameters: version, layer, sample rate, bit rate, duration and tag. a duration summary is appended at the end of the list. .SH OPTIONS .TP .BR \-c ,\ \-\-check check the entire stream (slower but accurate). all the frames of the stream are read and the total duration is exactly computed. this option is automatically activated if the stream appears to be vbr (have different bit rate frames). .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP .BR \-s ,\ \-\-summary\-only show only the summary. do not show info from every file. .TP .BR \-v ,\ \-\-verbose show also the number of bytes and frames. .TP .BR \-V ,\ \-\-version show version and exit. .PP .SH BUGS .LP variable bit rate (vbr) streams are detected by reading the initial (5) frames in the stream. if their bit rate field differs, the \fB\-\-check\fR option is activated automatically. .LP if vbr is not detected, \fBqmp3info\fR reads only the first frame in the stream and calculates the duration supposing that (1) the entire stream is composed by valid frames and (2) all the frames have the same bit rate. this is a fast way to compute the duration of the stream, but it is not exact: there's an error of 0\.3% aprox. if you want to be accurate, or \fBqmp3info\fR is unable to detect a vbr stream, use \fB\-\-check\fR. .LP tests have been done only with mpeg version 1 layer iii streams, though it may (or not) work with other versions or layers. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1), .BR qmp3report (1) .br .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/manpages/qmp3report.10000644000000000000000000000544107625640055013174 0ustar .TH qmp3report 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qmp3report \- report mp3 files and directories .SH SYNOPSIS .na .B qmp3report .RI [ option ]...\ file ... .ad .SH DESCRIPTION .LP \fBqmp3report\fR reads mp3 files or directories containing mp3 files and gives information about them. \fBqmp3report\fR can output the reports with plain text or in html format. using the latter format, you can \fInavigate\fR your mp3 directories with a web browser. .SH OPTIONS .TP .BR \-a ,\ \-\-all report all files, not just files with suffix \fImp3\fR. .TP .BR \-A ,\ \-\-show-all implies \fB\-\-show\-dirs\fR, \fB\-\-show\-files\fR and \fB\-\-summary\fR. show report for files and directories and a summary report. .TP .BR \-d ,\ \-\-dirs show a report for every directory containing reported files/directories. note that if option \fB\-\-all\fR is not set, only will be reported those directories containing mp3 files. .TP .BR \-f ,\ \-\-files show a report for every reportable file (see \fB\-\-all\fR). .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP .BR \-H ,\ \-\-html output in html format (default is plain text). .TP .BR \-r ,\ \-\-recursive scan directories. .TP .BR \-s ,\ \-\-summary show a summary report. .TP .BR \-S ,\ \-\-split split report across visited directories. \fBqmp3report\fR leaves in each visited directory a file with the report for that directory, independently of the output format. the name of the report file is the name of the directory with extension \fI.txt\fR or \fI.html\fR depending on the selected output format. .TP .BR \-v ,\ \-\-verbose show more detailed info. .TP .BR \-V ,\ \-\-version show version and exit. .SH BUGS .LP variable bit rate (vbr) streams are detected by reading the initial (5) frames in the stream. if their bit rate field differs, the entire stream is read to compute the duration time with accuracy (see manual info for \fBqmp3info\fR). .LP if vbr is not detected, \fBqmp3report\fR reads only the first frame in the stream and calculates the duration supposing that (1) the entire stream is composed by valid frames and (2) all the frames have the same bit rate. this is a fast way to compute the duration of the stream, but it is not exact: there's an error of 0.3% aprox. .LP the htmlize function, which converts file names in a suitable form for html format (ie. replacing spaces with \fI%20\fR), is not bulletproof. .LP tests have been done only with mpeg version 1 layer iii streams, though it may (or not) work with other versions or layers. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qmp3info (1), .BR qmp3join (1), .BR qmp3cut (1), .BR qmp3check (1) .br .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/manpages/qmp3cut.10000644000000000000000000001200107625640055012442 0ustar .TH qmp3cut 1 "february 2001" "quelcom 0.4.0" "quelcom man pages" .SH NAME qmp3cut \- extract and/or delete parts of a mp3 file .SH SYNOPSIS .na .B qmp3cut .RI [ option ]...\ file .ad .SH DESCRIPTION .LP \fBqmp3cut\fR allows to extract and/or delete a fragment of a mp3 file. some parameters must be supplied in order to define the start/size/end cut points and what to do then: either the fragment must be copied to another file or erased from the file (or both) .SH GENERAL OPTIONS .TP .BR \-d ,\ \-\-delete deletes the fragment from the file. if option \fB\-\-output\fR is used, deletion action is always done after fragment extraction. .TP .BR \-h ,\ \-\-help show a brief help and exit. .TP \fB\-o\fR <\fIoutfile\fR>, \fB\-\-output\fR=<\fIoutfile\fR> \fIoutfile\fR is the file where the frames contained in the specified fragment will be copied. .TP .BR \-v ,\ \-\-verbose verbose. .TP .BR \-V ,\ \-\-version show version and exit. .SH CUT OPTIONS cut options are used to specify at which frame the fragment begins (options \fB-b\fR or \fB-B\fR), ends (options \fB-e\fR and \fB-E\fR), or which size it has (option \fB-s\fR). at least, one cut option must be specified. neither the options \fB-b\fR and \fB-B\fR, and the options \fB-e\fR and \fB-E\fR can be used together; also, a begin, end and size option can be used at the same time. .LP by default, the fragment begins at the first frame and ends at the last frame; there's no default value for size. .LP all the values are treated as a frame number unless a format specifier is used. see the \fBFORMATS\fR section below for information. values must be positive integer. .TP \fB\-b\fR <\fIbegin\fR>[<\fIformat\fR>], \fB\-\-set-begin-from-eof\fR=<\fIbegin\fR>[<\fIformat\fR>] \fIbegin\fR specifies the first frame of the file that belongs to the cut counting from the end of the file. .TP \fB\-B\fR <\fIbegin\fR>[<\fIformat\fR>], \fB\-\-set-begin\fR=<\fIbegin\fR>[<\fIformat\fR>] \fIbegin\fR specifies the first frame of the file that belongs to the cut counting from the beginning of the file. .TP \fB\-e\fR <\fIend\fR>[<\fIformat\fR>], \fB\-\-set-end-from-eof\fR=<\fIend\fR>[<\fIformat\fR>] \fIend\fR specifies the last frame of the file that belongs to the cut counting from the end of the file. .TP \fB\-E\fR <\fIend\fR>[<\fIformat\fR>], \fB\-\-set-end\fR=<\fIend\fR>[<\fIformat\fR>] \fIend\fR specifies the last frame of the file that belongs to the cut counting from the beginning of the file. .TP \fB\-s\fR <\fIsize\fR>[<\fIformat\fR>], \fB\-\-set-size\fR=<\fIsize\fR>[<\fIformat\fR>] \fIsize\fR specifies the number of frames contained in the cut. .TP \fB\-S\fR <\fIbegin\fR>\-<\fIend\fR>, \fB\-\-slice\fR <\fIbegin\fR>\-<\fIend\fR> \fIslice\fR specifies the starting and ending points of the cut as a timeslice, which is to say, two time specifications (\fI[[h:]m:]s[.ms]\fR) joined by a hyphen. .SH FORMATS .LP cut options can have also an optional modifier. if this modifier is not used, then the value provided with the corresponding cut option will be interpreted as a number of frames. since most of the times will be difficult to specify a cut in terms of frames, the following modifiers are provided: .TP .B j value is interpreted as milliseconds. .TP .B m value is interpreted as minutes. .TP .B s value is interpreted as seconds. .TP .B b value is interpreted as bytes. .TP .B k value is interpreted as kbytes (1024 bytes). .TP .B M value is interpreted as megabytes (1024 kbytes). .LP in either case, the values specified will be rounded to get an integer number of frames. .SH EXAMPLES .LP here are some examples: .TP to get the last ten seconds of a file: .B qmp3cut -b 10s -o outfile.mp3 infile.mp3 .TP two ways of getting the first minute of a file: .B qmp3cut -E 1m -o outfile.mp3 infile.mp3 .br .B qmp3cut -s 1m -o outfile.mp3 infile.mp3 .TP three ways of getting the second quarter of a file: .B qmp3cut -S 15:0-30:0 -o outfile.mp3 infile.mp3 .br .B qmp3cut -B 15m -E 30m -o outfile.mp3 infile.mp3 .br .B qmp3cut -s 15m -E 30m -o outfile.mp3 infile.mp3 .br .B qmp3cut -B 15m -s 15m -o outfile.mp3 infile.mp3 .SH NOTES .LP if neither the options \fB\-\-output\fR nor \fB\-\-delete\fR are specified, the program will do nothing. .SH BUGS .LP usually, the \fBmpg123\fR player (and any other app mp3-read capable) report messages in the way like "cannot rewind by XXX bytes" where XXX is a negative value on streams extracted with \fBqmp3cut\fR. this is due to frame dependency (frame decoding depends sometimes of neighbourhood frames when bit reservoir technique is used at encoding time) and possibly will be corrected in a (near?) future. .LP there's no support for variable bit rate (vbr) files. .LP tests have been done only with mpeg version 1 layer iii streams, though it may (or not) work with other versions/layers. .SH AUTHOR .LP dmanye@etse.urv.es .br http://www.etse.urv.es/~dmanye/quelcom/quelcom.html .SH SEE ALSO .BR qmp3info (1), .BR qmp3join (1), .BR qmp3check (1), .BR qmp3report (1) .br .BR qwavinfo (1), .BR qwavjoin (1), .BR qwavcut (1), .BR qwavsilence (1), .BR qwavfade (1), .BR qwavheaderdump (1) debian/rules0000755000000000000000000000422711705237447010265 0ustar #!/usr/bin/make -f # $Id: rules 784 2012-01-17 09:28:07Z aqua $ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # To resolve shlib dependencies at runtime, we need to take the annoying step # of wrapping the executables in a shell script that can add a private library # path to $LD_LIBRARY_PATH, then invoke the real binary from /usr/lib/quelcom/. # This seemed the least odious of the available options. build: build-stamp build-indep build-arch: build-stamp build-indep: build-stamp build-stamp: dh_testdir # stripping is disabled during the build so that it can # be done (or not) by dh_strip $(MAKE) PREFIX=/usr STRIP=/bin/true touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp $(MAKE) clean # Clean up the HTML docs rm -rf doc/quelcom doc/html dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # binaries go to /usr/lib/quelcom for use by the wrapper $(MAKE) \ PREFIX=$(CURDIR)/debian/quelcom/usr \ INFODIR=$(CURDIR)/debian/quelcom/usr/share/info \ BINDIR=$(CURDIR)/debian/quelcom/usr/lib/quelcom \ LIBDIR=$(CURDIR)/debian/quelcom/usr/lib/quelcom \ install # install the wrapper mkdir -p $(CURDIR)/debian/quelcom/usr/bin install debian/wrapper.sh $(CURDIR)/debian/quelcom/usr/bin/quelcom for e in "$(CURDIR)/debian/quelcom/usr/lib/quelcom/q"* ; do \ ln -s quelcom $(CURDIR)/debian/quelcom/usr/bin/`basename "$$e"`;\ done # move the generated HTML docs over so dh_installdocs can # be given a more suitable name later on mv doc/quelcom doc/html # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install dh_testdir dh_testroot dh_installchangelogs ChangeLog dh_installdocs README doc/html doc/quelcom.txt dh_installexamples dh_install dh_installinfo dh_installman debian/manpages/* dh_link dh_strip dh_compress dh_fixperms dh_makeshlibs dh_installdeb LD_LIBRARY_PATH="$(CURDIR)/debian/quelcom/usr/lib/quelcom" dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install debian/control0000644000000000000000000000106711705237447010607 0ustar Source: quelcom Maintainer: Devin Carraway Section: sound Priority: extra Build-Depends: debhelper (>= 8.0.0), gettext, texinfo Standards-Version: 3.9.2 Package: quelcom Depends: dpkg (>= 1.15.4) | install-info, ${shlibs:Depends}, ${misc:Depends} Architecture: any Description: Command line editing tools for MP3 and WAV files Quelcom provides assorted tools to perform simple editing operations on MP3 and WAV audio files. These include fading, check-and-clean, informational extraction and lossless cutting and joining without reencoding.