ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
midi.h
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSÌ COM'È", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31#ifndef _UGBASIC_LIBS_MIDI_H
32#define _UGBASIC_LIBS_MIDI_H
33
34#include <stdint.h>
35
51
52typedef enum _ControlCommand {
200
210
221
225
262
280
290
291#define MIDI_WHEEL_CENTRE 8192
292
293#define MIDI_CHANNEL_1 1
294#define MIDI_CHANNEL_2 2
295#define MIDI_CHANNEL_3 3
296#define MIDI_CHANNEL_4 4
297#define MIDI_CHANNEL_5 5
298#define MIDI_CHANNEL_6 6
299#define MIDI_CHANNEL_7 7
300#define MIDI_CHANNEL_8 8
301#define MIDI_CHANNEL_9 9
302#define MIDI_CHANNEL_10 10
303#define MIDI_CHANNEL_11 11
304#define MIDI_CHANNEL_12 12
305#define MIDI_CHANNEL_13 13
306#define MIDI_CHANNEL_14 14
307#define MIDI_CHANNEL_15 15
308#define MIDI_CHANNEL_16 16
309
310#define MIDI_CHANNEL_DRUMS 10
311
312#define MIDI_OCTAVE 12
313
314#define MIDI_NOTE_MIDDLE_C MIDI_NOTE_C5
315
316#define MIDI_NOTE_C 0
317#define MIDI_NOTE_C_SHARP 1
318#define MIDI_NOTE_C_FLAT -11
319#define MIDI_NOTE_D 2
320#define MIDI_NOTE_D_SHARP 3
321#define MIDI_NOTE_D_FLAT 1
322#define MIDI_NOTE_E 4
323#define MIDI_NOTE_E_SHARP 5
324#define MIDI_NOTE_E_FLAT 3
325#define MIDI_NOTE_F 5
326#define MIDI_NOTE_F_SHARP 6
327#define MIDI_NOTE_F_FLAT 5
328#define MIDI_NOTE_G 7
329#define MIDI_NOTE_G_SHARP 8
330#define MIDI_NOTE_G_FLAT 6
331#define MIDI_NOTE_A 9
332#define MIDI_NOTE_A_SHARP 10
333#define MIDI_NOTE_A_FLAT 8
334#define MIDI_NOTE_B 11
335#define MIDI_NOTE_B_SHARP 12
336#define MIDI_NOTE_B_FLAT 10
337
338#define MIDI_NOTE_C0 0
339#define MIDI_NOTE_C1 12
340#define MIDI_NOTE_C2 24
341#define MIDI_NOTE_C3 36
342#define MIDI_NOTE_C4 48
343#define MIDI_NOTE_C5 60
344#define MIDI_NOTE_C6 72
345#define MIDI_NOTE_C7 84
346#define MIDI_NOTE_C8 96
347#define MIDI_NOTE_C9 108
348#define MIDI_NOTE_C10 120
349
350#define MIDI_OCTAVE_0 MIDI_NOTE_C0
351#define MIDI_OCTAVE_1 MIDI_NOTE_C1
352#define MIDI_OCTAVE_2 MIDI_NOTE_C2
353#define MIDI_OCTAVE_3 MIDI_NOTE_C3
354#define MIDI_OCTAVE_4 MIDI_NOTE_C4
355#define MIDI_OCTAVE_5 MIDI_NOTE_C5
356#define MIDI_OCTAVE_6 MIDI_NOTE_C6
357#define MIDI_OCTAVE_7 MIDI_NOTE_C7
358#define MIDI_OCTAVE_8 MIDI_NOTE_C8
359#define MIDI_OCTAVE_9 MIDI_NOTE_C9
360#define MIDI_OCTAVE_10 MIDI_NOTE_C10
361
362#define MIDI_DURATION_BREVE 1536
363#define MIDI_DURATION_MINIM 768
364#define MIDI_DURATION_CROCHET 384
365#define MIDI_DURATION_QUAVER 192
366#define MIDI_DURATION_SEMIQUAVER 96
367#define MIDI_DURATION_SEMIDEMIQUAVER 48
368
369#define MIDI_DURATION_DOTTED_MINIM (768+384)
370#define MIDI_DURATION_DOTTED_CROCHET (384+192)
371#define MIDI_DURATION_DOTTED_QUAVER (192+96)
372#define MIDI_DURATION_DOTTED_SEMIQUAVER (96+48)
373#define MIDI_DURATION_DOTTED_SEMIDEMIQUAVER (48+24)
374
375#define MIDI_DURATION_TRIPLE_CROCHET 256
376
377#define MIDI_VOL_FULL 127
378#define MIDI_VOL_HALF 64
379#define MIDI_VOL_OFF 0
380
381#define MIDI_INSTRUMENT_ACOUSTIC_GRAND_PIANO 0
382#define MIDI_INSTRUMENT_BRIGHT_ACOUSTIC_PIANO 1
383#define MIDI_INSTRUMENT_ELECTRIC_GRAND_PIANO 2
384#define MIDI_INSTRUMENT_HONKY_TONK_PIANO 3
385#define MIDI_INSTRUMENT_ELECTRIC_PIANO_1 4
386#define MIDI_INSTRUMENT_ELECTRIC_PIANO_2 5
387#define MIDI_INSTRUMENT_HARPSICHORD 6
388#define MIDI_INSTRUMENT_CLAVI 7
389#define MIDI_INSTRUMENT_CELESTA 8
390#define MIDI_INSTRUMENT_GLOCKENSPIEL 9
391#define MIDI_INSTRUMENT_MUSIC_BOX 10
392#define MIDI_INSTRUMENT_VIBRAPHONE 11
393#define MIDI_INSTRUMENT_MARIMBA 12
394#define MIDI_INSTRUMENT_XYLOPHONE 13
395#define MIDI_INSTRUMENT_TUBULAR_BELLS 14
396#define MIDI_INSTRUMENT_DULCIMER 15
397#define MIDI_INSTRUMENT_DRAWBAR_ORGAN 16
398#define MIDI_INSTRUMENT_PERCUSSIVE_ORGAN 17
399#define MIDI_INSTRUMENT_ROCK_ORGAN 18
400#define MIDI_INSTRUMENT_CHURCH_ORGAN 19
401#define MIDI_INSTRUMENT_REED_ORGAN 20
402#define MIDI_INSTRUMENT_ACCORDION 21
403#define MIDI_INSTRUMENT_HARMONICA 22
404#define MIDI_INSTRUMENT_TANGO_ACCORDION 23
405#define MIDI_INSTRUMENT_ACOUSTIC_GUITAR_NYLON 24
406#define MIDI_INSTRUMENT_ACOUSTIC_GUITAR_STEEL 25
407#define MIDI_INSTRUMENT_ELECTRIC_GUITAR_JAZZ 26
408#define MIDI_INSTRUMENT_ELECTRIC_GUITAR_CLEAN 27
409#define MIDI_INSTRUMENT_ELECTRIC_GUITAR_MUTED 28
410#define MIDI_INSTRUMENT_OVERDRIVEN_GUITAR 29
411#define MIDI_INSTRUMENT_DISTORTION_GUITAR 30
412#define MIDI_INSTRUMENT_GUITAR_HARMONICS 31
413#define MIDI_INSTRUMENT_ACOUSTIC_BASS 32
414#define MIDI_INSTRUMENT_ELECTRIC_BASS_FINGER 33
415#define MIDI_INSTRUMENT_ELECTRIC_BASS_PICK 34
416#define MIDI_INSTRUMENT_FRETLESS_BASS 35
417#define MIDI_INSTRUMENT_SLAP_BASS_1 36
418#define MIDI_INSTRUMENT_SLAP_BASS_2 37
419#define MIDI_INSTRUMENT_SYNTH_BASS_1 38
420#define MIDI_INSTRUMENT_SYNTH_BASS_2 39
421#define MIDI_INSTRUMENT_VIOLIN 40
422#define MIDI_INSTRUMENT_VIOLA 41
423#define MIDI_INSTRUMENT_CELLO 42
424#define MIDI_INSTRUMENT_CONTRABASS 43
425#define MIDI_INSTRUMENT_TREMOLO_STRINGS 44
426#define MIDI_INSTRUMENT_PIZZICATO_STRINGS 45
427#define MIDI_INSTRUMENT_ORCHESTRAL_HARP 46
428#define MIDI_INSTRUMENT_TIMPANI 47
429#define MIDI_INSTRUMENT_STRING_ENSEMBLE_1 48
430#define MIDI_INSTRUMENT_STRING_ENSEMBLE_2 49
431#define MIDI_INSTRUMENT_SYNTHSTRINGS_1 50
432#define MIDI_INSTRUMENT_SYNTHSTRINGS_2 51
433#define MIDI_INSTRUMENT_CHOIR_AAHS 52
434#define MIDI_INSTRUMENT_VOICE_OOHS 53
435#define MIDI_INSTRUMENT_SYNTH_VOICE 54
436#define MIDI_INSTRUMENT_ORCHESTRA_HIT 55
437#define MIDI_INSTRUMENT_TRUMPET 56
438#define MIDI_INSTRUMENT_TROMBONE 57
439#define MIDI_INSTRUMENT_TUBA 58
440#define MIDI_INSTRUMENT_MUTED_TRUMPET 59
441#define MIDI_INSTRUMENT_FRENCH_HORN 60
442#define MIDI_INSTRUMENT_BRASS_SECTION 61
443#define MIDI_INSTRUMENT_SYNTHBRASS_1 62
444#define MIDI_INSTRUMENT_SYNTHBRASS_2 63
445#define MIDI_INSTRUMENT_SOPRANO_SAX 64
446#define MIDI_INSTRUMENT_ALTO_SAX 65
447#define MIDI_INSTRUMENT_TENOR_SAX 66
448#define MIDI_INSTRUMENT_BARITONE_SAX 67
449#define MIDI_INSTRUMENT_OBOE 68
450#define MIDI_INSTRUMENT_ENGLISH_HORN 69
451#define MIDI_INSTRUMENT_BASSOON 70
452#define MIDI_INSTRUMENT_CLARINET 71
453#define MIDI_INSTRUMENT_PICCOLO 72
454#define MIDI_INSTRUMENT_FLUTE 73
455#define MIDI_INSTRUMENT_RECORDER 74
456#define MIDI_INSTRUMENT_PAN_FLUTE 75
457#define MIDI_INSTRUMENT_BLOWN_BOTTLE 76
458#define MIDI_INSTRUMENT_SHAKUHACHI 77
459#define MIDI_INSTRUMENT_WHISTLE 78
460#define MIDI_INSTRUMENT_OCARINA 79
461#define MIDI_INSTRUMENT_LEAD_1_SQUARE 80
462#define MIDI_INSTRUMENT_LEAD_2_SAWTOOTH 81
463#define MIDI_INSTRUMENT_LEAD_3_CALLIOPE 82
464#define MIDI_INSTRUMENT_LEAD_4_CHIFF 83
465#define MIDI_INSTRUMENT_LEAD_5_CHARANG 84
466#define MIDI_INSTRUMENT_LEAD_6_VOICE 85
467#define MIDI_INSTRUMENT_LEAD_7_FIFTHS 86
468#define MIDI_INSTRUMENT_LEAD_8_BASS_AND_LEAD 87
469#define MIDI_INSTRUMENT_PAD_1_NEW_AGE 88
470#define MIDI_INSTRUMENT_PAD_2_WARM 89
471#define MIDI_INSTRUMENT_PAD_3_POLYSYNTH 90
472#define MIDI_INSTRUMENT_PAD_4_CHOIR 91
473#define MIDI_INSTRUMENT_PAD_5_BOWED 92
474#define MIDI_INSTRUMENT_PAD_6_METALLIC 93
475#define MIDI_INSTRUMENT_PAD_7_HALO 94
476#define MIDI_INSTRUMENT_PAD_8_SWEEP 95
477#define MIDI_INSTRUMENT_FX_1_RAIN 96
478#define MIDI_INSTRUMENT_FX_2_SOUNDTRACK 97
479#define MIDI_INSTRUMENT_FX_3_CRYSTAL 98
480#define MIDI_INSTRUMENT_FX_4_ATMOSPHERE 99
481#define MIDI_INSTRUMENT_FX_5_BRIGHTNESS 100
482#define MIDI_INSTRUMENT_FX_6_GOBLINS 101
483#define MIDI_INSTRUMENT_FX_7_ECHOES 102
484#define MIDI_INSTRUMENT_FX_8_SCIFI 103
485#define MIDI_INSTRUMENT_SITAR 104
486#define MIDI_INSTRUMENT_BANJO 105
487#define MIDI_INSTRUMENT_SHAMISEN 106
488#define MIDI_INSTRUMENT_KOTO 107
489#define MIDI_INSTRUMENT_KALIMBA 108
490#define MIDI_INSTRUMENT_BAG_PIPE 109
491#define MIDI_INSTRUMENT_FIDDLE 110
492#define MIDI_INSTRUMENT_SHANAI 111
493#define MIDI_INSTRUMENT_TINKLE_BELL 112
494#define MIDI_INSTRUMENT_AGOGO 113
495#define MIDI_INSTRUMENT_STEEL_DRUMS 114
496#define MIDI_INSTRUMENT_WOODBLOCK 115
497#define MIDI_INSTRUMENT_TAIKO_DRUM 116
498#define MIDI_INSTRUMENT_MELODIC_TOM 117
499#define MIDI_INSTRUMENT_SYNTH_DRUM 118
500#define MIDI_INSTRUMENT_REVERSE_CYMBAL 119
501#define MIDI_INSTRUMENT_GUITAR_FRET NOISE 120
502#define MIDI_INSTRUMENT_BREATH_NOISE 121
503#define MIDI_INSTRUMENT_SEASHORE 122
504#define MIDI_INSTRUMENT_BIRD_TWEET 123
505#define MIDI_INSTRUMENT_TELEPHONE_RING 124
506#define MIDI_INSTRUMENT_HELICOPTER 125
507#define MIDI_INSTRUMENT_APPLAUSE 126
508#define MIDI_INSTRUMENT_GUNSHOT 127
509
510#define MIDI_INSTRUMENT_DRUM_ACOUSTIC_BASS_DRUM 35
511#define MIDI_INSTRUMENT_DRUM_BASS_DRUM 36
512#define MIDI_INSTRUMENT_DRUM_SIDE_STICK 37
513#define MIDI_INSTRUMENT_DRUM_ACOUSTIC_SNARE 38
514#define MIDI_INSTRUMENT_DRUM_HAND_CLAP 39
515#define MIDI_INSTRUMENT_DRUM_ELECTRIC_SNARE 40
516#define MIDI_INSTRUMENT_DRUM_LOW_FLOOR_TOM 41
517#define MIDI_INSTRUMENT_DRUM_CLOSED_HI_HAT 42
518#define MIDI_INSTRUMENT_DRUM_HIGH_FLOOR_TOM 43
519#define MIDI_INSTRUMENT_DRUM_PEDAL_HI_HAT 44
520#define MIDI_INSTRUMENT_DRUM_LOW_TOM 45
521#define MIDI_INSTRUMENT_DRUM_OPEN_HI_HAT 46
522#define MIDI_INSTRUMENT_DRUM_LOW_MID_TOM 47
523#define MIDI_INSTRUMENT_DRUM_HI_MID_TOM 48
524#define MIDI_INSTRUMENT_DRUM_CRASH_CYMBAL_1 49
525#define MIDI_INSTRUMENT_DRUM_HIGH_TOM 50
526#define MIDI_INSTRUMENT_DRUM_RIDE_CYMBAL_1 51
527#define MIDI_INSTRUMENT_DRUM_CHINESE_CYMBAL 52
528#define MIDI_INSTRUMENT_DRUM_RIDE_BELL 53
529#define MIDI_INSTRUMENT_DRUM_TAMBOURINE 54
530#define MIDI_INSTRUMENT_DRUM_SPLASH_CYMBAL 55
531#define MIDI_INSTRUMENT_DRUM_COWBELL 56
532#define MIDI_INSTRUMENT_DRUM_CRASH_CYMBAL_2 57
533#define MIDI_INSTRUMENT_DRUM_VIBRA_SLAP 58
534#define MIDI_INSTRUMENT_DRUM_RIDE_CYMBAL_2 59
535#define MIDI_INSTRUMENT_DRUM_HI_BONGO 60
536#define MIDI_INSTRUMENT_DRUM_LOW_BONGO 61
537#define MIDI_INSTRUMENT_DRUM_MUTE_HI_CONGA 62
538#define MIDI_INSTRUMENT_DRUM_OPEN_HI_CONGA 63
539#define MIDI_INSTRUMENT_DRUM_LOW_CONGA 64
540#define MIDI_INSTRUMENT_DRUM_HIGH_TIMBALE 65
541#define MIDI_INSTRUMENT_DRUM_LOW_TIMBALE 66
542#define MIDI_INSTRUMENT_DRUM_HIGH_AGOGO 67
543#define MIDI_INSTRUMENT_DRUM_LOW_AGOGO 68
544#define MIDI_INSTRUMENT_DRUM_CABASA 69
545#define MIDI_INSTRUMENT_DRUM_MARACAS 70
546#define MIDI_INSTRUMENT_DRUM_SHORT_WHISTLE 71
547#define MIDI_INSTRUMENT_DRUM_LONG_WHISTLE 72
548#define MIDI_INSTRUMENT_DRUM_SHORT_GUIRO 73
549#define MIDI_INSTRUMENT_DRUM_LONG_GUIRO 74
550#define MIDI_INSTRUMENT_DRUM_CLAVES 75
551#define MIDI_INSTRUMENT_DRUM_HI_WOOD_BLOCK 76
552#define MIDI_INSTRUMENT_DRUM_LOW_WOOD_BLOCK 77
553#define MIDI_INSTRUMENT_DRUM_MUTE_CUICA 78
554#define MIDI_INSTRUMENT_DRUM_OPEN_CUICA 79
555#define MIDI_INSTRUMENT_DRUM_MUTE_TRIANGLE 80
556#define MIDI_INSTRUMENT_DRUM_OPEN_TRIANGLE 81
557
558#define CHORD_ROOT_MASK 0x000000ff
559#define CHORD_TYPE_MASK 0x0000ff00
560#define CHORD_BASS_MASK 0x00ff0000
561#define CHORD_ADDITION_MASK 0xff000000
562
563#define CHORD_TYPE_MAJOR 0x00000100
564#define CHORD_TYPE_MINOR 0x00000200
565#define CHORD_TYPE_AUG 0x00000300
566#define CHORD_TYPE_DIM 0x00000400
567
568#define CHORD_ADD_7TH 0x01000000
569#define CHORD_ADD_9TH 0x02000000
570#define CHORD_ADD_MAJ7TH 0x04000000
571
572int muGetInstrumentName(char *pName, int iInstr);
573int muGetDrumName(char *pName, int iInstr);
574int muGetMIDIMsgName(char *pName, MidiMessage iMsg);
575int muGetControlName(char *pName, MidiControlCommand iCC);
576int muGetKeySigName(char *pName, MidiNote iKey);
577int muGetTextName(char *pName, MidiTextInfo iEvent);
578int muGetMetaName(char *pName, MidiMetaInfo iEvent);
579int muGetNoteFromName(const char *pName);
580char * muGetNameFromNote(char *pStr, int iNote);
581float muGetFreqFromNote(int iNote);
582int muGetNoteFromFreq(float fFreq);
583int muGuessChord(const int *pNoteStatus, const int channel, const int lowRange, const int highRange);
584char * muGetChordName(char *str, int chord);
585
586typedef unsigned char BYTE;
587typedef uint16_t WORD;
588typedef uint32_t DWORD;
589#ifndef TRUE
590 #define TRUE 1
591#endif
592#ifndef FALSE
593 #define FALSE 0
594#endif
595
596#define MIDI_PPQN_DEFAULT 384
597#define MIDI_VERSION_DEFAULT 1
598
599#define MAX_MIDI_TRACKS 256
600#define MAX_TRACK_POLYPHONY 64
601
602typedef void MidiFile;
603typedef struct _MidiMessagePayload {
604
606
610
613
616
681
684
686
687MidiFile * midiFileCreate(const char *pFilename, int bOverwriteIfExists);
688int midiFileSetTracksDefaultChannel(MidiFile *pMF, int iTrack, int iChannel);
689int midiFileGetTracksDefaultChannel(const MidiFile *pMF, int iTrack);
690int midiFileFlushTrack(MidiFile *pMF, int iTrack, int bFlushToEnd, DWORD dwEndTimePos);
691int midiFileSyncTracks(MidiFile *pMF, int iTrack1, int iTrack2);
692int midiFileSetPPQN(MidiFile *pMF, int PPQN);
693int midiFileGetPPQN(const MidiFile *pMF);
694int midiFileSetVersion(MidiFile *pMF, int iVersion);
695int midiFileGetVersion(const MidiFile *pMF);
696MidiFile * midiFileOpen(const char *pFilename);
697int midiFileClose(MidiFile *pMF);
698
699int midiSongAddSMPTEOffset(MidiFile *pMF, int iTrack, int iHours, int iMins, int iSecs, int iFrames, int iFFrames);
700int midiSongAddSimpleTimeSig(MidiFile *pMF, int iTrack, int iNom, int iDenom);
701int midiSongAddTimeSig(MidiFile *pMF, int iTrack, int iNom, int iDenom, int iClockInMetroTick, int iNotated32nds);
702int midiSongAddKeySig(MidiFile *pMF, int iTrack, MidiNote iKey);
703int midiSongAddTempo(MidiFile *pMF, int iTrack, int iTempo);
704int midiSongAddMIDIPort(MidiFile *pMF, int iTrack, int iPort);
705int midiSongAddEndSequence(MidiFile *pMF, int iTrack);
706
707int midiTrackAddRaw(MidiFile *pMF, int iTrack, int iDataSize, const BYTE *pData, int bMovePtr, int iDeltaTime);
708int midiTrackIncTime(MidiFile *pMF, int iTrack, int iDeltaTime, int bOverridePPQN);
709int midiTrackAddText(MidiFile *pMF, int iTrack, MidiTextInfo iType, const char *pTxt);
710int midiTrackAddMsg(MidiFile *pMF, int iTrack, MidiMessage iMsg, int iParam1, int iParam2);
711int midiTrackSetKeyPressure(MidiFile *pMF, int iTrack, int iNote, int iAftertouch);
712int midiTrackAddControlChange(MidiFile *pMF, int iTrack, MidiControlCommand iCCType, int iParam);
713int midiTrackAddProgramChange(MidiFile *pMF, int iTrack, int iInstrPatch);
714int midiTrackChangeKeyPressure(MidiFile *pMF, int iTrack, int iDeltaPressure);
715int midiTrackSetPitchWheel(MidiFile *pMF, int iTrack, int iWheelPos);
716int midiTrackAddNote(MidiFile *pMF, int iTrack, int iNote, int iLength, int iVol, int bAutoInc, int bOverrideLength);
717int midiTrackAddRest(MidiFile *pMF, int iTrack, int iLength, int bOverridePPQN);
718int midiTrackGetEndPos(MidiFile *pMF, int iTrack);
719
720int midiReadGetNumTracks(const MidiFile *pMF);
721int midiReadGetNextMessage(const MidiFile *pMF, int iTrack, MidiMessagePayload *pMsg);
724
725#endif
enum _MidiMetaInfo MidiMetaInfo
_MidiMessage
Definition midi.h:36
@ messageChangePressure
Definition midi.h:42
@ messageNoteOn
Definition midi.h:38
@ messageSysEx1
Definition midi.h:45
@ messagePatchChange
Definition midi.h:47
@ messageSysMask
Definition midi.h:49
@ messageSetPitchWheel
Definition midi.h:43
@ messageControlChange
Definition midi.h:48
@ messageMetaEvent
Definition midi.h:44
@ messageNoteKeyPressure
Definition midi.h:39
@ messageNoteOff
Definition midi.h:37
@ messageSetProgram
Definition midi.h:41
@ messageSetParameter
Definition midi.h:40
@ messageSysEx2
Definition midi.h:46
_MidiNote
Definition midi.h:226
@ noteAMaj
Definition midi.h:237
@ noteMaskNeg
Definition midi.h:257
@ noteCFlatMaj
Definition midi.h:227
@ noteAFlatMin
Definition midi.h:245
@ noteBMin
Definition midi.h:254
@ noteFSharpMin
Definition midi.h:255
@ noteBMaj
Definition midi.h:239
@ noteDFlatMaj
Definition midi.h:229
@ noteGFlatMin
Definition midi.h:243
@ noteAMin
Definition midi.h:252
@ noteDMin
Definition midi.h:251
@ noteCSharpMin
Definition midi.h:256
@ noteBFlatMaj
Definition midi.h:232
@ noteFSharpMaj
Definition midi.h:240
@ noteCMin
Definition midi.h:249
@ noteFMin
Definition midi.h:248
@ noteMaskKey
Definition midi.h:260
@ noteMaskFlatKeys
Definition midi.h:258
@ noteGMin
Definition midi.h:250
@ noteDMaj
Definition midi.h:236
@ noteEFlatMin
Definition midi.h:246
@ noteFMaj
Definition midi.h:233
@ noteCSharpMaj
Definition midi.h:241
@ noteCMaj
Definition midi.h:234
@ noteGMaj
Definition midi.h:235
@ noteEFlatMaj
Definition midi.h:231
@ noteEMin
Definition midi.h:253
@ noteBFlatMin
Definition midi.h:247
@ noteCFlatMin
Definition midi.h:242
@ noteEMaj
Definition midi.h:238
@ noteGFlatMaj
Definition midi.h:228
@ noteDFlatMin
Definition midi.h:244
@ noteMaskMin
Definition midi.h:259
@ noteAFlatMaj
Definition midi.h:230
float muGetFreqFromNote(int iNote)
Definition midi.c:1677
int muGetMetaName(char *pName, MidiMetaInfo iEvent)
Definition midi.c:1608
int midiReadGetNextMessage(const MidiFile *pMF, int iTrack, MidiMessagePayload *pMsg)
Definition midi.c:922
int midiTrackAddControlChange(MidiFile *pMF, int iTrack, MidiControlCommand iCCType, int iParam)
Definition midi.c:755
int muGetMIDIMsgName(char *pName, MidiMessage iMsg)
Definition midi.c:1528
int midiSongAddKeySig(MidiFile *pMF, int iTrack, MidiNote iKey)
Definition midi.c:627
int midiTrackAddRest(MidiFile *pMF, int iTrack, int iLength, int bOverridePPQN)
Definition midi.c:862
int midiTrackSetKeyPressure(MidiFile *pMF, int iTrack, int iNote, int iAftertouch)
Definition midi.c:750
enum _MidiRealTime MidiRealTime
int midiTrackGetEndPos(MidiFile *pMF, int iTrack)
Definition midi.c:872
int midiTrackAddNote(MidiFile *pMF, int iTrack, int iNote, int iLength, int iVol, int bAutoInc, int bOverrideLength)
Definition midi.c:812
int muGetKeySigName(char *pName, MidiNote iKey)
Definition midi.c:1586
int muGetNoteFromName(const char *pName)
Definition midi.c:1633
int midiSongAddSimpleTimeSig(MidiFile *pMF, int iTrack, int iNom, int iDenom)
Definition midi.c:607
int muGuessChord(const int *pNoteStatus, const int channel, const int lowRange, const int highRange)
Definition midi.c:1715
int midiFileGetVersion(const MidiFile *pMF)
Definition midi.c:338
_MidiSystemCommand
Definition midi.h:201
@ systemCommandUndefinedF5
Definition midi.h:206
@ systemCommandTuneRequest
Definition midi.h:207
@ systemCommandSongPosition
Definition midi.h:203
@ systemCommandUndefinedF1
Definition midi.h:202
@ systemCommandSongSelect
Definition midi.h:204
@ systemCommandUndefinedF4
Definition midi.h:205
@ systemCommandEOX
Definition midi.h:208
int midiSongAddMIDIPort(MidiFile *pMF, int iTrack, int iPort)
Definition midi.c:656
struct _MidiMessagePayload MidiMessagePayload
int midiFileFlushTrack(MidiFile *pMF, int iTrack, int bFlushToEnd, DWORD dwEndTimePos)
Definition midi.c:433
unsigned char BYTE
Definition midi.h:586
MidiFile * midiFileOpen(const char *pFilename)
Definition midi.c:345
int muGetNoteFromFreq(float fFreq)
Definition midi.c:1695
enum _MidiMessage MidiMessage
int midiSongAddTempo(MidiFile *pMF, int iTrack, int iTempo)
Definition midi.c:640
int muGetControlName(char *pName, MidiControlCommand iCC)
Definition midi.c:1578
char * muGetChordName(char *str, int chord)
Definition midi.c:1794
int midiTrackAddRaw(MidiFile *pMF, int iTrack, int iDataSize, const BYTE *pData, int bMovePtr, int iDeltaTime)
Definition midi.c:678
void midiReadInitMessage(MidiMessagePayload *pMsg)
Definition midi.c:1142
int midiFileSetTracksDefaultChannel(MidiFile *pMF, int iTrack, int iChannel)
Definition midi.c:285
int midiTrackAddText(MidiFile *pMF, int iTrack, MidiTextInfo iType, const char *pTxt)
Definition midi.c:724
int midiTrackSetPitchWheel(MidiFile *pMF, int iTrack, int iWheelPos)
Definition midi.c:770
int midiFileSetPPQN(MidiFile *pMF, int PPQN)
Definition midi.c:308
int midiFileGetPPQN(const MidiFile *pMF)
Definition midi.c:319
int midiFileClose(MidiFile *pMF)
Definition midi.c:515
int muGetInstrumentName(char *pName, int iInstr)
Definition midi.c:1512
enum _ControlCommand MidiControlCommand
enum _MidiSystemCommand MidiSystemCommand
MidiFile * midiFileCreate(const char *pFilename, int bOverwriteIfExists)
Definition midi.c:240
int midiFileSyncTracks(MidiFile *pMF, int iTrack1, int iTrack2)
Definition midi.c:496
void MidiFile
Definition midi.h:602
_MidiTextInfo
Definition midi.h:281
@ textInfoMarker
Definition midi.h:287
@ textInfoTextEvent
Definition midi.h:282
@ textInfoCopyright
Definition midi.h:283
@ textInfoCuePoint
Definition midi.h:288
@ textInfoTrackName
Definition midi.h:284
@ textInfoLyric
Definition midi.h:286
@ textInfoInstrument
Definition midi.h:285
char * muGetNameFromNote(char *pStr, int iNote)
Definition midi.c:1665
int midiSongAddSMPTEOffset(MidiFile *pMF, int iTrack, int iHours, int iMins, int iSecs, int iFrames, int iFFrames)
Definition midi.c:586
uint16_t WORD
Definition midi.h:587
_MidiRealTime
Definition midi.h:211
@ realTimeSystemReset
Definition midi.h:219
@ realTimeContinue
Definition midi.h:215
@ realTimeActiveSensing
Definition midi.h:218
@ realTimeUndefinedF9
Definition midi.h:213
@ realTimeStop
Definition midi.h:216
@ realTimeTimingClock
Definition midi.h:212
@ realTimeStart
Definition midi.h:214
@ realTimeUndefinedFD
Definition midi.h:217
int midiFileGetTracksDefaultChannel(const MidiFile *pMF, int iTrack)
Definition midi.c:299
int muGetTextName(char *pName, MidiTextInfo iEvent)
Definition midi.c:1602
int midiFileSetVersion(MidiFile *pMF, int iVersion)
Definition midi.c:326
int midiTrackAddMsg(MidiFile *pMF, int iTrack, MidiMessage iMsg, int iParam1, int iParam2)
Definition midi.c:778
int midiTrackAddProgramChange(MidiFile *pMF, int iTrack, int iInstrPatch)
Definition midi.c:760
int midiReadGetNumTracks(const MidiFile *pMF)
Definition midi.c:916
int midiTrackChangeKeyPressure(MidiFile *pMF, int iTrack, int iDeltaPressure)
Definition midi.c:765
enum _MidiSystemExclusive MidiSystemExclusive
enum _MidiTextInfo MidiTextInfo
enum _MidiNote MidiNote
int midiSongAddEndSequence(MidiFile *pMF, int iTrack)
Definition midi.c:667
_MidiSystemExclusive
Definition midi.h:222
@ systemExclusiveEOX
Definition midi.h:223
void midiReadFreeMessage(MidiMessagePayload *pMsg)
Definition midi.c:1149
int midiSongAddTimeSig(MidiFile *pMF, int iTrack, int iNom, int iDenom, int iClockInMetroTick, int iNotated32nds)
Definition midi.c:612
_MidiMetaInfo
Definition midi.h:263
@ metaInfoTrackName
Definition midi.h:267
@ metaInfoTextEvent
Definition midi.h:265
@ metaInfoCuePoint
Definition midi.h:271
@ metaInfoSequenceNumber
Definition midi.h:264
@ metaInfoKeySig
Definition midi.h:277
@ metaInfoMarker
Definition midi.h:270
@ metaInfoSequencerSpecific
Definition midi.h:278
@ metaInfoSetTempo
Definition midi.h:274
@ metaInfoMIDIPort
Definition midi.h:272
@ metaInfoInstrument
Definition midi.h:268
@ metaInfoTimeSig
Definition midi.h:276
@ metaInfoCopyright
Definition midi.h:266
@ metaInfoEndSequence
Definition midi.h:273
@ metaInfoLyric
Definition midi.h:269
@ metaInfoSMPTEOffset
Definition midi.h:275
_ControlCommand
Definition midi.h:52
@ controlCommandFootControlLSB
Definition midi.h:89
@ controlCommandExpression
Definition midi.h:64
@ controlCommandUndefined117
Definition midi.h:170
@ controlCommandPan
Definition midi.h:63
@ controlCommandVolume
Definition midi.h:60
@ controlCommandUndefined14
Definition midi.h:67
@ controlCommandSoundController5
Definition midi.h:187
@ controlCommandLegatoFootSwitch
Definition midi.h:121
@ controlCommandUndefined26
Definition midi.h:79
@ controlCommandBalance
Definition midi.h:61
@ controlCommandLocalControl
Definition midi.h:175
@ controlCommandUndefined85
Definition midi.h:138
@ controlCommandUndefined27
Definition midi.h:80
@ controlCommandUndefined47
Definition midi.h:100
@ controlCommandAllSoundOff
Definition midi.h:173
@ controlCommandPedalSoft
Definition midi.h:120
@ controlCommandUndefined114
Definition midi.h:167
@ controlCommandUndefined25
Definition midi.h:78
@ controlCommandUndefined119
Definition midi.h:172
@ controlCommandBrightness
Definition midi.h:127
@ controlCommandUndefined112
Definition midi.h:165
@ controlCommandModulationLSB
Definition midi.h:86
@ controlCommandDetuneDepth
Definition midi.h:198
@ controlCommandSoundController7
Definition midi.h:189
@ controlCommandUndefined22
Definition midi.h:75
@ controlCommandBreathControlLSB
Definition midi.h:87
@ controlCommandEffect3Depth
Definition midi.h:195
@ controlCommandUndefined61
Definition midi.h:114
@ controlCommandUndefined113
Definition midi.h:166
@ controlCommandGeneralPurpose3
Definition midi.h:71
@ controlCommandUndefined88
Definition midi.h:141
@ controlCommandNonRegParamLSB
Definition midi.h:151
@ controlCommandEffect2Depth
Definition midi.h:194
@ controlCommandBankSelect
Definition midi.h:53
@ controlCommandUndefined103
Definition midi.h:156
@ controlCommandUndefined108
Definition midi.h:161
@ controlCommandPedalSustenuto
Definition midi.h:119
@ controlCommandPortamentoTimeLSB
Definition midi.h:90
@ controlCommandSoundController3
Definition midi.h:185
@ controlCommandModulation
Definition midi.h:54
@ controlCommandBalanceLSB
Definition midi.h:93
@ controlCommandDateEntry
Definition midi.h:59
@ controlCommandUndefined59
Definition midi.h:112
@ controlCommandUndefined111
Definition midi.h:164
@ controlCommandEffect5Depth
Definition midi.h:197
@ controlCommandUndefined110
Definition midi.h:163
@ controlCommandUndefined9
Definition midi.h:62
@ controlCommandUndefined3
Definition midi.h:56
@ controlCommandSpecialFX
Definition midi.h:132
@ controlCommandUndefined35
Definition midi.h:88
@ controlCommandDateEntryLSB
Definition midi.h:91
@ controlCommandUndefined46
Definition midi.h:99
@ controlCommandGeneralPurpose8
Definition midi.h:136
@ controlCommandUndefined23
Definition midi.h:76
@ controlCommandAttackTime
Definition midi.h:126
@ controlCommandUndefined60
Definition midi.h:113
@ controlCommandTremeloDepth
Definition midi.h:145
@ controlCommandBreathControl
Definition midi.h:55
@ controlCommandCelestaDepth
Definition midi.h:147
@ controlCommandSoundController1
Definition midi.h:183
@ controlCommandUndefined115
Definition midi.h:168
@ controlCommandSoundController9
Definition midi.h:191
@ controlCommandUndefined105
Definition midi.h:158
@ controlCommandPhaserDepth
Definition midi.h:148
@ controlCommandEffectControl1LSB
Definition midi.h:97
@ controlCommandGeneralPurpose3LSB
Definition midi.h:103
@ controlCommandBankSelectLSB
Definition midi.h:85
@ controlCommandUndefined41
Definition midi.h:94
@ controlCommandUndefined118
Definition midi.h:171
@ controlCommandUndefined56
Definition midi.h:109
@ controlCommandUndefined109
Definition midi.h:162
@ controlCommandDataInc
Definition midi.h:149
@ controlCommandEffectControl1
Definition midi.h:65
@ controlCommandUndefined63
Definition midi.h:116
@ controlCommandGeneralPurpose1LSB
Definition midi.h:101
@ controlCommandDelay
Definition midi.h:129
@ controlCommandResetAllControllers
Definition midi.h:174
@ controlCommandUndefined29
Definition midi.h:82
@ controlCommandUndefined28
Definition midi.h:81
@ controlCommandVolumeLSB
Definition midi.h:92
@ controlCommandUndefined53
Definition midi.h:106
@ controlCommandUndefined89
Definition midi.h:142
@ controlCommandGeneralPurpose2LSB
Definition midi.h:102
@ controlCommandEffectControl2LSB
Definition midi.h:98
@ controlCommandSoundController2
Definition midi.h:184
@ controlCommandSoundController8
Definition midi.h:190
@ controlCommandUndefined21
Definition midi.h:74
@ controlCommandGeneralPurpose7
Definition midi.h:135
@ controlCommandUndefined55
Definition midi.h:108
@ controlCommandSoundController10
Definition midi.h:192
@ controlCommandGeneralPurpose4LSB
Definition midi.h:104
@ controlCommandUndefined116
Definition midi.h:169
@ controlCommandMonoModeOn
Definition midi.h:179
@ controlCommandTimbre
Definition midi.h:124
@ controlCommandUndefined57
Definition midi.h:110
@ controlCommandUndefined30
Definition midi.h:83
@ controlCommandUndefined102
Definition midi.h:155
@ controlCommandUndefined20
Definition midi.h:73
@ controlCommandUndefined107
Definition midi.h:160
@ controlCommandPolyModeOn
Definition midi.h:180
@ controlCommandUndefined58
Definition midi.h:111
@ controlCommandPortamento
Definition midi.h:118
@ controlCommandUndefined31
Definition midi.h:84
@ controlCommandRegParamMSB
Definition midi.h:154
@ controlCommandUndefined24
Definition midi.h:77
@ controlCommandFootControl
Definition midi.h:57
@ controlCommandNonRefParamMSB
Definition midi.h:152
@ controlCommandUndefined106
Definition midi.h:159
@ controlCommandGeneralPurpose6
Definition midi.h:134
@ controlCommandGeneralPurpose1
Definition midi.h:69
@ controlCommandEffect4Depth
Definition midi.h:196
@ controlCommandOmniModeOff
Definition midi.h:177
@ controlCommandFXDepth
Definition midi.h:144
@ controlCommandSoundController4
Definition midi.h:186
@ controlCommandPortamentoControl
Definition midi.h:137
@ controlCommandEffect1Depth
Definition midi.h:193
@ controlCommandModWheel
Definition midi.h:181
@ controlCommandSoundVariation
Definition midi.h:123
@ controlCommandPanLSB
Definition midi.h:95
@ controlCommandGeneralPurpose5
Definition midi.h:133
@ controlCommandUndefined15
Definition midi.h:68
@ controlCommandHold2
Definition midi.h:122
@ controlCommandRegParamLSB
Definition midi.h:153
@ controlCommandUndefined90
Definition midi.h:143
@ controlCommandPitchTranspose
Definition midi.h:130
@ controlCommandUndefined87
Definition midi.h:140
@ controlCommandUndefined54
Definition midi.h:107
@ controlCommandUndefined86
Definition midi.h:139
@ controlCommandReverb
Definition midi.h:128
@ controlCommandAllNotesOff
Definition midi.h:176
@ controlCommandUndefined52
Definition midi.h:105
@ controlCommandSustainPedal
Definition midi.h:117
@ controlCommandDataDec
Definition midi.h:150
@ controlCommandEffectControl2
Definition midi.h:66
@ controlCommandUndefined104
Definition midi.h:157
@ controlCommandGeneralPurpose4
Definition midi.h:72
@ controlCommandPortamentoTime
Definition midi.h:58
@ controlCommandGeneralPurpose2
Definition midi.h:70
@ controlCommandSoundController6
Definition midi.h:188
@ controlCommandReleaseTime
Definition midi.h:125
@ controlCommandOmniModeOn
Definition midi.h:178
@ controlCommandUndefined62
Definition midi.h:115
@ controlCommandExpressionLSB
Definition midi.h:96
@ controlCommandFlange
Definition midi.h:131
@ controlCommandHarmContent
Definition midi.h:182
@ controlCommandChorusDepth
Definition midi.h:146
uint32_t DWORD
Definition midi.h:588
int midiTrackIncTime(MidiFile *pMF, int iTrack, int iDeltaTime, int bOverridePPQN)
Definition midi.c:708
int muGetDrumName(char *pName, int iInstr)
Definition midi.c:1520
union _MidiMessagePayload::_MsgData::_MetaEvent::_Data Data
MidiMessage iLastMsgType
Definition midi.h:682
MidiMessage iImpliedMsg
Definition midi.h:612
union _MidiMessagePayload::_MsgData MsgData
MidiMessage iType
Definition midi.h:605
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_Tempo Tempo
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_KeySig KeySig
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_SMPTE SMPTE
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_Sequencer Sequencer
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_Text Text
struct _MidiMessagePayload::_MsgData::_MetaEvent::_Data::_TimeSig TimeSig
struct _MidiMessagePayload::_MsgData::_NoteOff NoteOff
struct _MidiMessagePayload::_MsgData::_SysEx SysEx
struct _MidiMessagePayload::_MsgData::_NoteParameter NoteParameter
struct _MidiMessagePayload::_MsgData::_MetaEvent MetaEvent
struct _MidiMessagePayload::_MsgData::_NoteKeyPressure NoteKeyPressure
struct _MidiMessagePayload::_MsgData::_PitchWheel PitchWheel
struct _MidiMessagePayload::_MsgData::_ChangeProgram ChangeProgram
struct _MidiMessagePayload::_MsgData::_ChangePressure ChangePressure
struct _MidiMessagePayload::_MsgData::_NoteOn NoteOn