protected void doWrite(ByteBuffer out) { super.doWrite(out); out.putShort(version); out.putShort(revision); out.putInt(vendor); if (version < 2) { out.putShort(channelCount); if (version == 0) out.putShort(sampleSize); else out.putShort((short) 16); out.putShort((short) compressionId); out.putShort((short) pktSize); out.putInt((int) Math.round(sampleRate * 65536d)); if (version == 1) { out.putInt(samplesPerPkt); out.putInt(bytesPerPkt); out.putInt(bytesPerFrame); out.putInt(bytesPerSample); } } else if (version == 2) { out.putShort((short) 3); out.putShort((short) 16); out.putShort((short) -2); out.putShort((short) 0); out.putInt(65536); out.putInt(72); out.putLong(Double.doubleToLongBits(sampleRate)); out.putInt(channelCount); out.putInt(0x7F000000); out.putInt(sampleSize); out.putInt(lpcmFlags); out.putInt(bytesPerFrame); out.putInt(samplesPerPkt); } writeExtensions(out); }