2012-05-26 14:49:10 +02:00
|
|
|
/*
|
|
|
|
Copyright (C) 2003-2008 Fons Adriaensen <fons@kokkinizita.net>
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __MODEL_H
|
|
|
|
#define __MODEL_H
|
|
|
|
|
|
|
|
#include "messages.h"
|
|
|
|
#include "addsynth.h"
|
|
|
|
#include "rankwave.h"
|
|
|
|
#include "global.h"
|
|
|
|
|
|
|
|
class Aeolus;
|
|
|
|
|
|
|
|
class Asect
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
Asect (void) { *_label = 0; }
|
|
|
|
|
|
|
|
char _label[64];
|
|
|
|
};
|
|
|
|
|
|
|
|
class Rank
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
int _count;
|
|
|
|
Addsynth* _sdef;
|
|
|
|
Rankwave* _wave;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Divis
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
2020-05-26 15:54:26 +02:00
|
|
|
enum {
|
2012-05-26 14:49:10 +02:00
|
|
|
HAS_SWELL = 1, HAS_TREM = 2, NRANK = 32
|
2020-05-26 15:54:26 +02:00
|
|
|
};
|
|
|
|
enum {
|
2012-05-26 14:49:10 +02:00
|
|
|
SWELL, TFREQ, TMODD, NPARAM
|
2020-05-26 15:54:26 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
Divis();
|
|
|
|
|
2012-05-26 14:49:10 +02:00
|
|
|
char _label[16];
|
|
|
|
int _flags;
|
|
|
|
int _dmask;
|
|
|
|
int _nrank;
|
|
|
|
int _asect;
|
|
|
|
int _keybd;
|
2013-04-22 17:17:19 +02:00
|
|
|
SyntiParameter _param[NPARAM];
|
2012-05-26 14:49:10 +02:00
|
|
|
Rank _ranks[NRANK];
|
|
|
|
};
|
|
|
|
|
|
|
|
class Keybd
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum {
|
|
|
|
IS_PEDAL = 256
|
|
|
|
};
|
|
|
|
|
|
|
|
Keybd ();
|
|
|
|
|
|
|
|
char _label[16];
|
|
|
|
int _flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Ifelm
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum {
|
|
|
|
DIVRANK, KBDRANK, COUPLER, TREMUL
|
|
|
|
};
|
|
|
|
|
2013-04-29 15:31:22 +02:00
|
|
|
Ifelm ();
|
2012-05-26 14:49:10 +02:00
|
|
|
|
|
|
|
char _label[32];
|
|
|
|
char _mnemo[8];
|
|
|
|
int _type;
|
|
|
|
int _keybd;
|
|
|
|
int _state;
|
|
|
|
uint32_t _action0;
|
|
|
|
uint32_t _action1;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Group
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum {
|
|
|
|
NIFELM = 32
|
|
|
|
};
|
|
|
|
|
|
|
|
Group();
|
|
|
|
|
|
|
|
char _label[16];
|
|
|
|
int _nifelm;
|
|
|
|
Ifelm _ifelms[NIFELM];
|
|
|
|
};
|
|
|
|
|
|
|
|
class Chconf
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
Chconf () { memset(_bits, 0, 16 * sizeof(uint16_t)); }
|
|
|
|
|
|
|
|
uint16_t _bits[16];
|
|
|
|
};
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
// Preset
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
class Preset
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
|
|
Preset () { memset(_bits, 0, NGROUP * sizeof(uint32_t)); }
|
|
|
|
|
|
|
|
uint32_t _bits[NGROUP];
|
|
|
|
};
|
|
|
|
|
|
|
|
//---------------------------------------------------------
|
|
|
|
// Model
|
|
|
|
//---------------------------------------------------------
|
|
|
|
|
|
|
|
class Model
|
|
|
|
{
|
|
|
|
Aeolus* _aeolus;
|
|
|
|
uint16_t* _midimap;
|
|
|
|
const char* _stops;
|
|
|
|
char _instr[1024];
|
|
|
|
const char* _waves;
|
|
|
|
bool _ready;
|
2020-05-26 15:54:26 +02:00
|
|
|
|
2012-05-26 14:49:10 +02:00
|
|
|
Asect _asect[NASECT];
|
|
|
|
Keybd _keybd[NKEYBD];
|
|
|
|
Divis _divis[NDIVIS];
|
|
|
|
Group _group[NGROUP];
|
2020-05-26 15:54:26 +02:00
|
|
|
|
2012-05-26 14:49:10 +02:00
|
|
|
int _nasect;
|
|
|
|
int _ndivis;
|
|
|
|
int _nkeybd;
|
|
|
|
int _ngroup;
|
|
|
|
float _fbase;
|
|
|
|
int _itemp;
|
|
|
|
int _count;
|
|
|
|
int _bank;
|
|
|
|
int _pres;
|
|
|
|
int _client;
|
|
|
|
int _portid;
|
|
|
|
int _sc_cmode; // stop control command mode
|
|
|
|
int _sc_group; // stop control group number
|
|
|
|
Chconf _chconf[8];
|
|
|
|
Preset* _preset[NBANK][NPRES];
|
2020-05-26 15:54:26 +02:00
|
|
|
|
2012-05-26 14:49:10 +02:00
|
|
|
void init_audio();
|
|
|
|
void init_iface();
|
|
|
|
void init_ranks(int comm);
|
|
|
|
void proc_rank(int g, int i, int comm);
|
|
|
|
void set_mconf(int i, uint16_t* d);
|
|
|
|
void get_state(uint32_t* bits);
|
|
|
|
void set_state(int bank, int pres);
|
|
|
|
void midi_off(int mask);
|
|
|
|
void retune(float freq, int temp);
|
|
|
|
void recalc(int g, int i);
|
|
|
|
void save();
|
|
|
|
Rank* find_rank(int g, int i);
|
|
|
|
int read_instr();
|
|
|
|
int write_instr();
|
|
|
|
int get_preset(int bank, int pres, uint32_t* bits);
|
|
|
|
void set_preset(int bank, int pres, uint32_t* bits);
|
|
|
|
void ins_preset(int bank, int pres, uint32_t* bits);
|
|
|
|
void del_preset(int bank, int pres);
|
|
|
|
int read_presets();
|
|
|
|
bool writePresets();
|
|
|
|
|
2020-05-26 15:54:26 +02:00
|
|
|
public:
|
2012-05-26 14:49:10 +02:00
|
|
|
Model (Aeolus* aeolus, uint16_t* midimap, const char* stops,const char* instr, const char* waves);
|
2020-05-26 15:54:26 +02:00
|
|
|
|
2012-05-26 14:49:10 +02:00
|
|
|
virtual ~Model() {}
|
|
|
|
|
|
|
|
void set_ifelm(int g, int i, int m);
|
|
|
|
void clr_group(int g);
|
2020-05-26 15:54:26 +02:00
|
|
|
void init();
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|