code: func (b *Bundle) MarshalBinary() ([]byte, error) {
  	// Add the '#bundle' string
  	data := new(bytes.Buffer)
  	if _, err := writePaddedString("#bundle", data); err != nil {
  		return nil, err
  	}
  
  	// Add the time tag
  	bd, err := b.Timetag.MarshalBinary()
  	if err != nil {
  		return nil, err
  	}
  	if _, err = data.Write(bd); err != nil {
  		return nil, err
  	}
  
  	// Process all OSC Messages
  	for _, m := range b.Messages {
  		buf, err := m.MarshalBinary()
  		if err != nil {
  			return nil, err
  		}
  
  		// Append the length of the OSC message
  		if err = binary.Write(data, binary.BigEndian, int32(len(buf))); err != nil {
  			return nil, err
  		}
  
  		// Append the OSC message
  		if _, err = data.Write(buf); err != nil {
  			return nil, err
  		}
  	}
  
  	// Process all OSC Bundles
  	for _, b := range b.Bundles {
  		buf, err := b.MarshalBinary()
  		if err != nil {
  			return nil, err
  		}
  
  		// Write the size of the bundle
  		if err = binary.Write(data, binary.BigEndian, int32(len(buf))); err != nil {
  			return nil, err
  		}
  
  		// Append the bundle
  		_, err = data.Write(buf)
  		if err != nil {
  			return nil, err
  		}
  	}
  
  	return data.Bytes(), nil
  }
docs: // MarshalBinary serializes the OSC bundle to a byte array with the following
  // format:
  // 1. Bundle string: '#bundle'
  // 2. OSC timetag
  // 3. Length of first OSC bundle element
  // 4. First bundle element
  // 5. Length of n OSC bundle element
  // 6. n bundle element