{"ok":true,"site":{"host":"ihateaudio.com","url":"https://ihateaudio.com/","type":"live","desc":"49 free audio tools that run right in your browser. Trim, convert, merge, boost, whatever you need. Nothing is uploaded and there is no signup.","tools":[{"name":"list_tools","kind":"answer","impl":"imperative","description":"List every audio tool on this site with what it does and the agent action it exposes. Call this first to choose the right page for a request, then open_tool to go there. Read-only.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"open_tool","kind":"act","impl":"imperative","description":"Open one of this site's tools by slug, e.g. \"silence-remover\". The page navigates after replying; that page then registers its own tools, so call inspect_audio there. Audio already loaded on the current page is not carried over: use send_to_tool for that.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"A slug from list_tools."}},"required":["slug"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/","pages":["/"]},{"name":"inspect_audio","kind":"answer","impl":"imperative","description":"Call this first. Read derived facts about the audio loaded on this page: whether a file is loaded, its duration, channels and sample rate, the current selection, every visible setting and the export format. Never returns audio samples or file contents.","title":"Inspect audio","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"set_output_format","kind":"act","impl":"imperative","description":"Choose the download format shown in the export bar, and optionally the bitrate for lossy formats. Changes a visible control only; nothing is rendered or saved.","title":"Set output format","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["mp3","wav","m4a","ogg","opus","flac","aac","aiff","wma","m4r"],"description":"Output format id."},"bitrateKbps":{"type":"number","description":"Bitrate for lossy formats, in kbps."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"render_preview","kind":"act","impl":"imperative","description":"Render the result of the current settings locally and show it as a listenable player below the controls. Does not download, upload or replace the original.","title":"Render preview","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"export_download","kind":"act","impl":"imperative","description":"Finish the job: render the result with the current settings and start a browser download of the edited audio. This saves a file on the device, so call it only after the person has asked for the export or the trimmed file.","title":"Export download","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["mp3","wav","m4a","ogg","opus","flac","aac","aiff","wma","m4r"],"description":"Download format. Default: the format shown in the export bar."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"list_tools","kind":"answer","impl":"imperative","description":"List every audio tool on this site with what it does and the agent action it exposes. Call this first to choose the right page for a request, then open_tool to go there. Read-only.","title":"List tools","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"open_tool","kind":"act","impl":"imperative","description":"Open one of this site's tools by slug, e.g. \"silence-remover\". The page navigates after replying; that page then registers its own tools, so call inspect_audio there. Audio already loaded on the current page is not carried over: use send_to_tool for that.","title":"Open tool","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"A slug from list_tools."}},"required":["slug"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"send_to_tool","kind":"act","impl":"imperative","description":"Hand the audio on this page to another tool on this site and open it there, with no re-upload. Sends the result of the current settings, rendered losslessly; take \"original\" sends the file as it was loaded. Slugs come from list_tools. The page navigates after replying; call inspect_audio on the new page.","title":"Send to tool","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"The tool to open next, e.g. \"silence-remover\"."},"take":{"type":"string","enum":["result","original"],"description":"What to send. Default: result."}},"required":["slug"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"load_audio_from_url","kind":"act","impl":"imperative","description":"Open an audio file by URL on this page, as if the person had chosen it: a public https:// URL, a data: URL, or an http://localhost URL served on this machine (an agent with a shell can serve a file the person attached and load it here). The browser fetches it and it stays in the tab. The server must allow cross-origin reads. Otherwise ask the person to choose the file.","title":"Load audio from url","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"https:// or data: URL of an audio file."}},"required":["url"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer","/audio-joiner","/audio-splitter","/silence-remover"]},{"name":"set_selection","kind":"act","impl":"imperative","description":"Move the selection handles on the waveform, in seconds from the start of the file. The page clamps the values to the file.","title":"Set selection","inputSchema":{"type":"object","properties":{"startSec":{"type":"number","minimum":0,"description":"Selection start."},"endSec":{"type":"number","minimum":0,"description":"Selection end."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer"]},{"name":"set_trim","kind":"act","impl":"imperative","description":"Trim, cut or clip the loaded audio: set the start and end of the selection in seconds, whether to keep that selection or cut it out and join the rest, and whether to fade the new edges. Example: the first 30 seconds is startSec 0, endSec 30, mode keep. Moves the visible controls only; nothing is saved until export_download is called.","title":"Set trim","inputSchema":{"type":"object","properties":{"startSec":{"type":"number","description":"Selection start, in seconds from the start of the file.","minimum":0},"endSec":{"type":"number","description":"Selection end, in seconds from the start of the file.","minimum":0},"mode":{"type":"string","description":"\"keep\" exports only the selection; \"cut\" removes it and joins the rest.","enum":["keep","cut"]},"fade":{"type":"boolean","description":"Fade the new edges for 20 ms so a cut never clicks."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-trimmer","pages":["/audio-trimmer"]},{"name":"set_join_gap","kind":"act","impl":"imperative","description":"Set the silent gap in seconds inserted between each pair of files, 0 to 5. Zero joins them with no space at all. The run bar and the total length update at once; nothing is saved until export_download is called.","title":"Set join gap","inputSchema":{"type":"object","properties":{"gapSec":{"type":"number","description":"Digital silence between tracks, in seconds, 0 to 5. About 2 reads as an album gap; 0 suits segments of one continuous recording.","minimum":0,"maximum":5}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-joiner","pages":["/audio-joiner"]},{"name":"set_split","kind":"act","impl":"imperative","description":"Choose where the cuts go: a fixed number of equal parts, a fixed length for every part, or one cut in the middle of each silent gap. Each method reads only its own knobs. The cut markers on the waveform and the plan text update at once; nothing is saved until export_download is called, which downloads one file per part.","title":"Set split","inputSchema":{"type":"object","properties":{"method":{"type":"string","description":"\"equal\" splits into a fixed number of parts; \"length\" makes every part a fixed length with a shorter remainder at the end; \"silence\" cuts at every gap quieter than the threshold.","enum":["equal","length","silence"]},"parts":{"type":"number","description":"Number of equal parts for the equal method, 2 to 40.","minimum":2,"maximum":40},"partLengthSec":{"type":"number","description":"Length of each part in seconds for the length method, 5 to 900 in steps of 5.","minimum":5,"maximum":900},"silenceThresholdDbfs":{"type":"number","description":"Audio below this level in dBFS counts as silence for the silence method, -70 to -20. Room tone sits near -50, so -45 catches it.","minimum":-70,"maximum":-20},"minimumGapSec":{"type":"number","description":"A gap must last at least this many seconds to earn a cut, 0.3 to 5.","minimum":0.3,"maximum":5}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/audio-splitter","pages":["/audio-splitter"]},{"name":"set_silence_removal","kind":"act","impl":"imperative","description":"Set how quiet gaps are detected and removed: the silence threshold in dBFS, the shortest gap that counts, and the padding kept on each side of a cut. The report under the sliders and the highlights on the waveform update at once; nothing is saved.","title":"Set silence removal","inputSchema":{"type":"object","properties":{"threshold":{"type":"number","description":"Audio below this level, in dBFS, counts as silence. -70 to -20.","minimum":-70,"maximum":-20},"minimumGapSec":{"type":"number","description":"Ignore gaps shorter than this many seconds. 0.1 to 3.","minimum":0.1,"maximum":3},"paddingSec":{"type":"number","description":"Seconds of quiet kept on each side of a cut. 0 to 0.5.","minimum":0,"maximum":0.5}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/silence-remover","pages":["/silence-remover"]}],"favicon":"/favicons/ihateaudio.com.png","apiSurface":"spec","category":"Media & Personal","toolCount":15}}