diff --git a/NOTICE b/NOTICE index d395dab..e9909dc 100644 --- a/NOTICE +++ b/NOTICE @@ -11,7 +11,10 @@ US 2015/0016613 A1). Expired and abandoned patent documents are published prior art, free for anyone to practice. Presets marked "measured-tape" or "measured-mss" encode frequencies, beat rates, and timings measured by spectral analysis of personal copies of commercial recordings; such -measurements are unprotectable facts. No audio, narration, or music from +measurements are unprotectable facts. Presets marked "best-effort" carry +numbers contributed by others, from their own analysis of commercial +recordings; farfield has not verified them, and they claim only to be +plausible approximations. No audio, narration, or music from any recording is included in or reproduced by this project. Trademark disclaimer: Hemi-Sync® and Gateway Experience® are registered diff --git a/README.md b/README.md index dfe9ef1..d249fdc 100644 --- a/README.md +++ b/README.md @@ -32,12 +32,15 @@ own custom meditation sessions and have fun with it. modulation depths and layer timelines from any stereo recording — it's how the measured presets were made, and how the test suite verifies every render against its numbers. -- **16 bundled presets** (in [`presets/`](presets/)) in four provenance +- **19 bundled presets** (in [`presets/`](presets/)) in five provenance groups, strongest first: measured from the original tapes, measured from the MSS remasters, from - the patents, and original designs. The measurement data behind the - first two groups is published in - [`docs/tape-analysis/`](docs/tape-analysis/). + the patents, best-effort reconstructions, and original designs. The + measurement data behind the first two groups is published in + [`docs/tape-analysis/`](docs/tape-analysis/). Best-effort presets are + community-contributed guesses at a recording that farfield has not + verified with its own pipeline; their notes say what is claimed and + what was chosen by ear. The measured presets were reverse engineered by spectral analysis of personal copies of the classic gateway-era recordings and their modern diff --git a/farfield/cli.py b/farfield/cli.py index da64ecf..7d62846 100644 --- a/farfield/cli.py +++ b/farfield/cli.py @@ -30,13 +30,18 @@ "measured-tape": "measured from the original tapes", "measured-mss": "measured from the MSS remasters", "patent": "from the patents", + "best-effort": "best-effort reconstructions (unverified)", "original": "original designs", } """Plain-English group headings for the machine-readable fidelity tiers. The machine values stay in the YAML and the sidecar; these are what a person sees in `list`.""" -TIER_LABELS = {**TIER_HEADINGS, "original": "original design"} +TIER_LABELS = { + **TIER_HEADINGS, + "best-effort": "best-effort reconstruction (unverified)", + "original": "original design", +} """Singular variant for a single session's `describe` line.""" @@ -49,7 +54,10 @@ def format_duration(seconds: float) -> str: return f"{minutes}:{secs:02d}" -_TIER_ORDER = {"measured-tape": 0, "measured-mss": 1, "patent": 2, "original": 3} +_TIER_ORDER = { + "measured-tape": 0, "measured-mss": 1, "patent": 2, "best-effort": 3, + "original": 4, +} def list_lines(directory: Path) -> list[str]: diff --git a/farfield/session.py b/farfield/session.py index b173d5f..6420690 100644 --- a/farfield/session.py +++ b/farfield/session.py @@ -16,9 +16,12 @@ from farfield.waveshape import DEFAULT_HARMONICS -FIDELITY_TIERS = frozenset({"measured-tape", "measured-mss", "patent", "original"}) +FIDELITY_TIERS = frozenset( + {"measured-tape", "measured-mss", "patent", "best-effort", "original"}) """Provenance tiers, strongest first: measured from the original tapes, -measured from the MSS remasters, from the patents, original designs.""" +measured from the MSS remasters, from the patents, best-effort +reconstructions (claims about a recording that farfield has not verified +with its own pipeline), original designs.""" DEFAULT_SAMPLE_RATE = 48000 DEFAULT_PEAK_DBFS = -3.0 diff --git a/farfield/viz_template.html b/farfield/viz_template.html index fe27933..c1b254c 100644 --- a/farfield/viz_template.html +++ b/farfield/viz_template.html @@ -92,6 +92,7 @@ .tier[data-tier="measured-tape"] { color: #3987e5; } .tier[data-tier="measured-mss"] { color: #9085e9; } .tier[data-tier="patent"] { color: #199e70; } + .tier[data-tier="best-effort"] { color: #d0603a; } .tier[data-tier="original"] { color: #c98500; } .spacer { flex: 1; } .chip { @@ -291,6 +292,7 @@

Live waveform

"measured-tape": "measured from the original tapes", "measured-mss": "measured from the MSS remasters", "patent": "from the patents", + "best-effort": "best-effort reconstruction (unverified)", "original": "original design", }; const tierEl = document.getElementById("tier"); diff --git a/presets/focus-11-gamma-pink.yaml b/presets/focus-11-gamma-pink.yaml new file mode 100644 index 0000000..b26e3cc --- /dev/null +++ b/presets/focus-11-gamma-pink.yaml @@ -0,0 +1,64 @@ +name: focus-11-gamma-pink +title: "Focus 11 — 40 Hz SAM triad (unverified)" +fidelity: best-effort +notes: | + BEST-EFFORT, UNVERIFIED. Contributed by a community member, who measured + it with AI-assisted analysis of their own copy of a newer commercial + Focus 11 release (identified by them as "SyncCreation 2.0", a 320 kbps + MP3), sustained window 16:00-27:00. Farfield has NOT re-measured this + recording, no measurement data is published in docs/tape-analysis/, and + the numbers below are taken on trust. Treat it as a plausible sketch, + not a transcription. + + What is claimed: three shared carriers under 40 Hz closed-path + spatial angle modulation (antiphase phase modulation, the technique in + sam-gamma.yaml), over a pink bed. If confirmed, this would be the first + recording found to use SAM at all: the MSS remasters measured in this + repository came back SAM-absent. That claim is exactly what farfield's + mid/side estimator exists to check, and it has not been run here. + + Two things in its favour and two against: + - The carriers 256.869 / 323.625 / 384.875 Hz sit within 0.01 Hz of a + C-major triad (C4 / E4 / G4) in equal temperament at A = 432 Hz, + which a deliberate design would produce and noise would not. + - The depths imply +/-548, +/-559 and +/-592 us of interaural delay, + beyond the ~510 us maximum of the spherical-head model used in + sam-gamma.yaml. Possible, but unexplained. + - The pink-bed level (-7.4 dB) was set by ear, not measured. + - The source window is rendered as one sustained 30:00 hold; any entry, + exit or drift in the original is not represented. +sample_rate: 48000 +output: + peak_dbfs: -3.0 +defaults: + harmonics: + - 1.0 +segments: +- duration: '30:00' + groups: + - name: gamma257 + level_db: -4.0 + sam: + carrier_hz: 256.869 + rate_hz: 40.0 + depth_rad: 0.442 + path: closed + - name: gamma324 + level_db: 0.0 + sam: + carrier_hz: 323.625 + rate_hz: 40.0 + depth_rad: 0.568 + path: closed + - name: gamma385 + level_db: -1.4 + sam: + carrier_hz: 384.875 + rate_hz: 40.0 + depth_rad: 0.716 + path: closed + bed: + level_db: -7.4 + color: pink + slope_db_per_decade: -10.0 +emerge: false diff --git a/presets/focus-11-gamma-theta-pink.yaml b/presets/focus-11-gamma-theta-pink.yaml new file mode 100644 index 0000000..3c5adb5 --- /dev/null +++ b/presets/focus-11-gamma-theta-pink.yaml @@ -0,0 +1,54 @@ +name: focus-11-gamma-theta-pink +title: "Focus 11 — SAM triad plus 4 Hz theta (unverified arrangement)" +fidelity: best-effort +notes: | + BEST-EFFORT, UNVERIFIED, AND PARTLY AN ARRANGEMENT. Identical to + focus-11-gamma-pink (read its notes: same contributed, unverified 40 Hz + SAM triad and ear-set pink bed) plus a conventional L 175 / R 179 Hz + binaural pair, a 4 Hz beat with the right ear high. + + The contributor reports that pair as INTERMITTENT in the source, not + continuously present. This preset plays it for the whole 30:00, so its + persistence is a design choice, not a measurement. Its -7 dB level was + likewise chosen, not measured. Prefer focus-11-gamma-pink as the + closer sketch of the source; this one is an audition variant. +sample_rate: 48000 +output: + peak_dbfs: -3.0 +defaults: + harmonics: + - 1.0 +segments: +- duration: '30:00' + groups: + - name: theta4 + level_db: -7.0 + pairs: + - left: 175.0 + right: 179.0 + - name: gamma257 + level_db: -4.0 + sam: + carrier_hz: 256.869 + rate_hz: 40.0 + depth_rad: 0.442 + path: closed + - name: gamma324 + level_db: 0.0 + sam: + carrier_hz: 323.625 + rate_hz: 40.0 + depth_rad: 0.568 + path: closed + - name: gamma385 + level_db: -1.4 + sam: + carrier_hz: 384.875 + rate_hz: 40.0 + depth_rad: 0.716 + path: closed + bed: + level_db: -7.4 + color: pink + slope_db_per_decade: -10.0 +emerge: false diff --git a/presets/focus-11-older-flac.yaml b/presets/focus-11-older-flac.yaml new file mode 100644 index 0000000..b55ee37 --- /dev/null +++ b/presets/focus-11-older-flac.yaml @@ -0,0 +1,48 @@ +name: focus-11-older-flac +title: "Focus 11 — 4 Hz and 7.4 Hz pairs, older release (unverified)" +fidelity: best-effort +notes: | + BEST-EFFORT, UNVERIFIED. Contributed by a community member, who measured + it with AI-assisted analysis of their own copy of an older commercial + recording (a 44.1 kHz / 24-bit stereo FLAC named "HP040 Sleep 2 + Function"), window 06:54-12:27, which they identify as its Focus 11 + section. Farfield has NOT re-measured this recording and publishes no + data for it; the numbers below are taken on trust. It is a different + construction from focus-11-gamma-pink, not an earlier take on it. + + Reported content, two persistent conventional binaural pairs: + A: L 167.35 / R 171.35 Hz = 4.00 Hz beat, right ear high. + B: L ~412.3 / R ~404.9 Hz = ~7.40 Hz beat, left ear high. + Pair B's absolute carrier reportedly drifts by about +/-0.5 Hz across the + window while its 7.4 Hz separation holds; this preset uses the median + centre (~408.6 Hz) and drops the drift. + + The bed is reported as roughly pink through the midband (~ -11.6 + dB/decade over 1-5 kHz) with a steeper high-frequency rolloff that is not + reproduced. Narration over the source prevented isolating the bed, so + its level is an estimate. No 40 Hz SAM was found in this window and none + is added. Rendered as one sustained 30:00 hold, not the source timeline. +sample_rate: 48000 +output: + peak_dbfs: -3.0 +defaults: + harmonics: + - 1.0 +segments: +- duration: '30:00' + groups: + - name: theta4 + level_db: -1.1 + pairs: + - left: 167.35 + right: 171.35 + - name: upper74 + level_db: 0.0 + pairs: + - left: 412.3 + right: 404.9 + bed: + level_db: -4.0 + color: pink + slope_db_per_decade: -11.6 +emerge: false diff --git a/presets/sam-gamma.yaml b/presets/sam-gamma.yaml index f3f5e93..2296506 100644 --- a/presets/sam-gamma.yaml +++ b/presets/sam-gamma.yaml @@ -56,7 +56,9 @@ notes: | (mss-report.md, "Method"), and the SAM component came back ABSENT: what those recordings actually contain is amplitude panning. Nothing in this preset is transcribed from audio. It reproduces the patents, and only - the patents. + the patents. (focus-11-gamma-pink carries a community claim of measured + 40 Hz SAM in a newer Focus 11 release. Farfield has not verified it, so + the statement above stands until someone runs the estimator on it.) Structure: four blocks on a 300 Hz carrier at f_m = 40 Hz, over a quiet 100 Hz delta pair as ground and a pink bed. Block 2 repeats diff --git a/tests/support.py b/tests/support.py index 9fd00e6..9c84f34 100644 --- a/tests/support.py +++ b/tests/support.py @@ -28,7 +28,10 @@ def preset_names() -> list[str]: return sorted(p.stem for p in PRESET_DIR.glob("*.yaml")) -_TIER_ORDER = {"measured-tape": 0, "measured-mss": 1, "patent": 2, "original": 3} +_TIER_ORDER = { + "measured-tape": 0, "measured-mss": 1, "patent": 2, "best-effort": 3, + "original": 4, +} def preset_metadata() -> list[dict]: diff --git a/tests/test_cli.py b/tests/test_cli.py index 812c024..151cc2c 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -26,6 +26,7 @@ def test_list_lines_group_by_fidelity_tier(): assert "measured from the original tapes:" in text assert "measured from the MSS remasters:" in text assert "from the patents:" in text + assert "best-effort reconstructions (unverified):" in text assert "original designs:" in text assert "sleep-90" in text assert "focus-10" in text diff --git a/tests/test_presets_best_effort.py b/tests/test_presets_best_effort.py new file mode 100644 index 0000000..f7120a4 --- /dev/null +++ b/tests/test_presets_best_effort.py @@ -0,0 +1,37 @@ +import pytest + +from tests.support import load_preset, preset_metadata + +BEST_EFFORT = [ + "focus-11-gamma-pink", "focus-11-gamma-theta-pink", "focus-11-older-flac", +] + + +@pytest.mark.parametrize("name", BEST_EFFORT) +def test_best_effort_tier_and_no_emerge(name): + session = load_preset(name) + assert session.fidelity == "best-effort" + assert session.emerge is None + + +@pytest.mark.parametrize("name", BEST_EFFORT) +def test_best_effort_says_so_in_title_and_notes(name): + session = load_preset(name) + notes = session.notes.lower() + assert "unverified" in session.title.lower() + assert "best-effort" in notes and "unverified" in notes + + +@pytest.mark.parametrize("name", ["focus-11-gamma-pink", "focus-11-older-flac"]) +def test_best_effort_disclaims_farfield_measurement(name): + assert "farfield has not re-measured" in load_preset(name).notes.lower() + + +def test_theta_variant_discloses_its_arrangement(): + notes = load_preset("focus-11-gamma-theta-pink").notes.lower() + assert "intermittent" in notes and "design choice" in notes + + +def test_library_titles_are_unique(): + titles = [e["title"] for e in preset_metadata()] + assert len(titles) == len(set(titles)) diff --git a/tests/test_presets_library.py b/tests/test_presets_library.py index 312c761..499bd01 100644 --- a/tests/test_presets_library.py +++ b/tests/test_presets_library.py @@ -11,11 +11,16 @@ # (tests/test_presets_mss.py holds their own shape assertions). MEASURED_MSS = ["focus-10-mss", "focus-12-mss", "focus-15-mss", "focus-21-mss"] PATENT = ["sleep-90", "wake", "sam-gamma"] +# Community-contributed reconstructions that farfield has not re-measured +# (tests/test_presets_best_effort.py holds their disclosure assertions). +BEST_EFFORT = [ + "focus-11-gamma-pink", "focus-11-gamma-theta-pink", "focus-11-older-flac", +] def test_all_expected_presets_exist(): assert set( - ORIGINAL + MEASURED_TAPE + MEASURED_MSS + PATENT + ORIGINAL + MEASURED_TAPE + MEASURED_MSS + PATENT + BEST_EFFORT ) == set(preset_names()) @@ -71,5 +76,6 @@ def test_list_is_grouped_measured_first(): text.index("measured from the original tapes:") < text.index("measured from the MSS remasters:") < text.index("from the patents:") + < text.index("best-effort reconstructions (unverified):") < text.index("original designs:") ) diff --git a/tests/test_presets_measured.py b/tests/test_presets_measured.py index 529347d..827f01e 100644 --- a/tests/test_presets_measured.py +++ b/tests/test_presets_measured.py @@ -30,7 +30,8 @@ def test_measured_totals_match_the_tape_timeline(name, total_s): def test_measured_sorts_first_in_the_library(): tiers = [e["fidelity"] for e in preset_metadata()] assert tiers[0] == "measured-tape" - order = {"measured-tape": 0, "measured-mss": 1, "patent": 2, "original": 3} + order = {"measured-tape": 0, "measured-mss": 1, "patent": 2, + "best-effort": 3, "original": 4} assert tiers == sorted(tiers, key=lambda t: order[t]) diff --git a/tests/test_session.py b/tests/test_session.py index fe5e6cd..1d006f8 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -211,9 +211,9 @@ def test_fidelity_must_be_a_known_tier(): load_session_dict(data) -def test_fidelity_tiers_are_the_documented_four(): +def test_fidelity_tiers_are_the_documented_five(): assert FIDELITY_TIERS == frozenset( - {"measured-tape", "measured-mss", "patent", "original"}) + {"measured-tape", "measured-mss", "patent", "best-effort", "original"}) def test_a_session_needs_at_least_one_segment(): diff --git a/tests/test_session_bed.py b/tests/test_session_bed.py index 34f4a44..5a7524d 100644 --- a/tests/test_session_bed.py +++ b/tests/test_session_bed.py @@ -83,9 +83,9 @@ def test_measured_tape_is_a_valid_tier(): assert _bed_session(fidelity="measured-tape").fidelity == "measured-tape" -def test_tier_set_is_exactly_the_four(): +def test_tier_set_is_exactly_the_five(): assert FIDELITY_TIERS == frozenset( - {"measured-tape", "measured-mss", "patent", "original"}) + {"measured-tape", "measured-mss", "patent", "best-effort", "original"}) def test_crossfade_stereo_parses():