Skip to content

Commit

Permalink
fixes for midi rendering, staff text & aeolus
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Apr 25, 2013
1 parent 8899ed8 commit e607497
Show file tree
Hide file tree
Showing 23 changed files with 385 additions and 341 deletions.
10 changes: 8 additions & 2 deletions aeolus/aeolus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,13 @@ void Aeolus::play(const PlayEvent& event)
key_on(n, m);
}
}
else if (type == ME_NOTEOFF) {
int n = event.dataA();
if ((n >= 36) && (n <= 96)) {
n -= 36;
key_off(n, m);
}
}
else if (type == ME_CONTROLLER) {
int p = event.dataA();
int v = event.dataB();
Expand All @@ -143,9 +150,8 @@ void Aeolus::play(const PlayEvent& event)
// Set mode or clear group.
_sc_cmode = (v >> 4) & 3;
_sc_group = v & 7;
if (_sc_cmode == 0) {
if (_sc_cmode == 0)
model->clr_group(_sc_group);
}
}
else if (_sc_cmode) {
// Set, reset or toggle stop.
Expand Down
9 changes: 5 additions & 4 deletions aeolus/audio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ void Aeolus::process(unsigned nframes, float* out, float*, float*)
_divisp[d]->update (n, m);
}
}

for (int d = 0; d < _ndivis; d++)
_divisp[d]->update(_keymap);

Expand Down Expand Up @@ -212,7 +213,7 @@ void Aeolus::cond_key_off (int m, int b)
for (int i = 0; i < NNOTES; i++, p++) {
if (*p & m) {
*p &= ~b;
*p |= 128;
*p |= 0x80;
}
}
}
Expand All @@ -223,19 +224,19 @@ void Aeolus::cond_key_on (int m, int b)

for (int i = 0; i < NNOTES; i++, p++) {
if (*p & m)
*p |= b | 128;
*p |= b | 0x80;
}
}

void Aeolus::key_off (int n, int b)
{
_keymap[n] &= ~b;
_keymap[n] |= 128;
_keymap[n] |= 0x80;
}

void Aeolus::key_on (int n, int b)
{
_keymap[n] |= b | 128;
_keymap[n] |= b | 0x80;
}


109 changes: 55 additions & 54 deletions aeolus/division.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,53 +109,51 @@ void Division::set_rank (int ind, Rankwave *W, int pan, int del)
}


void Division::update (int note, int mask)
{
int r;
Rankwave *W;

for (r = 0; r < _nrank; r++)
{
W = _ranks [r];
if (W->_cmask & 127)
{
if (mask & W->_cmask) W->note_on (note + 36);
else W->note_off (note + 36);
}
}
}
//---------------------------------------------------------
// update
//---------------------------------------------------------

void Division::update (int note, int mask)
{
for (int r = 0; r < _nrank; r++) {
Rankwave* W = _ranks [r];
if (W->_cmask & 0x7f) {
if (mask & W->_cmask)
W->note_on (note + 36);
else
W->note_off (note + 36);
}
}
}

void Division::update (unsigned char *keys)
{
int d, r, m, n, n0, n1;
unsigned char *k;
Rankwave *W;

for (r = 0; r < _nrank; r++)
{
W = _ranks [r];
if ((W->_cmask ^ W->_nmask) & 127)
{
m = W->_nmask & 127;
if (m)
{
n0 = W->n0 ();
n1 = W->n1 ();
k = keys;
d = n0 - 36;
if (d > 0) k += d;
for (n = n0; n <= n1; n++)
{
if (*k++ & m) W->note_on (n);
else W->note_off (n);
}
}
else W->all_off ();
}
W->_cmask = W->_nmask;
}
}
{
for (int r = 0; r < _nrank; r++) {
Rankwave* W = _ranks [r];

if ((W->_cmask ^ W->_nmask) & 0x7f) {
int m = W->_nmask & 127;
if (m) {
int n0 = W->n0 ();
int n1 = W->n1 ();
uchar* k = keys;
int d = n0 - 36;
if (d > 0)
k += d;
for (int n = n0; n <= n1; n++) {
if (*k++ & m)
W->note_on (n);
else
W->note_off (n);
}
}
else {
W->all_off ();
}
}
W->_cmask = W->_nmask;
}
}


void Division::set_div_mask (int bits)
Expand Down Expand Up @@ -189,18 +187,21 @@ void Division::clr_div_mask (int bits)


void Division::set_rank_mask (int ind, int bits)
{
Rankwave *W = _ranks [ind];
{
Rankwave *W = _ranks [ind];

if (bits == 128) bits |= _dmask;
W->_nmask |= bits;
}
if (bits == 128)
bits |= _dmask;
W->_nmask |= bits;
}


void Division::clr_rank_mask (int ind, int bits)
{
Rankwave *W = _ranks [ind];
{
Rankwave *W = _ranks [ind];

if (bits == 128)
bits |= _dmask;
W->_nmask &= ~bits;
}

if (bits == 128) bits |= _dmask;
W->_nmask &= ~bits;
}
37 changes: 6 additions & 31 deletions aeolus/model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,39 +297,10 @@ void Model::set_state(int bank, int pres)
s >>= 1;
}
}
//WS send_event (TO_IFACE, new M_ifc_preset (MT_IFC_PRRCL, bank, pres, _ngroup, d));
}
else {
//WS send_event (TO_IFACE, new M_ifc_preset (MT_IFC_PRRCL, bank, pres, 0, 0));
}
}


void Model::set_dipar (int /*s*/, int d, int p, float v)
{
SyntiParameter *P;
// union { uint32_t i; float f; } u;

P = _divis [d]._param + p;
if (v < P->min())
v = P->min();
if (v > P->max())
v = P->max();
P->set(v);
printf("Model::set_dipar\n");
#if 0
if (_qcomm->write_avail () >= 2)
{
u.f = v;
_qcomm->write (0, (17 << 24) | (d << 16) | (p << 8));
_qcomm->write (1, u.i);
_qcomm->write_commit (2);
//WS send_event (TO_IFACE, new M_ifc_dipar (s, d, p, v));
}
#endif
}


void Model::set_mconf (int /*i*/, uint16_t *d)
{
midi_off(127);
Expand All @@ -339,7 +310,6 @@ void Model::set_mconf (int /*i*/, uint16_t *d)
b |= a & 0x7700;
_midimap [j] = b;
}
//WS send_event (TO_IFACE, new M_ifc_chconf (MT_IFC_MCSET, i, d));
}


Expand Down Expand Up @@ -370,6 +340,7 @@ void Model::recalc (int g, int i)
proc_rank (g, i, MT_CALC_RANK);
}

#if 0
void Model::save ()
{
write_instr ();
Expand All @@ -381,6 +352,7 @@ void Model::save ()
proc_rank (g, i, MT_SAVE_RANK);
}
}
#endif

Rank *Model::find_rank (int g, int i)
{
Expand Down Expand Up @@ -946,10 +918,13 @@ int Model::read_presets()
f.close();
return 1;
}
// printf("==read_presets: chconf\n");
uchar* p = data;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 16; j++) {
_chconf [i]._bits [j] = RD2 (p);
int val = RD2(p);
// printf(" %d %d = %d\n", i, j, val);
_chconf [i]._bits [j] = val;
p += 2;
}
}
Expand Down
1 change: 0 additions & 1 deletion aeolus/model.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,6 @@ class Model
void init_iface();
void init_ranks(int comm);
void proc_rank(int g, int i, int comm);
void set_dipar(int s, int d, int p, float v);
void set_mconf(int i, uint16_t *d);
void get_state(uint32_t *bits);
void set_state(int bank, int pres);
Expand Down
57 changes: 30 additions & 27 deletions aeolus/rankwave.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,26 +81,40 @@ class Pipewave
static float *_att;
};

//---------------------------------------------------------
// Rankwave
//---------------------------------------------------------

class Rankwave
{
public:
{
Rankwave (const Rankwave&);
Rankwave& operator=(const Rankwave&);

Rankwave (int n0, int n1);
~Rankwave (void);
int _n0;
int _n1;
uint32_t _sbit;
Pipewave *_list;
Pipewave *_pipes;
bool _modif;

void note_on (int n)
{
if ((n < _n0) || (n > _n1)) return;
Pipewave *P = _pipes + (n - _n0);
P->_sbit = _sbit;
if (! (P->_sdel || P->_p_p || P->_p_r))
{
P->_sdel |= _sbit;
P->_link = _list;
_list = P;
}
}
public:

Rankwave (int n0, int n1);
~Rankwave ();

void note_on (int n) {
if ((n < _n0) || (n > _n1)) {
qDebug("Rankwave: bad key");
return;
}
Pipewave *P = _pipes + (n - _n0);
P->_sbit = _sbit;
if (! (P->_sdel || P->_p_p || P->_p_r)) {
P->_sdel |= _sbit;
P->_link = _list;
_list = P;
}
}

void note_off (int n)
{
Expand Down Expand Up @@ -128,17 +142,6 @@ class Rankwave
int _cmask; // used by division logic
int _nmask; // used by division logic

private:

Rankwave (const Rankwave&);
Rankwave& operator=(const Rankwave&);

int _n0;
int _n1;
uint32_t _sbit;
Pipewave *_list;
Pipewave *_pipes;
bool _modif;
};


Expand Down
1 change: 0 additions & 1 deletion libmscore/instrtemplate.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ class InstrumentTemplate {
bool useDrumset;
Drumset* drumset;

// bool useTablature;
Tablature* tablature;

QList<NamedEventList> midiActions;
Expand Down

0 comments on commit e607497

Please sign in to comment.