{
  "schema": "leumas.docs.page/1",
  "id": "pkg:@leumas/adapter-a-audio",
  "slug": "adapters/adapter-a-audio",
  "kind": "capabilities",
  "bucket": "package",
  "title": "a-audio (adapter system)",
  "name": "a-audio",
  "eyebrow": "adapter system",
  "chip": null,
  "summary": "Leumas a-audio adapter pack — ffmpeg-backed audio tools (convert-format, trim, mix, to-8d-audio, vocal-removal, remix-worker, ...). ffmpeg deps are lazy-imported by individual adapters; this...",
  "keywords": [
    "adapter-a-audio",
    "a-audio",
    "convert-format",
    "to-8d-audio",
    "vocal-removal",
    "leumas adapter a audio",
    "remix-worker",
    "ffmpeg-backed"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# a-audio (adapter system)\n\nAudio processing **capability pack**. Ported from `leumas-middleware/lib/a.audio` — 32 ffmpeg-backed\noperations. Stripped: express `server.mjs`, `frontend/`, `bin/`, `docs/`, `processed_audio/` fixtures,\n`queue.csv`.\n\nThe real implementations (`export default async function …`) live under\n[`./adapters/<name>/index.mjs`](./adapters) and are imported **lazily** — the pack loads and lists its\ntools without `fluent-ffmpeg` or the ffmpeg binary present; the dependency is only touched when a tool\nis actually invoked. `index.js` marshals the `args` object into each implementation's positional\nparameters using that adapter's `metadata.json` input order (two object-arg tools —\n`audio-breakdown`, `remix-worker` — receive the whole args object).\n\n> Requires `fluent-ffmpeg` (+ a system `ffmpeg`) at call time. `audio-breakdown`, `generate-tone`,\n> and `remix-worker` shell out via `child_process` (and a Python worker for remix). These do\n> filesystem I/O into a `processed_audio/` output dir.\n\n## Tools (`adapters`)\n\n| tool | args | result |\n|------|------|--------|\n| `change-volume` | `{ audioFilePath, volumeChangeDb }` | output path |\n| `change-pitch` | `{ audioFilePath, semitones }` | output path |\n| `change-speed` | `{ audioFilePath, speedMultiplier }` | output path |\n| `fade-in` / `fade-out` | `{ audioFilePath, durationSeconds }` | output path |\n| `trim` | `{ audioFilePath, startTimeSeconds, endTimeSeconds }` | output path |\n| `extract-segment` | `{ audioFilePath, startTimeSeconds, durationSeconds }` | output path |\n| `concatenate` | `{ audioFilePaths, outputFileName }` | output path |\n| `mix-audio` | `{ audioFilePaths, outputFilePath }` | output path |\n| `convert-format` | `{ audioFilePath, outputFormat }` | output path |\n| `get-duration` / `get-metadata` | `{ audioFilePath }` | duration / metadata |\n\nOthers: add-echo-delay, add-reverb, add-silence, apply-equalizer, audio-breakdown, change-bit-rate,\nchange-sample-rate, detect-silence, generate-tone, loop-audio, mono-to-stereo, noise-reduction,\nnormalize-volume, remix-worker, remove-silence, reverse-audio, stereo-to-mono, to-8d-audio,\ntranscribe-audio, vocal-removal. Input order for each is in its `adapters/<name>/metadata.json`.\n",
  "source": {
    "path": "shared/engines/adapters/domain/a-audio/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2465,
    "hash": "f43413bd6060e18bf1230c3222f09716f4a13ca8"
  },
  "urls": {
    "html": "/p/adapters/adapter-a-audio",
    "json": "/docs/adapters/adapter-a-audio.json",
    "md": "/docs/adapters/adapter-a-audio.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  },
  "exports": null
}
