🛠 Free Tools & AI Utilities ↗

Get in touch

Tell us a little about your project and we'll follow up by email with licensing and download details.

EarshotPodcast WordPress Theme

The waveform is the real file, and the search reads the transcripts — down to the second.

earshot.kilnwp.com LIVE
Earshot Open live preview ↗

Overview

Who it is for

Earshot is for a podcast or a small podcast network — one show or several, with a back catalogue big enough that finding things in it has become the problem. It is not a generic blog theme with a play button bolted on.

Two failures, both fixed properly

Almost every podcast website has the same two faults. The scrub bar is a picture of a waveform that belongs to no particular episode, so it tells a listener nothing about where they are. And an hour of conversation is unsearchable, so everything anybody said is effectively lost the day after it goes out.

The waveform is measured, in the editor’s own browser

Attach an audio file to an episode and press Measure waveform. The browser fetches the file, decodes it with the Web Audio API — a real decoder, the same one that plays it — reduces it to four hundred loudness readings, and stores them with the post. What appears on the page afterwards is the shape of that file: where the quiet bits are, where somebody laughs, where the music bed comes in.

This means no ffmpeg, no exec() and no shell on the server, which most hosts do not offer and none should need; and no third-party waveform service, so an episode’s audio is never uploaded anywhere else. It is done once, at edit time, not on every page view.

Loudness is RMS rather than peak-hold, and the difference is the whole point: a peak-hold reading is dominated by single-sample transients, so a peak-hold waveform of speech comes out looking like a flat wall. RMS tracks loudness as heard, which is what makes a conversation’s shape visible at all.

If an episode is never measured, the theme draws a plain bar. It does not invent a shape — a plausible-looking waveform is worse than none, because it tells a listener there is something quiet at twelve minutes when there is not.

The transcript is searchable, and it seeks

Paste whatever your transcription tool produced. The parser takes a timecode, an optional speaker and the line, because every transcription tool on earth already emits something close to [00:04:12] Alma: and that was the argument. No proprietary block, no import step.

Site search then reads those transcripts as well as titles and descriptions, and a result links to the second the phrase was spoken rather than to the top of a ninety-minute file. Clicking any line of a transcript moves the playhead, and the line being spoken highlights as it plays.

One player for the whole page

A single audio element serves the entire site. Every episode row, the hero player and every transcript cue drive it, so pressing play on a second episode stops the first rather than leaving two voices talking over each other — which is exactly what happens when a separate player is dropped into every card. The scrub bar is a genuine slider: arrow keys seek, Home and End work, and the operating system’s lock screen shows the episode rather than “unknown”.

A room, not a spectrum analyser

The background is deliberately not an audio visualiser. It is the place these conversations are actually recorded: a wall of acoustic wedge foam in raking light, rendered as a real height field. The wedges are square pyramids, so the surface normal comes from the geometry rather than from noise and each face catches the light the way a flat face does. Parallax occlusion means near ridges genuinely hide the troughs behind them where the wall is seen at a glancing angle, and every wedge has its own height so it never reads as a tiled image.

Degrades honestly

One full-screen fragment shader, no textures. The theme measures its own frame time on the median rather than the mean and steps down through lower render resolutions one rung at a time; at the bottom of the ladder it stops animating and leaves the last frame on screen. With prefers-reduced-motion it paints a single still frame and never starts a loop. Without WebGL2 the page renders on plain dark ground and nothing else changes.

With scripting off, the waveform is still there — it is inline SVG, so the shape is in the markup — and the transcript is still readable with its timecodes.

What is in the box

  • Episodes with number, audio (uploaded or an external URL), measured waveform, measured duration, guests and transcript.
  • Shows as a taxonomy, so a network runs several under one roof.
  • People for hosts and regulars.

No page builder, no ACF, no build step, no audio library, no player framework and no iframe. The only bundled binaries are two variable fonts, both under the SIL Open Font License and self-hosted, so listening to a show does not report the listener to anyone.

Classic PHP theme, no build step. Episode and person post types plus a show taxonomy, hand-rolled meta boxes — no ACF. Waveform peaks decoded from the audio in the editor browser with the Web Audio API (RMS, 400 points) and stored as post meta; no ffmpeg, exec() or third-party service. Inline-SVG waveform as a single scalable path. Transcript parser for standard timecoded output, a derived plain-text field, and a site search widened per term so phrases match spoken words and link to #t=SECONDS. One shared audio element with Media Session metadata and a real slider role. Raw WebGL2 acoustic-foam shader with analytic pyramid normals and parallax occlusion, a median-based quality governor and a still-frame reduced-motion path. Two self-hosted OFL variable fonts.

What's included

  • Full theme source — every template, style sheet & script
  • One-click demo importer (idempotent, no page builder)
  • Live Customizer controls for copy, colours & content
  • Translation-ready .pot file + RTL stylesheet
  • HTML documentation + a CHANGELOG file
  • Lifetime updates + 6 months support (renewable)

Specifications

WordPress5.6 – 7.0
PHP8.0 – 8.3
BrowsersChrome, Firefox, Safari, Edge (latest)
LayoutFully responsive, mobile → desktop
LocalizationTranslation-ready · RTL included
AccessibilityKeyboard-navigable · prefers-reduced-motion
Page builderNot required — native Customizer
LicenseGNU GPL v2 · single-site commercial

Release

v1.2.0 The waveform is the real file, and the search reads the transcripts — down to the second.

The complete, dated version history ships in the theme’s CHANGELOG file. Every purchase includes lifetime access to future updates.

Tumbler Featured

Tumbler

$69

Scroll and the lock comes apart: the housing lifts, the pins set one service at a time, the plug turns at the phone number.

Bold Booking
View →
Clearcoat Featured

Clearcoat

$69

Drag across a live paint panel: swirls polish out to a mirror and water beads on the coat — then price the job for your car.

Automotive Bold
View →
Tackle Featured

Tackle

$69

Tell it the water and the fish, and it lays out the rod, the line and the reel — on a live lake that ripples under the pointer.

Blog Calculator
View →