202 lines
4.4 KiB
C++
202 lines
4.4 KiB
C++
/*
|
|
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:
|
|
|
|
enum { HAS_SWELL = 1, HAS_TREM = 2, NRANK = 32 };
|
|
enum { SWELL, TFREQ, TMODD, NPARAM };
|
|
|
|
Divis();
|
|
|
|
char _label [16];
|
|
int _flags;
|
|
int _dmask;
|
|
int _nrank;
|
|
int _asect;
|
|
int _keybd;
|
|
SyntiParameter _param [NPARAM];
|
|
Rank _ranks [NRANK];
|
|
};
|
|
|
|
class Keybd
|
|
{
|
|
public:
|
|
|
|
enum { IS_PEDAL = 256 };
|
|
|
|
Keybd ();
|
|
|
|
char _label [16];
|
|
int _flags;
|
|
};
|
|
|
|
|
|
class Ifelm
|
|
{
|
|
public:
|
|
|
|
enum { DIVRANK, KBDRANK, COUPLER, TREMUL };
|
|
|
|
Ifelm ();
|
|
|
|
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;
|
|
|
|
Asect _asect [NASECT];
|
|
Keybd _keybd [NKEYBD];
|
|
Divis _divis [NDIVIS];
|
|
Group _group [NGROUP];
|
|
|
|
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];
|
|
|
|
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();
|
|
|
|
public:
|
|
Model (Aeolus* aeolus, uint16_t* midimap, const char* stops,
|
|
const char* instr, const char* waves);
|
|
|
|
virtual ~Model() {}
|
|
|
|
void set_ifelm (int g, int i, int m);
|
|
void clr_group (int g);
|
|
void init ();
|
|
};
|
|
|
|
#endif
|
|
|