diff -urN xmp-4.1.0-orig/src/commands.c xmp-4.1.0/src/commands.c
--- xmp-4.1.0-orig/src/commands.c	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/commands.c	2019-10-28 02:03:03 +0900
@@ -260,5 +260,11 @@
 	case '<':
 		change_sequence(handle, mi, ctl, -1);
 		break;
+	case '[':
+		ctl->volume = -1;
+		break;
+	case ']':
+		ctl->volume = 1;
+		break;
 	}
 }
diff -urN xmp-4.1.0-orig/src/common.h xmp-4.1.0/src/common.h
--- xmp-4.1.0-orig/src/common.h	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/common.h	2019-10-28 02:11:34 +0900
@@ -26,7 +26,7 @@
 
 struct options {
 	int start;		/* start order */
-	int amplify;		/* amplification factor */
+	int volume;		/* player volume */
 	int rate;		/* sampling rate */
 	int format;		/* sample format */
 	int max_time;		/* max. replay time */
@@ -71,6 +71,7 @@
 	int cur_info;		/* Display current sequence or mixer type */
 	int amiga;		/* Toggle amiga mixer mode */
 	int mixer_type;		/* Mixer type (from player) */
+	int volume;		/* Volume adjustment flag */
 };
 
 extern struct player_mode pmode[];
diff -urN xmp-4.1.0-orig/src/info.c xmp-4.1.0/src/info.c
--- xmp-4.1.0-orig/src/info.c	2016-07-19 21:02:34 +0900
+++ xmp-4.1.0/src/info.c	2019-10-28 02:06:17 +0900
@@ -37,8 +37,8 @@
 "      I         Display instrument list\n"
 "      S         Display sample list\n"
 "      c         Display comment, if any\n"
-"      <         Play previous sequence\n"
-"      >         Play next sequence\n"
+"    <   >       Play previous/next sequence\n"
+"    [   ]       Adjust player volume down/up\n"
 );
 }
 
diff -urN xmp-4.1.0-orig/src/main.c xmp-4.1.0/src/main.c
--- xmp-4.1.0-orig/src/main.c	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/main.c	2019-10-28 02:22:27 +0900
@@ -202,6 +202,23 @@
 	}
 }
 
+static void set_volume(xmp_context xc, int volume)
+{
+	if (volume > 800) {
+		xmp_set_player(xc, XMP_PLAYER_AMP, 3);
+		xmp_set_player(xc, XMP_PLAYER_VOLUME, volume / 8);
+	} else if (volume > 400) {
+		xmp_set_player(xc, XMP_PLAYER_AMP, 2);
+		xmp_set_player(xc, XMP_PLAYER_VOLUME, volume / 4);
+	} else if (volume > 200) {
+		xmp_set_player(xc, XMP_PLAYER_AMP, 1);
+		xmp_set_player(xc, XMP_PLAYER_VOLUME, volume / 2);
+	} else {
+		xmp_set_player(xc, XMP_PLAYER_AMP, 0);
+		xmp_set_player(xc, XMP_PLAYER_VOLUME, volume);
+	}
+}
+
 static void load_error(char *name, char *filename, int val)
 {
 	char *msg;
@@ -259,6 +276,7 @@
 
 	/* set defaults */
 	opt.verbose = 1;
+	opt.volume = 100;
 	opt.rate = 44100;
 	opt.mix = -1;
 	opt.defpan = 50;
@@ -267,7 +285,6 @@
 	opt.interp = XMP_INTERP_SPLINE;
 	opt.dsp = XMP_DSP_LOWPASS;
 	opt.player_mode = XMP_MODE_AUTO;
-	opt.amplify = 1;
 
 	/* read configuration file */
 	if (!opt.norc) {
@@ -452,7 +469,7 @@
 
 			played = 1;
 
-			xmp_set_player(xc, XMP_PLAYER_AMP, opt.amplify);
+			set_volume(xc, opt.volume);
 
 			if (opt.mix >= 0) {
 				xmp_set_player(xc, XMP_PLAYER_MIX, opt.mix);
@@ -566,6 +583,35 @@
 						control.cur_info = 0;
 						break;
 					}
+
+					if (control.volume) {
+						if (control.volume > 0) {
+							if (opt.volume >= 1592) {
+								opt.volume = 1600;
+							} else if (opt.volume >= 800) {
+								opt.volume = ((opt.volume / 8) + 1) * 8;
+							} else if (opt.volume >= 400) {
+								opt.volume = ((opt.volume / 4) + 1) * 4;
+							} else if (opt.volume >= 200) {
+								opt.volume = ((opt.volume / 2) + 1) * 2;
+							} else {
+								opt.volume += 1;
+							}
+						} else {
+							if (opt.volume > 800) {
+								opt.volume = ((opt.volume / 8) - 1) * 8;
+							} else if (opt.volume > 400) {
+								opt.volume = ((opt.volume / 4) - 1) * 4;
+							} else if (opt.volume > 200) {
+								opt.volume = ((opt.volume / 2) - 1) * 2;
+							} else if (opt.volume > 0) {
+								opt.volume -= 1;
+							}
+						}
+						set_volume(xc, opt.volume);
+						info_message("Volume: %d%%", opt.volume);
+						control.volume = 0;
+					}
 				}
 
 				/* Check maximum replay time */
diff -urN xmp-4.1.0-orig/src/modules.conf xmp-4.1.0/src/modules.conf
--- xmp-4.1.0-orig/src/modules.conf	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/modules.conf	2019-10-28 02:15:45 +0900
@@ -5,7 +5,7 @@
 # Format is:
 #
 # [MD5sum]
-# amplify = <0|1|2|3>           Amplification factor (default is 1)
+# volume = <0-1600>             Module playback volume (default is 100)
 # amiga = yes/no		Enable Amiga simulation mixer if available
 # filter = yes/no               Enable filters (affects IT only)
 # fixloop = yes/no              Use sample loop start value / 2
diff -urN xmp-4.1.0-orig/src/options.c xmp-4.1.0/src/options.c
--- xmp-4.1.0-orig/src/options.c	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/options.c	2019-10-28 02:12:11 +0900
@@ -33,6 +33,7 @@
 	OPT_LOADONLY,
 	OPT_NOCMD,
 	OPT_VBLANK,
+	OPT_VERSION,
 	OPT_FIXLOOP,
 	OPT_NORC,
 	OPT_LOOPALL,
@@ -102,7 +103,6 @@
 "   -z --sequence num      Play the specified sequence (0=main)\n" 
 "\nMixer options:\n"
 "   -A --amiga             Use Paula simulation mixer in Amiga formats\n"
-"   -a --amplify {0|1|2|3} Amplification factor: 0=Normal, 1=x2, 2=x4, 3=x8\n"
 "   -b --bits {8|16}       Software mixer resolution (8 or 16 bits)\n"
 "   -c --stdout            Mix the module to stdout\n"
 "   -f --frequency rate    Sampling rate in hertz (default 44100)\n"
@@ -117,6 +117,7 @@
 "   -p --default-pan       Percentual default pan setting (default %d%%)\n"
 "   -r --reverse           Reverse left/right stereo channels\n"
 "   -u --unsigned          Set the mixer to use unsigned samples\n"
+"   -V --volume vol        Set playback volume (0-1600, 100=normal)\n"
 "\nEnvironment options:\n"
 "   -I --instrument-path   Set pathname to external samples\n"
 "\nInformation options:\n"
@@ -126,14 +127,13 @@
 "   --probe-only           Probe audio device and exit\n"
 "   --load-only            Load module and exit\n"
 "   -q --quiet             Quiet mode (verbosity level = 0)\n"
-"   -V --version           Print version information\n"
+"   --version              Print version information\n"
 "   -v --verbose           Verbose mode (incremental)\n",
 		options->numvoices, options->defpan);
 }
 
 static const struct option lopt[] = {
 	{ "amiga",		0, 0, 'A' },
-	{ "amplify",		1, 0, 'a' },
 	{ "bits",		1, 0, 'b' },
 	{ "driver",		1, 0, 'd' },
 	{ "default-pan",	1, 0, 'p' },
@@ -169,8 +169,9 @@
 	{ "time",		1, 0, 't' },
 	{ "unsigned",		0, 0, 'u' },
 	{ "vblank",		0, 0, OPT_VBLANK },
-	{ "version",		0, 0, 'V' },
+	{ "version",		0, 0, OPT_VERSION },
 	{ "verbose",		0, 0, 'v' },
+	{ "volume",		1, 0, 'V' },
 	{ "all-sequences",	1, 0, 'Z' },
 	{ "sequence",		1, 0, 'z' },
 	{ NULL,			0, 0, 0   }
@@ -182,15 +183,12 @@
 	int optidx = 0;
 	int o;
 
-#define OPTIONS "Aa:b:CcD:d:e:Ff:hI:i:LlM:mNo:P:p:qRrS:s:T:t:uVvZz:"
+#define OPTIONS "Ab:CcD:d:e:Ff:hI:i:LlM:mNo:P:p:qRrS:s:T:t:uV:vZz:"
 	while ((o = getopt_long(argc, argv, OPTIONS, lopt, &optidx)) != -1) {
 		switch (o) {
 		case 'A':
 			options->amiga = 1;
 			break;
-		case 'a':
-			options->amplify = atoi(optarg);
-			break;
 		case 'b':
 			if (atoi(optarg) == 8) {
 				options->format |= XMP_FORMAT_8BIT;
@@ -357,12 +355,15 @@
 		case OPT_VBLANK:
 			options->vblank = 1;
 			break;
-		case 'V':
+		case OPT_VERSION:
 			puts("Extended Module Player " VERSION);
 			exit(0);
 		case 'v':
 			options->verbose++;
 			break;
+		case 'V':
+			options->volume = strtoul(optarg, NULL, 0);
+			break;
 		case 'Z':
 			options->explore = 1;
 			break;
@@ -382,4 +383,8 @@
 		options->rate = 1000;	/* Min. rate 1 kHz */
 	if (options->rate > 48000)
 		options->rate = 48000;	/* Max. rate 48 kHz */
+	if (options->volume < 0)
+		options->volume = 0;
+	if (options->volume > 1600)
+		options->volume = 1600;
 }
diff -urN xmp-4.1.0-orig/src/read_config.c xmp-4.1.0/src/read_config.c
--- xmp-4.1.0-orig/src/read_config.c	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/read_config.c	2019-10-28 02:13:58 +0900
@@ -113,7 +113,7 @@
 		getval_yn("filter", o->dsp, XMP_DSP_LOWPASS);
 		getval_yn("loop", o->loop, 1);
 		getval_yn("reverse", o->reverse, 1);
-		getval_no("amplify", o->amplify);
+		getval_no("volume", o->volume);
 		getval_no("mix", o->mix);
 		getval_no("mixer_voices", o->numvoices);
 		getval_no("default_pan", o->defpan);
@@ -234,7 +234,7 @@
 		getval_yn("loop", o->loop, 1);
 		getval_yn("mono", mono, 1);
 		getval_yn("reverse", o->reverse, 1);
-		getval_no("amplify", o->amplify);
+		getval_no("volume", o->volume);
 		getval_no("mix", o->mix);
 		getval_no("mixer_voices", o->numvoices);
 
diff -urN xmp-4.1.0-orig/src/xmp.conf xmp-4.1.0/src/xmp.conf
--- xmp-4.1.0-orig/src/xmp.conf	2016-07-16 20:29:44 +0900
+++ xmp-4.1.0/src/xmp.conf	2019-10-28 02:15:32 +0900
@@ -67,10 +67,10 @@
 ####
 ##########################################################################
 
-# amplify = <0|1|2|3>
-# Amplification factor. Default is 1 (normal)
+# volume = <0-1600>
+# Module playback volume.  Default is 100.
 #
-#amplify = 1
+#volume = 100
 
 # amiga = <yesno>
 # Enable Amiga simulation mixer for Amiga 4-channel modules. The mixer is
