overdub

smk-37-asio-drivers

amalahama/smk-37-asio-drivers · ★ 1

Dedicated ultra-low latency ASIO driver and Control Panel for M-VAVE SMK-37 Pro USB Audio & Synthesizer on Windows

README from GitHub, MIT

M-VAVE SMK-37 Pro Dedicated ASIO Driver

Dedicated high-performance, ultra-low-latency ASIO driver custom engineered for the M-VAVE SMK-37 Pro keyboard controller and synthesizer on Windows 10 and Windows 11 (64-bit).


🚀 Why This Dedicated Driver Instead of ASIO4ALL?

ASIO4ALL is a generic wrapper that frequently causes major issues in music production:

  1. Destructive Exclusive Locking: Locks Windows audio entirely, preventing web browsers, YouTube, or Spotify from playing while producing.
  2. Instability & DAW Crashes: Sample rate changes or USB disconnections can freeze DAWs or cause blue screens.
  3. MIDI Desynchronization: Jitter and timing alignment errors with MIDI hardware in modern DAWs.

The dedicated M-VAVE SMK-37 Pro ASIO driver resolves all of this:

  • Direct WASAPI Exclusive & Shared Support: High-performance native communication with the SMK-37 Pro's USB Audio Class 1.0 Isochronous endpoints (32-bit Float / 24-bit PCM, 44.1 kHz & 48.0 kHz, 2 In / 2 Out).
  • True Low Latency: Buffer sizes selectable in powers of two from 32 samples (0.73 ms) to 2048 samples (46.4 ms).
  • Drift-Free QPC Clock Synchronization: High-precision timestamps based on system QueryPerformanceCounter (kSystemTimeValid, kSamplePositionValid, kSampleRateValid) aligned with Windows MIDI events.
  • Circular FIFO Ring Buffer with Drift Clamp: Keeps audio streaming rock-solid during long production sessions, eliminating buffer underruns, distortion, and DAW crashes (CTD).
  • Real-Time MMCSS Pro Audio Priority: Dedicated audio streaming thread with AvSetMmThreadCharacteristicsW("Pro Audio") and THREAD_PRIORITY_TIME_CRITICAL without disk I/O in the audio path.
  • Integrated Control Panel: Accessible directly from within any DAW (Hardware Setup / Control Panel button) or as a standalone app (SMK37Pro_ControlPanel.exe).
  • Self-Contained & Lightweight: 100% static C++, zero dependencies on external DLLs or third-party installers.

📊 Latency Chart (44.1 kHz)

Buffer Size (Samples)One-Way LatencyApproximate Roundtrip LatencyRecommended Usage
320.73 ms~ 1.8 msExtreme performance / Ultra-responsive monitoring
641.45 ms~ 2.9 msLive playing and hardware synth recording
1282.90 ms~ 5.8 msMedium projects with virtual instruments
2565.80 ms~ 11.6 msGeneral production and smooth tracking
512 (Recommended)11.61 ms~ 23.2 msStandard mixing with heavy VST plugin loads
102423.22 ms~ 46.4 msMassive projects with orchestral libraries / automation
204846.44 ms~ 92.8 msRelaxed buffer for intensive mastering

🎧 Audio Channel Routing

The SMK-37 Pro integrates a MIDI controller, USB audio interface, and internal FM (DX7) synthesizer engine:

  • ASIO Inputs (Inputs 1 & 2):
    • SMK-37 In L (DX7)
    • SMK-37 In R (DX7)
    • Directly records audio generated by the internal hardware synth into your DAW without analog audio cables.
  • ASIO Outputs (Outputs 1 & 2):
    • SMK-37 Out L
    • SMK-37 Out R
    • Routes your DAW master output directly to the SMK-37 Pro's 3.5mm headphone/line-out jack with minimal latency.

🛠️ 1-Click Installation

  1. Download the release package or clone this repository.
  2. Right-click install_driver.bat and select Run as administrator.
  3. The installer copies the binaries to %ProgramFiles%\M-VAVE SMK-37 Pro ASIO\ and registers the COM InProc server under M-VAVE SMK-37 Pro ASIO (CLSID {7C38B80E-5AED-4B33-A751-6CE34EC4C701}).

🎹 DAW Configuration Guides

1. Ableton Live

A. Configure ASIO Audio

  1. Open Options > Preferences (Ctrl + ,) and navigate to the Audio tab.
  2. Driver Type: Select ASIO.
  3. Audio Device: Select M-VAVE SMK-37 Pro ASIO.
  4. Use the Buffer Size dropdown to select your preferred buffer size (e.g. 128, 256, or 512 samples).
  5. Click Hardware Setup to open the Control Panel and toggle WASAPI Exclusive mode.

B. Configure MIDI Input (Crucial Step)

  1. In Preferences, switch to the Link, Tempo & MIDI tab.
  2. Under MIDI Ports, locate Input: SMK-37 Pro Midi.
  3. Toggle the Track button to ON (turns yellow).
  4. (Optional) Toggle Remote to ON for Input: SMK-37 Pro Midi and MIDIIN2 (SMK-37 Pro Midi) to map the 8 rotary encoders.
  5. In your MIDI track, set MIDI From to All Inputs (or SMK-37 Pro Midi, Channel 1) and arm recording.

2. FL Studio

  1. Open Options > Audio Settings.
  2. Under Input / Output, select M-VAVE SMK-37 Pro ASIO.
  3. Click Show ASIO Panel to adjust buffer sizes or exclusive mode.

3. REAPER

  1. Navigate to Options > Preferences > Audio > Device.
  2. Audio system: Select ASIO.
  3. ASIO Driver: Select M-VAVE SMK-37 Pro ASIO.
  4. Enable Inputs (1 to 2) and Outputs (1 to 2).

4. Cubase / Studio One

  1. Open audio setup (Studio Setup > Audio System).
  2. Select M-VAVE SMK-37 Pro ASIO as the master ASIO driver.

🎛️ Standalone Control Panel

You can open the configuration interface at any time without launching a DAW:

SMK37Pro_ControlPanel.exe

Features:

  • Live detection of USB audio hardware endpoints.
  • Real-time buffer size adjustment with instant millisecond latency display.
  • Toggle between WASAPI Exclusive (lowest latency, mixer bypass) and Shared mode (allows background playback from browsers or Spotify).

🔨 Building from Source

Builds statically with LLVM MinGW or GCC/MinGW-w64 (x86_64):

build_driver.bat

Prerequisites:

  • clang++ or g++ (x86_64) on system PATH.
  • Standard Windows SDK headers (windows.h, audioclient.h, avrt.h, commctrl.h).

🧪 Verification Tests

The tests/ directory provides test suites to validate driver stability:

  • test_timestamp.cpp: Verifies nanosecond timestamp alignment with system QPC clock.
  • test_robustness.cpp: Tests live buffer size transitions (32 to 2048 samples) across exclusive and shared modes.
  • test_long_stream.cpp: Extended continuous streaming test (30+ seconds) verifying zero buffer underruns and no latency drift.
  • test_control_panel_sim.cpp: Simulates control panel invocation from the host DAW thread.
  • test_midi.py: Direct hardware verification of USB-MIDI keybed and encoder messages.

🗑️ Uninstallation

To unregister the COM driver and remove its registry keys:

uninstall_driver.bat

📄 License

This driver is licensed under the MIT License. See LICENSE for details.