Я работаю над приложением, которое отправляет миди-сообщения со смартфона Android на интерфейс USB2.0-MIDI-кабеля, который соединен с телефоном через OTG-кабель. Я все еще застрял при открытии портов MidiInput / Output, без которых я не могу двигаться дальше.
Я уже перепробовал все, что пришло мне в голову. Библиотека MIDI не очень хорошо освещена, я провел огромное исследование, прочитал несколько примеров Android Midi, но в конце здесь я прошу помощи. Кажется, моя реализация верна, очень похожа на то, что Android представляет в исходных примерах MidiScope и MidiSynth.
В данный момент каждый шаг процесса регистрируется. Я обнаружил, что пока не вызывается метод device.openInputPort (номер порта), все работает правильно. После этого больше ничего не происходит. helperIN остается с нулевым назначенным , хотя событие mOpenDevice правильно открывается со всеми свойствами;
mManager.openDevice(midiDeviceInfo,
new MidiManager.OnDeviceOpenedListener() {
@Override
public void onDeviceOpened(MidiDevice device) {
Log.i("OnDeviceOpened", "before if");
if (device == null) {
Log.e("OnDeviceOpened", "cound not open" + midiDeviceInfo);
} else {
mOpenDevice = device;
Log.i("OnDeviceOpened", "opened: " + mOpenDevice.getInfo().getProperties().getString(MidiDeviceInfo.PROPERTY_NAME));
mListInput = new LinkedList<>();
MidiInputPort helperIN = null;
Log.i("OpenInputPort", "inPort Count: " + mOpenDevice.getInfo().getInputPortCount());
for (int i = 0; i < mOpenDevice.getInfo().getInputPortCount(); i++) {
Log.i("OpenInputPort", "Trying to open inPort nr: " + i); //last log seen
helperIN = device.openInputPort(i); //stuck right here!
Log.i("OpenInputPort", "Opened inPort nr: " + i); //this not seen
mListInput.add(helperIN);
if (helperIN == null) {
Log.e("openInputPort", "cound not open input port nr: " + i + " " + midiDeviceInfo.getPorts());
return;
}else
Log.i("openInputPort", "Port nr: " + i + "connected");
helperIN = null;
}
}
}
}, null);
Редактировать 1:
Журналы:
через несколько часов, когда телефон подключился к Android, чтобы еще раз запустить приложение и получить логи, первое, что я заметил, было это. Это довольно странно, кажется, что потребовалось много времени, чтобы окончательно решить не открывать порт.
04-01 09:13:43.733 7627-7639/com.example.anthonylp.midiandoridtest I/OpenInputPort: Opened inPort nr: 0
04-01 09:13:43.733 7627-7639/com.example.anthonylp.midiandoridtest E/openInputPort: cound not open input port nr: 0
[Landroid.media.midi.MidiDeviceInfo$PortInfo;@e7303d4
Актуальные журналы здесь:
04-01 09:42:11.704 3712-3712/com.example.anthonylp.midiandoridtest I/MidiWhenAdded: Class created
04-01 09:42:52.788 3712-3712/com.example.anthonylp.midiandoridtest I/Midi Info: Name: null
Name: USB2.0-MIDI
04-01 09:42:52.788 3712-3712/com.example.anthonylp.midiandoridtest I/openMidiDevice: midiDeviceInfo not null
04-01 09:42:52.789 3712-3741/com.example.anthonylp.midiandoridtest I/OnDeviceOpened: before if
opened: USB2.0-MIDI
04-01 09:42:52.789 3712-3741/com.example.anthonylp.midiandoridtest I/OpenInputPort: inPort Count: 2
Trying to open inPort nr: 0
Ничего более не получается из этого.
Я ожидаю, что код откроет устройство MidiInputPort и назначит его helperIN, после этого добавьте его в mListInput.
Большое спасибо за помощь!