Mididuino Workshop (21-22 Mar)
mididuino-fast-fertig.jpg

HSB invite Wesen for a workshop at void*pointer; he did great stuff designing the mididuino : his own opensource midi device based on ATMega32 (including opensource software usb-midi stack) & integrating this in the Arduino IDE. The workshop will probably take place the weekend of 21-22 of March.

Links

Notice

  • take your midi-gear over if you got some laying around /

Schedule

raoul-hausmann_mechanical-head.jpg

Saturday 21 Mar

  • doors open at 12h (there be some food)
  • we'll start at 14h with a presentation by wesen on the tools he created and how we can use them during the weekend (till 17h or so)
  • then we'll split up in smaller working-groups to toy around with midi+arduino / mididuino / midi keyboards and synths and create our own algo-rythmics & music
  • doors are not closing, go/come-in when you like to

Sunday 22 Mar

  • doors at 12h (again there be some food somehow)
  • at 14h we'll kick off with yesterdays results and throw them together
  • open till 20h or so

Video

http://etherpad.com/jeoDylMsmX

Pictures

Wesen has posted some pictures on his Twitpic, but it seems that Twitpic generates a temporary url for the images:

mididuino-hsb-01.jpgmididuino-hsb-02.jpgmididuino.jpg

Results

wolfram cellular automata

class CellularAutomaton {
  // cellular automaton based on wolfram rules
private: 
  uint8_t len;
public:
  uint8_t rule;
  uint32_t g; 

  CellularAutomaton(uint8_t l):
  len(l){
    if(len>32){
      len=32;
    }
  }

  void evolve(){
    // wolfram CA rules
    uint32_t ng;
    for (uint8_t i = 0; i < len; i++) {
      uint8_t nl = (i - 1) % len;
      uint8_t nr = (i + 1) % len;
      uint8_t match = IS_BIT_SET(g,nl) << 2 | IS_BIT_SET(g,i) << 1 | IS_BIT_SET(g,nr);
      bool rule_apply = IS_BIT_SET(rule,match);
      if(rule_apply){
        SET_BIT(ng,i);
      } 
      else{
        CLEAR_BIT(ng,i);
      }
    }
    g = ng;
  }
};
uint8_t arpPitches[] = { 
  0, 3, 7, 10, 12, 15, 19, 22 };
uint8_t pitches[32];
const uint8_t len = 32;
const uint8_t velocity = 20;

RangeEncoder rule(0,255,"RUL"); 
RangeEncoder pitch(30,127,"PTCH"); 

EncoderPage page(&rule, &pitch);

void handleGui() {
  if (BUTTON_PRESSED(Buttons.BUTTON1))  {
    g = random();// 0x002f2fd4f;
    for (uint8_t i = 0; i < len; i++) {
      pitches[i] = arpPitches[random(18)];
    }
  }
}