disconnect method
Implementation
bool disconnect() {
if (_disconnecting) {
return true;
}
_disconnecting = true;
int result;
if (_midiInHandle != 0) {
result = midiInStop(_hMidiIn);
if (result != 0) {
debugPrint("STOP ERROR($result): ${midiErrorMessage(result)}");
}
result = midiInReset(_hMidiIn);
if (result != 0) {
debugPrint("RESET ERROR($result): ${midiErrorMessage(result)}");
}
for (int i = 0; i < _numberOfBuffers; i++) {
if (_midiInHeaders[i] != nullptr) {
midiInUnprepareHeader(
_hMidiIn,
_midiInHeaders[i],
sizeOf<MIDIHDR>(),
);
free(_midiInHeaders[i]);
_midiInHeaders[i] = nullptr;
}
if (_midiInBuffers[i] != nullptr) {
free(_midiInBuffers[i]);
_midiInBuffers[i] = nullptr;
}
}
result = midiInClose(_hMidiIn);
if (result != 0) {
debugPrint("CLOSE ERROR($result): ${midiErrorMessage(result)}");
}
_midiInHandle = 0;
hMidiInDevicePtr.value = nullptr;
}
if (_midiOutHandle != 0) {
result = midiOutReset(_hMidiOut);
if (result != 0) {
debugPrint("OUT RESET ERROR($result): ${midiErrorMessage(result)}");
}
result = midiOutClose(_hMidiOut);
if (result != 0) {
debugPrint("OUT CLOSE ERROR($result): ${midiErrorMessage(result)}");
}
_midiOutHandle = 0;
hMidiOutDevicePtr.value = nullptr;
}
if (_midiOutBuffer != nullptr) {
free(_midiOutBuffer);
_midiOutBuffer = nullptr;
}
if (_midiOutHeader != nullptr) {
free(_midiOutHeader);
_midiOutHeader = nullptr;
}
connected = false;
return true;
}