func constructReservoirFrame(dest []byte, header *mp3agic.FrameHeader, minResSize int, absStartSample int64) int { // increase for 10-byte-header inclusion minResSize += 10 h32 := header.getHeader32() | 0x00010000 // switch off CRC usage fh2 := &FrameHeader{} for bri := 1; bri <= 14; bri++ { h32 = (h32 & 0xFFFF0FFF) + (bri << 12) fh2.setHeader32(h32) frameSize := fh2.getFrameSize() sideInfoEnd := fh2.getSideInfoEnd() mainDataBlockSize := frameSize - sideInfoEnd if mainDataBlockSize >= minResSize { dest[0] = byte(h32 >> 24) dest[1] = byte(h32 >> 16) dest[2] = byte(h32 >> 8) dest[3] = byte(h32) fill(dest[4:sideInfoEnd], 0) fill(dest[sideInfoEnd:frameSize], 0x78) // Arrays.fill(dest, 4, sideInfoEnd, (byte) 0); // Arrays.fill(dest, sideInfoEnd, frameSize, (byte) 0x78); copy(dest[sideInfoEnd:], []byte("PCUT")) // dest[sideInfoEnd] = 0x50; // P // dest[sideInfoEnd + 1] = 0x43; // C // dest[sideInfoEnd + 2] = 0x55; // U // dest[sideInfoEnd + 3] = 0x54; // T copy(dest[sideInfoEnd+4:], []byte{ // revision 0 0, // absolute sample start pos byte(uint64(absStartSample) >> 32), byte(uint64(absStartSample) >> 24), byte(uint64(absStartSample) >> 16), byte(uint64(absStartSample) >> 8), byte(uint64(absStartSample))}) return frameSize } } return -1 }