@audiolabtools/ai-sdk
Audio analysis as Vercel AI SDK tools: let your LLM check loudness, voice
quality, and signal properties of any audio URL, with one import.
npm install @audiolabtools/ai-sdk ai @ai-sdk/anthropic
import { generateText } from 'ai';
import { audiolab } from '@audiolabtools/ai-sdk';
import { anthropic } from '@ai-sdk/anthropic';
const result = await generateText({
model: anthropic('claude-opus-4-8'),
tools: audiolab({ apiKey: process.env.AUDIOLAB_API_KEY }).tools,
prompt: 'What is the loudness and true-peak of https://example.com/song.wav?',
});
console.log(result.text);
The LLM picks the right tool from your prompt, calls AudioLab's hosted API, and
folds the structured response into its answer.
Tools
Every tool takes a public http(s) URL to an audio file; the AudioLab API
fetches and decodes it server-side (nothing is uploaded by the caller).
analyzeLoudness | POST /mixlab/analyze | Integrated LUFS (EBU R128 / BS.1770-4), true-peak, LRA, crest factor, stereo correlation, tonal-balance bands |
checkTarget | POST /mixlab/check-target | Pass/fail vs a delivery target (spotify / apple-music / youtube / tidal / amazon-music / podcast / ebu-broadcast / atsc-broadcast, or custom), with deltas + an ffmpeg loudnorm fix |
analyzeTimeseries | POST /mixlab/timeseries | Short-term LUFS over time + downsampled waveform peaks |
getSpectrum | POST /mixlab/spectrum | FFT magnitudes + 7-band energies |
analyzeVoice | POST /voicelab/qa | Speech/silence ratio, speaking rate, SNR, noise floor, room echo, sibilance & clipping risk |
getSpeechSegments | POST /voicelab/segments | Voiced regions with start/end + per-segment RMS |
indexSignal | POST /signallab/index | Content-type guess, tags, clipping/silence regions, brightness & dynamics buckets |
compareLoudness | two mixlab/analyze calls | A/B: runs loudness on urlA + urlB, returns both |
Full TypeScript types ship in index.d.ts, with autocomplete on every response field.
Configuration
audiolab({
apiKey?: string;
baseUrl?: string;
fetch?: typeof fetch;
})
Use one tool instead of all eight:
const { analyzeLoudness } = audiolab({ apiKey }).tools;
await generateText({ model, tools: { analyzeLoudness }, prompt: '...' });
Status
The hosted API is live with self-serve keys (free tier + paid tiers, Stripe
billing live). Sign in at https://audiolab.tools/account to get a key. Prefer to
try before wiring it up? The on-device playground at
https://audiolab.tools/api#playground runs the same analysis in your browser
(no signup, no upload).
License
MIT © Nathan Renting