This package lets you use a PS4 controller to control the vector joystick in Korg Wavestation (or any synth supporting MIDI CC16/17) via macOS and Python.
- Live vector joystick control with PS4 controller
- Toggle freeze/unfreeze with the X button
- Easy setup for any user
- Enable L Joystick or R Joystick independently or together with summing, using L3 and R3 to enable and disable the joysticks
- Moving the joystick while a project is playing results in a variable sample rate error code in Logic Pro
- To use Korg Wavestation with a mouse after using a controller, Logic Pro's preference settings must be reset to reflect the changes
- Unable to use the mouse and controller functionality at the same time
- Untested on DAWs other than Logic Pro
- Untested on Synths other than Korg Wavestation
- Untested on OS other than Mac Sequoia 15.7.2
- Untested on controllers other than PS4 controllers
-
Install Python 3
- macOS usually includes Python 3. If not, download from https://www.python.org or use Homebrew:
brew install python
- macOS usually includes Python 3. If not, download from https://www.python.org or use Homebrew:
-
Create and activate a virtual environment
python3 -m venv ps4env source ps4env/bin/activate -
Install dependencies
pip install -r requirements.txt
-
Enable IAC Driver (Virtual MIDI Port)
- Open Audio MIDI Setup (Applications > Utilities)
- Show MIDI Studio (Window > Show MIDI Studio)
- Double-click IAC Driver, check "Device is online"
- Optionally rename to "Virtual Midi Port"
-
Connect PS4 Controller via USB or Bluetooth
- Hold PS + Share to pair via Bluetooth
- Or plug in via USB
-
Run the script (source version)
python3 ps4midi.py
-
Run the standalone app (frozen version)
- After building with PyInstaller, run:
./dist/ps4midi
- You should see output about available MIDI ports and MIDI CC messages in the terminal.
- After building with PyInstaller, run:
-
Open your DAW and load Korg Wavestation
- Make sure "Virtual Midi Port" is enabled as a MIDI input
- Move the PS4 stick to control the vector joystick
- Press X to freeze/unfreeze position
If you want to distribute a standalone app:
- Make sure your
ps4midi.specfile points to the correct script and includes the rtmidi binary:- The Analysis section should look like:
a = Analysis([ '/Users/YOURUSERNAME/ps4midi_package/ps4midi.py'], ... binaries=[('/Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/site-packages/rtmidi/_rtmidi.cpython-314-darwin.so', 'rtmidi')], ... )
- The Analysis section should look like:
- Build with:
pyinstaller ps4midi.spec
- Share the resulting
dist/ps4midibinary with other macOS users.- Note: The binary is only guaranteed to work on similar macOS versions and architectures.
- For GitHub, upload only the source code (not the dist or build folders).
- Add a Release if you want to share the pre-built binary.
- Other users can build their own binary by following the instructions above.
- If the controller is not detected, check connection and try both USB/Bluetooth.
- If MIDI is not received, check IAC Driver and DAW MIDI input settings.
MIT