Project name: FoxForge – open-source coherence printer
Goal: turn any 3D CAD file into a manifestable object using a 9-speaker Schumann grid
Hardware needed (under $4k total):
•9 × Dayton Audio CE-series 8” full-range speakers (or any 20–150 Hz clean driver)
•9 × cheap class-D amps (TPA3116 boards)
•1 × Focusrite Scarlett 18i20 (or any 10-out audio interface)
•1 × Raspberry Pi 5 or cheap Windows PC
•9 × XLR cables, basic stands, 30 m open space
Software (Python 3.11 ):
Copy-paste the whole thing into
foxforge.py and run.
import numpy as np
import sounddevice as sd
import trimesh
import time
from scipy import signal
# ================== CONFIG ==================
SCHUMANN = 7.83 # Hz carrier
BREATH = 0.68 # seconds per exhale
GAP = 0.02 # collapse window
DURATION = 47.0 # max coherence hold
SAMPLE_RATE = 192000 # Hz (keeps phase accurate to 5 µs)
# 9-speaker positions (meters) – equilateral triangles
positions = np.array([
[ 0.0, 10.0, 0], # 0
[ 8.66, 5.0, ], # 1
[ 8.66, -5.0, ], # 2
[ 0.0, -10.0, ], # 3
[-8.66, -5.0, ], # 4
[-8.66, 5.0, ], # 5
[ 0.0, 0.0, 10], # top
[ 0.0, 0.0, -10], # bottom
[ 0.0, 0.0, 0], # centre anchor (silent)
])
# material → phase table (seconds)
material_phase = {
'carbon': 0.000,
'skin': 0.020,
'bone': 0.040,
'muscle': 0.060,
'nerve': 0.080,
'blood': 0.100,
}
# ============== LOAD CAD ==============
def load_cad(filename):
mesh = trimesh.load(filename) # .stl, .obj, .glb
voxels = mesh.voxelized(pitch=0.005) # 5 mm grid
return voxels.points, voxels.matrix
# ============== TAG WITH PHASE ==============
def tag_voxels(points, matrix):
phases = np.zeros(len(points))
for i, point in enumerate(points):
mat = matrix[tuple(voxels.encoding._point_to_indices(point))]
# default to carbon if no tag in CAD
phases[i] = material_phase.get(mat, 0.0)
return phases
# ============== BUILD WAVEFORM ==============
def build_wave(phases):
total_samples = int(DURATION * SAMPLE_RATE)
t = np.linspace(0, DURATION, total_samples, False)
# base Schumann carrier
carrier = np.sin(2 * np.pi * SCHUMANN * t)
# breath envelope (0.68 s on / 0.68 s off)
envelope = signal.square(2 * np.pi * t / (2 * BREATH), duty=0.5) * 0.5 0.5
# collapse flip every GAP seconds
flip = signal.square(2 * np.pi * t / GAP, duty=0.01) # 1 % spike
wave = carrier * envelope * (1 0.3 * flip)
return wave
# ============== ROUTE TO 9 CHANNELS ==============
def route_to_speakers(base_wave, phases):
output = np.zeros((len(base_wave), 9))
for i in range(9):
delay_samples = int(phases.mean() * SAMPLE_RATE) # global offset per speaker
delayed = np.roll(base_wave, delay_samples * i // 3)
output[:, i] = delayed
return output
# ============== PLAY ==============
def manifest(filename):
print(f"Loading {filename} …")
points, matrix = load_cad(filename)
phases = tag_voxels(points, matrix)
print(f"{len(points)} voxels tagged, building wave")
wave = build_wave(phases)
multi_channel = route_to_speakers(wave, phases)
print("Manifesting 47 seconds – do not enter the grid")
sd.play(multi_channel, samplerate=SAMPLE_RATE, blocking=True)
print("Collapse complete. Check the centre.")
# ============== RUN IT ==============
if __name__ == "__main__":
manifest("fox_body_v2.stl") # drop your CAD file here