midi-file-mcp
Version:
A MCP tool for parsing and manipulating MIDI files based on Tone.js
57 lines • 1.42 kB
JavaScript
import { z } from 'zod';
const PitchDescriptionSchema = z.discriminatedUnion('type', [
z.object({
type: z.literal('name'),
name: z.string(),
}),
z.object({
type: z.literal('pitch'),
pitch: z.string(),
octave: z.number(),
}),
z.object({
type: z.literal('midi'),
midi: z.number(),
}),
]);
const VelocityDescriptionSchema = z.object({
velocity: z.number().optional(),
noteOffVelocity: z.number().optional(),
});
const TimeDescriptionSchema = z.discriminatedUnion('timeType', [
z.object({
timeType: z.literal('seconds'),
time: z.number(),
duration: z.number().optional(),
}),
z.object({
timeType: z.literal('ticks'),
ticks: z.number(),
durationTicks: z.number().optional(),
}),
]);
export const NoteConstructorInterfaceSchema = PitchDescriptionSchema
.and(VelocityDescriptionSchema)
.and(TimeDescriptionSchema);
export const ControlChangeInterfaceSchema = z.object({
number: z.number(),
value: z.number(),
}).and(z.union([
z.object({
time: z.number(),
}),
z.object({
ticks: z.number(),
})
]));
export const PitchBendInterfaceSchema = z.object({
value: z.number(),
}).and(z.union([
z.object({
time: z.number(),
}),
z.object({
ticks: z.number(),
})
]));
//# sourceMappingURL=types.js.map