Index: man/flac.1
===================================================================
RCS file: /cvsroot/flac/flac/man/flac.1,v
retrieving revision 1.20
diff -u -r1.20 flac.1
--- man/flac.1	14 Sep 2007 15:04:49 -0000	1.20
+++ man/flac.1	15 May 2008 15:11:51 -0000
@@ -47,6 +47,9 @@
 \fB-s, --silent \fR
 Silent mode (do not write runtime encode/decode statistics to stderr)
 .TP
+\fB--progress-silent \fR
+Progress silent mode (only write runtime encode/decode statistics to stderr at task)
+.TP
 \fB--totally-silent \fR
 Do not print anything of any kind, including warnings or errors.  The exit code will be the only way to determine successful completion.
 .TP
Index: man/flac.sgml
===================================================================
RCS file: /cvsroot/flac/flac/man/flac.sgml,v
retrieving revision 1.72
diff -u -r1.72 flac.sgml
--- man/flac.sgml	2 Oct 2007 00:11:45 -0000	1.72
+++ man/flac.sgml	15 May 2008 15:11:51 -0000
@@ -152,6 +152,14 @@
 	
 
 	
+	  
+	  
+	  
+	    Progress silent mode (only write runtime encode/decode statistics to stderr at task completion)
+	  
+	
+
+	
 	  
 	  
 	  
Index: src/flac/decode.c
===================================================================
RCS file: /cvsroot/flac/flac/src/flac/decode.c,v
retrieving revision 1.117
diff -u -r1.117 decode.c
--- src/flac/decode.c	28 Feb 2008 05:34:25 -0000	1.117
+++ src/flac/decode.c	15 May 2008 15:11:53 -0000
@@ -332,7 +332,7 @@
 		}
 		else {
 			if(0 == (d->fout = fopen(outfilename, "wb"))) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: can't open output file %s: %s\n", d->inbasefilename, outfilename, strerror(errno));
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: can't open output file %s: %s\n", d->inbasefilename, outfilename, strerror(errno));
 				DecoderSession_destroy(d, /*error_occurred=*/true);
 				return false;
 			}
@@ -365,7 +365,7 @@
 		if(decoder_session->foreign_metadata) {
 			const char *error;
 			if(!flac__foreign_metadata_read_from_flac(decoder_session->foreign_metadata, infilename, &error)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR reading foreign metadata: %s\n", decoder_session->inbasefilename, error);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR reading foreign metadata: %s\n", decoder_session->inbasefilename, error);
 				return false;
 			}
 		}
@@ -374,7 +374,7 @@
 	decoder_session->decoder = FLAC__stream_decoder_new();
 
 	if(0 == decoder_session->decoder) {
-		flac__utils_printf(stderr, 1, "%s: ERROR creating the decoder instance\n", decoder_session->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR creating the decoder instance\n", decoder_session->inbasefilename);
 		return false;
 	}
 
@@ -407,12 +407,12 @@
 FLAC__bool DecoderSession_process(DecoderSession *d)
 {
 	if(!FLAC__stream_decoder_process_until_end_of_metadata(d->decoder)) {
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 		print_error_with_state(d, "ERROR while decoding metadata");
 		return false;
 	}
 	if(FLAC__stream_decoder_get_state(d->decoder) > FLAC__STREAM_DECODER_END_OF_STREAM) {
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 		print_error_with_state(d, "ERROR during metadata decoding");
 		if(!d->continue_through_decode_errors)
 			return false;
@@ -468,7 +468,7 @@
 		}
 	}
 	if(!FLAC__stream_decoder_process_until_end_of_stream(d->decoder) && !d->aborting_due_to_until) {
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 		print_error_with_state(d, "ERROR while decoding data");
 		if(!d->continue_through_decode_errors)
 			return false;
@@ -477,7 +477,7 @@
 		(d->abort_flag && !(d->aborting_due_to_until || d->continue_through_decode_errors)) ||
 		(FLAC__stream_decoder_get_state(d->decoder) > FLAC__STREAM_DECODER_END_OF_STREAM && !d->aborting_due_to_until)
 	) {
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 		print_error_with_state(d, "ERROR during decoding");
 		return false;
 	}
@@ -507,19 +507,19 @@
 	if(d->analysis_mode)
 		flac__analyze_finish(d->aopts);
 	if(md5_failure) {
-		flac__utils_printf(stderr, 1, "\r%s: ERROR, MD5 signature mismatch\n", d->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "\r%s: ERROR, MD5 signature mismatch\n", d->inbasefilename);
 		ok = d->continue_through_decode_errors;
 	}
 	else {
 		if(!d->got_stream_info) {
-			flac__utils_printf(stderr, 1, "\r%s: WARNING, cannot check MD5 signature since there was no STREAMINFO\n", d->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "\r%s: WARNING, cannot check MD5 signature since there was no STREAMINFO\n", d->inbasefilename);
 			ok = !d->treat_warnings_as_errors;
 		}
 		else if(!d->has_md5sum) {
-			flac__utils_printf(stderr, 1, "\r%s: WARNING, cannot check MD5 signature since it was unset in the STREAMINFO\n", d->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "\r%s: WARNING, cannot check MD5 signature since it was unset in the STREAMINFO\n", d->inbasefilename);
 			ok = !d->treat_warnings_as_errors;
 		}
-		flac__utils_printf(stderr, 2, "\r%s: %s         \n", d->inbasefilename, d->test_only? "ok           ":d->analysis_mode?"done           ":"done");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\r%s: %s         \n", d->inbasefilename, d->test_only? "ok           ":d->analysis_mode?"done           ":"done");
 	}
 	DecoderSession_destroy(d, /*error_occurred=*/!ok);
 	if(!d->analysis_mode && !d->test_only && (d->is_wave_out || d->is_aiff_out)) {
@@ -530,7 +530,7 @@
 		if(d->foreign_metadata) {
 			const char *error;
 			if(!flac__foreign_metadata_write_to_iff(d->foreign_metadata, d->infilename, d->outfilename, d->fm_offset1, d->fm_offset2, d->fm_offset3, &error)) {
-				flac__utils_printf(stderr, 1, "ERROR updating foreign metadata from %s to %s: %s\n", d->infilename, d->outfilename, error);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR updating foreign metadata from %s to %s: %s\n", d->infilename, d->outfilename, error);
 				return 1;
 			}
 		}
@@ -563,7 +563,7 @@
 
 	/* in any other case the total samples in the input must be known */
 	if(total_samples_in_input == 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, cannot use --until when FLAC metadata has total sample count of 0\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, cannot use --until when FLAC metadata has total sample count of 0\n", inbasefilename);
 		return false;
 	}
 
@@ -580,15 +580,15 @@
 
 	/* error check */
 	if(spec->value.samples < 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is before beginning of input\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is before beginning of input\n", inbasefilename);
 		return false;
 	}
 	if((FLAC__uint64)spec->value.samples <= skip) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is before --skip point\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is before --skip point\n", inbasefilename);
 		return false;
 	}
 	if((FLAC__uint64)spec->value.samples > total_samples_in_input) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is after end of input\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is after end of input\n", inbasefilename);
 		return false;
 	}
 
@@ -608,9 +608,9 @@
 
 	if(samples == 0) {
 		if(f == stdout) {
-			flac__utils_printf(stderr, 1, "%s: WARNING, don't have accurate sample count available for %s header.\n", decoder_session->inbasefilename, fmt_desc);
-			flac__utils_printf(stderr, 1, "             Generated %s file will have a data chunk size of 0.  Try\n", fmt_desc);
-			flac__utils_printf(stderr, 1, "             decoding directly to a file instead.\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, don't have accurate sample count available for %s header.\n", decoder_session->inbasefilename, fmt_desc);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "             Generated %s file will have a data chunk size of 0.  Try\n", fmt_desc);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "             decoding directly to a file instead.\n");
 			if(decoder_session->treat_warnings_as_errors)
 				return false;
 		}
@@ -631,7 +631,7 @@
 	}
 
 	if(data_size + foreign_metadata_size + 60/*worst-case*/ >= 0xFFFFFFF4) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: stream is too big to fit in a single %s file\n", decoder_session->inbasefilename, fmt_desc);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: stream is too big to fit in a single %s file\n", decoder_session->inbasefilename, fmt_desc);
 		return false;
 	}
 
@@ -651,7 +651,7 @@
 			/* seek forward to {allocate} or {skip over already-written chunks} before "fmt " */
 			for(i = 1; i < fm->format_block; i++) {
 				if(fseeko(f, fm->blocks[i].size, SEEK_CUR) < 0) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: allocating/skipping foreign metadata before \"fmt \"\n", decoder_session->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: allocating/skipping foreign metadata before \"fmt \"\n", decoder_session->inbasefilename);
 					return false;
 				}
 			}
@@ -666,7 +666,7 @@
 			/* seek forward to {allocate} or {skip over already-written chunks} after "fmt " but before "data" */
 			for(i = fm->format_block+1; i < fm->audio_block; i++) {
 				if(fseeko(f, fm->blocks[i].size, SEEK_CUR) < 0) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: allocating/skipping foreign metadata after \"fmt \"\n", decoder_session->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: allocating/skipping foreign metadata after \"fmt \"\n", decoder_session->inbasefilename);
 					return false;
 				}
 			}
@@ -698,7 +698,7 @@
 			/* seek forward to {allocate} or {skip over already-written chunks} before "COMM" */
 			for(i = 1; i < fm->format_block; i++) {
 				if(fseeko(f, fm->blocks[i].size, SEEK_CUR) < 0) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: allocating/skipping foreign metadata before \"COMM\"\n", decoder_session->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: allocating/skipping foreign metadata before \"COMM\"\n", decoder_session->inbasefilename);
 					return false;
 				}
 			}
@@ -713,7 +713,7 @@
 			/* seek forward to {allocate} or {skip over already-written chunks} after "COMM" but before "SSND" */
 			for(i = fm->format_block+1; i < fm->audio_block; i++) {
 				if(fseeko(f, fm->blocks[i].size, SEEK_CUR) < 0) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: allocating/skipping foreign metadata after \"COMM\"\n", decoder_session->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: allocating/skipping foreign metadata after \"COMM\"\n", decoder_session->inbasefilename);
 					return false;
 				}
 			}
@@ -734,7 +734,7 @@
 		if(ssnd_offset_size) {
 			/* seek forward to {allocate} or {skip over already-written} SSND offset */
 			if(fseeko(f, ssnd_offset_size, SEEK_CUR) < 0) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: allocating/skipping \"SSND\" offset\n", decoder_session->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: allocating/skipping \"SSND\" offset\n", decoder_session->inbasefilename);
 				return false;
 			}
 		}
@@ -893,7 +893,7 @@
 	FILE *f = fopen(d->outfilename, "r+b"); /* stream is positioned at beginning of file */
 
 	if(0 == f) {
-		flac__utils_printf(stderr, 1, "ERROR, couldn't open file %s while fixing up %s chunk size: %s\n", d->outfilename, fmt_desc, strerror(errno));
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR, couldn't open file %s while fixing up %s chunk size: %s\n", d->outfilename, fmt_desc, strerror(errno));
 		return false;
 	}
 
@@ -933,9 +933,9 @@
 	if(decoder_session->bps) {
 		if(bps != decoder_session->bps) {
 			if(decoder_session->got_stream_info)
-				flac__utils_printf(stderr, 1, "%s: ERROR, bits-per-sample is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, bps, decoder_session->bps);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, bits-per-sample is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, bps, decoder_session->bps);
 			else
-				flac__utils_printf(stderr, 1, "%s: ERROR, bits-per-sample is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, bps, decoder_session->bps);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, bits-per-sample is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, bps, decoder_session->bps);
 			if(!decoder_session->continue_through_decode_errors)
 				return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
 		}
@@ -950,9 +950,9 @@
 	if(decoder_session->channels) {
 		if(channels != decoder_session->channels) {
 			if(decoder_session->got_stream_info)
-				flac__utils_printf(stderr, 1, "%s: ERROR, channels is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, channels, decoder_session->channels);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, channels is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, channels, decoder_session->channels);
 			else
-				flac__utils_printf(stderr, 1, "%s: ERROR, channels is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, channels, decoder_session->channels);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, channels is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, channels, decoder_session->channels);
 			if(!decoder_session->continue_through_decode_errors)
 				return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
 		}
@@ -967,9 +967,9 @@
 	if(decoder_session->sample_rate) {
 		if(frame->header.sample_rate != decoder_session->sample_rate) {
 			if(decoder_session->got_stream_info)
-				flac__utils_printf(stderr, 1, "%s: ERROR, sample rate is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, frame->header.sample_rate, decoder_session->sample_rate);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, sample rate is %u in frame but %u in STREAMINFO\n", decoder_session->inbasefilename, frame->header.sample_rate, decoder_session->sample_rate);
 			else
-				flac__utils_printf(stderr, 1, "%s: ERROR, sample rate is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, frame->header.sample_rate, decoder_session->sample_rate);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, sample rate is %u in this frame but %u in previous frames\n", decoder_session->inbasefilename, frame->header.sample_rate, decoder_session->sample_rate);
 			if(!decoder_session->continue_through_decode_errors)
 				return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
 		}
@@ -989,7 +989,7 @@
 		if(decoder_session->skip_specification->value.samples == 0) /* special case for when no --skip was given */
 			decoder_session->skip_specification->is_relative = false; /* convert to our meaning of beginning-of-stream */
 		else {
-			flac__utils_printf(stderr, 1, "%s: ERROR, cannot use --skip because the total sample count was not found in the metadata\n", decoder_session->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, cannot use --skip because the total sample count was not found in the metadata\n", decoder_session->inbasefilename);
 			return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
 		}
 	}
@@ -997,7 +997,7 @@
 		if(decoder_session->until_specification->value.samples == 0) /* special case for when no --until was given */
 			decoder_session->until_specification->is_relative = false; /* convert to our meaning of end-of-stream */
 		else {
-			flac__utils_printf(stderr, 1, "%s: ERROR, cannot use --until because the total sample count was not found in the metadata\n", decoder_session->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, cannot use --until because the total sample count was not found in the metadata\n", decoder_session->inbasefilename);
 			return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
 		}
 	}
@@ -1219,12 +1219,12 @@
 
 		/* remember, metadata->data.stream_info.total_samples can be 0, meaning 'unknown' */
 		if(metadata->data.stream_info.total_samples > 0 && skip >= metadata->data.stream_info.total_samples) {
-			flac__utils_printf(stderr, 1, "%s: ERROR trying to --skip more samples than in stream\n", decoder_session->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR trying to --skip more samples than in stream\n", decoder_session->inbasefilename);
 			decoder_session->abort_flag = true;
 			return;
 		}
 		else if(metadata->data.stream_info.total_samples == 0 && skip > 0) {
-			flac__utils_printf(stderr, 1, "%s: ERROR, can't --skip when FLAC metadata has total sample count of 0\n", decoder_session->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, can't --skip when FLAC metadata has total sample count of 0\n", decoder_session->inbasefilename);
 			decoder_session->abort_flag = true;
 			return;
 		}
@@ -1246,7 +1246,7 @@
 		}
 
 		if(decoder_session->bps < 4 || decoder_session->bps > 24) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: bits per sample is %u, must be 4-24\n", decoder_session->inbasefilename, decoder_session->bps);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: bits per sample is %u, must be 4-24\n", decoder_session->inbasefilename, decoder_session->bps);
 			decoder_session->abort_flag = true;
 			return;
 		}
@@ -1254,7 +1254,7 @@
 	else if(metadata->type == FLAC__METADATA_TYPE_CUESHEET) {
 		/* remember, at this point, decoder_session->total_samples can be 0, meaning 'unknown' */
 		if(decoder_session->total_samples == 0) {
-			flac__utils_printf(stderr, 1, "%s: ERROR can't use --cue when FLAC metadata has total sample count of 0\n", decoder_session->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR can't use --cue when FLAC metadata has total sample count of 0\n", decoder_session->inbasefilename);
 			decoder_session->abort_flag = true;
 			return;
 		}
@@ -1278,7 +1278,7 @@
 		if (decoder_session->replaygain.spec.apply) {
 			double reference, gain, peak;
 			if (!(decoder_session->replaygain.apply = grabbag__replaygain_load_from_vorbiscomment(metadata, decoder_session->replaygain.spec.use_album_gain, /*strict=*/false, &reference, &gain, &peak))) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: can't get %s (or even %s) ReplayGain tags\n", decoder_session->inbasefilename, decoder_session->replaygain.spec.use_album_gain? "album":"track", decoder_session->replaygain.spec.use_album_gain? "track":"album");
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: can't get %s (or even %s) ReplayGain tags\n", decoder_session->inbasefilename, decoder_session->replaygain.spec.use_album_gain? "album":"track", decoder_session->replaygain.spec.use_album_gain? "track":"album");
 				if(decoder_session->treat_warnings_as_errors) {
 					decoder_session->abort_flag = true;
 					return;
@@ -1290,8 +1290,8 @@
 				decoder_session->replaygain.scale = grabbag__replaygain_compute_scale_factor(peak, gain, decoder_session->replaygain.spec.preamp, decoder_session->replaygain.spec.limiter == RGSS_LIMIT__PEAK);
 				FLAC__ASSERT(decoder_session->bps > 0 && decoder_session->bps <= 32);
 				FLAC__replaygain_synthesis__init_dither_context(&decoder_session->replaygain.dither_context, decoder_session->bps, decoder_session->replaygain.spec.noise_shaping);
-				flac__utils_printf(stderr, 1, "%s: INFO: applying %s ReplayGain (gain=%0.2fdB+preamp=%0.1fdB, %s noise shaping, %s limiting) to output\n", decoder_session->inbasefilename, decoder_session->replaygain.spec.use_album_gain? "album":"track", gain, decoder_session->replaygain.spec.preamp, ns[decoder_session->replaygain.spec.noise_shaping], ls[decoder_session->replaygain.spec.limiter]);
-				flac__utils_printf(stderr, 1, "%s: WARNING: applying ReplayGain is not lossless\n", decoder_session->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: INFO: applying %s ReplayGain (gain=%0.2fdB+preamp=%0.1fdB, %s noise shaping, %s limiting) to output\n", decoder_session->inbasefilename, decoder_session->replaygain.spec.use_album_gain? "album":"track", gain, decoder_session->replaygain.spec.preamp, ns[decoder_session->replaygain.spec.noise_shaping], ls[decoder_session->replaygain.spec.limiter]);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: applying ReplayGain is not lossless\n", decoder_session->inbasefilename);
 				/* don't check if(decoder_session->treat_warnings_as_errors) because the user explicitly asked for it */
 			}
 		}
@@ -1303,7 +1303,7 @@
 {
 	DecoderSession *decoder_session = (DecoderSession*)client_data;
 	(void)decoder;
-	flac__utils_printf(stderr, 1, "%s: *** Got error code %d:%s\n", decoder_session->inbasefilename, status, FLAC__StreamDecoderErrorStatusString[status]);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: *** Got error code %d:%s\n", decoder_session->inbasefilename, status, FLAC__StreamDecoderErrorStatusString[status]);
 	if(!decoder_session->continue_through_decode_errors) {
 		decoder_session->abort_flag = true;
 		if(status == FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM)
@@ -1315,13 +1315,13 @@
 {
 	const int ilen = strlen(d->inbasefilename) + 1;
 
-	flac__utils_printf(stderr, 1, "\n%s: %s\n", d->inbasefilename, message);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "\n%s: %s\n", d->inbasefilename, message);
 
-	flac__utils_printf(stderr, 1, "%*s init status = %s\n", ilen, "", FLAC__StreamDecoderInitStatusString[init_status]);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%*s init status = %s\n", ilen, "", FLAC__StreamDecoderInitStatusString[init_status]);
 
 	/* print out some more info for some errors: */
 	if (init_status == FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE) {
-		flac__utils_printf(stderr, 1,
+		flac__utils_printf(stderr, VERBOSITY_SILENT,
 			"\n"
 			"An error occurred opening the input file; it is likely that it does not exist\n"
 			"or is not readable.\n"
@@ -1333,12 +1333,12 @@
 {
 	const int ilen = strlen(d->inbasefilename) + 1;
 
-	flac__utils_printf(stderr, 1, "\n%s: %s\n", d->inbasefilename, message);
-	flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", FLAC__stream_decoder_get_resolved_state_string(d->decoder));
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "\n%s: %s\n", d->inbasefilename, message);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%*s state = %s\n", ilen, "", FLAC__stream_decoder_get_resolved_state_string(d->decoder));
 
 	/* print out some more info for some errors: */
 	if (d->aborting_due_to_unparseable) {
-		flac__utils_printf(stderr, 1,
+		flac__utils_printf(stderr, VERBOSITY_SILENT,
 			"\n"
 			"The FLAC stream may have been created by a more advanced encoder.  Try\n"
 			"  metaflac --show-vendor-tag %s\n"
@@ -1355,7 +1355,7 @@
 
 void print_stats(const DecoderSession *decoder_session)
 {
-	if(flac__utils_verbosity_ >= 2) {
+	if(flac__utils_verbosity_ > VERBOSITY_SILENT) {
 #if defined _MSC_VER || defined __MINGW32__
 		/* with MSVC you have to spoon feed it the casting */
 		const double progress = (double)(FLAC__int64)decoder_session->samples_processed / (double)(FLAC__int64)decoder_session->total_samples * 100.0;
Index: src/flac/encode.c
===================================================================
RCS file: /cvsroot/flac/flac/src/flac/encode.c,v
retrieving revision 1.198
diff -u -r1.198 encode.c
--- src/flac/encode.c	28 Feb 2008 05:34:25 -0000	1.198
+++ src/flac/encode.c	15 May 2008 15:11:54 -0000
@@ -206,7 +206,7 @@
 	while(!feof(e->fin) && !got_data_chunk) {
 		char chunk_id[5] = { '\0', '\0', '\0', '\0', '\0' }; /* one extra byte for terminating NUL so we can also treat it like a C string */
 		if(!read_bytes(e->fin, (FLAC__byte*)chunk_id, 4, /*eof_ok=*/true, e->inbasefilename)) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: incomplete chunk identifier\n", e->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: incomplete chunk identifier\n", e->inbasefilename);
 			return false;
 		}
 		if(feof(e->fin))
@@ -219,7 +219,7 @@
 			unsigned block_align;
 
 			if(got_fmt_chunk) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: file has multiple 'fmt ' chunks\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: file has multiple 'fmt ' chunks\n", e->inbasefilename);
 				return false;
 			}
 
@@ -259,7 +259,7 @@
 				return false;
 			data_bytes = xx;
 			if(data_bytes < 16) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: non-standard 'fmt ' chunk has length = %u\n", e->inbasefilename, (unsigned)data_bytes);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: non-standard 'fmt ' chunk has length = %u\n", e->inbasefilename, (unsigned)data_bytes);
 				return false;
 			}
 
@@ -267,7 +267,7 @@
 			if(!read_uint16(e->fin, /*big_endian=*/false, &wFormatTag, e->inbasefilename))
 				return false;
 			if(wFormatTag != 1 /*WAVE_FORMAT_PCM*/ && wFormatTag != 65534 /*WAVE_FORMAT_EXTENSIBLE*/) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: unsupported format type %u\n", e->inbasefilename, (unsigned)wFormatTag);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported format type %u\n", e->inbasefilename, (unsigned)wFormatTag);
 				return false;
 			}
 
@@ -299,13 +299,13 @@
 				if(bps != 8 && bps != 16) {
 					if(bps == 24 || bps == 32) {
 						/* let these slide with a warning since they're unambiguous */
-						flac__utils_printf(stderr, 1, "%s: WARNING: legacy WAVE file has format type %u but bits-per-sample=%u\n", e->inbasefilename, (unsigned)wFormatTag, bps);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: legacy WAVE file has format type %u but bits-per-sample=%u\n", e->inbasefilename, (unsigned)wFormatTag, bps);
 						if(e->treat_warnings_as_errors)
 							return false;
 					}
 					else {
 						/* @@@ we could add an option to specify left- or right-justified blocks so we knew how to set 'shift' */
-						flac__utils_printf(stderr, 1, "%s: ERROR: legacy WAVE file has format type %u but bits-per-sample=%u\n", e->inbasefilename, (unsigned)wFormatTag, bps);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: legacy WAVE file has format type %u but bits-per-sample=%u\n", e->inbasefilename, (unsigned)wFormatTag, bps);
 						return false;
 					}
 				}
@@ -313,7 +313,7 @@
 				if((bps+7)/8 * channels == block_align) {
 					if(bps % 8) {
 						/* assume legacy file is byte aligned with some LSBs zero; this is double-checked in format_input() */
-						flac__utils_printf(stderr, 1, "%s: WARNING: legacy WAVE file (format type %d) has block alignment=%u, bits-per-sample=%u, channels=%u\n", e->inbasefilename, (unsigned)wFormatTag, block_align, bps, channels);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: legacy WAVE file (format type %d) has block alignment=%u, bits-per-sample=%u, channels=%u\n", e->inbasefilename, (unsigned)wFormatTag, block_align, bps, channels);
 						if(e->treat_warnings_as_errors)
 							return false;
 						shift = 8 - (bps % 8);
@@ -323,14 +323,14 @@
 						shift = 0;
 				}
 				else {
-					flac__utils_printf(stderr, 1, "%s: ERROR: illegal WAVE file (format type %d) has block alignment=%u, bits-per-sample=%u, channels=%u\n", e->inbasefilename, (unsigned)wFormatTag, block_align, bps, channels);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: illegal WAVE file (format type %d) has block alignment=%u, bits-per-sample=%u, channels=%u\n", e->inbasefilename, (unsigned)wFormatTag, block_align, bps, channels);
 					return false;
 				}
 #else
 				shift = 0;
 #endif
 				if(channels > 2 && !options.channel_map_none) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: WAVE has >2 channels but is not WAVE_FORMAT_EXTENSIBLE; cannot assign channels\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: WAVE has >2 channels but is not WAVE_FORMAT_EXTENSIBLE; cannot assign channels\n", e->inbasefilename);
 					return false;
 				}
 				FLAC__ASSERT(data_bytes >= 16);
@@ -338,21 +338,21 @@
 			}
 			else {
 				if(data_bytes < 40) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with size %u\n", e->inbasefilename, (unsigned)data_bytes);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with size %u\n", e->inbasefilename, (unsigned)data_bytes);
 					return false;
 				}
 				/* cbSize */
 				if(!read_uint16(e->fin, /*big_endian=*/false, &x, e->inbasefilename))
 					return false;
 				if(x < 22) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with cbSize %u\n", e->inbasefilename, (unsigned)x);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with cbSize %u\n", e->inbasefilename, (unsigned)x);
 					return false;
 				}
 				/* valid bps */
 				if(!read_uint16(e->fin, /*big_endian=*/false, &x, e->inbasefilename))
 					return false;
 				if((unsigned)x > bps) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with wValidBitsPerSample (%u) > wBitsPerSample (%u)\n", e->inbasefilename, (unsigned)x, bps);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: invalid WAVEFORMATEXTENSIBLE chunk with wValidBitsPerSample (%u) > wBitsPerSample (%u)\n", e->inbasefilename, (unsigned)x, bps);
 					return false;
 				}
 				shift = bps - (unsigned)x;
@@ -418,12 +418,12 @@
 				}
 #endif
 				else {
-					flac__utils_printf(stderr, 1, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk with unsupported channel mask=0x%04X\n\nUse --channel-map=none option to store channels in current order; FLAC files\nmust also be decoded with --channel-map=none to restore correct order.\n", e->inbasefilename, (unsigned)channel_mask);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk with unsupported channel mask=0x%04X\n\nUse --channel-map=none option to store channels in current order; FLAC files\nmust also be decoded with --channel-map=none to restore correct order.\n", e->inbasefilename, (unsigned)channel_mask);
 					return false;
 				}
 				if(!options.channel_map_none) {
 					if(count_channel_mask_bits(channel_mask) < channels) {
-						flac__utils_printf(stderr, 1, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk: channel mask 0x%04X has unassigned channels (#channels=%u)\n", e->inbasefilename, (unsigned)channel_mask, channels);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk: channel mask 0x%04X has unassigned channels (#channels=%u)\n", e->inbasefilename, (unsigned)channel_mask, channels);
 						return false;
 					}
 #if 0
@@ -435,7 +435,7 @@
 						channel_mask = limit_channel_mask(channel_mask, channels);
 #else
 					else if(count_channel_mask_bits(channel_mask) > channels) {
-						flac__utils_printf(stderr, 1, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk: channel mask 0x%04X has extra bits for non-existant channels (#channels=%u)\n", e->inbasefilename, (unsigned)channel_mask, channels);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: WAVEFORMATEXTENSIBLE chunk: channel mask 0x%04X has extra bits for non-existant channels (#channels=%u)\n", e->inbasefilename, (unsigned)channel_mask, channels);
 						return false;
 					}
 #endif
@@ -444,7 +444,7 @@
 				if(!read_uint16(e->fin, /*big_endian=*/false, &x, e->inbasefilename))
 					return false;
 				if(x != 1) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: unsupported WAVEFORMATEXTENSIBLE chunk with non-PCM format %u\n", e->inbasefilename, (unsigned)x);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported WAVEFORMATEXTENSIBLE chunk with non-PCM format %u\n", e->inbasefilename, (unsigned)x);
 					return false;
 				}
 				data_bytes -= 26;
@@ -454,7 +454,7 @@
 
 			/* skip any extra data in the fmt chunk */
 			if(!fskip_ahead(e->fin, data_bytes)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over extra 'fmt' data\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping over extra 'fmt' data\n", e->inbasefilename);
 				return false;
 			}
 
@@ -464,7 +464,7 @@
 			FLAC__uint32 xx;
 
 			if(!got_fmt_chunk) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: got 'data' chunk before 'fmt' chunk\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: got 'data' chunk before 'fmt' chunk\n", e->inbasefilename);
 				return false;
 			}
 
@@ -474,7 +474,7 @@
 			if(options.ignore_chunk_sizes) {
 				FLAC__ASSERT(!options.sector_align);
 				if(xx) {
-					flac__utils_printf(stderr, 1, "%s: WARNING: \"data\" chunk has non-zero size, using --ignore-chunk-sizes is probably a bad idea\n", e->inbasefilename, chunk_id);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: \"data\" chunk has non-zero size, using --ignore-chunk-sizes is probably a bad idea\n", e->inbasefilename, chunk_id);
 					if(e->treat_warnings_as_errors)
 						return false;
 				}
@@ -483,7 +483,7 @@
 			else {
 				data_bytes = xx;
 				if(0 == data_bytes) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: 'data' chunk has size of 0\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: 'data' chunk has size of 0\n", e->inbasefilename);
 					return false;
 				}
 			}
@@ -497,7 +497,7 @@
 		else {
 			FLAC__uint32 xx;
 			if(!options.format_options.iff.foreign_metadata) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown chunk '%s' (use --keep-foreign-metadata to keep)\n", e->inbasefilename, chunk_id);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: skipping unknown chunk '%s' (use --keep-foreign-metadata to keep)\n", e->inbasefilename, chunk_id);
 				if(e->treat_warnings_as_errors)
 					return false;
 			}
@@ -510,7 +510,7 @@
 
 				FLAC__ASSERT(skip <= LONG_MAX);
 				if(!fskip_ahead(e->fin, skip)) {
-					flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over chunk\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping over chunk\n", e->inbasefilename);
 					return false;
 				}
 			}
@@ -518,11 +518,11 @@
 	}
 
 	if(!got_fmt_chunk) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: didn't find fmt chunk\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: didn't find fmt chunk\n", e->inbasefilename);
 		return false;
 	}
 	if(!got_data_chunk) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: didn't find data chunk\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: didn't find data chunk\n", e->inbasefilename);
 		return false;
 	}
 
@@ -550,7 +550,7 @@
 	while(!feof(e->fin) && !got_ssnd_chunk) {
 		char chunk_id[5] = { '\0', '\0', '\0', '\0', '\0' }; /* one extra byte for terminating NUL so we can also treat it like a C string */
 		if(!read_bytes(e->fin, (FLAC__byte*)chunk_id, 4, /*eof_ok=*/true, e->inbasefilename)) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: incomplete chunk identifier\n", e->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: incomplete chunk identifier\n", e->inbasefilename);
 			return false;
 		}
 		if(feof(e->fin))
@@ -564,7 +564,7 @@
 			const FLAC__uint32 minimum_comm_size = (is_aifc? 22 : 18);
 
 			if(got_comm_chunk) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: file has multiple 'COMM' chunks\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: file has multiple 'COMM' chunks\n", e->inbasefilename);
 				return false;
 			}
 
@@ -572,11 +572,11 @@
 			if(!read_uint32(e->fin, /*big_endian=*/true, &xx, e->inbasefilename))
 				return false;
 			else if(xx < minimum_comm_size) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: non-standard %s 'COMM' chunk has length = %u\n", e->inbasefilename, is_aifc? "AIFF-C" : "AIFF", (unsigned int)xx);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: non-standard %s 'COMM' chunk has length = %u\n", e->inbasefilename, is_aifc? "AIFF-C" : "AIFF", (unsigned int)xx);
 				return false;
 			}
 			else if(!is_aifc && xx != minimum_comm_size) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: non-standard %s 'COMM' chunk has length = %u, expected %u\n", e->inbasefilename, is_aifc? "AIFF-C" : "AIFF", (unsigned int)xx, minimum_comm_size);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: non-standard %s 'COMM' chunk has length = %u, expected %u\n", e->inbasefilename, is_aifc? "AIFF-C" : "AIFF", (unsigned int)xx, minimum_comm_size);
 				if(e->treat_warnings_as_errors)
 					return false;
 			}
@@ -587,7 +587,7 @@
 				return false;
 			channels = (unsigned)x;
 			if(channels > 2 && !options.channel_map_none) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: unsupported number channels %u for AIFF\n", e->inbasefilename, channels);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported number channels %u for AIFF\n", e->inbasefilename, channels);
 				return false;
 			}
 
@@ -617,7 +617,7 @@
 				else if(xx == 0x4E4F4E45) /* "NONE" */
 					; /* nothing to do, we already default to big-endian */
 				else {
-					flac__utils_printf(stderr, 1, "%s: ERROR: can't handle AIFF-C compression type \"%c%c%c%c\"\n", e->inbasefilename, (char)(xx>>24), (char)((xx>>16)&8), (char)((xx>>8)&8), (char)(xx&8));
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: can't handle AIFF-C compression type \"%c%c%c%c\"\n", e->inbasefilename, (char)(xx>>24), (char)((xx>>16)&8), (char)((xx>>8)&8), (char)(xx&8));
 					return false;
 				}
 			}
@@ -647,7 +647,7 @@
 				/* keep default channel order */
 			}
 			else {
-				flac__utils_printf(stderr, 1, "%s: ERROR: unsupported number channels %u for AIFF\n", e->inbasefilename, channels);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported number channels %u for AIFF\n", e->inbasefilename, channels);
 				return false;
 			}
 
@@ -655,7 +655,7 @@
 
 			/* skip any extra data in the COMM chunk */
 			if(!fskip_ahead(e->fin, skip)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over extra COMM data\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping over extra COMM data\n", e->inbasefilename);
 				return false;
 			}
 
@@ -666,7 +666,7 @@
 			unsigned offset = 0, block_size = 0, data_bytes;
 
 			if(!got_comm_chunk) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: got 'SSND' chunk before 'COMM' chunk\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: got 'SSND' chunk before 'COMM' chunk\n", e->inbasefilename);
 				return false;
 			}
 
@@ -676,7 +676,7 @@
 			if(options.ignore_chunk_sizes) {
 				FLAC__ASSERT(!options.sector_align);
 				if(xx) {
-					flac__utils_printf(stderr, 1, "%s: WARNING: \"SSND\" chunk has non-zero size, using --ignore-chunk-sizes is probably a bad idea\n", e->inbasefilename, chunk_id);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: \"SSND\" chunk has non-zero size, using --ignore-chunk-sizes is probably a bad idea\n", e->inbasefilename, chunk_id);
 					if(e->treat_warnings_as_errors)
 						return false;
 				}
@@ -698,18 +698,18 @@
 			if(!read_uint32(e->fin, /*big_endian=*/true, &xx, e->inbasefilename))
 				return false;
 			else if(xx != 0) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: block size is %u; must be 0\n", e->inbasefilename, (unsigned)xx);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: block size is %u; must be 0\n", e->inbasefilename, (unsigned)xx);
 				return false;
 			}
 			block_size = xx;
 
 			/* skip any SSND offset bytes */
 			if(!fskip_ahead(e->fin, offset)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: skipping offset in SSND chunk\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: skipping offset in SSND chunk\n", e->inbasefilename);
 				return false;
 			}
 			if(data_bytes != (sample_frames * e->info.bytes_per_wide_sample)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: SSND chunk size inconsistent with sample frame count\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: SSND chunk size inconsistent with sample frame count\n", e->inbasefilename);
 				return false;
 			}
 
@@ -720,7 +720,7 @@
 		else {
 			FLAC__uint32 xx;
 			if(!options.format_options.iff.foreign_metadata) {
-				flac__utils_printf(stderr, 1, "%s: WARNING: skipping unknown chunk '%s' (use --keep-foreign-metadata to keep)\n", e->inbasefilename, chunk_id);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: skipping unknown chunk '%s' (use --keep-foreign-metadata to keep)\n", e->inbasefilename, chunk_id);
 				if(e->treat_warnings_as_errors)
 					return false;
 			}
@@ -733,7 +733,7 @@
 
 				FLAC__ASSERT(skip <= LONG_MAX);
 				if(!fskip_ahead(e->fin, skip)) {
-					flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping over chunk\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping over chunk\n", e->inbasefilename);
 					return false;
 				}
 			}
@@ -741,11 +741,11 @@
 	}
 
 	if(!got_comm_chunk) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: didn't find COMM chunk\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: didn't find COMM chunk\n", e->inbasefilename);
 		return false;
 	}
 	if(!got_ssnd_chunk && sample_frames) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: didn't find SSND chunk\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: didn't find SSND chunk\n", e->inbasefilename);
 		return false;
 	}
 
@@ -764,39 +764,39 @@
 		FLAC__stream_decoder_set_md5_checking(e->fmt.flac.decoder, false) &&
 		FLAC__stream_decoder_set_metadata_respond_all(e->fmt.flac.decoder)
 	)) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: setting up decoder for FLAC input\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: setting up decoder for FLAC input\n", e->inbasefilename);
 		return false;
 	}
 
 	if (options.format == FORMAT_OGGFLAC) {
 		if (FLAC__stream_decoder_init_ogg_stream(e->fmt.flac.decoder, flac_decoder_read_callback, flac_decoder_seek_callback, flac_decoder_tell_callback, flac_decoder_length_callback, flac_decoder_eof_callback, flac_decoder_write_callback, flac_decoder_metadata_callback, flac_decoder_error_callback, /*client_data=*/e) != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: initializing decoder for Ogg FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: initializing decoder for Ogg FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
 			return false;
 		}
 	}
 	else if (FLAC__stream_decoder_init_stream(e->fmt.flac.decoder, flac_decoder_read_callback, flac_decoder_seek_callback, flac_decoder_tell_callback, flac_decoder_length_callback, flac_decoder_eof_callback, flac_decoder_write_callback, flac_decoder_metadata_callback, flac_decoder_error_callback, /*client_data=*/e) != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: initializing decoder for FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: initializing decoder for FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
 		return false;
 	}
 
 	if (!FLAC__stream_decoder_process_until_end_of_metadata(e->fmt.flac.decoder) || e->fmt.flac.client_data.fatal_error) {
 		if (e->fmt.flac.client_data.fatal_error)
-			flac__utils_printf(stderr, 1, "%s: ERROR: out of memory or too many metadata blocks while reading metadata in FLAC input\n", e->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: out of memory or too many metadata blocks while reading metadata in FLAC input\n", e->inbasefilename);
 		else
-			flac__utils_printf(stderr, 1, "%s: ERROR: reading metadata in FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: reading metadata in FLAC input, state = %s\n", e->inbasefilename, FLAC__stream_decoder_get_resolved_state_string(e->fmt.flac.decoder));
 		return false;
 	}
 
 	if (e->fmt.flac.client_data.num_metadata_blocks == 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: reading metadata in FLAC input, got no metadata blocks\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: reading metadata in FLAC input, got no metadata blocks\n", e->inbasefilename);
 		return false;
 	}
 	else if (e->fmt.flac.client_data.metadata_blocks[0]->type != FLAC__METADATA_TYPE_STREAMINFO) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: reading metadata in FLAC input, first metadata block is not STREAMINFO\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: reading metadata in FLAC input, first metadata block is not STREAMINFO\n", e->inbasefilename);
 		return false;
 	}
 	else if (e->fmt.flac.client_data.metadata_blocks[0]->data.stream_info.total_samples == 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: FLAC input has STREAMINFO with unknown total samples which is not supported\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: FLAC input has STREAMINFO with unknown total samples which is not supported\n", e->inbasefilename);
 		return false;
 	}
 
@@ -842,7 +842,7 @@
 				flac__foreign_metadata_read_from_wave(options.format_options.iff.foreign_metadata, infilename, &error) :
 				flac__foreign_metadata_read_from_aiff(options.format_options.iff.foreign_metadata, infilename, &error)
 		)) {
-			flac__utils_printf(stderr, 1, "%s: ERROR reading foreign metadata: %s\n", encoder_session.inbasefilename, error);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR reading foreign metadata: %s\n", encoder_session.inbasefilename, error);
 			return EncoderSession_finish_error(&encoder_session);
 		}
 	}
@@ -868,7 +868,7 @@
 			 * set up FLAC decoder for the input
 			 */
 			if (0 == (encoder_session.fmt.flac.decoder = FLAC__stream_decoder_new())) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: creating decoder for FLAC input\n", encoder_session.inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: creating decoder for FLAC input\n", encoder_session.inbasefilename);
 				return EncoderSession_finish_error(&encoder_session);
 			}
 			if(!get_sample_info_flac(&encoder_session, options))
@@ -882,28 +882,28 @@
 
 	/* some more checks */
 	if(encoder_session.info.channels == 0 || encoder_session.info.channels > FLAC__MAX_CHANNELS) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: unsupported number of channels %u\n", encoder_session.inbasefilename, encoder_session.info.channels);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported number of channels %u\n", encoder_session.inbasefilename, encoder_session.info.channels);
 		return EncoderSession_finish_error(&encoder_session);
 	}
 	if(!FLAC__format_sample_rate_is_valid(encoder_session.info.sample_rate)) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: unsupported sample rate %u\n", encoder_session.inbasefilename, encoder_session.info.sample_rate);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported sample rate %u\n", encoder_session.inbasefilename, encoder_session.info.sample_rate);
 		return EncoderSession_finish_error(&encoder_session);
 	}
 	if(encoder_session.info.bits_per_sample-encoder_session.info.shift < 4 || encoder_session.info.bits_per_sample-encoder_session.info.shift > 24) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: unsupported bits-per-sample %u\n", encoder_session.inbasefilename, encoder_session.info.bits_per_sample-encoder_session.info.shift);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unsupported bits-per-sample %u\n", encoder_session.inbasefilename, encoder_session.info.bits_per_sample-encoder_session.info.shift);
 		return EncoderSession_finish_error(&encoder_session);
 	}
 	if(options.sector_align) {
 		if(encoder_session.info.channels != 2) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: file has %u channels, must be 2 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.channels);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: file has %u channels, must be 2 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.channels);
 			return EncoderSession_finish_error(&encoder_session);
 		}
 		if(encoder_session.info.sample_rate != 44100) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: file's sample rate is %u, must be 44100 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.sample_rate);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: file's sample rate is %u, must be 44100 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.sample_rate);
 			return EncoderSession_finish_error(&encoder_session);
 		}
 		if(encoder_session.info.bits_per_sample-encoder_session.info.shift != 16) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: file has %u bits-per-sample, must be 16 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.bits_per_sample-encoder_session.info.shift);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: file has %u bits-per-sample, must be 16 for --sector-align\n", encoder_session.inbasefilename, encoder_session.info.bits_per_sample-encoder_session.info.shift);
 			return EncoderSession_finish_error(&encoder_session);
 		}
 	}
@@ -968,7 +968,7 @@
 				encoder_session.fmt.iff.data_bytes -= (unsigned)skip * encoder_session.info.bytes_per_wide_sample; /*@@@ WATCHOUT: 4GB limit */
 				if(options.ignore_chunk_sizes) {
 					encoder_session.total_samples_to_encode = 0;
-					flac__utils_printf(stderr, 2, "(No runtime statistics possible; please wait for encoding to finish...)\n");
+					flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "(No runtime statistics possible; please wait for encoding to finish...)\n");
 					FLAC__ASSERT(0 == until);
 				}
 				else {
@@ -1034,7 +1034,7 @@
 		}
 
 		if(encoder_session.total_samples_to_encode == 0)
-			flac__utils_printf(stderr, 2, "(No runtime statistics possible; please wait for encoding to finish...)\n");
+			flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "(No runtime statistics possible; please wait for encoding to finish...)\n");
 
 		if(options.format == FORMAT_FLAC || options.format == FORMAT_OGGFLAC)
 			encoder_session.fmt.flac.client_data.samples_left_to_process = encoder_session.total_samples_to_encode;
@@ -1053,7 +1053,7 @@
 							skip_bytes -= lookahead_length;
 							lookahead_length = 0;
 							if(!fskip_ahead(encoder_session.fin, skip_bytes)) {
-								flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping samples\n", encoder_session.inbasefilename);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping samples\n", encoder_session.inbasefilename);
 								return EncoderSession_finish_error(&encoder_session);
 							}
 						}
@@ -1067,7 +1067,7 @@
 				case FORMAT_AIFF:
 				case FORMAT_AIFF_C:
 					if(!fskip_ahead(encoder_session.fin, skip * encoder_session.info.bytes_per_wide_sample)) {
-						flac__utils_printf(stderr, 1, "%s: ERROR during read while skipping samples\n", encoder_session.inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read while skipping samples\n", encoder_session.inbasefilename);
 						return EncoderSession_finish_error(&encoder_session);
 					}
 					break;
@@ -1081,7 +1081,7 @@
 					 * encoder
 					 */
 					if(!FLAC__stream_decoder_seek_absolute(encoder_session.fmt.flac.decoder, skip)) {
-						flac__utils_printf(stderr, 1, "%s: ERROR while skipping samples, FLAC decoder state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR while skipping samples, FLAC decoder state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
 						return EncoderSession_finish_error(&encoder_session);
 					}
 					break;
@@ -1135,7 +1135,7 @@
 							memcpy(ucbuffer_, lookahead, lookahead_length);
 							bytes_read = fread(ucbuffer_+lookahead_length, sizeof(unsigned char), CHUNK_OF_SAMPLES * encoder_session.info.bytes_per_wide_sample - lookahead_length, infile) + lookahead_length;
 							if(ferror(infile)) {
-								flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 								return EncoderSession_finish_error(&encoder_session);
 							}
 							lookahead_length = 0;
@@ -1145,12 +1145,12 @@
 
 						if(bytes_read == 0) {
 							if(ferror(infile)) {
-								flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 								return EncoderSession_finish_error(&encoder_session);
 							}
 						}
 						else if(bytes_read % encoder_session.info.bytes_per_wide_sample != 0) {
-							flac__utils_printf(stderr, 1, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
+							flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
 							return EncoderSession_finish_error(&encoder_session);
 						}
 						else {
@@ -1182,7 +1182,7 @@
 								if(wanted > 0) {
 									bytes_read += fread(ucbuffer_+lookahead_length, sizeof(unsigned char), wanted, infile);
 									if(ferror(infile)) {
-										flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+										flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 										return EncoderSession_finish_error(&encoder_session);
 									}
 								}
@@ -1194,11 +1194,11 @@
 
 						if(bytes_read == 0) {
 							if(ferror(infile)) {
-								flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 								return EncoderSession_finish_error(&encoder_session);
 							}
 							else if(feof(infile)) {
-								flac__utils_printf(stderr, 1, "%s: WARNING: unexpected EOF; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: unexpected EOF; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
 								if(encoder_session.treat_warnings_as_errors)
 									return EncoderSession_finish_error(&encoder_session);
 								total_input_bytes_read = max_input_bytes;
@@ -1206,7 +1206,7 @@
 						}
 						else {
 							if(bytes_read % encoder_session.info.bytes_per_wide_sample != 0) {
-								flac__utils_printf(stderr, 1, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
 								return EncoderSession_finish_error(&encoder_session);
 							}
 							else {
@@ -1231,15 +1231,15 @@
 					size_t bytes_read = fread(ucbuffer_, sizeof(unsigned char), min(encoder_session.fmt.iff.data_bytes, CHUNK_OF_SAMPLES * encoder_session.info.bytes_per_wide_sample), infile);
 					if(bytes_read == 0) {
 						if(ferror(infile)) {
-							flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+							flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 							return EncoderSession_finish_error(&encoder_session);
 						}
 						else if(feof(infile)) {
 							if(options.ignore_chunk_sizes) {
-								flac__utils_printf(stderr, 1, "%s: INFO: hit EOF with --ignore-chunk-sizes, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.samples_written);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: INFO: hit EOF with --ignore-chunk-sizes, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.samples_written);
 							}
 							else {
-								flac__utils_printf(stderr, 1, "%s: WARNING: unexpected EOF; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
+								flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: unexpected EOF; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
 								if(encoder_session.treat_warnings_as_errors)
 									return EncoderSession_finish_error(&encoder_session);
 							}
@@ -1248,7 +1248,7 @@
 					}
 					else {
 						if(bytes_read % encoder_session.info.bytes_per_wide_sample != 0) {
-							flac__utils_printf(stderr, 1, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
+							flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: got partial sample\n", encoder_session.inbasefilename);
 							return EncoderSession_finish_error(&encoder_session);
 						}
 						else {
@@ -1275,12 +1275,12 @@
 					if(encoder_session.continue_through_decode_errors && FLAC__stream_decoder_get_state(encoder_session.fmt.flac.decoder) == FLAC__STREAM_DECODER_END_OF_STREAM)
 						break;
 					if(!FLAC__stream_decoder_process_single(encoder_session.fmt.flac.decoder)) {
-						flac__utils_printf(stderr, 1, "%s: ERROR: while decoding FLAC input, state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: while decoding FLAC input, state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
 						return EncoderSession_finish_error(&encoder_session);
 					}
 				}
 				if(encoder_session.fmt.flac.client_data.fatal_error) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: while decoding FLAC input, state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: while decoding FLAC input, state = %s\n", encoder_session.inbasefilename, FLAC__stream_decoder_get_resolved_state_string(encoder_session.fmt.flac.decoder));
 					return EncoderSession_finish_error(&encoder_session);
 				}
 				break;
@@ -1315,11 +1315,11 @@
 					FLAC__ASSERT(CHUNK_OF_SAMPLES >= 588);
 					bytes_read = fread(ucbuffer_, sizeof(unsigned char), (*options.align_reservoir_samples) * encoder_session.info.bytes_per_wide_sample, infile);
 					if(bytes_read == 0 && ferror(infile)) {
-						flac__utils_printf(stderr, 1, "%s: ERROR during read\n", encoder_session.inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR during read\n", encoder_session.inbasefilename);
 						return EncoderSession_finish_error(&encoder_session);
 					}
 					else if(bytes_read != (*options.align_reservoir_samples) * encoder_session.info.bytes_per_wide_sample) {
-						flac__utils_printf(stderr, 1, "%s: WARNING: unexpected EOF; read %u bytes; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)bytes_read, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING: unexpected EOF; read %u bytes; expected %u samples, got %u samples\n", encoder_session.inbasefilename, (unsigned)bytes_read, (unsigned)encoder_session.total_samples_to_encode, (unsigned)encoder_session.samples_written);
 						if(encoder_session.treat_warnings_as_errors)
 							return EncoderSession_finish_error(&encoder_session);
 					}
@@ -1415,13 +1415,13 @@
 	e->seek_table_template = 0;
 
 	if(0 == (e->seek_table_template = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE))) {
-		flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for seek table\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for seek table\n", e->inbasefilename);
 		return false;
 	}
 
 	e->encoder = FLAC__stream_encoder_new();
 	if(0 == e->encoder) {
-		flac__utils_printf(stderr, 1, "%s: ERROR creating the encoder instance\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR creating the encoder instance\n", e->inbasefilename);
 		EncoderSession_destroy(e);
 		return false;
 	}
@@ -1474,7 +1474,7 @@
 		print_error_with_state(e, "ERROR during encoding");
 	else if(e->total_samples_to_encode > 0) {
 		print_stats(e);
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 	}
 
 	if(verify_error) {
@@ -1483,10 +1483,10 @@
 	}
 	else {
 		if(info_align_carry >= 0) {
-			flac__utils_printf(stderr, 1, "%s: INFO: sector alignment causing %d samples to be carried over\n", e->inbasefilename, info_align_carry);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: INFO: sector alignment causing %d samples to be carried over\n", e->inbasefilename, info_align_carry);
 		}
 		if(info_align_zero >= 0) {
-			flac__utils_printf(stderr, 1, "%s: INFO: sector alignment causing %d zero samples to be appended\n", e->inbasefilename, info_align_zero);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: INFO: sector alignment causing %d zero samples to be appended\n", e->inbasefilename, info_align_zero);
 		}
 	}
 
@@ -1494,7 +1494,7 @@
 	if(ret == 0 && foreign_metadata) {
 		const char *error;
 		if(!flac__foreign_metadata_write_to_flac(foreign_metadata, e->infilename, e->outfilename, &error)) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: updating foreign metadata in FLAC file: %s\n", e->inbasefilename, error);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: updating foreign metadata in FLAC file: %s\n", e->inbasefilename, error);
 			ret = 1;
 		}
 	}
@@ -1509,7 +1509,7 @@
 	FLAC__ASSERT(e->encoder);
 
 	if(e->total_samples_to_encode > 0)
-		flac__utils_printf(stderr, 2, "\n");
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
 
 	if(FLAC__stream_encoder_get_state(e->encoder) == FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA)
 		print_verify_error(e);
@@ -1591,16 +1591,16 @@
 
 	if(e->replay_gain) {
 		if(channels != 1 && channels != 2) {
-			flac__utils_printf(stderr, 1, "%s: ERROR, number of channels (%u) must be 1 or 2 for --replay-gain\n", e->inbasefilename, channels);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, number of channels (%u) must be 1 or 2 for --replay-gain\n", e->inbasefilename, channels);
 			return false;
 		}
 		if(!grabbag__replaygain_is_valid_sample_frequency(sample_rate)) {
-			flac__utils_printf(stderr, 1, "%s: ERROR, invalid sample rate (%u) for --replay-gain\n", e->inbasefilename, sample_rate);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, invalid sample rate (%u) for --replay-gain\n", e->inbasefilename, sample_rate);
 			return false;
 		}
 		if(options.is_first_file) {
 			if(!grabbag__replaygain_init(sample_rate)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR initializing ReplayGain stage\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR initializing ReplayGain stage\n", e->inbasefilename);
 				return false;
 			}
 		}
@@ -1610,7 +1610,7 @@
 		return false;
 
 	if(!convert_to_seek_table_template(options.requested_seek_points, options.num_requested_seek_points, options.cued_seekpoints? static_metadata.cuesheet : 0, e)) {
-		flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for seek table\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for seek table\n", e->inbasefilename);
 		static_metadata_clear(&static_metadata);
 		return false;
 	}
@@ -1629,7 +1629,7 @@
 			for(i = 0; i < options.num_pictures; i++) {
 				FLAC__StreamMetadata *pic = FLAC__metadata_object_clone(options.pictures[i]);
 				if(0 == pic) {
-					flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for PICTURE block\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for PICTURE block\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1652,7 +1652,7 @@
 					vc_found = true;
 				if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_VORBIS_COMMENT && options.vorbis_comment->data.vorbis_comment.num_comments > 0) {
 					(void) flac__utils_get_channel_mask_tag(flac_decoder_data->metadata_blocks[i], &e->info.channel_mask);
-					flac__utils_printf(stderr, 1, "%s: WARNING, replacing tags from input FLAC file with those given on the command-line\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, replacing tags from input FLAC file with those given on the command-line\n", e->inbasefilename);
 					if(e->treat_warnings_as_errors) {
 						static_metadata_clear(&static_metadata);
 						return false;
@@ -1668,7 +1668,7 @@
 				/* prepend ours */
 				FLAC__StreamMetadata *vc = FLAC__metadata_object_clone(options.vorbis_comment);
 				if(0 == vc || (e->info.channel_mask && !flac__utils_set_channel_mask_tag(vc, e->info.channel_mask))) {
-					flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for VORBIS_COMMENT block\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for VORBIS_COMMENT block\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1691,7 +1691,7 @@
 				if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_CUESHEET && 0 == static_metadata.cuesheet) {
 					const FLAC__StreamMetadata_CueSheet *cs = &flac_decoder_data->metadata_blocks[i]->data.cue_sheet;
 					if(e->total_samples_to_encode == 0) {
-						flac__utils_printf(stderr, 1, "%s: WARNING, cuesheet in input FLAC file cannot be kept if input size is not known, dropping it...\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, cuesheet in input FLAC file cannot be kept if input size is not known, dropping it...\n", e->inbasefilename);
 						if(e->treat_warnings_as_errors) {
 							static_metadata_clear(&static_metadata);
 							return false;
@@ -1699,7 +1699,7 @@
 						existing_cuesheet_is_bad = true;
 					}
 					else if(e->total_samples_to_encode != cs->tracks[cs->num_tracks-1].offset) {
-						flac__utils_printf(stderr, 1, "%s: WARNING, lead-out offset of cuesheet in input FLAC file does not match input length, dropping existing cuesheet...\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, lead-out offset of cuesheet in input FLAC file does not match input length, dropping existing cuesheet...\n", e->inbasefilename);
 						if(e->treat_warnings_as_errors) {
 							static_metadata_clear(&static_metadata);
 							return false;
@@ -1709,7 +1709,7 @@
 				}
 				if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_CUESHEET && (existing_cuesheet_is_bad || 0 != static_metadata.cuesheet)) {
 					if(0 != static_metadata.cuesheet) {
-						flac__utils_printf(stderr, 1, "%s: WARNING, replacing cuesheet in input FLAC file with the one given on the command-line\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, replacing cuesheet in input FLAC file with the one given on the command-line\n", e->inbasefilename);
 						if(e->treat_warnings_as_errors) {
 							static_metadata_clear(&static_metadata);
 							return false;
@@ -1726,7 +1726,7 @@
 				/* prepend ours */
 				FLAC__StreamMetadata *cs = FLAC__metadata_object_clone(static_metadata.cuesheet);
 				if(0 == cs) {
-					flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for CUESHEET block\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for CUESHEET block\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1756,7 +1756,7 @@
 					existing_seektable = true;
 				if(flac_decoder_data->metadata_blocks[i]->type == FLAC__METADATA_TYPE_SEEKTABLE && (e->total_samples_to_encode != flac_decoder_data->metadata_blocks[0]->data.stream_info.total_samples || options.num_requested_seek_points >= 0)) {
 					if(options.num_requested_seek_points > 0) {
-						flac__utils_printf(stderr, 1, "%s: WARNING, replacing seektable in input FLAC file with the one given on the command-line\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, replacing seektable in input FLAC file with the one given on the command-line\n", e->inbasefilename);
 						if(e->treat_warnings_as_errors) {
 							static_metadata_clear(&static_metadata);
 							return false;
@@ -1765,7 +1765,7 @@
 					else if(options.num_requested_seek_points == 0)
 						; /* no warning, silently delete existing SEEKTABLE since user specified --no-seektable (-S-) */
 					else {
-						flac__utils_printf(stderr, 1, "%s: WARNING, can't use existing seektable in input FLAC since the input size is changing or unknown, dropping existing SEEKTABLE block...\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, can't use existing seektable in input FLAC since the input size is changing or unknown, dropping existing SEEKTABLE block...\n", e->inbasefilename);
 						if(e->treat_warnings_as_errors) {
 							static_metadata_clear(&static_metadata);
 							return false;
@@ -1783,7 +1783,7 @@
 				/* prepend ours */
 				FLAC__StreamMetadata *st = FLAC__metadata_object_clone(e->seek_table_template);
 				if(0 == st) {
-					flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for SEEKTABLE block\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for SEEKTABLE block\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1824,7 +1824,7 @@
 				if(p > 0 && flac_decoder_data->num_metadata_blocks < sizeof(flac_decoder_data->metadata_blocks)/sizeof(flac_decoder_data->metadata_blocks[0])) {
 					flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
 					if(0 == flac_decoder_data->metadata_blocks[flac_decoder_data->num_metadata_blocks]) {
-						flac__utils_printf(stderr, 1, "%s: ERROR allocating memory for PADDING block\n", e->inbasefilename);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR allocating memory for PADDING block\n", e->inbasefilename);
 						static_metadata_clear(&static_metadata);
 						return false;
 					}
@@ -1852,7 +1852,7 @@
 			static_metadata_append(&static_metadata, static_metadata.cuesheet, /*needs_delete=*/false);
 		if(e->info.channel_mask) {
 			if(!flac__utils_set_channel_mask_tag(options.vorbis_comment, e->info.channel_mask)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR adding channel mask tag\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR adding channel mask tag\n", e->inbasefilename);
 				static_metadata_clear(&static_metadata);
 				return false;
 			}
@@ -1864,7 +1864,7 @@
 			for(i = 0; i < foreign_metadata->num_blocks; i++) {
 				FLAC__StreamMetadata *p = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
 				if(!p) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: out of memory\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: out of memory\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1915,7 +1915,7 @@
 				break;
 			case CST_APODIZATION:
 				if(strlen(apodizations)+strlen(options.compression_settings[i].value.t_string)+2 >= sizeof(apodizations)) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: too many apodization functions requested\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: too many apodization functions requested\n", e->inbasefilename);
 					static_metadata_clear(&static_metadata);
 					return false;
 				}
@@ -1959,7 +1959,7 @@
 	FLAC__stream_encoder_disable_fixed_subframes(e->encoder, options.debug.disable_fixed_subframes);
 	FLAC__stream_encoder_disable_verbatim_subframes(e->encoder, options.debug.disable_verbatim_subframes);
 	if(!options.debug.do_md5) {
-		flac__utils_printf(stderr, 1, "%s: WARNING, MD5 computation disabled, resulting file will not have MD5 sum\n", e->inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, MD5 computation disabled, resulting file will not have MD5 sum\n", e->inbasefilename);
 		if(e->treat_warnings_as_errors) {
 			static_metadata_clear(&static_metadata);
 			return false;
@@ -2003,7 +2003,7 @@
 {
 	if(e->replay_gain) {
 		if(!grabbag__replaygain_analyze(buffer, e->info.channels==2, e->info.bits_per_sample, samples)) {
-			flac__utils_printf(stderr, 1, "%s: WARNING, error while calculating ReplayGain\n", e->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, error while calculating ReplayGain\n", e->inbasefilename);
 			if(e->treat_warnings_as_errors)
 				return false;
 		}
@@ -2054,7 +2054,7 @@
 
 	if(has_real_points) {
 		if(e->is_stdout) {
-			flac__utils_printf(stderr, 1, "%s: WARNING, cannot write back seekpoints when encoding to stdout\n", e->inbasefilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING, cannot write back seekpoints when encoding to stdout\n", e->inbasefilename);
 			if(e->treat_warnings_as_errors)
 				return false;
 		}
@@ -2076,7 +2076,7 @@
 
 	/* in any other case the total samples in the input must be known */
 	if(total_samples_in_input == 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, cannot use --until when input length is unknown\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, cannot use --until when input length is unknown\n", inbasefilename);
 		return false;
 	}
 
@@ -2093,15 +2093,15 @@
 
 	/* error check */
 	if(spec->value.samples < 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is before beginning of input\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is before beginning of input\n", inbasefilename);
 		return false;
 	}
 	if((FLAC__uint64)spec->value.samples <= skip) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is before --skip point\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is before --skip point\n", inbasefilename);
 		return false;
 	}
 	if((FLAC__uint64)spec->value.samples > total_samples_in_input) {
-		flac__utils_printf(stderr, 1, "%s: ERROR, --until value is after end of input\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR, --until value is after end of input\n", inbasefilename);
 		return false;
 	}
 
@@ -2119,32 +2119,32 @@
 		const FLAC__StreamMetadata *m = metadata[i];
 		if(m->type == FLAC__METADATA_TYPE_SEEKTABLE) {
 			if(!FLAC__format_seektable_is_legal(&m->data.seek_table)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: SEEKTABLE metadata block is invalid\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: SEEKTABLE metadata block is invalid\n", e->inbasefilename);
 				return false;
 			}
 		}
 		else if(m->type == FLAC__METADATA_TYPE_CUESHEET) {
 			if(!FLAC__format_cuesheet_is_legal(&m->data.cue_sheet, m->data.cue_sheet.is_cd, /*violation=*/0)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: CUESHEET metadata block is invalid\n", e->inbasefilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: CUESHEET metadata block is invalid\n", e->inbasefilename);
 				return false;
 			}
 		}
 		else if(m->type == FLAC__METADATA_TYPE_PICTURE) {
 			const char *error = 0;
 			if(!FLAC__format_picture_is_legal(&m->data.picture, &error)) {
-				flac__utils_printf(stderr, 1, "%s: ERROR: PICTURE metadata block is invalid: %s\n", e->inbasefilename, error);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: PICTURE metadata block is invalid: %s\n", e->inbasefilename, error);
 				return false;
 			}
 			if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD) {
 				if(metadata_picture_has_type1) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: there may only be one picture of type 1 (32x32 icon) in the file\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: there may only be one picture of type 1 (32x32 icon) in the file\n", e->inbasefilename);
 					return false;
 				}
 				metadata_picture_has_type1 = true;
 			}
 			else if(m->data.picture.type == FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON) {
 				if(metadata_picture_has_type2) {
-					flac__utils_printf(stderr, 1, "%s: ERROR: there may only be one picture of type 2 (icon) in the file\n", e->inbasefilename);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: there may only be one picture of type 2 (icon) in the file\n", e->inbasefilename);
 					return false;
 				}
 				metadata_picture_has_type2 = true;
@@ -2238,7 +2238,7 @@
 		for(wide_sample = 0; wide_sample < wide_samples; wide_sample++)
 			for(channel = 0; channel < channels; channel++) {
 				if(out[channel][wide_sample] & mask) {
-					flac__utils_printf(stderr, 1, "ERROR during read, sample data (channel#%u sample#%u = %d) has non-zero least-significant bits\n  WAVE/AIFF header said the last %u bits are not significant and should be zero.\n", channel, wide_sample, out[channel][wide_sample], shift);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR during read, sample data (channel#%u sample#%u = %d) has non-zero least-significant bits\n  WAVE/AIFF header said the last %u bits are not significant and should be zero.\n", channel, wide_sample, out[channel][wide_sample], shift);
 					return false;
 				}
 				out[channel][wide_sample] >>= shift;
@@ -2382,7 +2382,7 @@
     FLACDecoderData *data = &e->fmt.flac.client_data;
 	(void)decoder;
 
-	flac__utils_printf(stderr, 1, "%s: ERROR got %s while decoding FLAC input\n", e->inbasefilename, FLAC__StreamDecoderErrorStatusString[status]);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR got %s while decoding FLAC input\n", e->inbasefilename, FLAC__StreamDecoderErrorStatusString[status]);
 	if(!e->continue_through_decode_errors)
 		data->fatal_error = true;
 }
@@ -2397,12 +2397,12 @@
 		return true;
 
 	if(lead_out_offset == 0) {
-		flac__utils_printf(stderr, 1, "%s: ERROR cannot import cuesheet when the number of input samples to encode is unknown\n", inbasefilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR cannot import cuesheet when the number of input samples to encode is unknown\n", inbasefilename);
 		return false;
 	}
 
 	if(0 == (f = fopen(cuesheet_filename, "r"))) {
-		flac__utils_printf(stderr, 1, "%s: ERROR opening cuesheet \"%s\" for reading: %s\n", inbasefilename, cuesheet_filename, strerror(errno));
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR opening cuesheet \"%s\" for reading: %s\n", inbasefilename, cuesheet_filename, strerror(errno));
 		return false;
 	}
 
@@ -2411,18 +2411,18 @@
 	fclose(f);
 
 	if(0 == *cuesheet) {
-		flac__utils_printf(stderr, 1, "%s: ERROR parsing cuesheet \"%s\" on line %u: %s\n", inbasefilename, cuesheet_filename, last_line_read, error_message);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR parsing cuesheet \"%s\" on line %u: %s\n", inbasefilename, cuesheet_filename, last_line_read, error_message);
 		return false;
 	}
 
 	if(!FLAC__format_cuesheet_is_legal(&(*cuesheet)->data.cue_sheet, /*check_cd_da_subset=*/false, &error_message)) {
-		flac__utils_printf(stderr, 1, "%s: ERROR parsing cuesheet \"%s\": %s\n", inbasefilename, cuesheet_filename, error_message);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR parsing cuesheet \"%s\": %s\n", inbasefilename, cuesheet_filename, error_message);
 		return false;
 	}
 
 	/* if we're expecting CDDA, warn about non-compliance */
 	if(is_cdda && !FLAC__format_cuesheet_is_legal(&(*cuesheet)->data.cue_sheet, /*check_cd_da_subset=*/true, &error_message)) {
-		flac__utils_printf(stderr, 1, "%s: WARNING cuesheet \"%s\" is not audio CD compliant: %s\n", inbasefilename, cuesheet_filename, error_message);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: WARNING cuesheet \"%s\" is not audio CD compliant: %s\n", inbasefilename, cuesheet_filename, error_message);
 		if(treat_warnings_as_errors)
 			return false;
 		(*cuesheet)->data.cue_sheet.is_cd = false;
@@ -2444,22 +2444,25 @@
 	const double ratio = (double)encoder_session->bytes_written / ((double)(uesize? uesize:1) * min(1.0, progress));
 #endif
 
+	int verbosity = VERBOSITY_PROGRESS_SILENT;
+
 	FLAC__ASSERT(encoder_session->total_samples_to_encode > 0);
 
 	if(samples_written == encoder_session->total_samples_to_encode) {
-		flac__utils_printf(stderr, 2, "\r%s:%s wrote %u bytes, ratio=",
+		flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\r%s:%s wrote %u bytes, ratio=",
 			encoder_session->inbasefilename,
 			encoder_session->verify? " Verify OK," : "",
 			(unsigned)encoder_session->bytes_written
 		);
 	}
 	else {
-		flac__utils_printf(stderr, 2, "\r%s: %u%% complete, ratio=", encoder_session->inbasefilename, (unsigned)floor(progress * 100.0 + 0.5));
+		flac__utils_printf(stderr, VERBOSITY_NO_SILENT, "\r%s: %u%% complete, ratio=", encoder_session->inbasefilename, (unsigned)floor(progress * 100.0 + 0.5));
+		 verbosity = VERBOSITY_NO_SILENT;
 	}
 	if(uesize)
-		flac__utils_printf(stderr, 2, "%0.3f", ratio);
+		flac__utils_printf(stderr, verbosity, "%0.3f", ratio);
 	else
-		flac__utils_printf(stderr, 2, "N/A");
+		flac__utils_printf(stderr, verbosity, "N/A");
 }
 
 void print_error_with_init_status(const EncoderSession *e, const char *message, FLAC__StreamEncoderInitStatus init_status)
@@ -2467,24 +2470,24 @@
 	const int ilen = strlen(e->inbasefilename) + 1;
 	const char *state_string = "";
 
-	flac__utils_printf(stderr, 1, "\n%s: %s\n", e->inbasefilename, message);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "\n%s: %s\n", e->inbasefilename, message);
 
-	flac__utils_printf(stderr, 1, "%*s init_status = %s\n", ilen, "", FLAC__StreamEncoderInitStatusString[init_status]);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%*s init_status = %s\n", ilen, "", FLAC__StreamEncoderInitStatusString[init_status]);
 
 	if(init_status == FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR) {
 		state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder);
 
-		flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", state_string);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%*s state = %s\n", ilen, "", state_string);
 
 		/* print out some more info for some errors: */
 		if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])) {
-			flac__utils_printf(stderr, 1,
+			flac__utils_printf(stderr, VERBOSITY_SILENT,
 				"\n"
 				"An error occurred while writing; the most common cause is that the disk is full.\n"
 			);
 		}
 		else if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_IO_ERROR])) {
-			flac__utils_printf(stderr, 1,
+			flac__utils_printf(stderr, VERBOSITY_SILENT,
 				"\n"
 				"An error occurred opening the output file; it is likely that the output\n"
 				"directory does not exist or is not writable, the output file already exists and\n"
@@ -2493,7 +2496,7 @@
 		}
 	}
 	else if(init_status == FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE) {
-		flac__utils_printf(stderr, 1,
+		flac__utils_printf(stderr, VERBOSITY_SILENT,
 			"\n"
 			"The encoding parameters specified do not conform to the FLAC Subset and may not\n"
 			"be streamable or playable in hardware devices.  If you really understand the\n"
@@ -2508,15 +2511,15 @@
 	const int ilen = strlen(e->inbasefilename) + 1;
 	const char *state_string;
 
-	flac__utils_printf(stderr, 1, "\n%s: %s\n", e->inbasefilename, message);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "\n%s: %s\n", e->inbasefilename, message);
 
 	state_string = FLAC__stream_encoder_get_resolved_state_string(e->encoder);
 
-	flac__utils_printf(stderr, 1, "%*s state = %s\n", ilen, "", state_string);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%*s state = %s\n", ilen, "", state_string);
 
 	/* print out some more info for some errors: */
 	if(0 == strcmp(state_string, FLAC__StreamEncoderStateString[FLAC__STREAM_ENCODER_CLIENT_ERROR])) {
-		flac__utils_printf(stderr, 1,
+		flac__utils_printf(stderr, VERBOSITY_SILENT,
 			"\n"
 			"An error occurred while writing; the most common cause is that the disk is full.\n"
 		);
@@ -2534,20 +2537,20 @@
 
 	FLAC__stream_encoder_get_verify_decoder_error_stats(e->encoder, &absolute_sample, &frame_number, &channel, &sample, &expected, &got);
 
-	flac__utils_printf(stderr, 1, "%s: ERROR: mismatch in decoded data, verify FAILED!\n", e->inbasefilename);
-	flac__utils_printf(stderr, 1, "       Absolute sample=%u, frame=%u, channel=%u, sample=%u, expected %d, got %d\n", (unsigned)absolute_sample, frame_number, channel, sample, expected, got);
-	flac__utils_printf(stderr, 1, "       In all known cases, verify errors are caused by hardware problems,\n");
-	flac__utils_printf(stderr, 1, "       usually overclocking or bad RAM.  Delete %s\n", e->outfilename);
-	flac__utils_printf(stderr, 1, "       and repeat the flac command exactly as before.  If it does not give a\n");
-	flac__utils_printf(stderr, 1, "       verify error in the exact same place each time you try it, then there is\n");
-	flac__utils_printf(stderr, 1, "       a problem with your hardware; please see the FAQ:\n");
-	flac__utils_printf(stderr, 1, "           http://flac.sourceforge.net/faq.html#tools__hardware_prob\n");
-	flac__utils_printf(stderr, 1, "       If it does fail in the exact same place every time, keep\n");
-	flac__utils_printf(stderr, 1, "       %s and submit a bug report to:\n", e->outfilename);
-	flac__utils_printf(stderr, 1, "           https://sourceforge.net/bugs/?func=addbug&group_id=13478\n");
-	flac__utils_printf(stderr, 1, "       Make sure to upload the FLAC file and use the \"Monitor\" feature to\n");
-	flac__utils_printf(stderr, 1, "       monitor the bug status.\n");
-	flac__utils_printf(stderr, 1, "Verify FAILED!  Do not trust %s\n", e->outfilename);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: mismatch in decoded data, verify FAILED!\n", e->inbasefilename);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       Absolute sample=%u, frame=%u, channel=%u, sample=%u, expected %d, got %d\n", (unsigned)absolute_sample, frame_number, channel, sample, expected, got);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       In all known cases, verify errors are caused by hardware problems,\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       usually overclocking or bad RAM.  Delete %s\n", e->outfilename);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       and repeat the flac command exactly as before.  If it does not give a\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       verify error in the exact same place each time you try it, then there is\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       a problem with your hardware; please see the FAQ:\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "           http://flac.sourceforge.net/faq.html#tools__hardware_prob\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       If it does fail in the exact same place every time, keep\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       %s and submit a bug report to:\n", e->outfilename);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "           https://sourceforge.net/bugs/?func=addbug&group_id=13478\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       Make sure to upload the FLAC file and use the \"Monitor\" feature to\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "       monitor the bug status.\n");
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "Verify FAILED!  Do not trust %s\n", e->outfilename);
 }
 
 FLAC__bool read_bytes(FILE *f, FLAC__byte *buf, size_t n, FLAC__bool eof_ok, const char *fn)
@@ -2556,14 +2559,14 @@
 
 	if(bytes_read == 0) {
 		if(!eof_ok) {
-			flac__utils_printf(stderr, 1, "%s: ERROR: unexpected EOF\n", fn);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unexpected EOF\n", fn);
 			return false;
 		}
 		else
 			return true;
 	}
 	if(bytes_read < n) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: unexpected EOF\n", fn);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: unexpected EOF\n", fn);
 		return false;
 	}
 	return true;
@@ -2611,7 +2614,7 @@
 	e = ((FLAC__uint16)(buf[0])<<8 | (FLAC__uint16)(buf[1]))-0x3FFF;
 	shift = 63-e;
 	if((buf[0]>>7)==1U || e<0 || e>63) {
-		flac__utils_printf(stderr, 1, "%s: ERROR: invalid floating-point value\n", fn);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR: invalid floating-point value\n", fn);
 		return false;
 	}
 
Index: src/flac/main.c
===================================================================
RCS file: /cvsroot/flac/flac/src/flac/main.c,v
retrieving revision 1.174
diff -u -r1.174 main.c
--- src/flac/main.c	28 Feb 2008 05:34:26 -0000	1.174
+++ src/flac/main.c	15 May 2008 15:11:55 -0000
@@ -106,6 +106,7 @@
 	{ "test"                  , share__no_argument, 0, 't' },
 	{ "stdout"                , share__no_argument, 0, 'c' },
 	{ "silent"                , share__no_argument, 0, 's' },
+	{ "progress-silent"       , share__no_argument, 0, 0 },
 	{ "totally-silent"        , share__no_argument, 0, 0 },
 	{ "warnings-as-errors"    , share__no_argument, 0, 'w' },
 	{ "force"                 , share__no_argument, 0, 'f' },
@@ -307,7 +308,7 @@
 	srand((unsigned)time(0));
 	setlocale(LC_ALL, "");
 	if(!init_options()) {
-		flac__utils_printf(stderr, 1, "ERROR: allocating memory\n");
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: allocating memory\n");
 		retval = 1;
 	}
 	else {
@@ -338,7 +339,7 @@
 	}
 	else {
 		if(option_values.num_files == 0) {
-			if(flac__utils_verbosity_ >= 1)
+			if(flac__utils_verbosity_ >= VERBOSITY_SILENT)
 				short_usage();
 			return 0;
 		}
@@ -441,7 +442,7 @@
 				(option_values.padding >= 0 && option_values.padding < (int)GRABBAG__REPLAYGAIN_MAX_TAG_SPACE_REQUIRED) ||
 				(option_values.padding < 0 && FLAC_ENCODE__DEFAULT_PADDING < (int)GRABBAG__REPLAYGAIN_MAX_TAG_SPACE_REQUIRED)
 			) {
-				flac__utils_printf(stderr, 1, "NOTE: --replay-gain may leave a small PADDING block even with --no-padding\n");
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "NOTE: --replay-gain may leave a small PADDING block even with --no-padding\n");
 				option_values.padding = GRABBAG__REPLAYGAIN_MAX_TAG_SPACE_REQUIRED;
 			}
 			else {
@@ -468,14 +469,14 @@
 			/*@@@@@@*/
 			if(option_values.delete_input)
 				return usage_error("ERROR: using --delete-input-file with --keep-foreign-metadata has been disabled until more testing has been done.\n");
-			flac__utils_printf(stderr, 1, "NOTE: --keep-foreign-metadata is a new feature; make sure to test the output file before deleting the original.\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "NOTE: --keep-foreign-metadata is a new feature; make sure to test the output file before deleting the original.\n");
 		}
 	}
 
-	flac__utils_printf(stderr, 2, "\n");
-	flac__utils_printf(stderr, 2, "flac %s, Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008  Josh Coalson\n", FLAC__VERSION_STRING);
-	flac__utils_printf(stderr, 2, "flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are\n");
-	flac__utils_printf(stderr, 2, "welcome to redistribute it under certain conditions.  Type `flac' for details.\n\n");
+	flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "\n");
+	flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "flac %s, Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008  Josh Coalson\n", FLAC__VERSION_STRING);
+	flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are\n");
+	flac__utils_printf(stderr, VERBOSITY_PROGRESS_SILENT, "welcome to redistribute it under certain conditions.  Type `flac' for details.\n\n");
 
 	if(option_values.mode_decode) {
 		FLAC__bool first = true;
@@ -499,7 +500,7 @@
 		FLAC__bool first = true;
 
 		if(option_values.ignore_chunk_sizes)
-			flac__utils_printf(stderr, 1, "INFO: Make sure you know what you're doing when using --ignore-chunk-sizes.\n      Improper use can cause flac to encode non-audio data as audio.\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "INFO: Make sure you know what you're doing when using --ignore-chunk-sizes.\n      Improper use can cause flac to encode non-audio data as audio.\n");
 
 		if(option_values.num_files == 0) {
 			retval = encode_file("-", first, true);
@@ -520,17 +521,17 @@
 				for(i = 0; i < option_values.num_files; i++) {
 					const char *error, *outfilename = get_encoded_outfilename(option_values.filenames[i]);
 					if(0 == outfilename) {
-						flac__utils_printf(stderr, 1, "ERROR: filename too long: %s", option_values.filenames[i]);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: filename too long: %s", option_values.filenames[i]);
 						return 1;
 					}
 					if(0 == strcmp(option_values.filenames[i], "-")) {
 						FLAC__ASSERT(0);
 						/* double protection */
-						flac__utils_printf(stderr, 1, "internal error\n");
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "internal error\n");
 						return 2;
 					}
 					if(0 != (error = grabbag__replaygain_store_to_file_album(outfilename, album_gain, album_peak, option_values.preserve_modtime))) {
-						flac__utils_printf(stderr, 1, "%s: ERROR writing ReplayGain album tags (%s)\n", outfilename, error);
+						flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR writing ReplayGain album tags (%s)\n", outfilename, error);
 						retval = 1;
 					}
 				}
@@ -659,7 +660,10 @@
 	if(short_option == 0) {
 		FLAC__ASSERT(0 != long_option);
 		if(0 == strcmp(long_option, "totally-silent")) {
-			flac__utils_verbosity_ = 0;
+			flac__utils_verbosity_ = VERBOSITY_TOTALLY_SILENT;
+		}
+		if(0 == strcmp(long_option, "progress-silent")) {
+			flac__utils_verbosity_ = VERBOSITY_PROGRESS_SILENT;
 		}
 		else if(0 == strcmp(long_option, "delete-input-file")) {
 			option_values.delete_input = true;
@@ -773,8 +777,8 @@
 			option_values.ignore_chunk_sizes = true;
 		}
 		else if(0 == strcmp(long_option, "sector-align")) {
-			flac__utils_printf(stderr, 1, "WARNING: --sector-align is DEPRECATED and may not exist in future versions of flac.\n");
-			flac__utils_printf(stderr, 1, "         shntool provides similar functionality\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "WARNING: --sector-align is DEPRECATED and may not exist in future versions of flac.\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "         shntool provides similar functionality\n");
 			option_values.sector_align = true;
 		}
 #if FLAC__HAS_OGG
@@ -832,7 +836,7 @@
 			option_values.continue_through_decode_errors = false;
 		}
 		else if(0 == strcmp(long_option, "no-silent")) {
-			flac__utils_verbosity_ = 2;
+			flac__utils_verbosity_ = VERBOSITY_NO_SILENT;
 		}
 		else if(0 == strcmp(long_option, "no-force")) {
 			option_values.force_file_overwrite = false;
@@ -935,7 +939,7 @@
 				option_values.force_to_stdout = true;
 				break;
 			case 's':
-				flac__utils_verbosity_ = 1;
+				flac__utils_verbosity_ = VERBOSITY_SILENT;
 				break;
 			case 'f':
 				option_values.force_file_overwrite = true;
@@ -1118,7 +1122,7 @@
 
 int usage_error(const char *message, ...)
 {
-	if(flac__utils_verbosity_ >= 1) {
+	if(flac__utils_verbosity_ >= VERBOSITY_SILENT) {
 		va_list args;
 
 		FLAC__ASSERT(0 != message);
@@ -1211,6 +1215,7 @@
 	printf("  -a, --analyze                Same as -d except an analysis file is written\n");
 	printf("  -c, --stdout                 Write output to stdout\n");
 	printf("  -s, --silent                 Do not write runtime encode/decode statistics\n");
+	printf("      --progress-silent        Only write runtime encode/decode statistics at task completion\n");
 	printf("      --totally-silent         Do not print anything, including errors\n");
 	printf("      --no-utf8-convert        Do not convert tags from local charset to UTF-8\n");
 	printf("  -w, --warnings-as-errors     Treat all warnings as errors\n");
@@ -1334,6 +1339,7 @@
 	printf("  -a, --analyze                Same as -d except an analysis file is written\n");
 	printf("  -c, --stdout                 Write output to stdout\n");
 	printf("  -s, --silent                 Do not write runtime encode/decode statistics\n");
+	printf("      --progress-silent        Only write runtime encode/decode statistics at task completion\n");
 	printf("      --totally-silent         Do not print anything of any kind, including\n");
 	printf("                               warnings or errors.  The exit code will be the\n");
 	printf("                               only way to determine successful completion.\n");
@@ -1640,7 +1646,7 @@
 {
 	/* WATCHOUT: indexed by FileFormat */
 	static const char * const ff[] = { " raw", " WAVE", "n AIFF", "n AIFF-C", " FLAC", "n Ogg FLAC" };
-	flac__utils_printf(stderr, 1, "WARNING: %s is not a%s file; treating as a%s file\n", infilename, ff[wrong], ff[right]);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "WARNING: %s is not a%s file; treating as a%s file\n", infilename, ff[wrong], ff[right]);
 }
 
 int encode_file(const char *infilename, FLAC__bool is_first_file, FLAC__bool is_last_file)
@@ -1657,7 +1663,7 @@
 	char *internal_outfilename = 0; /* NULL implies 'use outfilename' */
 
 	if(0 == outfilename) {
-		flac__utils_printf(stderr, 1, "ERROR: filename too long: %s", infilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: filename too long: %s", infilename);
 		return 1;
 	}
 
@@ -1668,7 +1674,7 @@
 	else {
 		infilesize = grabbag__file_get_filesize(infilename);
 		if(0 == (encode_infile = fopen(infilename, "rb"))) {
-			flac__utils_printf(stderr, 1, "ERROR: can't open input file %s: %s\n", infilename, strerror(errno));
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: can't open input file %s: %s\n", infilename, strerror(errno));
 			return 1;
 		}
 	}
@@ -1701,7 +1707,7 @@
 		}
 		else {
 			if(!strncmp((const char *)lookahead, "ID3", 3)) {
-				flac__utils_printf(stderr, 1, "ERROR: input file %s has an ID3v2 tag\n", infilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: input file %s has an ID3v2 tag\n", infilename);
 				return 1;
 			}
 			else if(!strncmp((const char *)lookahead, "RIFF", 4) && !strncmp((const char *)lookahead+8, "WAVE", 4))
@@ -1746,7 +1752,7 @@
 	if(!option_values.test_only && !option_values.force_file_overwrite && strcmp(outfilename, "-") && grabbag__file_get_filesize(outfilename) != (off_t)(-1)) {
 		if(input_format == FORMAT_FLAC) {
 			/* need more detailed error message when re-flac'ing to avoid confusing the user */
-			flac__utils_printf(stderr, 1,
+			flac__utils_printf(stderr, VERBOSITY_SILENT,
 				"ERROR: output file %s already exists.\n\n"
 				"By default flac encodes files to FLAC format; if you meant to decode this file\n"
 				"from FLAC to something else, use -d.  If you meant to re-encode this file from\n"
@@ -1757,7 +1763,7 @@
 		}
 		else if(input_format == FORMAT_OGGFLAC) {
 			/* need more detailed error message when re-flac'ing to avoid confusing the user */
-			flac__utils_printf(stderr, 1,
+			flac__utils_printf(stderr, VERBOSITY_SILENT,
 				"ERROR: output file %s already exists.\n\n"
 				"By default 'flac -ogg' encodes files to Ogg FLAC format; if you meant to decode\n"
 				"this file from Ogg FLAC to something else, use -d.  If you meant to re-encode\n"
@@ -1767,14 +1773,14 @@
 			);
 		}
 		else
-			flac__utils_printf(stderr, 1, "ERROR: output file %s already exists, use -f to override\n", outfilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: output file %s already exists, use -f to override\n", outfilename);
 		conditional_fclose(encode_infile);
 		return 1;
 	}
 
 	if(option_values.format_input_size >= 0) {
 	   	if (input_format != FORMAT_RAW || infilesize >= 0) {
-			flac__utils_printf(stderr, 1, "ERROR: can only use --input-size when encoding raw samples from stdin\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: can only use --input-size when encoding raw samples from stdin\n");
 			conditional_fclose(encode_infile);
 			return 1;
 		}
@@ -1784,12 +1790,12 @@
 	}
 
 	if(option_values.sector_align && (input_format == FORMAT_FLAC || input_format == FORMAT_OGGFLAC)) {
-		flac__utils_printf(stderr, 1, "ERROR: can't use --sector-align when the input file is FLAC or Ogg FLAC\n");
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: can't use --sector-align when the input file is FLAC or Ogg FLAC\n");
 		conditional_fclose(encode_infile);
 		return 1;
 	}
 	if(option_values.sector_align && input_format == FORMAT_RAW && infilesize < 0) {
-		flac__utils_printf(stderr, 1, "ERROR: can't use --sector-align when the input size is unknown\n");
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: can't use --sector-align when the input size is unknown\n");
 		conditional_fclose(encode_infile);
 		return 1;
 	}
@@ -1869,7 +1875,7 @@
 		static const char *tmp_suffix = ".tmp,fl-ac+en'c";
 		/*@@@@ still a remote possibility that a file with this filename exists */
 		if(0 == (internal_outfilename = (char *)safe_malloc_add_3op_(strlen(outfilename), /*+*/strlen(tmp_suffix), /*+*/1))) {
-			flac__utils_printf(stderr, 1, "ERROR allocating memory for tempfile name\n");
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR allocating memory for tempfile name\n");
 			conditional_fclose(encode_infile);
 			return 1;
 		}
@@ -1895,7 +1901,7 @@
 		/* read foreign metadata if requested */
 		if(option_values.keep_foreign_metadata) {
 			if(0 == (encode_options.format_options.iff.foreign_metadata = flac__foreign_metadata_new(input_format==FORMAT_WAVE? FOREIGN_BLOCK_TYPE__RIFF : FOREIGN_BLOCK_TYPE__AIFF))) {
-				flac__utils_printf(stderr, 1, "ERROR: creating foreign metadata object\n");
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: creating foreign metadata object\n");
 				conditional_fclose(encode_infile);
 				return 1;
 			}
@@ -1921,7 +1927,7 @@
 					0 != (error = grabbag__replaygain_store_to_file_reference(internal_outfilename? internal_outfilename : outfilename, option_values.preserve_modtime)) ||
 					0 != (error = grabbag__replaygain_store_to_file_title(internal_outfilename? internal_outfilename : outfilename, title_gain, title_peak, option_values.preserve_modtime))
 				) {
-					flac__utils_printf(stderr, 1, "%s: ERROR writing ReplayGain reference/title tags (%s)\n", outfilename, error);
+					flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: ERROR writing ReplayGain reference/title tags (%s)\n", outfilename, error);
 					retval = 1;
 				}
 			}
@@ -1936,15 +1942,15 @@
 #if defined _MSC_VER || defined __MINGW32__ || defined __EMX__
 			/* on some flavors of windows, rename() will fail if the destination already exists, so we unlink and try again */
 			if(unlink(outfilename) < 0) {
-				flac__utils_printf(stderr, 1, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, keeping both\n", internal_outfilename, outfilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, keeping both\n", internal_outfilename, outfilename);
 				retval = 1;
 			}
 			else if(rename(internal_outfilename, outfilename) < 0) {
-				flac__utils_printf(stderr, 1, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, you must do it\n", internal_outfilename, outfilename);
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, you must do it\n", internal_outfilename, outfilename);
 				retval = 1;
 			}
 #else
-			flac__utils_printf(stderr, 1, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, keeping both\n", internal_outfilename, outfilename);
+			flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: moving new FLAC file %s back on top of original FLAC file %s, keeping both\n", internal_outfilename, outfilename);
 			retval = 1;
 #endif
 		}
@@ -1969,7 +1975,7 @@
 	const char *outfilename = get_decoded_outfilename(infilename);
 
 	if(0 == outfilename) {
-		flac__utils_printf(stderr, 1, "ERROR: filename too long: %s", infilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: filename too long: %s", infilename);
 		return 1;
 	}
 
@@ -1978,7 +1984,7 @@
 	 * Use grabbag__file_get_filesize() as a cheap way to check.
 	 */
 	if(!option_values.test_only && !option_values.force_file_overwrite && strcmp(outfilename, "-") && grabbag__file_get_filesize(outfilename) != (off_t)(-1)) {
-		flac__utils_printf(stderr, 1, "ERROR: output file %s already exists, use -f to override\n", outfilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: output file %s already exists, use -f to override\n", outfilename);
 		return 1;
 	}
 
@@ -2016,7 +2022,7 @@
 
 #if !FLAC__HAS_OGG
 	if(treat_as_ogg) {
-		flac__utils_printf(stderr, 1, "%s: Ogg support has not been built into this copy of flac\n", infilename);
+		flac__utils_printf(stderr, VERBOSITY_SILENT, "%s: Ogg support has not been built into this copy of flac\n", infilename);
 		return 1;
 	}
 #endif
@@ -2066,7 +2072,7 @@
 		/* read foreign metadata if requested */
 		if(option_values.keep_foreign_metadata) {
 			if(0 == (options.foreign_metadata = flac__foreign_metadata_new(output_format==FORMAT_WAVE? FOREIGN_BLOCK_TYPE__RIFF : FOREIGN_BLOCK_TYPE__AIFF))) {
-				flac__utils_printf(stderr, 1, "ERROR: creating foreign metadata object\n");
+				flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: creating foreign metadata object\n");
 				return 1;
 			}
 		}
@@ -2148,7 +2154,7 @@
 void die(const char *message)
 {
 	FLAC__ASSERT(0 != message);
-	flac__utils_printf(stderr, 1, "ERROR: %s\n", message);
+	flac__utils_printf(stderr, VERBOSITY_SILENT, "ERROR: %s\n", message);
 	exit(1);
 }
 
Index: src/flac/utils.c
===================================================================
RCS file: /cvsroot/flac/flac/src/flac/utils.c,v
retrieving revision 1.15
diff -u -r1.15 utils.c
--- src/flac/utils.c	28 Feb 2008 05:34:26 -0000	1.15
+++ src/flac/utils.c	15 May 2008 15:11:55 -0000
@@ -31,7 +31,7 @@
 
 const char *CHANNEL_MASK_TAG = "WAVEFORMATEXTENSIBLE_CHANNEL_MASK";
 
-int flac__utils_verbosity_ = 2;
+int flac__utils_verbosity_ = VERBOSITY_NO_SILENT;
 
 static FLAC__bool local__parse_uint64_(const char *s, FLAC__uint64 *value)
 {
Index: src/flac/utils.h
===================================================================
RCS file: /cvsroot/flac/flac/src/flac/utils.h,v
retrieving revision 1.13
diff -u -r1.13 utils.h
--- src/flac/utils.h	28 Feb 2008 05:34:26 -0000	1.13
+++ src/flac/utils.h	15 May 2008 15:11:55 -0000
@@ -51,6 +51,7 @@
 #endif
 
 extern int flac__utils_verbosity_;
+typedef enum {VERBOSITY_TOTALLY_SILENT, VERBOSITY_SILENT, VERBOSITY_PROGRESS_SILENT, VERBOSITY_NO_SILENT} VerbosityLevels;
 void flac__utils_printf(FILE *stream, int level, const char *format, ...);
 
 FLAC__bool flac__utils_parse_skip_until_specification(const char *s, utils__SkipUntilSpecification *spec);