{
  "title": "Audio spectrogram viewer",
  "human_url": "https://happytails.ai/en/media-tools/audio-spectrogram-viewer/",
  "agent_url": "https://happytails.ai/agents/en/media-tools/audio-spectrogram-viewer/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/media-tools/audio-spectrogram-viewer.md",
  "content": "Audio spectrogram viewer\nSee how the frequencies in a recording change over time and download a labelled spectrogram image of the whole file or a selected range.\nHow to use Audio spectrogram viewer\nChoose one audio file from your device.\nSet the start and end time if you only want part of the recording.\nPick the FFT size, window, frequency scale, level range and image size.\nCreate the spectrogram and download the PNG and the JSON report of the settings.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nUseful next steps\nMusic key detector\nBeat grid editor\nRemove background noise\nHow the image is made\nThe selected range is split into one analysis frame per pixel column. Each frame is windowed (Hann by default) and passed through a fast Fourier transform, and the magnitude in each frequency row is drawn in the viridis colour map from your lowest to your highest level. A full-scale sine wave reads 0 dB. Channels are averaged into one signal first.\nChoosing the settings\nA larger FFT size separates close frequencies better but blurs fast changes in time; a smaller one does the opposite. The JSON report states the frequency resolution (sample rate divided by FFT size) and the time step between columns. The log scale spreads low frequencies out, from 20 Hz up to half the sample rate; the linear scale runs from 0 Hz.\nLimits of the result\nThe image shows level, not loudness as people hear it. Frequencies above half the sample rate cannot appear, and a file the browser decoded and resampled can show small differences from its original.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Music key detector",
      "url": "https://happytails.ai/en/media-tools/music-key-detector/"
    },
    {
      "name": "Beat grid editor",
      "url": "https://happytails.ai/en/media-tools/beat-grid-editor/"
    },
    {
      "name": "Remove background noise",
      "url": "https://happytails.ai/en/media-tools/remove-background-noise/"
    }
  ],
  "tool": {
    "id": "audio-spectrogram-viewer",
    "category": "media-tools",
    "built": true,
    "requirements": "One file up to 256 MiB, 10 minutes, 8 channels and 60 million samples, at 8,000 to 192,000 Hz. FFT size 256 to 8,192 samples, image 64 to 4,096 pixels wide and 64 to 2,048 pixels high, and width times FFT size at most 32 million. Levels from -200 to 20 dB, with the lowest below the highest. WAV is read directly with every channel and sample intact. MP3, M4A, AAC, FLAC, OGG, Opus and WebM are decoded by your browser and resampled to 48 kHz first, so decoding support depends on the browser. Files are decoded and measured on your device and are never uploaded. Downloads: JSON report of the settings and a PNG image with time and frequency axes and a colour bar.",
    "implementation": {
      "fields": [
        {
          "key": "start",
          "label": "Start (seconds)",
          "value": "0",
          "type": "number",
          "min": 0,
          "max": 600,
          "step": 0.001
        },
        {
          "key": "end",
          "label": "End (seconds, 0 for the end of the file)",
          "value": "0",
          "type": "number",
          "min": 0,
          "max": 600,
          "step": 0.001
        },
        {
          "key": "fftSize",
          "label": "FFT size (samples)",
          "value": "2048",
          "type": "select",
          "values": [
            "256",
            "512",
            "1024",
            "2048",
            "4096",
            "8192"
          ]
        },
        {
          "key": "window",
          "label": "Window function",
          "value": "hann",
          "type": "select",
          "values": [
            "hann",
            "hamming",
            "blackman",
            "rectangular"
          ]
        },
        {
          "key": "scale",
          "label": "Frequency scale",
          "value": "log",
          "type": "select",
          "values": [
            "log",
            "linear"
          ]
        },
        {
          "key": "minDb",
          "label": "Lowest level shown (dB)",
          "value": "-120",
          "type": "number",
          "min": -200,
          "max": -10,
          "step": 1
        },
        {
          "key": "maxDb",
          "label": "Highest level shown (dB)",
          "value": "0",
          "type": "number",
          "min": -100,
          "max": 20,
          "step": 1
        },
        {
          "key": "width",
          "label": "Width (pixels)",
          "value": "1024",
          "type": "number",
          "min": 64,
          "max": 4096,
          "step": 1
        },
        {
          "key": "height",
          "label": "Height (pixels)",
          "value": "512",
          "type": "number",
          "min": 64,
          "max": 2048,
          "step": 1
        }
      ],
      "registrationFamily": "audio-pcm-measurement",
      "presentation": "metrics",
      "files": true,
      "input": false,
      "accept": ".wav,.mp3,.m4a,.aac,.flac,.ogg,.oga,.opus,.webm,audio/*",
      "maxFileBytes": 268435456,
      "inputErrorCode": "AUDIO_PCM_MEASUREMENT_TOO_LONG",
      "multiple": false,
      "note": "Runs locally in your browser. Draws one recording up to 10 minutes, 8 channels and 256 MiB as a labelled PNG spectrogram.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Audio file",
        "placeholder": "Choose a WAV, MP3, M4A, FLAC or OGG file",
        "help": "Pick the time range and image size in the settings below. Up to 1,000,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Audio spectrogram viewer\n\n- Human page: https://happytails.ai/en/media-tools/audio-spectrogram-viewer/\n- Markdown: https://happytails.ai/en/media-tools/audio-spectrogram-viewer.md\n- Structured JSON: https://happytails.ai/agents/en/media-tools/audio-spectrogram-viewer/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `audio-spectrogram-viewer` |\n| Category | media-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns locally in your browser. Draws one recording up to 10 minutes, 8 channels and 256 MiB as a labelled PNG spectrogram.\n\n### Inputs and settings\n\nNo free-text input is required. Use the file inputs and/or settings below.\n\nAccepted browser files: `.wav,.mp3,.m4a,.aac,.flac,.ogg,.oga,.opus,.webm,audio/*`. Choose one file.\n\nBrowser file-input limit: 268435456 bytes in total. HTTP limits can differ.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `start` | Start (seconds) | number | \"0\" | min=0 max=600 step=0.001 |\n| `end` | End (seconds, 0 for the end of the file) | number | \"0\" | min=0 max=600 step=0.001 |\n| `fftSize` | FFT size (samples) | select | \"2048\" | Allowed: 256, 512, 1024, 2048, 4096, 8192 |\n| `window` | Window function | select | \"hann\" | Allowed: hann, hamming, blackman, rectangular |\n| `scale` | Frequency scale | select | \"log\" | Allowed: log, linear |\n| `minDb` | Lowest level shown (dB) | number | \"-120\" | min=-200 max=-10 step=1 |\n| `maxDb` | Highest level shown (dB) | number | \"0\" | min=-100 max=20 step=1 |\n| `width` | Width (pixels) | number | \"1024\" | min=64 max=4096 step=1 |\n| `height` | Height (pixels) | number | \"512\" | min=64 max=2048 step=1 |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nOne file up to 256 MiB, 10 minutes, 8 channels and 60 million samples, at 8,000 to 192,000 Hz. FFT size 256 to 8,192 samples, image 64 to 4,096 pixels wide and 64 to 2,048 pixels high, and width times FFT size at most 32 million. Levels from -200 to 20 dB, with the lowest below the highest. WAV is read directly with every channel and sample intact. MP3, M4A, AAC, FLAC, OGG, Opus and WebM are decoded by your browser and resampled to 48 kHz first, so decoding support depends on the browser. Files are decoded and measured on your device and are never uploaded. Downloads: JSON report of the settings and a PNG image with time and frequency axes and a colour bar.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"audio-spectrogram-viewer\",\n  \"category\": \"media-tools\",\n  \"built\": true,\n  \"requirements\": \"One file up to 256 MiB, 10 minutes, 8 channels and 60 million samples, at 8,000 to 192,000 Hz. FFT size 256 to 8,192 samples, image 64 to 4,096 pixels wide and 64 to 2,048 pixels high, and width times FFT size at most 32 million. Levels from -200 to 20 dB, with the lowest below the highest. WAV is read directly with every channel and sample intact. MP3, M4A, AAC, FLAC, OGG, Opus and WebM are decoded by your browser and resampled to 48 kHz first, so decoding support depends on the browser. Files are decoded and measured on your device and are never uploaded. Downloads: JSON report of the settings and a PNG image with time and frequency axes and a colour bar.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"start\",\n        \"label\": \"Start (seconds)\",\n        \"value\": \"0\",\n        \"type\": \"number\",\n        \"min\": 0,\n        \"max\": 600,\n        \"step\": 0.001\n      },\n      {\n        \"key\": \"end\",\n        \"label\": \"End (seconds, 0 for the end of the file)\",\n        \"value\": \"0\",\n        \"type\": \"number\",\n        \"min\": 0,\n        \"max\": 600,\n        \"step\": 0.001\n      },\n      {\n        \"key\": \"fftSize\",\n        \"label\": \"FFT size (samples)\",\n        \"value\": \"2048\",\n        \"type\": \"select\",\n        \"values\": [\n          \"256\",\n          \"512\",\n          \"1024\",\n          \"2048\",\n          \"4096\",\n          \"8192\"\n        ]\n      },\n      {\n        \"key\": \"window\",\n        \"label\": \"Window function\",\n        \"value\": \"hann\",\n        \"type\": \"select\",\n        \"values\": [\n          \"hann\",\n          \"hamming\",\n          \"blackman\",\n          \"rectangular\"\n        ]\n      },\n      {\n        \"key\": \"scale\",\n        \"label\": \"Frequency scale\",\n        \"value\": \"log\",\n        \"type\": \"select\",\n        \"values\": [\n          \"log\",\n          \"linear\"\n        ]\n      },\n      {\n        \"key\": \"minDb\",\n        \"label\": \"Lowest level shown (dB)\",\n        \"value\": \"-120\",\n        \"type\": \"number\",\n        \"min\": -200,\n        \"max\": -10,\n        \"step\": 1\n      },\n      {\n        \"key\": \"maxDb\",\n        \"label\": \"Highest level shown (dB)\",\n        \"value\": \"0\",\n        \"type\": \"number\",\n        \"min\": -100,\n        \"max\": 20,\n        \"step\": 1\n      },\n      {\n        \"key\": \"width\",\n        \"label\": \"Width (pixels)\",\n        \"value\": \"1024\",\n        \"type\": \"number\",\n        \"min\": 64,\n        \"max\": 4096,\n        \"step\": 1\n      },\n      {\n        \"key\": \"height\",\n        \"label\": \"Height (pixels)\",\n        \"value\": \"512\",\n        \"type\": \"number\",\n        \"min\": 64,\n        \"max\": 2048,\n        \"step\": 1\n      }\n    ],\n    \"registrationFamily\": \"audio-pcm-measurement\",\n    \"presentation\": \"metrics\",\n    \"files\": true,\n    \"input\": false,\n    \"accept\": \".wav,.mp3,.m4a,.aac,.flac,.ogg,.oga,.opus,.webm,audio/*\",\n    \"maxFileBytes\": 268435456,\n    \"inputErrorCode\": \"AUDIO_PCM_MEASUREMENT_TOO_LONG\",\n    \"multiple\": false,\n    \"note\": \"Runs locally in your browser. Draws one recording up to 10 minutes, 8 channels and 256 MiB as a labelled PNG spectrogram.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Audio file\",\n      \"placeholder\": \"Choose a WAV, MP3, M4A, FLAC or OGG file\",\n      \"help\": \"Pick the time range and image size in the settings below. Up to 1,000,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nSee how the frequencies in a recording change over time and download a labelled spectrogram image of the whole file or a selected range.\n\n### How to use Audio spectrogram viewer\n\n1. Choose one audio file from your device.\n2. Set the start and end time if you only want part of the recording.\n3. Pick the FFT size, window, frequency scale, level range and image size.\n4. Create the spectrogram and download the PNG and the JSON report of the settings.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n## Useful next steps\n\n- [Music key detector](https://happytails.ai/en/media-tools/music-key-detector/) ([Markdown](https://happytails.ai/en/media-tools/music-key-detector.md))\n\n- [Beat grid editor](https://happytails.ai/en/media-tools/beat-grid-editor/) ([Markdown](https://happytails.ai/en/media-tools/beat-grid-editor.md))\n\n- [Remove background noise](https://happytails.ai/en/media-tools/remove-background-noise/) ([Markdown](https://happytails.ai/en/media-tools/remove-background-noise.md))\n\n## How the image is made\n\nThe selected range is split into one analysis frame per pixel column. Each frame is windowed (Hann by default) and passed through a fast Fourier transform, and the magnitude in each frequency row is drawn in the viridis colour map from your lowest to your highest level. A full-scale sine wave reads 0 dB. Channels are averaged into one signal first.\n\n### Choosing the settings\n\nA larger FFT size separates close frequencies better but blurs fast changes in time; a smaller one does the opposite. The JSON report states the frequency resolution (sample rate divided by FFT size) and the time step between columns. The log scale spreads low frequencies out, from 20 Hz up to half the sample rate; the linear scale runs from 0 Hz.\n\n### Limits of the result\n\nThe image shows level, not loudness as people hear it. Frequencies above half the sample rate cannot appear, and a file the browser decoded and resampled can show small differences from its original.\n"
}