From b8cec0d013ec948c3f0e75670855eeb898da7001 Mon Sep 17 00:00:00 2001 From: John Melas Date: Tue, 25 Feb 2025 09:16:53 +0200 Subject: [PATCH 1/3] CMidiPort: use macro CALC_TICKS to calculate ticks without truncation --- src/api/Client/WinMM/MidiSrvPort.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/api/Client/WinMM/MidiSrvPort.cpp b/src/api/Client/WinMM/MidiSrvPort.cpp index 0dd4b728..8b1c1012 100644 --- a/src/api/Client/WinMM/MidiSrvPort.cpp +++ b/src/api/Client/WinMM/MidiSrvPort.cpp @@ -3,6 +3,8 @@ #include "pch.h" #include "MidiSrvPort.h" +#define CALC_TICKS(pos) ((DWORD) (((pos) * 1000.0) / m_qpcFrequency)) + CMidiPort::CMidiPort() { TraceLoggingWrite( @@ -354,7 +356,7 @@ CMidiPort::CompleteLongBuffer(UINT message, LONGLONG position) } // calculate the timestamp for the message - DWORD ticks = (DWORD) (((position - m_StartTime) / m_qpcFrequency) * 1000.0); + DWORD ticks = CALC_TICKS(position - m_StartTime); // mark it completed buffer->dwFlags &= (~MHDR_INQUEUE); @@ -489,7 +491,7 @@ CMidiPort::Callback(_In_ PVOID data, _In_ UINT size, _In_ LONGLONG position, LON // we're not in SysEx mode, but this byte was provided // so we'll send it anyway // Convert from the QPC time to the number of ticks elapsed from the start time. - DWORD ticks = (DWORD)(((position - startTime) / m_qpcFrequency) * 1000.0); + DWORD ticks = CALC_TICKS(position - startTime); DWORD_PTR midiMessage = *callbackData; WinmmClientCallback(MIM_ERROR, midiMessage, ticks); } @@ -553,7 +555,7 @@ CMidiPort::Callback(_In_ PVOID data, _In_ UINT size, _In_ LONGLONG position, LON // to do that. We could even put in a reg setting to control this behavior. // Convert from the QPC time to the number of ticks elapsed from the start time. - //DWORD ticks = (DWORD)(((position - startTime) / m_qpcFrequency) * 1000.0); + //DWORD ticks = CALC_TICKS(position - startTime); //DWORD_PTR midiMessage = *callbackData; //WinmmClientCallback(MIM_ERROR, midiMessage, ticks); } @@ -627,7 +629,7 @@ CMidiPort::Callback(_In_ PVOID data, _In_ UINT size, _In_ LONGLONG position, LON if (MIDI_BYTE_IS_STATUS_BYTE(prioritySingleByteMessage)) { // Convert from the QPC time to the number of ticks elapsed from the start time. - DWORD ticks = (DWORD)(((position - startTime) / m_qpcFrequency) * 1000.0); + DWORD ticks = CALC_TICKS(position - startTime); DWORD_PTR midiMessage{ prioritySingleByteMessage }; WinmmClientCallback(MIM_DATA, midiMessage, ticks); @@ -642,7 +644,7 @@ CMidiPort::Callback(_In_ PVOID data, _In_ UINT size, _In_ LONGLONG position, LON countMidiMessageBytesReceived == 1 && MIDI_MESSAGE_IS_ONE_BYTE(inProgressMidiMessage[0])) { // Convert from the QPC time to the number of ticks elapsed from the start time. - DWORD ticks = (DWORD)(((position - startTime) / m_qpcFrequency) * 1000.0); + DWORD ticks = CALC_TICKS(position - startTime); DWORD_PTR midiMessage{ static_cast(inProgressMidiMessage[0]) }; if (MIDI_MESSAGE_IS_TWO_BYTES(inProgressMidiMessage[0]) || From e058d553cfdadfea7a44a26640338308d571c020 Mon Sep 17 00:00:00 2001 From: John Melas Date: Tue, 25 Feb 2025 09:17:16 +0200 Subject: [PATCH 2/3] MidiDeviceManager: fix typo --- src/api/Service/Exe/MidiDeviceManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/Service/Exe/MidiDeviceManager.cpp b/src/api/Service/Exe/MidiDeviceManager.cpp index 6178890f..a6eeeb16 100644 --- a/src/api/Service/Exe/MidiDeviceManager.cpp +++ b/src/api/Service/Exe/MidiDeviceManager.cpp @@ -2130,7 +2130,7 @@ CMidiDeviceManager::GetFunctionBlockPortInfo( portInfo[MidiFlowOut][i].Flow = (MidiFlow) MidiFlowOut; portInfo[MidiFlowOut][i].IsEnabled = portInfo[MidiFlowOut][i].IsEnabled || fb->IsActive; portInfo[MidiFlowOut][i].InterfaceId = umpDeviceInterfaceId; - portInfo[MidiFlowIn][i].Name = functionBlockName; + portInfo[MidiFlowOut][i].Name = functionBlockName; } } } From aadf588b435d6db3537a3734e7800d191eb7301c Mon Sep 17 00:00:00 2001 From: John Melas Date: Tue, 25 Feb 2025 09:19:47 +0200 Subject: [PATCH 3/3] static-enum-endpoints-cpp: print functionBlock, groupTerminalBlock Number as int (type is uint8_t) --- samples/cpp-winrt/static-enum-endpoints/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/cpp-winrt/static-enum-endpoints/main.cpp b/samples/cpp-winrt/static-enum-endpoints/main.cpp index f8144abd..4809f1bb 100644 --- a/samples/cpp-winrt/static-enum-endpoints/main.cpp +++ b/samples/cpp-winrt/static-enum-endpoints/main.cpp @@ -208,7 +208,7 @@ int main() for (auto const& functionBlock : functionBlocks) { - std::cout << " - " << functionBlock.Number() << " : " << winrt::to_string(functionBlock.Name()) << std::endl; + std::cout << " - " << int(functionBlock.Number()) << " : " << winrt::to_string(functionBlock.Name()) << std::endl; } @@ -219,7 +219,7 @@ int main() for (auto const& groupTerminalBlock : groupTerminalBlocks) { - std::cout << " - " << groupTerminalBlock.Number() << " : " << winrt::to_string(groupTerminalBlock.Name()) << std::endl; + std::cout << " - " << int(groupTerminalBlock.Number()) << " : " << winrt::to_string(groupTerminalBlock.Name()) << std::endl; }