Subversion Repositories svn.mios32

Rev

Rev 1408 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1398 tk 1
/* -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*- */
2
// $Id: MbCvMod.h 1960 2014-02-09 20:21:24Z tk $
3
/*
4
 * MIDIbox CV Modulation Matrix
5
 *
6
 * ==========================================================================
7
 *
8
 *  Copyright (C) 2010 Thorsten Klose (tk@midibox.org)
9
 *  Licensed for personal non-commercial use only.
10
 *  All other rights reserved.
11
 *
12
 * ==========================================================================
13
 */
14
 
15
#ifndef _MB_CV_MOD_H
16
#define _MB_CV_MOD_H
17
 
18
#include <mios32.h>
19
#include "MbCvStructs.h"
20
 
21
 
22
// number of MOD nodes
23
#define MBCV_NUM_MOD 4
24
 
25
// Modulation source assignments
1960 tk 26
#define MBCV_MOD_SRC_NONE      0
27
#define MBCV_MOD_SRC_ENV1      1
28
#define MBCV_MOD_SRC_ENV2      2
29
#define MBCV_MOD_SRC_LFO1      3
30
#define MBCV_MOD_SRC_LFO2      4
31
#define MBCV_MOD_SRC_MOD1      5
32
#define MBCV_MOD_SRC_MOD2      6
33
#define MBCV_MOD_SRC_MOD3      7
34
#define MBCV_MOD_SRC_MOD4      8
35
#define MBCV_MOD_SRC_KEY       9
36
#define MBCV_MOD_SRC_VEL      10
37
#define MBCV_MOD_SRC_MDW      11
38
#define MBCV_MOD_SRC_PBN      12
39
#define MBCV_MOD_SRC_ATH      13
40
#define MBCV_MOD_SRC_KNOB1    14
41
#define MBCV_MOD_SRC_KNOB2    15
42
#define MBCV_MOD_SRC_KNOB3    16
43
#define MBCV_MOD_SRC_KNOB4    17
44
#define MBCV_MOD_SRC_KNOB5    18
45
#define MBCV_MOD_SRC_KNOB6    19
46
#define MBCV_MOD_SRC_KNOB7    20
47
#define MBCV_MOD_SRC_KNOB8    21
48
#define MBCV_MOD_SRC_AIN1     22
49
#define MBCV_MOD_SRC_AIN2     23
50
#define MBCV_MOD_SRC_AIN3     24
51
#define MBCV_MOD_SRC_AIN4     25
52
#define MBCV_MOD_SRC_AIN5     26
53
#define MBCV_MOD_SRC_AIN6     27
54
#define MBCV_MOD_SRC_AIN7     28
55
#define MBCV_MOD_SRC_AIN8     29
56
#define MBCV_MOD_SRC_SEQ_ENVMOD 30
57
#define MBCV_MOD_SRC_SEQ_ACCENT 31
1398 tk 58
 
1960 tk 59
#define MBCV_NUM_MOD_SRC      32
1398 tk 60
 
61
 
1960 tk 62
// Modulation Operators
63
#define MBCV_MOD_OP_NONE       0
64
#define MBCV_MOD_OP_SRC1_ONLY  1
65
#define MBCV_MOD_OP_SRC2_ONLY  2
66
#define MBCV_MOD_OP_PLUS       3
67
#define MBCV_MOD_OP_MINUS      4
68
#define MBCV_MOD_OP_MULTIPLY   5
69
#define MBCV_MOD_OP_XOR        6
70
#define MBCV_MOD_OP_OR         7
71
#define MBCV_MOD_OP_AND        8
72
#define MBCV_MOD_OP_MIN        9
73
#define MBCV_MOD_OP_MAX        10
74
#define MBCV_MOD_OP_LT         11
75
#define MBCV_MOD_OP_GT         12
76
#define MBCV_MOD_OP_EQ         13
77
#define MBCV_MOD_OP_S_AND_H    14
78
#define MBCV_MOD_OP_FTS        15
79
 
80
#define MBCV_NUM_MOD_OP        16
81
 
82
 
1398 tk 83
// Modulation destination assignments
1960 tk 84
#define MBCV_MOD_DST_NONE      0
85
#define MBCV_MOD_DST_CV        1
86
#define MBCV_MOD_DST_LFO1_A    2
87
#define MBCV_MOD_DST_LFO2_A    3
88
#define MBCV_MOD_DST_LFO1_R    4
89
#define MBCV_MOD_DST_LFO2_R    5
90
#define MBCV_MOD_DST_ENV1_A    6
91
#define MBCV_MOD_DST_ENV2_A    7
92
#define MBCV_MOD_DST_ENV1_R    8
93
#define MBCV_MOD_DST_ENV2_R    9
1398 tk 94
// maybe we should also control the ENV2 step? Too complicated?
95
 
1960 tk 96
#define MBCV_NUM_MOD_DST       10
1398 tk 97
 
98
 
99
class MbCvMod
100
{
101
public:
102
 
103
    // Constructor
104
    MbCvMod();
105
 
106
    // Destructor
107
    ~MbCvMod();
108
 
109
    // MOD init function
110
    void init(u8 _modNum);
111
 
112
    // Modulation Matrix handler
113
    void tick(void);
114
 
115
    // modulation parmeters
116
    typedef struct modPatchT {
117
        s8 depth;
1960 tk 118
        s8 offset;
1398 tk 119
        u8 src1;
120
        u8 src1_chn;
121
        u8 src2;
122
        u8 src2_chn;
123
        u8 op;
124
        u8 dst1;
125
        u8 dst2;
126
    } ModPatchT;
127
 
128
    ModPatchT modPatch[MBCV_NUM_MOD];
129
 
1960 tk 130
    // Output values of modulation paths
131
    s16 modOut[MBCV_NUM_MOD];
1398 tk 132
 
133
    // Values of modulation destinations
134
    s32 modDst[MBCV_NUM_MOD_DST];
135
 
136
    s32 takeDstValue(const u8& ix);
137
 
138
    // flags modulation transitions
139
    u8 modTransition;
140
};
141
 
142
#endif /* _MB_CV_MOD_H */