--- /dev/null
+eps = 0.01;
+infty = 200;
+
+wall = 1;
+
+horn_w = 10;
+horn_l = 15;
+tip_hole = 2;
+tip_d = tip_hole+2*wall;
+tube_d = 2.0 + 0.5;
+tube_off = 1;
+
+foam_w = 3;
+side_w = 0.5;
+side_l = horn_l - 7;
+side_h = 8;
+
+
+module body() {
+ hull() {
+ for (x = [-1, 1]) scale([x, 1, 1])
+ translate([horn_w, 0, 0])
+ cylinder(r = tip_d/2, h = wall);
+ translate([-foam_w/2, -horn_l+tip_d/2, 0])
+ cube([foam_w, horn_l, wall]);
+ }
+ // side
+ translate([foam_w/2-side_w, -horn_l+tip_d/2, 0])
+ cube([side_w, side_l, side_h]);
+}
+
+difference() {
+ body();
+ for (x = [-1, 1]) scale([x, 1, 1])
+ translate([horn_w, 0, -eps])
+ cylinder(r = tip_hole/2, h = wall+2*eps);
+ // tube hole
+ translate([0, tube_off, -eps])
+ cylinder(r = tube_d/2, h = wall+2*eps, $fn = 6);
+}
+