aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_private.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi_private.hpp')
-rw-r--r--src/adlmidi_private.hpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp
index 0e63b5a..fda629d 100644
--- a/src/adlmidi_private.hpp
+++ b/src/adlmidi_private.hpp
@@ -334,7 +334,7 @@ class MIDIplay
{
friend void adl_reset(struct ADL_MIDIPlayer*);
public:
- MIDIplay(unsigned long sampleRate = 22050);
+ explicit MIDIplay(unsigned long sampleRate = 22050);
~MIDIplay()
{}
@@ -496,11 +496,14 @@ public:
// Persistent settings for each MIDI channel
struct MIDIchannel
{
- uint16_t portamento;
uint8_t bank_lsb, bank_msb;
uint8_t patch;
uint8_t volume, expression;
uint8_t panning, vibrato, aftertouch, sustain;
+ uint16_t portamento;
+ bool portamentoEnable;
+ int8_t portamentoSource; // note number or -1
+ double portamentoRate;
//! Per note Aftertouch values
uint8_t noteAftertouch[128];
//! Is note aftertouch has any non-zero value
@@ -524,8 +527,11 @@ public:
// Note vibrato (a part of Note Aftertouch feature)
uint8_t vibrato;
// Tone selected on noteon:
- int16_t tone;
- char ____padding2[4];
+ int16_t noteTone;
+ // Current tone (!= noteTone if gliding note)
+ double currentTone;
+ // Gliding rate
+ double glideRate;
// Patch selected on noteon; index to bank.ins[]
size_t midiins;
// Patch selected
@@ -604,6 +610,7 @@ public:
}
};
char ____padding2[5];
+ unsigned gliding_note_count;
NoteInfo activenotes[128];
struct activenoteiterator
@@ -717,6 +724,9 @@ public:
vibdelay = 0;
panning = OPL_PANNING_BOTH;
portamento = 0;
+ portamentoEnable = false;
+ portamentoSource = -1;
+ portamentoRate = HUGE_VAL;
brightness = 127;
}
bool hasVibrato()
@@ -731,6 +741,7 @@ public:
MIDIchannel()
{
activenotes_clear();
+ gliding_note_count = 0;
reset();
}
};
@@ -987,8 +998,10 @@ private:
//! Counter of arpeggio processing
size_t m_arpeggioCounter;
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
//! Audio tick counter
uint32_t m_audioTickCounter;
+#endif
#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER
std::vector<std::vector<uint8_t> > TrackData;
@@ -1187,8 +1200,10 @@ public:
void realTime_panic();
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
// Audio rate tick handler
void AudioTick(uint32_t chipId, uint32_t rate);
+#endif
private:
enum
@@ -1228,12 +1243,13 @@ private:
void Panic();
void KillSustainingNotes(int32_t MidCh = -1, int32_t this_adlchn = -1);
void SetRPN(unsigned MidCh, unsigned value, bool MSB);
- //void UpdatePortamento(unsigned MidCh)
+ void UpdatePortamento(unsigned MidCh);
void NoteUpdate_All(uint16_t MidCh, unsigned props_mask);
void NoteOff(uint16_t MidCh, uint8_t note);
void UpdateVibrato(double amount);
void UpdateArpeggio(double /*amount*/);
+ void UpdateGlide(double amount);
public:
uint64_t ChooseDevice(const std::string &name);
@@ -1258,7 +1274,9 @@ struct FourChars
};
*/
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
extern void adl_audioTickHandler(void *instance, uint32_t chipId, uint32_t rate);
+#endif
extern int adlRefreshNumCards(ADL_MIDIPlayer *device);