code: def normalize_audio_buffer(buf, volume_percentage, sample_width=2):
      
      if sample_width != 2:
          raise Exception('unsupported sample width:', sample_width)
      scale = math.pow(2, 1.0*volume_percentage/100)-1
      # Construct array from bytes based on sample_width, multiply by scale
      # and convert it back to bytes
      arr = array.array('h', buf)
      for idx in range(0, len(arr)):
          arr[idx] = int(arr[idx]*scale)
      buf = arr.tostring()
      return buf
docs: Adjusts the loudness of the audio data in the given buffer.
  
      Volume normalization is done by scaling the amplitude of the audio
      in the buffer by a scale factor of 2^(volume_percentage/100)-1.
      For example, 50% volume scales the amplitude by a factor of 0.414,
      and 75% volume scales the amplitude by a factor of 0.681.
      For now we only sample_width 2.
  
      Args:
        buf: byte string containing audio data to normalize.
        volume_percentage: volume setting as an integer percentage (1-100).
        sample_width: size of a single sample in bytes.