Skip to content

Adapt Audio

Adapt Audio — mvp.adapt_audio

Cluster: Creative & Media | Type: component | MCP Tools: 88

Overview

Production audio processing component with 62 core ops across 9 domains and a 6-tier dependency system with graceful degradation to stdlib WAV when heavy deps are unavailable. Covers format conversion, editing, effects, analysis, mixing, mastering, critical listening, post-production, live sound, Sonic Pi live coding, local Splice sample helpers, and prompt-to-music forwards. Uses 7 backend modules (librosa, pydub, professional, mixing, dynamics, analysis, postprod) with a stdlib fallback for basic ops.

When to use:

  • Full audio editing pipeline: trim, normalize, effects, EQ, compression, limiting
  • Multi-track mixing with per-track volume/pan and stereo width control
  • Mastering chains: spectral matching, multiband compression, limiting, dither
  • Critical listening: A/B reference comparisons, spectral analysis, phase correlation
  • Post-production: dialogue normalization, source separation, de-reverb, room tone extraction
  • Live sound: feedback detection, time alignment, proximity compensation

Example:

import base64
from mvp.adapt_audio import AdaptAudioBlock, AudioInput

# Load your audio as base64 (e.g. b64_data = base64.b64encode(open("clip.wav", "rb").read()).decode())
b64_data = base64.b64encode(b"\x00" * 4410).decode()  # placeholder: 0.1s of silence

block = AdaptAudioBlock()
result = block.infer(AudioInput(op="noise_reduce", audio_base64=b64_data))
# result.value → AudioOutput with processed audio (or degraded=True if noisereduce not installed)

Works well with: adapt_voice, adapt_ffmpeg, adapt_synth

Architecture

adapt_audio/
├── schema.py                # Tier 1: AudioInput / AudioOutput (62 ops)
├── audio_block.py           # Tier 1: AdaptAudioBlock — tiered dispatcher
├── deps.py                  # Dependency tier system (0-5) + runtime checks
├── backends/
│   ├── librosa_be.py        # analysis/metadata/resample/pitch
│   ├── pydub_be.py          # editing/effects/generation
│   ├── professional_be.py   # noise_reduce/loudness (noisereduce/pyloudnorm)
│   ├── mixing_be.py         # multi-track mix/pan/width/mid-side/gain staging
│   ├── dynamics_be.py       # parametric EQ/compression/limiting/dither
│   ├── analysis_be.py       # spectral compare/A-B reference/masking/phase
│   └── postprod_be.py       # dialogue norm/room tone/source sep/de-reverb/live sound
└── audio_mcp/               # Tier 2: MCP sub-package (84 public MCP tools)
    ├── schema.py            # MCPAudioInput / MCPAudioOutput
    ├── store.py             # AudioStore — SQLite + file persistence
    ├── audio_block.py       # AdaptAudioMCPBlock — 81-op internal dispatcher
    └── server.py            # FastMCP tools + singleton wiring

Dependency Tiers

Tier Name Packages Ops
0 stdlib wave, struct, io get_metadata, get_duration, generate_tone, trim, split_channels
1 numpy+soundfile numpy, soundfile waveform_data, dynamic_compress, mixing ops, noise_gate, brickwall_limit, dither, phase_correlation, crest_factor, feedback_detect, time_align, phase_align
2 pydub+scipy pydub, scipy editing (trim, concat, mix, effects, fade, reverse, convert), crossfade, EQ/dynamics (parametric_eq, shelving, graphic_eq, multiband/sidechain compress, de_esser), dialogue_normalize
3 librosa librosa resample, spectral_analysis, pitch_detect, bpm_detect, audio_classify, silence_detect, spectrogram_data, pitch_shift, auto_segment, spectral_match, mastering_chain, critical listening, room_tone_extract, de_reverb
4 professional noisereduce, pyloudnorm noise_reduce, loudness_normalize, loudness_measure
5 ml demucs source_separate

When a tier is unavailable, the block returns a degraded response with degraded=True and a pip install hint.

Public API

AdaptAudioBlock(AIBlock[AudioInput, AudioOutput, None])

Multi-backend audio processing block.

Field Type Default
name str 'adapt_audio'
resource_bounds ResourceBounds \| None None
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: AudioInput) -> Result[AudioOutput]

deps_check() -> dict

Return dependency tier status for all tiers.

AudioInput(BaseModel)

Input for AdaptAudioBlock.

Field Type Default
op Literal['convert_format', 'trim', 'concat', 'mix', 'adjust_volume', 'apply_effect', 'split_channels', 'get_metadata', 'get_duration', 'normalize', 'fade_in', 'fade_out', 'reverse', 'resample', 'generate_tone', 'generate_silence', 'spectral_analysis', 'pitch_detect', 'bpm_detect', 'audio_classify', 'silence_detect', 'waveform_data', 'spectrogram_data', 'noise_reduce', 'loudness_normalize', 'loudness_measure', 'dynamic_compress', 'crossfade', 'eq', 'pitch_shift', 'auto_segment', 'multi_track_mix', 'stereo_pan', 'stereo_width', 'auto_gain_stage', 'mid_side', 'parametric_eq', 'shelving_filter', 'graphic_eq', 'multiband_compress', 'sidechain_compress', 'de_esser', 'noise_gate', 'brickwall_limit', 'dither', 'spectral_match', 'mastering_chain', 'spectral_compare', 'ab_reference', 'frequency_masking', 'phase_correlation', 'crest_factor', 'dialogue_normalize', 'room_tone_extract', 'source_separate', 'noise_profile', 'de_reverb', 'feedback_detect', 'notch_filter', 'time_align', 'proximity_compensate', 'phase_align', 'ops', 'help', 'discover_capabilities', 'dependency_health', 'backend_native_op', 'create_preview', 'compare_preview', 'record_human_review', 'apply_recipe', 'sonic_pi_check', 'sonic_pi_eval', 'sonic_pi_stop', 'sonic_pi_run_file', 'sonic_pi_record', 'sonic_pi_compose'] 'get_metadata'
audio_base64 str ''
audio_path str ''
format str 'wav'
second_audio_base64 str ''
reference_audio_base64 str ''
start_seconds float 0.0
end_seconds float 0.0
duration_seconds float 1.0
volume float 1.0
sample_rate int 0
channels int 0
effect str ''
frequency float 440.0
n_fft int 2048
threshold_db float -40.0
min_silence_ms int 500
num_points int 1000
target_lufs float -14.0
prop_decrease float 1.0
semitones float 0.0
ratio float 4.0
attack_ms float 5.0
release_ms float 50.0
hold_ms float 10.0
range_db float -80.0
gain_db float 0.0
q float 1.0
reduction_db float -6.0
crossfade_ms int 100
pan float 0.0
width float 1.0
target_peak_db float -6.0
mid_side_mode str ''
volumes_json str ''
pans_json str ''
ceiling_db float -0.3
bit_depth int 16
noise_shaping bool True
strength float 0.8
dither_bits int 16
bands_json str ''
band_gains_json str ''
filter_type str ''
stems str ''
noise_profile_json str ''
mode str ''
true_peak_dbtp float -1.0
distance_cm float 15.0
compensation_db float -6.0
max_shift_ms float 50.0
audio_list list[str] []
sonic_pi_code str ''
sonic_pi_host str '127.0.0.1'
sonic_pi_cmd_port int 4557
sonic_pi_file str ''
sonic_pi_description str ''
sonic_pi_output_path str ''
backend_operation str ''
backend_parameters_json str ''
dry_run bool True
preview_id str ''
recipe_json str ''
reviewer str ''
review_notes str ''
approved bool False
request_id str ''
task_id str ''
run_id str ''

AudioOutput(BaseModel)

Output from AdaptAudioBlock.

Field Type Default
op str required
audio_base64 str ''
output_path str ''
format str ''
duration_seconds float 0.0
sample_rate int 0
channels int 0
size_bytes int 0
backend str ''
metadata dict[str, Any] {}
degraded bool False
degradation_reason str ''
available_with str ''
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict[str, Any] {}
evidence dict[str, Any] {}
degradation dict[str, Any] {}
dependency_health dict[str, Any] {}
objective_metrics dict[str, Any] {}
human_listening_required bool False
listening_checklist list[str] []
subjective_judgement_limits str ''
request_id str ''
task_id str ''
run_id str ''

AdaptAudioMCPBlock(AIBlock[MCPAudioInput, MCPAudioOutput, dict])

79-op internal audio MCP block with SQLite persistence (_all_ops()).

Field Type Default
name str 'adapt_audio_mcp'
state dict field(default_factory=dict)
db_path str field(default_factory=lambda: os.environ.get('AUDIO_DB_PATH', _DEFAULT_DB))
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: MCPAudioInput) -> Result[MCPAudioOutput]

MCPAudioInput(BaseModel)

Input to AdaptAudioMCPBlock -- 81 ops (op Literal).

Field Type Default
op Literal['convert_format', 'trim', 'concat', 'mix', 'adjust_volume', 'apply_effect', 'split_channels', 'get_metadata', 'get_duration', 'normalize', 'fade_in', 'fade_out', 'reverse', 'resample', 'generate_tone', 'generate_silence', 'save', 'load', 'list', 'delete', 'batch_convert', 'merge', 'list_formats', 'stats', 'get_info', 'spectral_analysis', 'pitch_detect', 'bpm_detect', 'audio_classify', 'silence_detect', 'waveform_data', 'spectrogram_data', 'noise_reduce', 'loudness_normalize', 'loudness_measure', 'dynamic_compress', 'crossfade', 'eq', 'pitch_shift', 'auto_segment', 'multi_track_mix', 'stereo_pan', 'stereo_width', 'auto_gain_stage', 'mid_side', 'parametric_eq', 'shelving_filter', 'graphic_eq', 'multiband_compress', 'sidechain_compress', 'de_esser', 'noise_gate', 'brickwall_limit', 'dither', 'spectral_match', 'mastering_chain', 'spectral_compare', 'ab_reference', 'frequency_masking', 'phase_correlation', 'crest_factor', 'dialogue_normalize', 'room_tone_extract', 'source_separate', 'noise_profile', 'de_reverb', 'feedback_detect', 'notch_filter', 'time_align', 'proximity_compensate', 'phase_align', 'ops', 'help', 'discover_capabilities', 'dependency_health', 'backend_native_op', 'create_preview', 'compare_preview', 'record_human_review', 'apply_recipe', 'sonic_pi_check', 'sonic_pi_eval', 'sonic_pi_stop', 'sonic_pi_run_file', 'sonic_pi_record', 'sonic_pi_compose', 'recommend_chain', 'list_patterns'] required
audio_base64 str ''
audio_path str ''
format str 'wav'
second_audio_base64 str ''
start_seconds float 0.0
end_seconds float 0.0
volume float 1.0
sample_rate int 0
channels int 0
effect str ''
frequency float 440.0
duration_seconds float 1.0
name str ''
tags_csv str ''
notes str ''
limit int 50
target_format str 'wav'
audio_list list[str] []
query str ''
reference_audio_base64 str ''
n_fft int 2048
threshold_db float -40.0
min_silence_ms int 500
num_points int 1000
target_lufs float -14.0
prop_decrease float 1.0
semitones float 0.0
ratio float 4.0
attack_ms float 5.0
release_ms float 50.0
hold_ms float 10.0
range_db float -80.0
gain_db float 0.0
q float 1.0
reduction_db float -6.0
crossfade_ms int 100
pan float 0.0
width float 1.0
target_peak_db float -6.0
mid_side_mode str ''
volumes_json str ''
pans_json str ''
ceiling_db float -0.3
bit_depth int 16
noise_shaping bool True
strength float 0.8
dither_bits int 16
bands_json str ''
band_gains_json str ''
filter_type str ''
stems str ''
noise_profile_json str ''
mode str ''
true_peak_dbtp float -1.0
distance_cm float 15.0
compensation_db float -6.0
max_shift_ms float 50.0
sonic_pi_code str ''
sonic_pi_host str '127.0.0.1'
sonic_pi_cmd_port int 4557
sonic_pi_file str ''
sonic_pi_description str ''
sonic_pi_output_path str ''
brief str ''
context_text str ''
backend_operation str ''
backend_parameters_json str ''
dry_run bool True
preview_id str ''
recipe_json str ''
reviewer str ''
review_notes str ''
approved bool False
request_id str ''
task_id str ''
run_id str ''

MCPAudioOutput(BaseModel)

Output from AdaptAudioMCPBlock.

Field Type Default
op str required
audio_base64 str ''
output_path str ''
format str ''
duration_seconds float 0.0
sample_rate int 0
channels int 0
size_bytes int 0
backend str ''
metadata dict[str, Any] {}
name str ''
found bool False
count int 0
records list[dict[str, Any]] []
message str ''
degraded bool False
degradation_reason str ''
available_with str ''
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict[str, Any] {}
evidence dict[str, Any] {}
degradation dict[str, Any] {}
dependency_health dict[str, Any] {}
objective_metrics dict[str, Any] {}
human_listening_required bool False
listening_checklist list[str] []
subjective_judgement_limits str ''
request_id str ''
task_id str ''
run_id str ''
recommendation dict[str, Any] {}
llm_used bool False

AudioStore

File-backed store for the adapt_audio MCP sub-package.

Constructor:

Parameter Type Default
db_path str ':memory:'
files_dir str _DEFAULT_FILES_DIR

Methods:

close() -> None

save_audio(name: str, audio_bytes: bytes, fmt: str = 'wav', duration_seconds: float = 0.0, sample_rate: int = 0, channels: int = 0, size_bytes: int = 0, tags: str = '', notes: str = '', metadata: dict | None = None) -> str

Persist a named audio file. Writes file to disk, metadata to SQLite.

load_audio(name: str) -> dict[str, Any] | None

Retrieve a stored audio file by name. Returns None if not found.

list_audio(tags_csv: str = '', limit: int = 50) -> list[dict[str, Any]]

List stored audio files (metadata only, no file data).

delete_audio(name: str) -> bool

Delete a stored audio file. Removes both DB row and file on disk.

count_all() -> dict[str, int]

total_size() -> int

total_duration() -> float

Functions

tier_available(tier: int) -> bool

Check if all packages for the given tier are importable.

deps_check() -> dict

Return full tier status for all tiers and CLI tools.

MCP Tools

Operation Source
convert_format audio_mcp
trim audio_mcp
concat audio_mcp
mix audio_mcp
adjust_volume audio_mcp
apply_effect audio_mcp
split_channels audio_mcp
get_metadata audio_mcp
get_duration audio_mcp
normalize audio_mcp
fade_in audio_mcp
fade_out audio_mcp
reverse audio_mcp
resample audio_mcp
generate_tone audio_mcp
generate_silence audio_mcp
save audio_mcp
load audio_mcp
list audio_mcp
delete audio_mcp
batch_convert audio_mcp
merge audio_mcp
list_formats audio_mcp
stats audio_mcp
get_info audio_mcp
spectral_analysis audio_mcp
pitch_detect audio_mcp
bpm_detect audio_mcp
audio_classify audio_mcp
silence_detect audio_mcp
waveform_data audio_mcp
spectrogram_data audio_mcp
noise_reduce audio_mcp
loudness_normalize audio_mcp
loudness_measure audio_mcp
dynamic_compress audio_mcp
crossfade audio_mcp
eq audio_mcp
pitch_shift audio_mcp
auto_segment audio_mcp
multi_track_mix audio_mcp
stereo_pan audio_mcp
stereo_width audio_mcp
auto_gain_stage audio_mcp
mid_side audio_mcp
parametric_eq audio_mcp
shelving_filter audio_mcp
graphic_eq audio_mcp
multiband_compress audio_mcp
sidechain_compress audio_mcp
de_esser audio_mcp
noise_gate audio_mcp
brickwall_limit audio_mcp
dither audio_mcp
spectral_match audio_mcp
mastering_chain audio_mcp
spectral_compare audio_mcp
ab_reference audio_mcp
frequency_masking audio_mcp
phase_correlation audio_mcp
crest_factor audio_mcp
dialogue_normalize audio_mcp
room_tone_extract audio_mcp
source_separate audio_mcp
noise_profile audio_mcp
de_reverb audio_mcp
feedback_detect audio_mcp
notch_filter audio_mcp
time_align audio_mcp
proximity_compensate audio_mcp
phase_align audio_mcp
ops audio_mcp
help audio_mcp
discover_capabilities audio_mcp
dependency_health audio_mcp
backend_native_op audio_mcp
create_preview audio_mcp
compare_preview audio_mcp
record_human_review audio_mcp
apply_recipe audio_mcp
sonic_pi_check audio_mcp
sonic_pi_eval audio_mcp
sonic_pi_stop audio_mcp
sonic_pi_run_file audio_mcp
sonic_pi_record audio_mcp
sonic_pi_compose audio_mcp
recommend_chain audio_mcp
list_patterns audio_mcp