code: public static byte[] getAudio24(AudioFrame frame) {
  		BytePointer[] planes = frame.getPlanes();
  		SampleFormat format = frame.getAudioFormat().getSampleFormat();
  		int depth = getFormatDepth(format);
  
  		int length = planes[0].limit() / depth;
  		int channels = planes.length;
  		byte[] samples = new byte[channels * length * 3];
  
  		for (int i = 0; i < channels; i++) {
  			ByteBuffer buffer = planes[i].asByteBuffer();
  			int offset = i * channels;
  
  			for (int j = 0, k = offset; j < length; j++) {
  				long sample = quantize24(getValue(buffer, format, j * depth).doubleValue() * twoPower23);
  				samples[k++] = (byte) (sample         & 0xFF);
  				samples[k++] = (byte) ((sample >> 8)  & 0xFF);
  				samples[k++] = (byte) ((sample >> 16) & 0xFF);
  
  				// interleave
  				k += 2 * (channels - 1);
  			}
  		}
  
  		return samples;
  	}
docs: Get byte array with interleaved signed three byte samples. Since each sample has a length
  of three bytes the possible sample values are within the interval [-2^23, 2^23-1]. It is assumed
  that the samples within the {@code AudioFrame} are normalized, meaning in [-1, 1].
  
  @param frame {@code AudioFrame} with audio samples.
  
  @return interleaved byte array with signed samples within [-2^23, 2^23-1].