SVDX Midi

March 2022

SVDX with MidiMap on top of it - Obviously not playing

Introduction

Driven by a desire to enhance my gaming experience within a budget, I set out to bridge the world of affordable MIDI controllers with the immersive video game Sound Voltex DX (SVDX). The goal was to create a seamless integration that would elevate gameplay to arcade’s standards, utilizing second-hand MIDI controllers to be accessible to everyone.

Playing a rhythm game on an actual music controller feels like taking the game to another level !

Bridging Controller

Central to this project was MidiMap.py, a pivotal component orchestrating the interaction between MIDI controllers and the game. However, I grappled with the complexities of MIDI communication. Deciphering MIDI keys and configuring them to correspond with in-game actions required a deep understanding of MIDI protocols and the nuances of each controller’s unique communication method.

Building UI

PyGame served as the backbone for MIDI polling, providing robust backend support, while TKinter was chosen for its minimalistic UI capabilities. The GUI, though simplistic in design, offered intuitive controls for MIDI device selection and gameplay initiation. The decision to prioritize performance over aesthetics was critical, ensuring that the interface remained responsive even during fast-paced gaming sessions where split-second inputs are crucial.

Tool UI - Old, Reto, but really fast and don't impact runtime much

Using MIDI

Fine-tuning MIDI polling frequencies was essential for achieving optimal responsiveness, allowing for real-time adjustments and efficient data processing. Prioritizing critical instructions within the switch case structure optimized performance, while Python queues facilitated seamless communication between components. Monitoring the MIDI protocol log provided valuable insights into the controller’s behavior, guiding the refinement process to ensure smooth gameplay.

For the sake of MIDI protocol, here’s some of the log while in DEV mode :

Got key : [[176, 48, 127, 0], 9169345]
MAP OF is_spin
Spin Z
Got key : [[144, 52, 127, 0], 9169388]
MAP OF DOWN
Got key : [[144, 52, 0, 0], 9169518]
MAP OF DOWN
Got key : [[144, 52, 127, 0], 9170314]
MAP OF DOWN
Got key : [[144, 52, 0, 0], 9170458]
MAP OF DOWN
Got key : [[176, 48, 1, 0], 9170695]

And later me getting funky about mapping down to writting some ASCII art of it :

Tool UI - Old, Reto, but really fast and don't impact runtime much

Finally, I used WinKeys to send keys back to the game. At first I did WinAPI tricks to send directly keycodes to the game but it turned out keycode are misshandled depending on your keyboard layout, so I decided to not do that and sacrifice a bit of performance to a library - later realizing it got more responsiveness than my small WinAPI binding trick.

Time to enjoy it !

No one asked for it but just to prove how bad I am at video games

(Someday I sould try to put my play data on a leaderboard web app, just for the show !)

But I'm trying to be better !

Conclusion

Despite the initial challenges and technical intricacies, the SVDX Midi Map project yielded remarkable results, transforming my gaming experience into a seamless and immersive journey.

Working with PyGame and MIDI controllers proved to be a rewarding endeavor, showcasing the power of ingenuity and resourcefulness in overcoming obstacles. The mix of MIDI, PyGame, and SVDX turned out to be a winning combo, proving that even seemingly underestimated tools can lead to impressive results.

Ultimately, the project underscored the potential of leveraging affordable hardware and underestimated tools to achieve impressive outcomes in the world of gaming.

With a jog to spin and scratch, my gameplay took on a whole new vibe. No more toggling between keys; I felt like a true DJ !

Also Read

  • Hotel Booking Engine

    AstroBooking

    Re-Implementing UX from popular booking website to make a smooth and responsive booking UX (even on mobile !) and see where it goes

    • AstroJS
    • REST
    • DatePicker
    • PoC
  • Machine Learning Visualisation

    REImu Watch

    A cool SvelteJS + TailwindCSS dashboard using ApexChart to visualise data from a machine learning model. The site is static, but fetch database generated by an ETL Python script

    • Dashboard
    • ApexChart
    • SvelteJS
    • ML Model
  • A better file listing

    Games Center

    Frustrated from the Apache default index page, I decided to write a simple single file web app under constraints

    • Svelte
    • SPA
    • Single File
    • Scraping

Want more ?

I've got a lot of other awesome projects

See them all !