electro-music.com   Dedicated to experimental electro-acoustic
and electronic music
 
    Front Page  |  Articles  |  Radio
 |  Media  |  Forum  |  Wiki  |  Links  |  Store
Forum with support of Syndicator RSS
 FAQFAQ   CalendarCalendar   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   LinksLinks
 RegisterRegister   ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in  Chat RoomChat Room 
Live streaming at radio.electro-music.com

  host / artist show at your time
  Jez Adventures in Sound
Please visit the chat
 Forum index » DIY Hardware and Software » Microcontrollers and Programmable Logic
Arduino - MIDI - CV
Post new topic   Reply to topic Moderators: State Machine
Page 1 of 1 [7 Posts]
View unread posts
View new posts in the last week
Mark the topic unread :: View previous topic :: View next topic
Author Message
droffset



Joined: Feb 02, 2009
Posts: 486
Location: new zealand
Audio files: 2

PostPosted: Mon Apr 12, 2010 11:44 pm    Post subject: Arduino - MIDI - CV Reply with quote  Mark this post and the followings unread

Found this interesting take on doing MIDI to CV via a PWM setup. I don't read Japanese but the schematics and code are there.
http://sites.google.com/site/diyanalogsynth/plug-in/midi2cv


Also Colin seems to have a way to do MIDI-CV via his MIDIVox shield. I have one coming in the mail so it's a pretty intriguing prospect.

http://www.narbotic.com/files/0feee87cca5f55bc7963cdb01151aba4-8.html

_________________
==================
Check out the FREE Intro to Lunettas Document
https://docs.google.com/Doc?docid=0AZIwOP-PR9sSZDlidzgzbV8wY3RjenJqanY&hl=en

Edit: Spelling mistakes.
Back to top
View user's profile Send private message Visit poster's website
Skellz



Joined: Dec 31, 2008
Posts: 18
Location: Ireland

PostPosted: Tue Apr 13, 2010 6:31 pm    Post subject: Reply with quote  Mark this post and the followings unread

Have you seen this ? http://andregoncalves.info/addac/

Looks amazing would love to have a few of those modules
Back to top
View user's profile Send private message
droffset



Joined: Feb 02, 2009
Posts: 486
Location: new zealand
Audio files: 2

PostPosted: Thu Apr 15, 2010 2:26 pm    Post subject: Reply with quote  Mark this post and the followings unread

That does look cool. Thanks, I just signed up on his mailing list. Smile
_________________
==================
Check out the FREE Intro to Lunettas Document
https://docs.google.com/Doc?docid=0AZIwOP-PR9sSZDlidzgzbV8wY3RjenJqanY&hl=en

Edit: Spelling mistakes.
Back to top
View user's profile Send private message Visit poster's website
hanley



Joined: May 24, 2006
Posts: 27
Location: London

PostPosted: Thu Apr 22, 2010 9:43 am    Post subject: Reply with quote  Mark this post and the followings unread

another here
seem simple enough

http://registeringdomainnamesismorefunthandoingrealwork.com/blogs/?p=51

no neat schematic to go with it though
Back to top
View user's profile Send private message
tonysnail



Joined: Nov 29, 2012
Posts: 6
Location: London

PostPosted: Tue Mar 19, 2013 5:36 pm    Post subject: Reply with quote  Mark this post and the followings unread

I made a variation on this - an arduino CV envelope generator.. It takes MIDI gate input and creates an ADSR envelope, passing it as a 0-5v CV..

It reads MIDI CC values and uses this to control the envelope parameters.

The idea being to replace the digital filter within a synth in Reaktor with a real live one..

I also did it with an 8 bit R2R network because I wasn't happy with the PWM output.

Will post the source code if anyone's interested!

Carl
Back to top
View user's profile Send private message
Skellz



Joined: Dec 31, 2008
Posts: 18
Location: Ireland

PostPosted: Tue Mar 19, 2013 5:40 pm    Post subject: Reply with quote  Mark this post and the followings unread

Post it i would love to see your code
Back to top
View user's profile Send private message
tonysnail



Joined: Nov 29, 2012
Posts: 6
Location: London

PostPosted: Tue Mar 19, 2013 5:48 pm    Post subject: Reply with quote  Mark this post and the followings unread

sure!

It needs an R2R network across pins 8-13, and the highest bit on pin 7.

MIDI CC values 5-8 are used to control the ADSR parameters - these are read by a MIDI in (opto) circuit at the RX pin.

Use it to turn an otherwise lifeless plugin synth into a living, breathing, analog filtered beast!

Code:

// Arduino CV envelope generator - working version with MIDI shield and CV output
//
// This code generates a VCF envelope and sends it to an R2R network out of PORTB (pins 8-13) and pin 7
//
// 
//
// We now need to read CC values from Reaktor and calculate ADSRs from the MIDI inputs
//
// attack - 0.4 is getting quite fast, 0.01 is quite slow
// 127 / 250 = 0.508 .. 1 / 250 = 0.004 - this seems a good translation from midi to adsr values
//
// CC values:
// Attack: CC #5
// Decay: CC #5
// Sustain: CC #5
// Release: CC #5
//
// (c) Carl Hudson -  www.carlhudson.co.uk
// Free to copy source code so long as Author is mentioned!



#include <MIDI>
#include <avr>


// the size of the attack and decay wavetables
#define ATTACK_SIZE 2024
#define ATTACK2_SIZE 2025
#define DECAY_SIZE 2073

// the calibration value is a number that divides the rate we read through the attack and decay wavetables
#define ATTACK_CC_CALIBRATION 60
#define DECAY_CC_CALIBRATION 60
#define RELEASE_CC_CALIBRATION 60

int debug=0;

int velocityFlag = 0;

int testcount=0;

int highVal=0;
int k=0;
float tablePos = 0;
float attackRate = 0;
float decayRate = 0;
int sustainRate = 0;
int MIDIval = 0;
int gate = 0;

int attackCC = 40;
int decayCC = 64;
int sustainCC = 64;
int releaseCC = 127;

float MIDIconv = 0;


float releaseRate = 10;

int decayCalc = 0;
int releaseCalc = 0;

int envelopePos=0;

int testCounter=0;

int noteSwitch = 0;

prog_char attackTable[ATTACK_SIZE] PROGMEM = { 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127, };
prog_char decayTable[DECAY_SIZE] PROGMEM = { 127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  127,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, };
prog_char attack2Table[ATTACK2_SIZE] PROGMEM = { 2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  10,  10,  10,  10,  10,  10,  10,  10,  10,  10,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  11,  12,  12,  12,  12,  12,  12,  12,  12,  12,  12,  13,  13,  13,  13,  13,  13,  13,  13,  13,  13,  14,  14,  14,  14,  14,  14,  14,  14,  14,  14,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  15,  16,  16,  16,  16,  16,  16,  16,  16,  16,  16,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  17,  18,  18,  18,  18,  18,  18,  18,  18,  18,  18,  19,  19,  19,  19,  19,  19,  19,  19,  19,  19,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  21,  21,  21,  21,  21,  21,  21,  21,  21,  21,  22,  22,  22,  22,  22,  22,  22,  22,  22,  22,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  23,  24,  24,  24,  24,  24,  24,  24,  24,  24,  24,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  25,  26,  26,  26,  26,  26,  26,  26,  26,  26,  26,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  27,  28,  28,  28,  28,  28,  28,  28,  28,  28,  28,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  29,  30,  30,  30,  30,  30,  30,  30,  30,  30,  30,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  31,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  32,  33,  33,  33,  33,  33,  33,  33,  33,  33,  33,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  34,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  35,  36,  36,  36,  36,  36,  36,  36,  36,  36,  36,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  37,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  38,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  39,  40,  40,  40,  40,  40,  40,  40,  40,  40,  40,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  41,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  42,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  43,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  44,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  45,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  46,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  47,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  48,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  49,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  50,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  51,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  52,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  53,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  54,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  55,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  56,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  57,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  58,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  59,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  60,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  61,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  62,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  63,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  64,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  65,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  66,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  67,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  68,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  69,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  70,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  71,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  72,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  73,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  74,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  75,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  76,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  77,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  78,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  79,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  80,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  81,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  82,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  83,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  84,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  85,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  86,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  87,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  88,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  89,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  90,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  91,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  92,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  93,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  94,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  96,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  97,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  98,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  99,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  100,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  101,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  102,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  103,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  104,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  105,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  106,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  107,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  108,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  109,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  110,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  111,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  112,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  113,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  114,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  115,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  116,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  117,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  118,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  119,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  120,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  121,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  122,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  123,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  124,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  125,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  126,  127,  127,  127,  127,  127, };


void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(4, OUTPUT);
 
  tablePos=4;
  k=0;
 
 if (debug==1) {
  Serial.begin(9600);
 } else {
  MIDI.begin(1);
  MIDI.setHandleNoteOn(MIDInoteOn);
  MIDI.setHandleNoteOff(MIDInoteOff);
  MIDI.setHandleControlChange(MIDIcontrolChange);
 }
 
}


void flashLED() {
  digitalWrite(13, HIGH);
  delay(5);
  digitalWrite(13, LOW);
  delay(5);
}

void MIDInoteOn(byte channel, byte note, byte velocity) {

 if (velocity>0) {
   velocityFlag=0;
 } else {
   velocityFlag=1;
 }
 
switch (velocityFlag){
    case(0):
        envelopePos = 0;
        k=0;
        tablePos=0;
        gate=1;
    break;
    case(1):
        MIDInoteOff(1, 50, 50);
        //flashLED();
    break;
  }
}


void MIDInoteOff(byte channel, byte note, byte velocity) {
    envelopePos = 3;
    k=0;
    tablePos=0;
    gate=0;
    //flashLED();
}


void MIDIcontrolChange(byte channel, byte number, byte value) {
 
  switch ((int) number) {
    case (5):      // Attack   [CC 5]
      attackCC = (int) value;
    break;
    case (6):      // Decay   [CC 6]
      decayCC = (int) value;
    break;
    case (7):      // Sustain   [CC 7]
      sustainCC = (int) value;
    break;
    case (8):      // Release   [CC 8]
      releaseCC = (int) value;
    break;
  }
}


void sendCV(int MIDIval) {
  // send CV voltage to pins
  MIDIval=127-MIDIval;
  highVal=LOW;
  if (MIDIval>63) highVal=HIGH;
  PORTB = MIDIval;
  digitalWrite(7, highVal);
 
 if (debug==1) {
  Serial.print("env: ");
  switch (envelopePos) {
    case(0):
      Serial.print("attack");
    break;
     case(1):
      Serial.print("decay");
    break;
     case(2):
      Serial.print("sustain");
    break;
     case(3):
      Serial.print("release");
    break;
  }
  Serial.print("  |  CV:");
  Serial.println(MIDIval);
 }
}




void loop() {
 
 /*
  if (gate==1) {
  digitalWrite(13, HIGH);
  } else {
  digitalWrite(13, LOW);
  }
  /*
  // test code
  testcount++;
  if (testcount==50) MIDInoteOn(1, 50, 50);
  if (testcount==100) MIDInoteOn(1, 50, 50);
  if (testcount==10000) MIDInoteOff(1, 50, 50);
  if (testcount==10050) MIDInoteOff(1, 50, 50);
  if (testcount==25000) testcount=0;
  ////////////
  */
 
  if (debug!=1) {
     MIDI.read();
  }
 
  if ((attackCC==0) && (envelopePos==0)) envelopePos=1;
  if (decayRate==0) decayRate=0.0001;
  if ((releaseCC==0) && (envelopePos==3)) envelopePos=4;
 
  attackRate = (127-(float) attackCC) / ATTACK_CC_CALIBRATION;
  decayRate = (127-(float) decayCC) / DECAY_CC_CALIBRATION;
  sustainRate = sustainCC;
  releaseRate = (127-(float) releaseCC) / RELEASE_CC_CALIBRATION;
 
  int MIDIval=0;
 
  switch (envelopePos)  {
   case 0:                                          // attack
    MIDIval = pgm_read_byte_near(attack2Table + k);
    tablePos=tablePos+attackRate;
    k = (int) tablePos;
      if (k>ATTACK2_SIZE) {
        k=0;
        tablePos=0;
        envelopePos++;   
      }
      //if (attackCC==127) MIDIval = 127;
  break;
 
   case 1:                                          // decay
   decayCalc = 127 - sustainRate;
    MIDIval = (pgm_read_byte_near(decayTable + k));
    MIDIval = (((float) MIDIval/127)*(float) decayCalc) + (127-(float) decayCalc);
    tablePos=tablePos+decayRate;
    k = (int) tablePos;
     if (k>DECAY_SIZE) {
       k=0;
       tablePos=0;
       envelopePos++;   
     }
  break;
 
   case 2:                                           // sustain
    MIDIval = sustainRate;
     // test code
    /*
     testCounter++;
     if (testCounter==56) {
       k=0;
       tablePos=0;
       testCounter=0;
       envelopePos++;
     }
     //////////
    */
  break;
 
   case 3:                                           // release
  releaseCalc = sustainRate -(127-sustainRate);
    MIDIval = (pgm_read_byte_near(decayTable + k));
    MIDIconv = ((float) MIDIval / 127) * sustainRate;
    MIDIval = (int) MIDIconv;
            if (MIDIval<0>DECAY_SIZE) {
                k=0;
                tablePos=0;
                envelopePos = 4;   
            }

   break;
 
  case 4:          // holding MIDI note off
    MIDIval = 0;
  }

  sendCV(MIDIval);
 
 
 /*
  tablePos=tablePos+pitch;
  k = tablePos;
  if (k>1023) {
    k=0;
    tablePos=0;
  }
  */
 
  // calculate upper bit (Pin 7)
 
 
}
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic Moderators: State Machine
Page 1 of 1 [7 Posts]
View unread posts
View new posts in the last week
Mark the topic unread :: View previous topic :: View next topic
 Forum index » DIY Hardware and Software » Microcontrollers and Programmable Logic
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum
AmbiphonicDSP

Please support our site. If you click through and buy from
our affiliate partners, we earn a small commission.


Forum with support of Syndicator RSS
Powered by phpBB © 2001, 2005 phpBB Group
Copyright © 2003 through 2009 by electro-music.com - Conditions Of Use