You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MiniDexed/src/modarpeggiator/common/midiHandler.cpp

49 lines
1.2 KiB

10 months ago
#include "midiHandler.hpp"
#include <stdio.h>
MidiHandler::MidiHandler()
{
10 months ago
buffer.bufferedEvents = new MidiEvent[MIDI_BUFFER_SIZE];
buffer.bufferedMidiThroughEvents = new MidiEvent[MIDI_BUFFER_SIZE];
buffer.midiOutputBuffer = new MidiEvent[MIDI_BUFFER_SIZE];
10 months ago
emptyMidiBuffer();
}
MidiHandler::~MidiHandler()
{
10 months ago
delete buffer.bufferedEvents;
delete buffer.bufferedMidiThroughEvents;
delete buffer.midiOutputBuffer;
10 months ago
}
void MidiHandler::emptyMidiBuffer()
{
buffer.numBufferedEvents = 0;
buffer.numBufferedThroughEvents = 0;
}
void MidiHandler::appendMidiMessage(MidiEvent event)
{
buffer.bufferedEvents[buffer.numBufferedEvents] = event;
buffer.numBufferedEvents = (buffer.numBufferedEvents + 1) % buffer.maxBufferSize;
}
void MidiHandler::appendMidiThroughMessage(MidiEvent event)
{
buffer.bufferedMidiThroughEvents[buffer.numBufferedThroughEvents] = event;
buffer.numBufferedThroughEvents = (buffer.numBufferedThroughEvents + 1) % buffer.maxBufferSize;
}
void MidiHandler::mergeBuffers()
{
for (unsigned e = 0; e < buffer.numBufferedThroughEvents; e++) {
buffer.bufferedEvents[e + buffer.numBufferedEvents] = buffer.bufferedMidiThroughEvents[e];
}
}
struct MidiBuffer MidiHandler::getMidiBuffer()
{
mergeBuffers();
return buffer;
}