/** * Registers this object to the underlying port so as to the C++ function will be called with * the given C++ object when data arrives. * @param nativeReceiverPointer a pointer to a midi::MidiInputPortAndroid object. * @return true if this operation succeeds or the port is already open. */ @CalledByNative boolean open(long nativeReceiverPointer) { if (mPort != null) { return true; } mPort = mDevice.openOutputPort(mIndex); if (mPort == null) { return false; } mNativeReceiverPointer = nativeReceiverPointer; mPort.connect(new MidiReceiver() { @Override public void onSend(byte[] bs, int offset, int count, long timestamp) { nativeOnData(mNativeReceiverPointer, bs, offset, count, timestamp); } }); return true; }
@Override public void onSend(byte[] msg, int offset, int count, long timestamp) throws IOException { for (MidiReceiver receiver : mReceivers) { try { receiver.send(msg, offset, count, timestamp); } catch (IOException e) { // if the receiver fails we remove the receiver but do not propagate the exception mReceivers.remove(receiver); } } }
private void midiSend(byte[] buffer, int count, long timestamp) { if (mKeyboardReceiverSelector != null) { try { // send event immediately MidiReceiver receiver = mKeyboardReceiverSelector.getReceiver(); if (receiver != null) { receiver.send(buffer, 0, count, timestamp); } } catch (IOException e) { Log.e(TAG, "mKeyboardReceiverSelector.send() failed " + e); } } }
@Override public MidiReceiver[] onGetInputPortReceivers() { return new MidiReceiver[] { mInputReceiver }; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setActionBar((Toolbar) findViewById(R.id.toolbar)); ActionBar actionBar = getActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); } mLog = (TextView) findViewById(R.id.log); mScroller = (ScrollView) findViewById(R.id.scroll); // Setup MIDI MidiManager midiManager = (MidiManager) getSystemService(MIDI_SERVICE); // Receiver that prints the messages. MidiReceiver loggingReceiver = new LoggingReceiver(this); // Receiver that parses raw data into complete messages. MidiFramer connectFramer = new MidiFramer(loggingReceiver); // Setup a menu to select an input source. mLogSenderSelector = new MidiOutputPortSelector(midiManager, this, R.id.spinner_senders) { @Override public void onPortSelected(final MidiPortWrapper wrapper) { super.onPortSelected(wrapper); if (wrapper != null) { mLogLines.clear(); MidiDeviceInfo deviceInfo = wrapper.getDeviceInfo(); if (deviceInfo == null) { log(getString(R.string.header_text)); } else { log(MidiPrinter.formatDeviceInfo(deviceInfo)); } } } }; mLogSenderSelector.getSender().connect(connectFramer); // Tell the virtual device to log its messages here.. MidiScope.setScopeLogger(this); }
public MidiReceiver getReceiver() { return mInputPort; }
@Override public void flush() throws IOException { for (MidiReceiver receiver : mReceivers) { receiver.flush(); } }
public MidiFramer(MidiReceiver receiver) { mReceiver = receiver; }
@Override public MidiReceiver[] onGetInputPortReceivers() { return new MidiReceiver[]{mSynthEngine}; }
@Override public MidiReceiver[] onGetInputPortReceivers() { return new MidiReceiver[] { mSynthEngine }; }
/** * Called to connect a {@link MidiReceiver} to the sender * * @param receiver the receiver to connect */ @Override public void onConnect(MidiReceiver receiver) { mReceivers.add(receiver); }
/** * Called to disconnect a {@link MidiReceiver} from the sender * * @param receiver the receiver to disconnect */ @Override public void onDisconnect(MidiReceiver receiver) { mReceivers.remove(receiver); }
/** * This MidiReceiver will write date to the scheduling buffer. * @return the MidiReceiver */ public MidiReceiver getReceiver() { return mReceiver; }