configure_mic_routing
Set up multi-mic routing for drum samples, enabling individual volume controls and MIDI CC mappings. Routes each mic (close, OH L/R, room L/R) to auxiliary outputs for DAW mixing and generates XML for DecentSampler configuration.
Instructions
Configure multi-mic routing with MIDI controls for drum samples.
This tool will:
Set up individual volume controls for each mic position (close, OH L/R, room L/R)
Route each mic to its own auxiliary output for DAW mixing
Configure MIDI CC mappings for mic volumes
Generate proper XML structure for DecentSampler
Error Handling:
Validates mic position assignments
Checks for duplicate MIDI CC assignments
Ensures valid output routing targets
Verifies bus indices are unique and valid
Returns specific errors for routing conflicts
Success Response: Returns XML structure containing:
Configured mic bus routing
Volume control mappings
MIDI CC assignments
Complete routing matrix for all samples
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| drumPieces | Yes | ||
| micBuses | Yes |
Implementation Reference
- src/index.ts:630-674 (handler)The main handler for the 'configure_mic_routing' tool. Validates input arguments, uses validateMicRouting helper, constructs AdvancedDrumKitConfig with mic buses and drum pieces, generates XML output via generateGroupsXml.case "configure_mic_routing": { const args = request.params.arguments; if (!args || typeof args !== 'object' || !Array.isArray(args.micBuses) || !Array.isArray(args.drumPieces)) { throw new McpError( ErrorCode.InvalidParams, "Invalid arguments: expected object with micBuses and drumPieces" ); } try { // Validate mic routing configuration validateMicRouting( args.micBuses as MicBusConfig[], args.drumPieces.flatMap(piece => (piece.samples as Array<{ micConfig?: DrumMicConfig }>) .map(sample => sample.micConfig) .filter((config): config is DrumMicConfig => !!config) ) ); // Create AdvancedDrumKitConfig with mic routing const config: AdvancedDrumKitConfig = { globalSettings: { micBuses: args.micBuses as MicBusConfig[] }, drumPieces: args.drumPieces as AdvancedDrumKitConfig['drumPieces'] }; // Generate XML with mic routing const xml = generateGroupsXml(config); return { content: [{ type: "text", text: xml }] }; } catch (error: unknown) { if (error instanceof McpError) throw error; const message = error instanceof Error ? error.message : String(error); throw new McpError( ErrorCode.InternalError, `Failed to configure mic routing: ${message}` ); } }
- src/index.ts:284-385 (registration)Tool registration in ListToolsRequestSchema response, including detailed description and complete inputSchema defining micBuses array and drumPieces with micConfig.{ name: "configure_mic_routing", description: `Configure multi-mic routing with MIDI controls for drum samples. This tool will: - Set up individual volume controls for each mic position (close, OH L/R, room L/R) - Route each mic to its own auxiliary output for DAW mixing - Configure MIDI CC mappings for mic volumes - Generate proper XML structure for DecentSampler Error Handling: - Validates mic position assignments - Checks for duplicate MIDI CC assignments - Ensures valid output routing targets - Verifies bus indices are unique and valid - Returns specific errors for routing conflicts Success Response: Returns XML structure containing: - Configured mic bus routing - Volume control mappings - MIDI CC assignments - Complete routing matrix for all samples`, inputSchema: { type: "object", properties: { micBuses: { type: "array", items: { type: "object", properties: { name: { type: "string", description: "Display name for the mic (e.g., 'Close Mic', 'OH L')" }, outputTarget: { type: "string", description: "Output routing (e.g., 'AUX_STEREO_OUTPUT_1')" }, volume: { type: "object", properties: { default: { type: "number", description: "Default volume in dB" }, min: { type: "number", description: "Minimum volume in dB (e.g., -96)" }, max: { type: "number", description: "Maximum volume in dB (e.g., 12)" }, midiCC: { type: "number", description: "MIDI CC number for volume control" } }, required: ["default"] } }, required: ["name", "outputTarget"] } }, drumPieces: { type: "array", items: { type: "object", properties: { name: { type: "string" }, rootNote: { type: "number" }, samples: { type: "array", items: { type: "object", properties: { path: { type: "string" }, micConfig: { type: "object", properties: { position: { type: "string", enum: ["close", "overheadLeft", "overheadRight", "roomLeft", "roomRight"] }, busIndex: { type: "number" }, volume: { type: "number" } }, required: ["position", "busIndex"] } }, required: ["path", "micConfig"] } } }, required: ["name", "rootNote", "samples"] } } }, required: ["micBuses", "drumPieces"] } },
- src/mic-routing.ts:120-129 (helper)Key helper function called by the handler to validate mic bus configurations and mic routings to buses, ensuring valid indices, unique outputs, and proper volume ranges.export function validateMicRouting( buses: MicBusConfig[], mics: DrumMicConfig[] ): void { // First validate bus configurations validateBusConfigurations(buses); // Then validate mic routings validateMicRoutings(buses, mics); }
- src/mic-routing.ts:9-21 (schema)Type definitions (interfaces) for MicBusConfig and DrumMicConfig used in the tool's input schema and handler logic.export interface MicBusConfig { name: string; // e.g., "Close Mic", "OH L" outputTarget: string; // e.g., "AUX_STEREO_OUTPUT_1" volume?: MicVolumeConfig; effects?: any[]; // Placeholder for future effects support } export interface DrumMicConfig { position: 'close' | 'overheadLeft' | 'overheadRight' | 'roomLeft' | 'roomRight'; busIndex: number; // Reference to which bus this mic routes to volume?: number; // Optional per-sample volume adjustment }