Sorry to be a party pooper, but the bit-reduction method you describe wouldn't work either.  Why?
Well, when an audio player reads the file, it assumes that each sound is a 16 bit integer. For sure, you could store some of the values as 15 bit integers and just throw them into the data stream, but the problem is that the audio player has to KNOW when it is reading a 15 bit value as opposed to a 16 bit one.
Remember, to the player, the file is just a long stream of 0's and 1's, which get grouped into chunks of 16. So to tell the player the next value is a 15bit integer as opposed to a 16 bit one, you'd have to use some kind of flag. At the very best, this flag would be one bit long, using 0 to denote a 16 bit value would follow, and 1 to denote a 15 bit value would follow. But of course this defeats the purpose, because even the 16 bit values would have to have this flag in front to differentiate them. In fact, the data stream would actually take MORE space, because each value would effectively be either 17 or 16 bits.
Modus
			
			Well, when an audio player reads the file, it assumes that each sound is a 16 bit integer. For sure, you could store some of the values as 15 bit integers and just throw them into the data stream, but the problem is that the audio player has to KNOW when it is reading a 15 bit value as opposed to a 16 bit one.
Remember, to the player, the file is just a long stream of 0's and 1's, which get grouped into chunks of 16. So to tell the player the next value is a 15bit integer as opposed to a 16 bit one, you'd have to use some kind of flag. At the very best, this flag would be one bit long, using 0 to denote a 16 bit value would follow, and 1 to denote a 15 bit value would follow. But of course this defeats the purpose, because even the 16 bit values would have to have this flag in front to differentiate them. In fact, the data stream would actually take MORE space, because each value would effectively be either 17 or 16 bits.
Modus
				
		
			