MIPI - Physical Interface for MIDI Files
Loading...
Searching...
No Matches
midi_processor.h
Go to the documentation of this file.
1#ifndef MIDI_PROCESSOR_H
2#define MIDI_PROCESSOR_H
3
4// includes
5
6#include <iostream>
7#include <vector>
8#include <string>
9#include <map>
10#include <memory>
11#include <mutex>
12#include <thread>
13#include <filesystem>
14
15// MidiFile library
22#include "../external/json.hpp"
23
24
25
26
27using namespace smf;
28using json = nlohmann::json;
29
54{
55 public:
56
57 // constructor & destructor -----------------------------------------------------
58
63
64
69
70 // primary public functions -----------------------------------------------------
71
81 int processMidiFile(std::string midi_file_path, std::string json_file_name);
82
83
90 std::vector<int> get_channels();
91
92
99 std::vector<int> get_instruments();
100
101
108 std::vector<std::string> get_instrument_names();
109
110
117 std::vector<std::vector<int>> get_channel_notes();
118
119
126 std::vector<std::vector<double>> get_channel_note_timings();
127
128
135 std::vector<std::vector<double>> get_channel_note_durations();
136
137
144 double get_song_duration();
145
146
153 std::vector<std::vector<int>> get_assigned_keys();
154
155
162 std::vector<std::vector<int>> get_keyboard_values();
163
164
171 std::vector<std::vector<int>> get_keyboard_indexs();
172
173
182 bool load_json_file(std::string json_file_path);
183
184 // public variables -------------------------------------------------------------
185
186 private:
187
188 // primary private functions ----------------------------------------------------
189
198 bool open_file(std::string midi_file_path);
199
200
207 bool process_instruments();
208
209
218 bool process_channel_notes(int channel);
219
220
228
229
239 bool filter_chords();
240
241
251 bool filter_trills();
252
253
254
265
266
274
275
285 bool assign_keys();
286
287
297 bool trim_note_durations();
298
299
308 bool save_midi_data(std::string file_name);
309
310
317 bool debug_print_data();
318
319
320 // private variables ------------------------------------------------------------
321
322
324
325
326 const char* homeDir = getenv("HOME");
327
328
330
331
332 double min_note_gap = 0.08;
333
334
335 std::vector<int> channels;
336
337
338 std::vector<int> instruments;
339
340
341 std::vector<std::vector<int>> notes;
342
343
344 std::vector<std::vector<double>> note_timeStamps;
345
346
347 std::vector<std::vector<double>> note_durations;
348
349
351
352
353 std::vector<std::vector<int>> assigned_keys;
354
355
356 std::vector<std::vector<int>> keyboard_values;
357
358
359 std::vector<std::vector<int>> keyboard_indexs;
360
361};
362
363
364#endif
Standalone Class for processing midi files and saving/loading mipi files. Contains various getters to...
Definition midi_processor.h:54
bool filter_trills()
filters trills and staggered chords down to only the first note
Definition midi_processor.cpp:660
std::vector< std::vector< double > > note_durations
current list of note_durations
Definition midi_processor.h:347
bool process_channel_notes_with_timings()
processes and stores all notes and their timings and remove dud channels
Definition midi_processor.cpp:480
std::vector< std::vector< int > > get_channel_notes()
gets all notes
Definition midi_processor.cpp:225
bool load_json_file(std::string json_file_path)
load JSON file
Definition midi_processor.cpp:318
~MidiProcessor()
Destructor.
Definition midi_processor.cpp:79
bool filter_overlapping_notes()
filters overlapping notes down to only the first note
Definition midi_processor.cpp:721
bool open_file(std::string midi_file_path)
opens a selected midi file
Definition midi_processor.cpp:370
std::vector< int > get_instruments()
gets all instruments
Definition midi_processor.cpp:188
double fileDuration
current song duration
Definition midi_processor.h:350
std::vector< std::vector< double > > get_channel_note_durations()
gets all note durations
Definition midi_processor.cpp:251
std::vector< std::vector< int > > notes
current list of notes
Definition midi_processor.h:341
std::vector< int > get_channels()
gets all channels
Definition midi_processor.cpp:175
int processMidiFile(std::string midi_file_path, std::string json_file_name)
processes a midi file by saving all instruments (and their channels) to a set of vectors
Definition midi_processor.cpp:97
double get_song_duration()
gets the song duration
Definition midi_processor.cpp:264
bool filter_chords()
filters chords down to only the root note
Definition midi_processor.cpp:548
std::vector< std::vector< int > > get_assigned_keys()
gets all assigned keys
Definition midi_processor.cpp:277
bool debug_print_data()
prints all data to the console
Definition midi_processor.cpp:1043
std::vector< std::vector< int > > keyboard_indexs
current list of keyboard indexs for each channel
Definition midi_processor.h:359
MidiProcessor()
Constructor that allocates internals.
Definition midi_processor.cpp:40
double min_note_duration_gap
minimum note duration
Definition midi_processor.h:329
MidiFile midi
MidiFile library.
Definition midi_processor.h:323
double min_note_gap
minimum note gap
Definition midi_processor.h:332
const char * homeDir
home directory
Definition midi_processor.h:326
std::vector< int > channels
current list of channels
Definition midi_processor.h:335
std::vector< std::vector< double > > note_timeStamps
current list of note_timeStamps
Definition midi_processor.h:344
bool process_instruments()
processes and stores all instruments/channels
Definition midi_processor.cpp:396
std::vector< std::vector< int > > get_keyboard_values()
get keyboard values
Definition midi_processor.cpp:290
bool assign_keys()
key assignment function
Definition midi_processor.cpp:810
bool save_midi_data(std::string file_name)
stores all data for current midi file in a storage file
Definition midi_processor.cpp:985
bool process_channel_notes(int channel)
processes and stores all notes that correspond to a specific channel
Definition midi_processor.cpp:445
std::vector< std::vector< int > > keyboard_values
current list of keyboard values for each channel
Definition midi_processor.h:356
bool process_song_duration()
process song duration
Definition midi_processor.cpp:784
std::vector< int > instruments
current list of instruments
Definition midi_processor.h:338
std::vector< std::string > get_instrument_names()
gets all instrument names and their channels
Definition midi_processor.cpp:201
std::vector< std::vector< int > > assigned_keys
current list of assigned keys for each channel
Definition midi_processor.h:353
bool trim_note_durations()
note duration trimming function
Definition midi_processor.cpp:932
std::vector< std::vector< int > > get_keyboard_indexs()
get keyboard indexs
Definition midi_processor.cpp:303
std::vector< std::vector< double > > get_channel_note_timings()
gets all note timings
Definition midi_processor.cpp:238
namespace for Niels Lohmann
Definition json.hpp:20337
Definition MidiFile.h:44
Definition Binasc.h:22