{
  "openapi": "3.1.1",
  "info": {
    "title": "Room Reverb for WAV Files API",
    "version": "1.0.0",
    "summary": "Add room, hall, cathedral or cave reverb to a WAV file with a known reverberation time.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://soundscapereverb.usefulweb.app"
    }
  ],
  "paths": {
    "/api/v1/calculate": {
      "post": {
        "operationId": "calculate",
        "summary": "Add room, hall, cathedral or cave reverb to a WAV file with a known reverberation time.",
        "description": "Applies a Freeverb-style stereo reverb with room presets (small room, living room, studio, concert hall, cathedral, cave, open forest) to an audio file. The reverberation time (RT60) is set exactly per preset or by you and measured on the impulse response; the reverb tail is kept by default.\n\nMethodology:\n- Freeverb structure (Jezar, public domain): per channel eight parallel comb filters with a low-pass in the feedback loop (damping) followed by four series all-pass filters; the right channel’s delays are 23 samples longer for a wide stereo image. Delay lengths are scaled to the sample rate.\n- Unlike the original “room size” knob, each comb’s feedback gain is computed from the reverberation time: g = 10^(−3·delay / (sample rate × RT60)), so every comb decays by 60 dB in RT60 seconds at low and middle frequencies; damping makes high frequencies die away sooner, as in real rooms.\n- The RT60 is verified by measuring the reverb’s impulse response with Schroeder backward integration (T20: the −5 to −25 dB part of the decay, extrapolated to −60 dB).\n- Mono input becomes stereo. With “keep the tail” the file is extended by about 1.2 × RT60 plus the pre-delay so the reverb can fade out. If long reverbs on sustained sounds build up above full scale, the whole result is turned down to a −1 dBFS peak instead of clipping (reported as gain reduction).\n\nRoom presets give typical reverberation times for such spaces; they do not simulate a specific real room’s geometry or early reflections.",
        "tags": [
          "apps"
        ],
        "x-mcp-tool": "soundscape_reverb",
        "x-owner-app": "soundscape",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SoundscapeReverbInput"
              },
              "examples": {
                "example1": {
                  "summary": "Clap in a concert hall",
                  "value": {
                    "file": {
                      "filename": "clap.wav",
                      "contentType": "audio/wav",
                      "contentBase64": "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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
                    },
                    "preset": "hall",
                    "keepTail": true
                  }
                },
                "example2": {
                  "summary": "Two tones in a cathedral with only the reverb (dry 0)",
                  "value": {
                    "file": {
                      "filename": "two-tones.wav",
                      "contentType": "audio/wav",
                      "contentBase64": "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"
                    },
                    "preset": "cathedral",
                    "rt60": 3,
                    "dry": 0,
                    "wet": 0.25
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SoundscapeReverbResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tool": {
      "get": {
        "operationId": "getToolDefinition",
        "summary": "Inputs, output schema and examples for this tool",
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "SoundscapeReverbInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "file": {
            "title": "Audio file",
            "description": "WAV directly, other formats are decoded with ffmpeg; up to 120 seconds, 8–96 kHz. The WAV file is kept on the server for about 2 hours so you can download it, then deleted. Upload as {filename, contentType?, contentBase64}. Max 51200 KiB. Accepts .wav,.mp3,.flac,.ogg,.oga,.opus,.m4a,.aac,.aif,.aiff,audio/*.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "preset": {
            "title": "Room",
            "type": "string",
            "enum": [
              "small-room",
              "living-room",
              "studio",
              "hall",
              "cathedral",
              "cave",
              "forest"
            ],
            "default": "hall"
          },
          "rt60": {
            "title": "Reverberation time (optional)",
            "description": "Empty = the preset value. Time for the reverb to fall by 60 dB.",
            "type": "number",
            "minimum": 0.1,
            "maximum": 12,
            "x-unit": "s"
          },
          "wet": {
            "title": "Reverb level (optional, 0–1)",
            "description": "Empty = the preset value.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "dry": {
            "title": "Original level (optional, 0–1)",
            "description": "Empty = the preset value; 0 gives only the reverb.",
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "keepTail": {
            "title": "Keep the reverb tail (the file gets longer)",
            "type": "boolean",
            "default": true
          },
          "encoding": {
            "title": "File format",
            "type": "string",
            "enum": [
              "auto",
              "pcm16",
              "float32"
            ],
            "default": "auto"
          }
        },
        "required": [
          "file"
        ]
      },
      "SoundscapeReverbResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "preset",
              "parameters",
              "measuredRt60Seconds",
              "gainReductionDb",
              "inputSeconds",
              "outputSeconds",
              "tailSeconds",
              "sampleRate",
              "channelsIn",
              "decodedBy",
              "before",
              "after",
              "artifact"
            ],
            "properties": {
              "preset": {
                "type": "string"
              },
              "parameters": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "rt60",
                  "damping",
                  "wet",
                  "dry",
                  "width",
                  "preDelayMs"
                ],
                "properties": {
                  "rt60": {
                    "type": "number"
                  },
                  "damping": {
                    "type": "number"
                  },
                  "wet": {
                    "type": "number"
                  },
                  "dry": {
                    "type": "number"
                  },
                  "width": {
                    "type": "number"
                  },
                  "preDelayMs": {
                    "type": "number"
                  }
                }
              },
              "measuredRt60Seconds": {
                "type": "number",
                "description": "RT60 measured on the impulse response (Schroeder integration, T20, low/mid frequencies)."
              },
              "gainReductionDb": {
                "type": "number",
                "description": "How much the whole result was turned down to avoid clipping (0 = not needed)."
              },
              "inputSeconds": {
                "type": "number"
              },
              "outputSeconds": {
                "type": "number"
              },
              "tailSeconds": {
                "type": "number"
              },
              "sampleRate": {
                "type": "integer"
              },
              "channelsIn": {
                "type": "integer"
              },
              "decodedBy": {
                "type": "string",
                "enum": [
                  "engine",
                  "ffmpeg"
                ]
              },
              "before": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "rmsDb",
                  "peakDb",
                  "centroidHz"
                ],
                "properties": {
                  "rmsDb": {
                    "type": "number"
                  },
                  "peakDb": {
                    "type": "number"
                  },
                  "centroidHz": {
                    "type": "number"
                  }
                }
              },
              "after": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "rmsDb",
                  "peakDb",
                  "centroidHz"
                ],
                "properties": {
                  "rmsDb": {
                    "type": "number"
                  },
                  "peakDb": {
                    "type": "number"
                  },
                  "centroidHz": {
                    "type": "number"
                  }
                }
              },
              "artifact": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "artifactId",
                  "filename",
                  "mime",
                  "bytes",
                  "sha256",
                  "path"
                ],
                "properties": {
                  "artifactId": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "mime": {
                    "type": "string"
                  },
                  "bytes": {
                    "type": "integer"
                  },
                  "sha256": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string",
                    "description": "Download path on the same site (valid for about 2 hours)."
                  }
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}