A stylish, expressive synthesizer inspired by German Expressionist cinema aesthetics, created with Faust DSP language and controlled through OSC or MIDI.
Murnau is a German Expressionist-inspired synthesizer system that combines:
- Faust DSP for high-quality, efficient audio processing
- OSC for flexible parameter control
- MIDI for playing notes and controller integration
- PyQt6 for a stylish, cinematic user interface:
murnau/
├── src/ # Source code
│ ├── murnau/ # Main package
│ │ ├── dsp/ # Faust DSP source files
│ │ ├── ui/ # User interface components
│ │ ├── synth/ # Synthesizer control modules
│ │ └── utils/ # Utility modules
│ └── lib/ # External libraries
├── scripts/ # Entry point scripts
│ ├── murnau_ui.py # UI launcher
│ ├── melody.py # Melody player
│ └── ramp_test.py # Ramp tester
├── tests/ # Test suite
├── docs/ # Documentation
├── assets/ # Images and resources
├── config/ # Configuration files
├── build/ # Build artifacts (generated)
├── legato_synth.dsp # Main DSP file (for compilation)
├── start_murnau.sh # Startup script
├── Makefile # Build automation
└── requirements.txt # Dependencies
The system consists of the following core components:
-
Synthesizer Engine: Created with Faust DSP language (
legato_synth.dsp)- Monophonic synthesizer with legato capability
- Four waveform types: Sine, Triangle, Sawtooth, Square
- Full ADSR envelope control
- Expressive playing controls
-
User Interface: A stylish PyQt6 UI inspired by German Expressionism (
murnau_ui.py)- Direct control of all synthesizer parameters
- Built-in virtual piano keyboard
- Integrated MIDI device connection
- Waveform visualization
- German Expressionist-inspired design
-
Control Modules: Python modules for synthesizer control
melody.py- Play test melodiesramp_test.py- Test frequency ramping
- Clone the repository
- Install dependencies:
pip install -r requirements.txtOr install in development mode:
pip install -e ".[dev]"Simply run the startup script which handles everything automatically:
./start_murnau.shThis script will:
- Start JACK audio server (with CoreAudio on macOS)
- Compile and start the Faust synthesizer
- Launch the Murnau user interface
-
Start JACK (if not using the script):
jackd -d coreaudio -r48000 -p512
-
Compile and run the synthesizer:
faust2jack -osc legato_synth.dsp ./legato_synth
-
Launch the UI:
python scripts/murnau_ui.py
Play a test melody:
python scripts/melody.pyTest frequency ramping:
python scripts/ramp_test.pyOr use the Makefile shortcuts:
make melody # Play test melody
make ramp # Test frequency ramping- Waveforms: Sine, Triangle, Sawtooth, Square
- Envelope: Full ADSR control for amplitude shaping
- Legato Mode: Smooth pitch transitions for connected notes
- Expression: Gain control and pitch modulation
- Stylish Design: Inspired by German Expressionist cinema
- Real-time Control: All parameters accessible via knobs and sliders
- Virtual Keyboard: Play notes with mouse or computer keyboard
- MIDI Integration: Connect any MIDI controller
- Visual Feedback: Animated waveform display
The synthesizer responds to these OSC messages:
/legato_synth/freq- Note frequency (Hz)/legato_synth/gate- Note on/off (0-1)/legato_synth/gain- Output volume (0-1)/legato_synth/attack- Attack time (0.001-2.0 seconds)/legato_synth/decay- Decay time (0.001-2.0 seconds)/legato_synth/sustain- Sustain level (0-1)/legato_synth/release- Release time (0.01-5.0 seconds)
Run the test suite:
pytestRun with coverage report:
pytest --cov=src --cov-report=htmlThe project aims for at least 90% test coverage.
Murnau's design is inspired by the visual language of German Expressionist cinema:
- Stark Contrasts: Dark backgrounds with bright, angular controls
- Geometric Forms: Clean, purposeful shapes that evoke the era
- Dramatic Lighting: Gold and amber highlights against shadow
- Emotional Expression: Controls that feel alive and responsive
- macOS, Linux, or Windows
- Python 3.8 or higher
- JACK Audio Connection Kit
- Faust compiler (for building from source)
- No sound: Ensure JACK is running and the synthesizer is connected
- MIDI not working: Check MIDI device permissions and connections
- OSC timeout: Verify the synthesizer is running on port 5510
Contributions are welcome! Please feel free to submit issues or pull requests.
[Your license here]
Created by [Your name] Inspired by the cinematic works of F.W. Murnau and the German Expressionist movement.


