func (s *SystemPort) writeEvent(event Event) error { status := event.Command + event.Channel message := ((uint32(event.Data2) << 16) & 0xFF0000) | ((uint32(event.Data1) << 8) & 0x00FF00) | (uint32(status) & 0x0000FF) if debug { //spew.Dump(event, message) fmt.Printf("%b\n", message) } buffer := C.PmEvent{C.PmMessage(message), 0} err := C.Pm_Write(s.stream, &buffer, C.int32_t(1)) return makePortMidiError(err) }
// Write writes a buffer of MIDI events to the output stream. func (s *Stream) Write(events []Event) error { size := len(events) if size > maxEventBufferSize { return ErrMaxBuffer } buffer := make([]C.PmEvent, size) for i, evt := range events { var event C.PmEvent event.timestamp = C.PmTimestamp(evt.Timestamp) event.message = C.PmMessage((((evt.Data2 << 16) & 0xFF0000) | ((evt.Data1 << 8) & 0xFF00) | (evt.Status & 0xFF))) buffer[i] = event } return convertToError(C.Pm_Write(unsafe.Pointer(s.pmStream), &buffer[0], C.int32_t(size))) }