Skip to content

v2.0: synthesize morse from callsign, scheduling, CI, and open-source scaffolding#1

Merged
rbibby53 merged 5 commits into
masterfrom
improvements
Jun 11, 2026
Merged

v2.0: synthesize morse from callsign, scheduling, CI, and open-source scaffolding#1
rbibby53 merged 5 commits into
masterfrom
improvements

Conversation

@rbibby53

Copy link
Copy Markdown
Owner

What does this PR do?

Modernizes the Fox Hunt Controller and prepares it for open-sourcing.

Bug fixes

  • Filename case mismatch (morse.WAVmorse.wav) that broke playback on case-sensitive filesystems (Linux, Raspberry Pi).
  • Native audio line leak from opening a new Clip on every playback.
  • Inaccurate timing — playback now waits for the real end-of-clip event instead of a Thread.sleep approximation.
  • Errors are reported instead of silently swallowed.

Features

  • Morse synthesis from --callsign (PARIS timing, configurable --wpm/--tone, ramped envelope to avoid key clicks). No recordings required.
  • --morse-file still plays a recorded WAV as the ID.
  • --gap / --random-gap for fixed or randomized quiet periods.
  • --start / --stop for timed hunts; --cycles to limit runtime.
  • Timestamped logging of every transmission.

Tooling & project

  • Targets Java 26; code moved to the fox package, split into Fox + Morse.
  • GitHub Actions: builds, smoke-tests, and attaches fox.jar to v* releases.
  • Open-source scaffolding: CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, issue/PR templates, CHANGELOG, .editorconfig, README badges, and a transmitter-licensing operating note.
  • Removed bundled morse.wav/shh.wav and stale build output from version control.

How was it tested?

  • javac -d out/classes src/fox/*.java + jar build clean on Java 26.
  • Live playback verified for synthesized morse (25 wpm) and recorded-WAV mode.
  • Error paths checked: invalid callsign chars, malformed times, unknown flags, missing files.
  • All workflow/issue-template YAML validated.

Note

  • Default behavior is now run-until-stopped rather than a fixed 4000 cycles (--cycles 4000 restores the old behavior).

🤖 Generated with Claude Code

rbibby53 and others added 5 commits June 11, 2026 08:14
- Fix filename case mismatch (morse.WAV -> morse.wav) that broke on
  case-sensitive filesystems like Linux
- Load each clip once and replay it instead of opening a new Clip per
  playback, which leaked native audio lines
- Wait for actual playback completion via LineListener instead of
  approximating with Thread.sleep(length/860)
- Report audio errors instead of silently swallowing them
- Make cycle count and morse repeats configurable from the command line
  (0 cycles = run until stopped)
- Add README, .gitignore; stop tracking build output and workspace.xml

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Compile without --release 8; use var, lambdas, and text blocks.
Update IntelliJ language level and README requirements to Java 26.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Generate the morse ID in memory from --callsign (PARIS timing,
  configurable --wpm and --tone, ramped envelope to avoid key clicks);
  --morse-file still plays a recorded WAV instead
- Replace the 5 MB shh.wav with a timed silent --gap, plus --random-gap
  to vary the quiet period and make the fox harder to find
- Add --start/--stop times for timed hunts and timestamped logging of
  every transmission
- Move code to the fox package, split out Morse.java, update manifest
- Add GitHub Actions workflow: builds and smoke-tests fox.jar on every
  push, attaches it to releases on v* tags
- Remove morse.wav and shh.wav; no recordings are needed anymore

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- CONTRIBUTING.md with build, test, and PR guidance
- CODE_OF_CONDUCT.md (Contributor Covenant 2.1)
- SECURITY.md with private vulnerability reporting
- Issue templates (bug/feature) and a pull request template
- CHANGELOG.md (Keep a Changelog format)
- .editorconfig for consistent formatting
- README: CI/license/Java badges, contributing section, and an
  operating note on transmitter licensing and station identification

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rbibby53 rbibby53 merged commit 8f79159 into master Jun 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant