Skip to main content

Tuning Fork

A reference-tone generator for OVOS - "give me an A" plays a clean 440Hz sine tone, "play 300 hertz" plays an arbitrary frequency. Fully offline, fully deterministic: every tone is generated (equal- temperament, A4 = 440Hz standard concert pitch), nothing recorded, nothing to source or license.

Tests PyPI version

Early 0.0.x release. Named notes always play octave 4 - no octave selection yet. See "Not yet implemented" below.

Usage

"give me an A"
"play a C sharp"
"play 300 hertz"
"giv mig et A"          (Danish)
"spil et H"             (Danish - see "The Danish H/B swap" below)

Each tone rings for 4 seconds (short fade-in/out to avoid clicks) and stops on its own - see "Why no stop intent" below.

The Danish H/B swap - a real trap, not a translation nicety

Danish (like German) uses a different note-naming convention than English for one specific note:

Danish English Frequency (octave 4)
H B (natural) 493.88 Hz
B B♭ (flat) 466.16 Hz

Saying "H" in Danish means the natural B - not a flat, and not "the letter after G" the way English speakers might assume. Saying "B" in Danish means B-flat. This is the actual Danish/German musical convention, the same shape of false-friend trap as the unit- conversion ones in ovos-skill-convert (Danish "ton" vs the English "ton", etc) - getting it backwards would produce a confidently wrong note, not just an awkward translation. See tests/test_note_resolution.py for the regression tests that would catch this being backwards.

The exact spelling of sharp/flat suffixes (ciss vs cis, ess vs es) is lower-confidence - see locale/da-dk/note_aliases.json's _notes key for what's hedged and why.

Why no "stop" intent

Unlike ovos-skill-metronome and ovos-skill-rhythm-box, there's no background thread or stop intent here. play_audio() has no reliable "stop this sound" counterpart in the standard OVOSSkill API (only mycroft.audio.speech.stop, which stops TTS speech, not sounds). Rather than build a stop intent that can't actually stop anything, each tone just has a fixed, short duration and ends on its own - the same way a real tuning fork rings out rather than being interrupted.

Why no "listen and identify the pitch" feature

A natural-feeling extension: strike an instrument, have the skill listen and say whether it's sharp or flat. Deliberately not built - not a scope preference, a real technical blocker: a standard OVOSSkill has no access to raw microphone audio for analysis. The only "listening" primitive (get_response()) goes through the full STT pipeline and returns transcribed text, not a waveform. Real pitch detection would need a dedicated PHAL plugin or audio- transformer tapping the raw audio stream, plus an actual pitch- detection algorithm - a different technical domain (audio analysis) from this skill (audio synthesis), and arguably a different product (an instrument tuner) from this one (a reference-tone generator). Left as a possible future skill, not a feature of this one.

Not yet implemented

  • Octave selection. "give me an A" is always A4 (440Hz). Octave- in-speech parsing ("A two" vs "A 2") adds real ambiguity that wasn't worth solving before the basic note lookup worked - use "play {N} hertz" for a specific frequency in the meantime.
  • Listen-and-identify pitch - see above, likely a separate future skill rather than an extension of this one.

Install

pip install ovos-skill-tuning-fork

Development

See DEVELOPMENT.md.

Category

Utility

Tags

#music #tuning #reference-tone #instrument

Release files for ovos-skill-tuning-fork 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ovos-skill-tuning-fork 0.0.1
File Size Uploaded
ovos_skill_tuning_fork-0.0.1.tar.gz 25.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ovos-skill-tuning-fork 0.0.1
File Interpreter ABI Platform
ovos_skill_tuning_fork-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 52.0 kB

Release files / ovos_skill_tuning_fork-0.0.1.tar.gz

Download URL ovos_skill_tuning_fork-0.0.1.tar.gz
Size 25.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2117886f897a0dab5c42e903da1bca9ab244ef0b1b99febdc08f3b0ff5ff4048
BLAKE2b-256 checksum
How to use checksums
acfa32c568b5e56659f47b046c7d322f689e4ada2378eb85d311b1ff2e35046e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release files / ovos_skill_tuning_fork-0.0.1-py3-none-any.whl

Download URL ovos_skill_tuning_fork-0.0.1-py3-none-any.whl
Size 26.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72181e4ad56cc06ffc6f3cdd57c9b4b27ad51410ad40c89d673fc27bc66e58dc
BLAKE2b-256 checksum
How to use checksums
2039b647d75838273c67225340f915b67e0bf94ce7686b7eb8c6c89216e9fbc8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page