jdxi_editor.midi.file.controller
MIDI File Controller Module
Manages MIDI file operations including saving, loading, and pattern conversion. Handles tempo management, bar detection, and note-to-button mapping.
Classes
Configuration for MIDI file controller. |
|
Result of loading a MIDI file. |
|
Manages MIDI file I/O operations for pattern sequencer. |
Module Contents
- class jdxi_editor.midi.file.controller.MidiFileControllerConfig(ticks_per_beat: int = 480, beats_per_measure: int = 4, default_bpm: int = 120, default_velocity: int = 100)[source]
Configuration for MIDI file controller.
- class jdxi_editor.midi.file.controller.MidiFileLoadResult(success: bool, num_bars: int = 0, notes_loaded: int = 0, tempo_bpm: int | None = None, error_message: str | None = None)[source]
Result of loading a MIDI file.
- class jdxi_editor.midi.file.controller.MidiFileController(config: MidiFileControllerConfig | None = None, midi_converter: jdxi_editor.midi.conversion.note.MidiNoteConverter | None = None, scope: str = 'MidiFileController')[source]
Manages MIDI file I/O operations for pattern sequencer.
Handles: - Loading MIDI files and converting to patterns - Saving patterns to MIDI files - Tempo management - Bar/measure detection - MIDI note-to-button mapping
- on_file_loaded: Callable[[MidiFileLoadResult], None] | None = None[source]
- create_new_file() mido.MidiFile[source]
Create a new MIDI file with default settings.
- Returns:
New MidiFile object
- set_tempo(bpm: int) None[source]
Set the MIDI file tempo.
Updates the current file’s tempo and triggers callback.
- Parameters:
bpm – Tempo in beats per minute (20-300)
- save_pattern(filename: str, measures: List, pattern_name: str | None = None) bool[source]
Save pattern to a MIDI file.
Creates a MIDI file from the current pattern with proper formatting.
- Parameters:
filename – Path to save file
measures – List of PatternMeasure objects to save
pattern_name – Optional name for the pattern (used as metadata)
- Returns:
True if successful, False otherwise
- load_pattern(filename: str, measures_container: List | None = None) MidiFileLoadResult[source]
Load pattern from a MIDI file.
Parses MIDI file and returns data for populating measures/buttons.
- Parameters:
filename – Path to MIDI file
measures_container – Optional list to populate with loaded measures
- Returns:
MidiFileLoadResult with load status and metadata
- load_from_midi_file_editor(midi_file_editor) MidiFileLoadResult[source]
Load pattern from a MidiFileEditor instance.
Useful for sharing MIDI files between editor windows.
- Parameters:
midi_file_editor – MidiFileEditor instance with loaded file
- Returns:
MidiFileLoadResult with load status
- _load_from_midi_file_object(midi_file: mido.MidiFile) MidiFileLoadResult[source]
Load pattern from a MidiFile object (internal method).
- Parameters:
midi_file – MidiFile instance
- Returns:
MidiFileLoadResult with load status
- _detect_bars_from_midi(midi_file: mido.MidiFile) int[source]
Detect the number of bars in a MIDI file.
Counts the maximum absolute time and divides by ticks per bar.
- Parameters:
midi_file – MidiFile to analyze
- Returns:
Number of bars detected (minimum 1)
- _parse_midi_file(midi_file: mido.MidiFile, ppq: int, ticks_per_measure: int) List[Dict][source]
Parse MIDI file and extract note events.
Returns list of note dictionaries with timing and metadata.
- Parameters:
midi_file – MidiFile to parse
ppq – Ticks per beat from the file
ticks_per_measure – Ticks per bar calculation
- Returns:
List of parsed note events
- _extract_tempo_from_midi(midi_file: mido.MidiFile) int | None[source]
Extract tempo from MIDI file.
Searches all tracks for the first SET_TEMPO message.
- Parameters:
midi_file – MidiFile to search
- Returns:
Tempo in BPM, or None if not found
- _add_tempo_to_track(track: mido.MidiTrack, bpm: int) None[source]
Add tempo message to a track.
- Parameters:
track – MidiTrack to add tempo to
bpm – Tempo in BPM
- _get_button_note_spec(button)[source]
Get note specification from a button.
- Parameters:
button – SequencerButton instance
- Returns:
NoteButtonSpec with note, duration_ms, velocity, is_active
- set_config(config: MidiFileControllerConfig) None[source]
Update controller configuration.
- Parameters:
config – New configuration
- set_midi_converter(converter: jdxi_editor.midi.conversion.note.MidiNoteConverter) None[source]
Set or update the MIDI converter.
- Parameters:
converter – MidiNoteConverter instance