/src/Sequencer.cpp
#include <stdlib.h>
#include <stdio.h>
#include "Sequencer.h"
Sequencer::Sequencer() {
this->slices = 0;
this->beats_per_measure = 4;
this->slices_per_beat = 4;
this->realloc();
}
Sequencer::Sequencer(int beats_per_measure) {
this->slices = 0;
this->beats_per_measure = beats_per_measure;
this->slices_per_beat = 4;
this->realloc();
}
Sequencer::Sequencer(int beats_per_measure, int slices_per_beat) {
this->slices = 0;
this->beats_per_measure = beats_per_measure;
this->slices_per_beat = slices_per_beat;
this->realloc();
}
Sequencer::~Sequencer(void) {
if (this->slices != 0)
free(this->slices);
}
void Sequencer::realloc() {
if (this->slices != 0)
free(this->slices);
this->slices = (unsigned int *) malloc(sizeof(unsigned int) * this->beats_per_measure * this->slices_per_beat);
if (slices == 0) {
perror("allocating slices");
exit(1);
}
this->clearAll();
}
void Sequencer::set(int slice, unsigned int channel) {
this->slices[slice] |= 1 << channel;
}
unsigned int Sequencer::get(int slice) {
return this->slices[slice];
}
void Sequencer::clear(int slice, unsigned int channel) {
this->slices[slice] &= ~(1 << channel);
}
void Sequencer::clearChannel(unsigned int channel) {
for (int i = 0; i < this->beats_per_measure * this->slices_per_beat; i++)
this->clear(i, channel);
}
void Sequencer::clearAll() {
for (int i = 0; i < this->beats_per_measure * this->slices_per_beat; i++)
this->slices[i] = 0;
}