3D printable tenor steel pan with section generator, note pads, and interactive sound design tools.
Live site: proflewis.github.io/deepPan
This project creates a 3D printable tenor steel pan from a 3D scanned model. The pan is split into printable sections with individually mountable note pads, enabling replacement of damaged notes, experimentation with materials and tuning, and educational exploration of steel pan acoustics.

The tenor pan has 29 note pads in three concentric rings:
| Ring | Notes | Interval | Octave |
|---|---|---|---|
| Outer | 12 | 4ths | 4 |
| Central | 12 | 5ths | 5 |
| Inner | 5 | 6ths | 6 |
The pan’s outer ring is split into 6 printable sections of 60° each, designed to fit a Bambu Lab P1S printer (256 x 256 x 256 mm). Each section contains 2 outer-ring notes and assembles together to reconstruct the full pan shell.
| Section | Angle | Notes |
|---|---|---|
| S0 | 15° – 75° | O2, O1 |
| S1 | 75° – 135° | O0, O11 |
| S2 | 135° – 195° | O10, O9 |
| S3 | 195° – 255° | O8, O7 |
| S4 | 255° – 315° | O6, O5 |
| S5 | 315° – 15° | O4, O3 |
Each section includes:
# Generate all 6 sections
python generate_quarter.py --all
# Generate a single section
python generate_quarter.py S0
# View in Blender
blender --python view_all_sections.py
Each of the 29 note pads is extracted from the 3D scan and converted into a printable solid with integrated mounting hardware:
All threads use a push-fit ring groove design (2mm pitch, 1mm depth, 0.3mm clearance) optimized for FDM printing.
# Generate all 29 note pads
python generate_notepad.py --all
# Generate a specific note pad
python generate_notepad.py O5
# Generate mount hardware
python generate_mount_base.py
python generate_outer_sleeve.py
The synthesizer generates realistic steel pan tones using additive synthesis with 14 adjustable parameters:
| Group | Parameters |
|---|---|
| Envelope | Attack, Decay, Sustain, Release |
| Harmonics | Fundamental, 2nd/3rd/4th Harmonic, Sub Bass |
| Character | Detune, Filter Cutoff, Brightness |
| Output | Duration, Volume |
Five built-in presets: Default, Bright, Mellow, Bell, and Pluck.
# Generate all sound samples
python generate_sounds.py
# Use a preset
python generate_sounds.py --preset bright
# Play a melody
./deepPanPlay "C4 E4 G4 C5"
# Analyze a WAV file to extract parameters
python analyze_audio.py sample.wav --output params.json
| Step | Script | Output |
|---|---|---|
| Extract pan surface | extract_pan_surface.py |
Centered bowl mesh |
| Generate note pads | generate_notepad.py --all |
29 note pad OBJ/STL + properties |
| Generate sections | generate_quarter.py --all |
6 section OBJ/STL + properties |
| Generate mount hardware | generate_mount_base.py |
Mount base STL/OBJ |
| Generate sounds | generate_sounds.py |
29 WAV files |
deepPan/
├── data/
│ ├── Tenor Pan only.obj # Source 3D model
│ ├── notepads/ # Note pad STL/OBJ + properties
│ ├── quarters/ # Section STL/OBJ + properties
│ └── mounts/ # Mount hardware STL/OBJ
├── sounds/ # Synthesized audio samples
├── docs/ # Documentation images
├── extract_pan_surface.py # Pan surface extraction
├── generate_notepad.py # Note pad generator
├── generate_quarter.py # Section generator (sixths)
├── generate_mount_base.py # Mount base generator
├── generate_outer_sleeve.py # Outer sleeve generator
├── generate_sounds.py # Sound synthesis CLI
├── analyze_audio.py # Audio analysis tool
├── player.html # Interactive pan player
├── synth.html # Sound design tool (browser)
├── synth_pygame.py # Sound design tool (native Python)
├── deepPan_Colab.ipynb # Google Colab notebook
├── deepPanPlay # Command-line melody player
├── view_all_sections.py # Blender: all 6 sections
├── view_quarter.py # Blender: single section + notepads
├── view_oriented_pan.py # Blender: oriented pan surface
└── view_all.py # Blender: pan + mounts
This project is for educational and personal use.