Skip to content

Commit

Permalink
Merge pull request #33 from kshoji/feature/fix-javax-sound-midi-20240506
Browse files Browse the repository at this point in the history
Fix javax.sound.midi issues
  • Loading branch information
kshoji authored May 5, 2024
2 parents 0dc598f + 22ca703 commit f6ecbfe
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import jp.kshoji.javax.sound.midi.ble.BleMidiSynthesizer;

/**
* {@link jp.kshoji.javax.sound.midi.MidiSystem} initializer for BLE MIDI
* {@link jp.kshoji.javax.sound.midi.MidiSystem} for BLE MIDI
*
* @author K.Shoji
*/
Expand All @@ -35,7 +35,7 @@ public final class BleMidiSystem implements OnMidiDeviceAttachedListener, OnMidi
* @param context the context
*/
public BleMidiSystem(@NonNull final Context context) {
this.context = context.getApplicationContext();
this.context = context;
}

/**
Expand Down Expand Up @@ -79,10 +79,19 @@ public void terminate() {
synchronized (midiDeviceMap) {
for (final BleMidiDevice bleMidiDevice : midiDeviceMap.values()) {
bleMidiDevice.close();
MidiSystem.removeMidiDevice(bleMidiDevice);
}

midiDeviceMap.clear();
}

synchronized (midiSynthesizerMap) {
for (final BleMidiSynthesizer bleMidiSynthesizer : midiSynthesizerMap.values()) {
bleMidiSynthesizer.close();
MidiSystem.removeSynthesizer(bleMidiSynthesizer);
}
midiSynthesizerMap.clear();
}
}

/**
Expand Down Expand Up @@ -175,6 +184,7 @@ public void onMidiOutputDeviceAttached(@NonNull final MidiOutputDevice midiOutpu
try {
existingSynthesizer.setReceiver(addedDevice.getReceiver());
} catch (final MidiUnavailableException ignored) {
existingSynthesizer.setReceiver(null);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,7 @@ public BleMidiSynthesizer(final BleMidiDevice bleMidiDevice) {
} catch (final MidiUnavailableException ignored) {
}

if (receiver == null) {
// empty
channels = new MidiChannel[0];
voiceStatuses = new VoiceStatus[0];
} else {
// 16 channels
voiceStatuses = new VoiceStatus[16];
channels = new MidiChannel[16];
for (int channel = 0; channel < 16; channel++) {
voiceStatuses[channel] = new VoiceStatus();
channels[channel] = new MidiChannelImpl(channel, receiver, voiceStatuses[channel]);
}
}
setReceiver(receiver);
}

@NonNull
Expand Down Expand Up @@ -196,12 +184,18 @@ public List<Transmitter> getTransmitters() {
}

public void setReceiver(final Receiver receiver) {
// 16 channels
voiceStatuses = new VoiceStatus[16];
channels = new MidiChannel[16];
for (int channel = 0; channel < 16; channel++) {
voiceStatuses[channel] = new VoiceStatus();
channels[channel] = new MidiChannelImpl(channel, receiver, voiceStatuses[channel]);
if (receiver == null) {
// empty
channels = new MidiChannel[0];
voiceStatuses = new VoiceStatus[0];
} else {
// 16 channels
voiceStatuses = new VoiceStatus[16];
channels = new MidiChannel[16];
for (int channel = 0; channel < 16; channel++) {
voiceStatuses[channel] = new VoiceStatus();
channels[channel] = new MidiChannelImpl(channel, receiver, voiceStatuses[channel]);
}
}
}
}

0 comments on commit f6ecbfe

Please sign in to comment.