diff options
Diffstat (limited to '')
| -rw-r--r-- | modules/chibi/cp_envelope.cpp | 283 |
1 files changed, 117 insertions, 166 deletions
diff --git a/modules/chibi/cp_envelope.cpp b/modules/chibi/cp_envelope.cpp index 36259e8d6..42920b4fb 100644 --- a/modules/chibi/cp_envelope.cpp +++ b/modules/chibi/cp_envelope.cpp @@ -28,58 +28,53 @@ /*************************************************************************/ #include "cp_envelope.h" - CPEnvelope::CPEnvelope() { - reset(); } void CPEnvelope::reset() { - - - on=false; - carry=false; - loop_on=false; - loop_begin_node=0; - loop_end_node=0; - sustain_loop_on=false; - sustain_loop_begin_node=0; - sustain_loop_end_node=0; - node_count=0; - + on = false; + carry = false; + loop_on = false; + loop_begin_node = 0; + loop_end_node = 0; + sustain_loop_on = false; + sustain_loop_begin_node = 0; + sustain_loop_end_node = 0; + node_count = 0; } int CPEnvelope::get_height_at_pos(int pos) { - if (node_count && pos>node[node_count-1].tick_offset) - return node[node_count-1].value; - - int begin_x,begin_y; - int end_x,end_y,xdif; - int count=0; - int limit=-1; + if (node_count && pos > node[node_count - 1].tick_offset) + return node[node_count - 1].value; - if (node_count<2) return NO_POINT; + int begin_x, begin_y; + int end_x, end_y, xdif; + int count = 0; + int limit = -1; - while ((count<node_count) && (limit==-1)) { + if (node_count < 2) return NO_POINT; - if (node[count].tick_offset>=pos) limit=count; + while ((count < node_count) && (limit == -1)) { + + if (node[count].tick_offset >= pos) limit = count; count++; } - if (pos==0) return node[0].value; + if (pos == 0) return node[0].value; - if (limit==-1) return NO_POINT; + if (limit == -1) return NO_POINT; - begin_x=node[limit-1].tick_offset; - end_x=node[limit].tick_offset; - begin_y=node[limit-1].value; - end_y=node[limit].value; + begin_x = node[limit - 1].tick_offset; + end_x = node[limit].tick_offset; + begin_y = node[limit - 1].value; + end_y = node[limit].value; - xdif=end_x-begin_x; - return begin_y+((pos-begin_x)*(end_y-begin_y))/(xdif?xdif:1); + xdif = end_x - begin_x; + return begin_y + ((pos - begin_x) * (end_y - begin_y)) / (xdif ? xdif : 1); } /* @@ -117,235 +112,194 @@ int CPEnvelope::get_fx_height_at_pos(int pos) { float CPEnvelope::get_interp_height_at_pos(float pos) { - if (node_count && pos>node[node_count-1].tick_offset) - return node[node_count-1].value; + if (node_count && pos > node[node_count - 1].tick_offset) + return node[node_count - 1].value; - int begin_x,begin_y; - int end_x,end_y,xdif; - int count=0; - int limit=-1; + int begin_x, begin_y; + int end_x, end_y, xdif; + int count = 0; + int limit = -1; - if (node_count<2) return NO_POINT; + if (node_count < 2) return NO_POINT; - while ((count<node_count) && (limit==-1)) { + while ((count < node_count) && (limit == -1)) { - if (node[count].tick_offset>=pos) limit=count; + if (node[count].tick_offset >= pos) limit = count; count++; } - if (pos==0) return node[0].value; + if (pos == 0) return node[0].value; - if (limit==-1) return NO_POINT; + if (limit == -1) return NO_POINT; - begin_x=node[limit-1].tick_offset; - end_x=node[limit].tick_offset; - begin_y=node[limit-1].value; - end_y=node[limit].value; + begin_x = node[limit - 1].tick_offset; + end_x = node[limit].tick_offset; + begin_y = node[limit - 1].value; + end_y = node[limit].value; - xdif=end_x-begin_x; - return begin_y+((pos-begin_x)*(end_y-begin_y))/(xdif?xdif:1); + xdif = end_x - begin_x; + return begin_y + ((pos - begin_x) * (end_y - begin_y)) / (xdif ? xdif : 1); } -void CPEnvelope::set_position(int p_node,int p_x,int p_y) { - - if (p_node>=node_count) return; - +void CPEnvelope::set_position(int p_node, int p_x, int p_y) { + if (p_node >= node_count) return; - if (p_node==0) { + if (p_node == 0) { - p_x=0; + p_x = 0; - } else if (p_x<=node[p_node-1].tick_offset) { + } else if (p_x <= node[p_node - 1].tick_offset) { - p_x=node[p_node-1].tick_offset+1; + p_x = node[p_node - 1].tick_offset + 1; - } else if ((p_node<(node_count-1)) && (p_x>=node[p_node+1].tick_offset)) { + } else if ((p_node < (node_count - 1)) && (p_x >= node[p_node + 1].tick_offset)) { - p_x=node[p_node+1].tick_offset-1; + p_x = node[p_node + 1].tick_offset - 1; } - if (p_x>=9999) p_x=9999; + if (p_x >= 9999) p_x = 9999; - if (p_y>max_value) p_y=max_value; - if (p_y<min_value) p_y=min_value; + if (p_y > max_value) p_y = max_value; + if (p_y < min_value) p_y = min_value; - - node[p_node].tick_offset=p_x; - node[p_node].value=p_y; - - - + node[p_node].tick_offset = p_x; + node[p_node].value = p_y; } -int CPEnvelope::add_position(int p_x,int p_y,bool p_move_loops) { +int CPEnvelope::add_position(int p_x, int p_y, bool p_move_loops) { - if (node_count==MAX_POINTS) return -1; + if (node_count == MAX_POINTS) return -1; - - int i,new_node; + int i, new_node; // if this is assigning an existing node, let's quit. - for (i=0;i<node_count;i++) if (p_x==node[i].tick_offset) return -1; + for (i = 0; i < node_count; i++) + if (p_x == node[i].tick_offset) return -1; + i = 0; + while ((i < node_count) && (p_x >= node[i].tick_offset)) + i++; - i=0; - while ((i<node_count) && (p_x>=node[i].tick_offset)) i++; - - new_node=i; + new_node = i; node_count++; if (p_move_loops) { - if (loop_begin_node>=new_node) loop_begin_node++; - if (loop_end_node>=new_node) loop_end_node++; - if (sustain_loop_begin_node>=new_node) sustain_loop_begin_node++; - if (sustain_loop_end_node>=new_node) sustain_loop_end_node++; + if (loop_begin_node >= new_node) loop_begin_node++; + if (loop_end_node >= new_node) loop_end_node++; + if (sustain_loop_begin_node >= new_node) sustain_loop_begin_node++; + if (sustain_loop_end_node >= new_node) sustain_loop_end_node++; } - for (i=node_count-1;i>new_node;i--) node[i]=node[i-1]; - + for (i = node_count - 1; i > new_node; i--) + node[i] = node[i - 1]; - - set_position(new_node,p_x,p_y); + set_position(new_node, p_x, p_y); - - return new_node; - } void CPEnvelope::set_loop_begin(int pos) { - if ((pos<0) || (pos>=node_count)) return; - - - - loop_begin_node=pos; - - if (loop_end_node<loop_begin_node) loop_end_node=loop_begin_node; - + if ((pos < 0) || (pos >= node_count)) return; + loop_begin_node = pos; + if (loop_end_node < loop_begin_node) loop_end_node = loop_begin_node; } void CPEnvelope::set_loop_end(int pos) { - if ((pos<0) || (pos>=node_count)) return; - - - - loop_end_node=pos; - - if (loop_end_node<loop_begin_node) loop_begin_node=loop_end_node; - + if ((pos < 0) || (pos >= node_count)) return; - + loop_end_node = pos; + if (loop_end_node < loop_begin_node) loop_begin_node = loop_end_node; } - void CPEnvelope::set_sustain_loop_begin(int pos) { - if ((pos<0) || (pos>=node_count)) return; - - - - sustain_loop_begin_node=pos; - - if (sustain_loop_end_node<sustain_loop_begin_node) sustain_loop_end_node=sustain_loop_begin_node; - + if ((pos < 0) || (pos >= node_count)) return; + sustain_loop_begin_node = pos; + if (sustain_loop_end_node < sustain_loop_begin_node) sustain_loop_end_node = sustain_loop_begin_node; } void CPEnvelope::set_sustain_loop_end(int pos) { - if ((pos<0) || (pos>=node_count)) return; - - - - sustain_loop_end_node=pos; - - if (sustain_loop_end_node<sustain_loop_begin_node) sustain_loop_begin_node=sustain_loop_end_node; - + if ((pos < 0) || (pos >= node_count)) return; + sustain_loop_end_node = pos; + if (sustain_loop_end_node < sustain_loop_begin_node) sustain_loop_begin_node = sustain_loop_end_node; } void CPEnvelope::set_loop_enabled(bool p_enabled) { - - loop_on=p_enabled; + + loop_on = p_enabled; } bool CPEnvelope::is_loop_enabled() { - + return loop_on; } - void CPEnvelope::set_sustain_loop_enabled(bool p_enabled) { - - sustain_loop_on=p_enabled; + + sustain_loop_on = p_enabled; } bool CPEnvelope::is_sustain_loop_enabled() { - + return sustain_loop_on; } void CPEnvelope::del_position(int p_node) { - if ((node_count<3) || (p_node<=0) || (p_node>=node_count)) return; + if ((node_count < 3) || (p_node <= 0) || (p_node >= node_count)) return; - - int i; - if (loop_begin_node>=p_node) loop_begin_node--; - if (loop_end_node>=p_node) loop_end_node--; - if (sustain_loop_begin_node>=p_node) sustain_loop_begin_node--; - if (sustain_loop_end_node>=p_node) sustain_loop_end_node--; + if (loop_begin_node >= p_node) loop_begin_node--; + if (loop_end_node >= p_node) loop_end_node--; + if (sustain_loop_begin_node >= p_node) sustain_loop_begin_node--; + if (sustain_loop_end_node >= p_node) sustain_loop_end_node--; - for (i=p_node;i<node_count-1;i++) node[i]=node[i+1]; + for (i = p_node; i < node_count - 1; i++) + node[i] = node[i + 1]; node_count--; - - - } uint8_t CPEnvelope::get_loop_begin() { - - + return loop_begin_node; } uint8_t CPEnvelope::get_loop_end() { - - return loop_end_node; + + return loop_end_node; } uint8_t CPEnvelope::get_sustain_loop_begin() { - - + return sustain_loop_begin_node; } uint8_t CPEnvelope::get_sustain_loop_end() { - - return sustain_loop_end_node; -} - + return sustain_loop_end_node; +} void CPEnvelope::set_enabled(bool p_enabled) { - - on=p_enabled; + + on = p_enabled; } bool CPEnvelope::is_enabled() { - - return on; + + return on; } void CPEnvelope::set_carry_enabled(bool p_enabled) { - - carry=p_enabled; + + carry = p_enabled; } bool CPEnvelope::is_carry_enabled() { @@ -353,17 +307,14 @@ bool CPEnvelope::is_carry_enabled() { } uint8_t CPEnvelope::get_node_count() { - - return node_count; -} -const CPEnvelope::Point& CPEnvelope::get_node(int p_idx) { - - if (p_idx<0 || p_idx>=node_count) - return node[node_count-1]; - - return node[p_idx]; - + return node_count; } +const CPEnvelope::Point &CPEnvelope::get_node(int p_idx) { + if (p_idx < 0 || p_idx >= node_count) + return node[node_count - 1]; + + return node[p_idx]; +} |
