code: func (e *Event) Size() uint32 {
  	switch e.MsgType {
  	case 0x2, 0x3, 0x4, 0x5, 0x6, 0xC, 0xD:
  		return 1
  	// Note Off, On, aftertouch, control change
  	case 0x8, 0x9, 0xA, 0xB, 0xE:
  		return 2
  	case 0xF:
  		// meta event
  		switch e.Cmd {
  		// Copyright Notice
  		case 0x02:
  			copyright := []byte(e.Copyright)
  			varintBytes := EncodeVarint(uint32(len(copyright)))
  			return uint32(len(copyright) + len(varintBytes))
  			// BPM (size + encoded in uint24)
  		case 0x51: // tempo
  			return 4
  		case 0x2f: // end of track
  			return 1
  		default:
  			// NOT currently support, blowing up on purpose
  			log.Fatal(errors.New("Can't encode this meta event, it is not supported yet"))
  		}
  	}
  	return 0
  }
docs: // Size represents the byte size to encode the event