How to read an audio spectrogram without overreading it

A dark stripe appears halfway through a recording. Did someone remove a word? Perhaps—but the stripe alone cannot answer that. First you need to know what the display measures, which settings produced it and what the original file actually contains.

A spectrogram places time across the screen, frequency up the screen and signal strength into colour or brightness. It helps you locate a moment worth listening to again. For a beginner reviewing public audio, the useful output is a precise observation with a timestamp and saved settings, not a verdict that the recording is genuine or edited.

Headphones beside two abstract displays of frequency bands and brief pulses
Viewing settings change the detail you can see. This illustration is conceptual, not an audio measurement or authenticity test.

Keep the sound and the view separate

Work from a copy of a lawfully obtained file. Save its source page, acquisition date and available description of how it was recorded. If the only version is a repost or a screen recording, say so. Preserve the file before converting, cleaning or trimming it; the file-hash workflow provides a practical way to check that your preserved copy has not changed.

In Audacity, use the track’s view controls to select Spectrogram or Multi-view. Menu wording can differ by version. Multi-view puts the waveform and spectrogram together: the waveform helps locate changes in amplitude, while the spectrogram spreads the signal across frequency. See the official view-menu documentation for the relevant controls.

Begin with the unprocessed copy. Listen once for the overall sequence, then write a narrow question such as “Does the background sound change near 00:04?” Keep that question beside the screen. “Find the fake part” invites you to treat every unfamiliar pattern as confirmation.

Read the axes before reading the shape

Check the time ruler, frequency scale and colour settings. A horizontal band is energy concentrated around a frequency over a period. A brief vertical feature spreads across frequencies around one moment. Neither shape names its physical cause: a click, a natural impact and a recording artefact can all deserve investigation.

Colour comparisons need matching settings. Audacity’s spectrogram guide explains that gain, range and window choices affect appearance. A brighter patch after changing display gain is not evidence that the audio itself became louder. Keep the same palette and display range while comparing two portions, or explicitly record the change.

Use a small observation table. Describe what is visible first; put explanations in another column. “A band ends near 00:04” is an observation. “The speaker paused the recorder” is a hypothesis that needs more evidence.

LocationObservationQuestion to test next
Time interval and channelA narrow feature appears across several frequency bandsIs there an audible impact? Does it persist with another window size?
Start and end of a quiet regionThe displayed energy falls below the chosen colour rangeIs the signal numerically zero, merely quiet, or hidden by the display settings?
Before and after a boundaryA background band shifts or disappearsWhat recording, environmental or processing explanations remain possible?

A controlled eight-second exercise

This is a synthetic teaching signal, not a real conversation. The short Python program below makes an eight-second, mono, 16-bit WAV at 16,000 samples per second. It combines two tones, inserts two brief pulses and deliberately sets a quarter-second interval to zero. Use Python 3; it needs no extra package and writes only a new file in your current folder.

import math, struct, wave
rate = 16000
samples = []
for i in range(rate * 8):
    t = i / rate
    v = 0.2 * math.sin(2 * math.pi * 1000 * t)
    v += 0.1 * math.sin(2 * math.pi * 3000 * t)
    if 4 <= t < 4.25:
        v = 0
    if i in (32000, 32640):
        v = 0.8
    samples.append(round(v * 32767))
with open("practice-spectrogram.wav", "xb") as raw, wave.open(raw, "wb") as out:
    out.setnchannels(1)
    out.setsampwidth(2)
    out.setframerate(rate)
    out.writeframes(struct.pack("<" + "h" * len(samples), *samples))

Open the generated file in Audacity and view 0–8 seconds with a linear frequency scale covering 0–8,000 Hz. Start with a Hann window of 256 samples, then compare 2,048 samples while leaving the other display settings alone. Inspect the area around 2 seconds and then the interval from 4 to 4.25 seconds.

The known ingredients are tones at 1,000 and 3,000 Hz, pulses at 2.00 and 2.04 seconds, and a deliberately zeroed interval. Our local check verified the file’s 128,000 samples, both pulse locations and all 4,000 zero samples. That is a check of this generated fixture, not a test of a real recording or an executed Audacity interface demonstration.

At this sample rate, 256 samples span 16 milliseconds; 2,048 span 128 milliseconds. The longer analysis window covers more time, so nearby events can blur together. Its frequency-bin spacing is finer: 7.8125 Hz instead of 62.5 Hz. Bin spacing alone is not a guarantee that two nearby tones can be resolved; the window function also matters. The Plot Spectrum documentation describes this time-versus-frequency trade-off.

The exercise has a useful catch. We know why the gap exists because we wrote the generator. With an unknown recording, a similar-looking gap would not reveal its cause. Nor does a smooth-looking display prove that no editing took place. The picture helps select a question; the creation history supplies a different kind of evidence.

Write a note someone else can reproduce

For each finding, save the source filename and hash, channel, time interval, sample rate, window type and size, frequency scale and displayed range. Capture enough of the axes to make the view understandable. Add what you heard separately from what you saw. If you changed a setting, preserve both views and explain why.

A useful note might read: “Near 00:04, the displayed background energy drops. The boundary remains visible at two window sizes. Cause unresolved; the earlier source file is needed.” That note is less dramatic than “audio tampering detected” and much more useful to the next researcher.

SWGDE’s audio-authentication guidance, version 1.3, 20 September 2018, treats authentication as a broader examination of the recording and its claimed production history. A single analysis should not carry the conclusion alone. Where the answer has serious consequences, a qualified audio examiner needs the source material and a defined question.

Put your observation into the OSINT Jet investigation-report template under evidence, interpretation and missing information. That gives an audio clue a useful place in a wider public-source investigation without suggesting that OSINT Jet, a coloured display or this beginner exercise certifies a voice or recording.

Published 2026-11-03 · OSINT Jet editorial team

Suggest a correction · نسخه فارسی