Swadge 2024 2.0.0
APIs to develop games for the Magfest Swadge
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
midiData.c File Reference

Macros

#define SECONDS_CONV(whole, microseconds)
 

Variables

const midiTimbre_t acousticGrandPianoTimbre
 
const midiTimbre_t squareWaveTimbre
 
const midiTimbre_t sineWaveTimbre
 
const midiTimbre_t triangleWaveTimbre
 
const midiTimbre_t sawtoothWaveTimbre
 
const midiTimbre_t noiseTimbre
 
const midiTimbre_t magfestWaveTimbre
 
const midiTimbre_t magstockWaveTimbre
 
const midiTimbre_t squareHitWaveTimbre
 
const midiTimbre_t noiseHitTimbre
 
const midiTimbre_t colossusTimbre
 
const midiTimbre_t magTimbre
 
const midiTimbre_t festTimbre
 
const midiTimbre_t wilhelmTimbre
 
const midiTimbre_t noriTimbre
 
const midiTimbre_t *const magfestTimbres []
 
const size_t magfestTimbreCount = ARRAY_SIZE(magfestTimbres)
 
const midiTimbre_t defaultDrumkitTimbre
 
const midiTimbre_t donutDrumkitTimbre
 
const midiTimbre_t mmx011Vibraphone
 
const midiTimbre_t mmx017Organ
 
const midiTimbre_t mmx024AcousticGuitar
 
const midiTimbre_t mmx029OverdrivenGuitar
 
const midiTimbre_t mmx030DistortedGuitar
 
const midiTimbre_t mmx036SlapBass
 
const midiTimbre_t mmx038SynthBass
 
const midiTimbre_t mmx048Strings
 
const midiTimbre_t mmx055OrchestraHit
 
const midiTimbre_t mmx062SynthBrass
 
const midiTimbre_t mmx080SquareWave
 
const midiTimbre_t mmx081SawWave
 
const midiTimbre_t mmx082SynthLead
 
const midiTimbre_t mmx083SynthLead2
 
const midiTimbre_t mmx119ReverseCymbal
 
const noteSampleMap_t mmxDrumSampleMap []
 
const midiTimbre_t mmxDrumkitTimbre
 
const midiTimbre_t *const mmxTimbres []
 
const uint8_t mmxTimbreMap []
 
const size_t mmxTimbreCount = sizeof(mmxTimbres) / sizeof(*mmxTimbres)
 

Macro Definition Documentation

◆ SECONDS_CONV

#define SECONDS_CONV ( whole,
microseconds )
Value:
((whole) * 16384 + ((int64_t)microseconds) * 16384 / 1000000)

Variable Documentation

◆ acousticGrandPianoTimbre

const midiTimbre_t acousticGrandPianoTimbre

◆ squareWaveTimbre

const midiTimbre_t squareWaveTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_SQUARE,
.envelope = {
.sustainVol = 1,
.sustainVolVel = 0x200,
},
.name = "Square Wave",
}
@ WAVE_SHAPE
Definition midiPlayer.h:140
@ TF_NONE
No flags.
Definition midiPlayer.h:151
@ SHAPE_SQUARE
A square wave.
Definition swSynth.h:69

◆ sineWaveTimbre

const midiTimbre_t sineWaveTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_SINE,
.envelope = {
.sustainVol = 1,
.sustainVolVel = 0x200,
},
.name = "Sine Wave",
}
@ SHAPE_SINE
A sine wave.
Definition swSynth.h:66

◆ triangleWaveTimbre

const midiTimbre_t triangleWaveTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_TRIANGLE,
.envelope = {
.sustainVol = 1,
.sustainVolVel = 0x200,
},
.name = "Triangle Wave",
}
@ SHAPE_TRIANGLE
A triangle wave.
Definition swSynth.h:68

◆ sawtoothWaveTimbre

const midiTimbre_t sawtoothWaveTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_SAWTOOTH,
.envelope = {
.sustainVol = 1,
.sustainVolVel = 0x200,
},
.name = "Sawtooth Wave",
}
@ SHAPE_SAWTOOTH
A sawtooth wave.
Definition swSynth.h:67

◆ noiseTimbre

const midiTimbre_t noiseTimbre
Initial value:
= {
.type = NOISE,
.flags = TF_NONE,
.envelope = {
.sustainVol = 1,
.sustainVolVel = 0x200,
},
.name = "Noise",
}
@ NOISE
Definition midiPlayer.h:139

◆ magfestWaveTimbre

const midiTimbre_t magfestWaveTimbre
Initial value:
= {
.type = WAVETABLE,
.flags = TF_NONE,
.waveIndex = 0,
.waveFunc = magfestWaveTableFunc,
.envelope = {
.attackTime = MS_TO_SAMPLES(8),
.attackTimeVel = -0x80,
.decayTime = MS_TO_SAMPLES(16),
.decayTimeVel = 0,
.sustainVol = 1,
.sustainVolVel = 0x200,
.releaseTime = MS_TO_SAMPLES(320),
.releaseTimeVel = 0x800,
},
.effects = {
.chorus = 0,
},
.name = "MAGFest Wave",
}
@ WAVETABLE
Samples are generated by sampling a particular wave shape.
Definition midiPlayer.h:137
#define MS_TO_SAMPLES(ms)
Calculate the number of DAC samples in the given number of milliseconds.
Definition midiPlayer.h:106
int8_t magfestWaveTableFunc(uint16_t idx, void *data)
Definition waveTables.c:1895

◆ magstockWaveTimbre

const midiTimbre_t magstockWaveTimbre
Initial value:
= {
.type = WAVETABLE,
.flags = TF_NONE,
.waveIndex = 1,
.waveFunc = magfestWaveTableFunc,
.envelope = {
.attackTime = MS_TO_SAMPLES(8),
.attackTimeVel = -0x80,
.decayTime = MS_TO_SAMPLES(16),
.decayTimeVel = 0,
.sustainVol = 1,
.sustainVolVel = 0x200,
.releaseTime = MS_TO_SAMPLES(320),
.releaseTimeVel = 0x800,
},
.effects = {
.chorus = 0,
},
.name = "MAGStock Wave",
}

◆ squareHitWaveTimbre

const midiTimbre_t squareHitWaveTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_SQUARE,
.envelope = {
.attackTime = 0,
.attackTimeVel = 0,
.decayTime = MS_TO_SAMPLES(125),
.decayTimeVel = 0,
.sustainVol = 0,
.sustainVolVel = 0,
.releaseTime = 0,
.releaseTimeVel = 0,
},
.name = "Square Hit",
}

◆ noiseHitTimbre

const midiTimbre_t noiseHitTimbre
Initial value:
= {
.type = WAVE_SHAPE,
.flags = TF_NONE,
.shape = SHAPE_NOISE,
.envelope = {
.attackTime = 0,
.attackTimeVel = 0,
.decayTime = MS_TO_SAMPLES(125),
.decayTimeVel = 0,
.sustainVol = 0,
.sustainVolVel = 0,
.releaseTime = 0,
.releaseTimeVel = 0,
},
.name = "Noise Hit",
}
@ SHAPE_NOISE
Random noise from a linear feedback shift register.
Definition swSynth.h:70

◆ colossusTimbre

const midiTimbre_t colossusTimbre
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = COLOSSUS_BIN,
.loop = 1,
.rate = 8192,
.baseNote = FREQ_C_SHARP_5,
.tune = 0,
},
.name = "Colossus Roar",
}
#define FREQ_C_SHARP_5
Definition midiNoteFreqs.h:91
@ SAMPLE
Definition midiPlayer.h:138

◆ magTimbre

const midiTimbre_t magTimbre
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = DONUT_MAG_BIN,
.loop = 1,
.rate = 8192,
.baseNote = FREQ_A4,
.tune = 0,
},
.name = "MAG",
}
#define FREQ_A4
Definition midiNoteFreqs.h:75

◆ festTimbre

const midiTimbre_t festTimbre
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = DONUT_FEST_BIN,
.loop = 1,
.rate = 8192,
.baseNote = FREQ_A4,
.tune = 0,
},
.name = "FEST",
}

◆ wilhelmTimbre

const midiTimbre_t wilhelmTimbre
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = WILHELM_BIN,
.loop = 0,
.rate = 8192,
.baseNote = FREQ_A4,
.tune = 0,
},
.name = "Wilhelm",
}

◆ noriTimbre

const midiTimbre_t noriTimbre
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = NORI_2_BIN,
.loop = 0,
.rate = 8192,
.baseNote = FREQ_A4,
.tune = 0,
},
.name = "Nori",
}

◆ magfestTimbres

const midiTimbre_t* const magfestTimbres[]
Initial value:
= {
}
const midiTimbre_t magfestWaveTimbre
Definition midiData.c:98
const midiTimbre_t sawtoothWaveTimbre
Definition midiData.c:77
const midiTimbre_t triangleWaveTimbre
Definition midiData.c:66
const midiTimbre_t magTimbre
Definition midiData.c:193
const midiTimbre_t colossusTimbre
Definition midiData.c:178
const midiTimbre_t noiseTimbre
Definition midiData.c:88
const midiTimbre_t noriTimbre
Definition midiData.c:238
const midiTimbre_t squareWaveTimbre
Definition midiData.c:44
const midiTimbre_t squareHitWaveTimbre
Definition midiData.c:144
const midiTimbre_t wilhelmTimbre
Definition midiData.c:223
const midiTimbre_t festTimbre
Definition midiData.c:208
const midiTimbre_t noiseHitTimbre
Definition midiData.c:161
const midiTimbre_t sineWaveTimbre
Definition midiData.c:55
const midiTimbre_t magstockWaveTimbre
Definition midiData.c:121

◆ magfestTimbreCount

const size_t magfestTimbreCount = ARRAY_SIZE(magfestTimbres)

◆ defaultDrumkitTimbre

const midiTimbre_t defaultDrumkitTimbre
Initial value:
= {
.type = PLAY_FUNC,
.flags = TF_PERCUSSION,
.playFunc = {
.data = NULL,
},
.envelope = {
.sustainVol = 0,
.decayTime = UINT32_MAX,
},
.name = "Swadge Drums 0",
}
int8_t defaultDrumkitFunc(percussionNote_t drum, uint32_t idx, bool *done, uint32_t scratch[4], void *data)
Produces sounds for a standard drumkit according to the General MIDI standard.
Definition drums.c:265
@ PLAY_FUNC
Definition midiPlayer.h:142
@ TF_PERCUSSION
This timbre plays percussion sounds (percussionNote_t) rather than melodic notes.
Definition midiPlayer.h:153

◆ donutDrumkitTimbre

const midiTimbre_t donutDrumkitTimbre
Initial value:
= {
.type = PLAY_FUNC,
.flags = TF_PERCUSSION,
.playFunc = {
.data = NULL,
},
.envelope = {
.sustainVol = 127,
},
.name = "Donut Swadge Drums",
}
int8_t donutDrumkitFunc(percussionNote_t drum, uint32_t idx, bool *done, uint32_t scratch[4], void *data)
Produces sounds for the drumkit that was included on the King Donut synth swadge.
Definition drums.c:620

◆ mmx011Vibraphone

const midiTimbre_t mmx011Vibraphone
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_011_VIBRAPHONE_BIN,
.loop = 0,
.loopStart = 64,
.loopEnd = 96,
.rate = 28928,
.baseNote = FREQ_A_SHARP_5,
.tune = 50,
},
.name = "MMX Bell Synth",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.releaseTime = SECONDS_CONV(0, 675300),
.sustainVol = 127,
},
}
#define SECONDS_CONV(whole, microseconds)
Definition midiData.c:290
#define FREQ_A_SHARP_5
Definition midiNoteFreqs.h:88

◆ mmx017Organ

const midiTimbre_t mmx017Organ
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_017_ORGAN_BIN,
.loop = 0,
.loopStart = 771,
.loopEnd = 898,
.rate = 14336,
.baseNote = FREQ_A_SHARP_4,
.tune = 65,
},
.name = "MMX Organ",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
.releaseTime = 8192,
},
}
#define FREQ_A_SHARP_4
Definition midiNoteFreqs.h:76

◆ mmx024AcousticGuitar

const midiTimbre_t mmx024AcousticGuitar
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_024_ACOUSTIC_GUITAR_BIN,
.loop = 0,
.loopStart = 559,
.loopEnd = 671,
.rate = 37760,
.baseNote = FREQ_F4,
.tune = 57,
},
.name = "MMX Acoustic Guitar",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.decayTime = SECONDS_CONV(2, 70530),
.sustainVol = 1,
.releaseTime = SECONDS_CONV(1, 35530),
},
}
#define FREQ_F4
Definition midiNoteFreqs.h:83

◆ mmx029OverdrivenGuitar

const midiTimbre_t mmx029OverdrivenGuitar
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_029_OVERDRIVEN_GUITAR_BIN,
.loop = 0,
.loopStart = 503,
.loopEnd = 599,
.rate = 25728,
.baseNote = FREQ_C_SHARP_4,
.tune = 56,
},
.name = "MMX Overdrive Guitar",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_C_SHARP_4
Definition midiNoteFreqs.h:79

◆ mmx030DistortedGuitar

const midiTimbre_t mmx030DistortedGuitar
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_030_DISTORTION_GUITAR_BIN,
.loop = 0,
.loopStart = 6491,
.loopEnd = 8085,
.rate = 23168,
.baseNote = FREQ_E2,
.tune = 49,
},
.name = "MMX Distortion Guitar",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_E2
Definition midiNoteFreqs.h:58

◆ mmx036SlapBass

const midiTimbre_t mmx036SlapBass
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_036_SLAP_BASS_BIN,
.loop = 0,
.loopStart = 1445,
.loopEnd = 3120,
.rate = 13440,
.baseNote = FREQ_B2,
.tune = 45,
},
.name = "MMX Slap Bass",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_B2
Definition midiNoteFreqs.h:53

◆ mmx038SynthBass

const midiTimbre_t mmx038SynthBass
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_038_SYNTH_BASS_BIN,
.loop = 0,
.loopStart = 1247,
.loopEnd = 1391,
.rate = 8960,
.baseNote = FREQ_C2,
.tune = 83,
},
.name = "MMX Synth Bass",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
.sustainVolVel = 0,
}
}
#define FREQ_C2
Definition midiNoteFreqs.h:54

◆ mmx048Strings

const midiTimbre_t mmx048Strings
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_048_STRINGS_BIN,
.loop = 0,
.loopStart = 1409,
.loopEnd = 5411,
.rate = 30720,
.baseNote = FREQ_E4,
.tune = 55,
},
.name = "MMX Strings",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_E4
Definition midiNoteFreqs.h:82

◆ mmx055OrchestraHit

const midiTimbre_t mmx055OrchestraHit
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_055_ORCHESTRA_HIT_BIN,
.loop = 1,
.rate = 16512,
.baseNote = FREQ_C_SHARP_3,
.tune = 55,
.loopStart = 0,
.loopEnd = 0,
},
.name = "MMX Orchestra Hit",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_C_SHARP_3
Definition midiNoteFreqs.h:67

◆ mmx062SynthBrass

const midiTimbre_t mmx062SynthBrass
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_062_SYNTH_BRASS_BIN,
.loop = 0,
.loopStart = 4479,
.loopEnd = 4543,
.rate = 28928,
.baseNote = FREQ_A_SHARP_3,
.tune = 50,
},
.name = "MMX Synth Brass",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_A_SHARP_3
Definition midiNoteFreqs.h:64

◆ mmx080SquareWave

const midiTimbre_t mmx080SquareWave
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_080_SQUARE_WAVE_BIN,
.loop = 0,
.loopStart = 17,
.loopEnd = 80,
.rate = 28928,
.baseNote = FREQ_A_SHARP_5,
.tune = 50,
},
.name = "MMX Square Wave",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}

◆ mmx081SawWave

const midiTimbre_t mmx081SawWave
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_081_SAWTOOTH_WAVE_BIN,
.loop = 0,
.loopStart = 235,
.loopEnd = 5857,
.rate = 13696,
.baseNote = FREQ_G3,
.tune = 50,
},
.name = "MMX Saw Wave",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_G3
Definition midiNoteFreqs.h:73

◆ mmx082SynthLead

const midiTimbre_t mmx082SynthLead
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_082_SYNTH_LEAD_BIN,
.loop = 0,
.loopStart = 47,
.loopEnd = 111,
.rate = 87040,
.baseNote = FREQ_F5,
.tune = 45,
},
.name = "MMX Synth Lead",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}
#define FREQ_F5
Definition midiNoteFreqs.h:95

◆ mmx083SynthLead2

const midiTimbre_t mmx083SynthLead2
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = SF_MMX_083_SYNTH_LEAD_2_BIN,
.loop = 0,
.loopStart = 47,
.loopEnd = 79,
.rate = 12032,
.baseNote = FREQ_G3,
.tune = 69,
},
.name = "MMX Synth Lead 2",
.envelope = {
.attackTime = SECONDS_CONV(0, 1000),
.sustainVol = 127,
},
}

◆ mmx119ReverseCymbal

const midiTimbre_t mmx119ReverseCymbal
Initial value:
= {
.type = SAMPLE,
.flags = TF_NONE,
.sample = {
.fIdx = CRASHCYMBAL_BIN,
.loop = 0,
.loopStart = 2095,
.loopEnd = 4575,
.rate = 16640,
.baseNote = FREQ_C3,
},
.name = "MMX Reverse Cymbal",
.envelope = {
.attackTime = SECONDS_CONV(1, 380320u),
.sustainVol = 1,
},
}
#define FREQ_C3
Definition midiNoteFreqs.h:66

◆ mmxDrumSampleMap

const noteSampleMap_t mmxDrumSampleMap[]

◆ mmxDrumkitTimbre

const midiTimbre_t mmxDrumkitTimbre
Initial value:
= {
.type = MULTI_SAMPLE,
.flags = TF_PERCUSSION,
.multiSample = {
},
.envelope = {
.attackTime = 0,
.sustainVol = 127,
.releaseTime = 0,
},
.name = "MMX Drumkit",
}
#define ARRAY_SIZE(arr)
Definition macros.h:66
const noteSampleMap_t mmxDrumSampleMap[]
Definition midiData.c:601
@ MULTI_SAMPLE
Definition midiPlayer.h:141

◆ mmxTimbres

const midiTimbre_t* const mmxTimbres[]
Initial value:
= {
}
const midiTimbre_t mmx030DistortedGuitar
Definition midiData.c:381
const midiTimbre_t mmx048Strings
Definition midiData.c:441
const midiTimbre_t mmx080SquareWave
Definition midiData.c:502
const midiTimbre_t mmx055OrchestraHit
Definition midiData.c:461
const midiTimbre_t mmx081SawWave
Definition midiData.c:522
const midiTimbre_t mmx119ReverseCymbal
Definition midiData.c:581
const midiTimbre_t mmx036SlapBass
Definition midiData.c:401
const midiTimbre_t mmx083SynthLead2
Definition midiData.c:561
const midiTimbre_t mmx011Vibraphone
Definition midiData.c:293
const midiTimbre_t mmx024AcousticGuitar
Definition midiData.c:339
const midiTimbre_t mmx062SynthBrass
Definition midiData.c:482
const midiTimbre_t mmx082SynthLead
Definition midiData.c:541
const midiTimbre_t mmx038SynthBass
Definition midiData.c:420
const midiTimbre_t mmx017Organ
Definition midiData.c:315
const midiTimbre_t mmx029OverdrivenGuitar
Definition midiData.c:362

◆ mmxTimbreMap

const uint8_t mmxTimbreMap[]
Initial value:
= {
11, 17, 24, 29, 30, 36, 38, 48, 50, 62, 80, 81, 82, 83, 119,
}

◆ mmxTimbreCount

const size_t mmxTimbreCount = sizeof(mmxTimbres) / sizeof(*mmxTimbres)