Arduino library for WTV020-SD-16P audio module

ntmcguff:
Here is my example of a Star Wars Blaster with 8 RGB LEDs, 3 74HC595 shift registers and the WTV020-SD-16P sound card. The sound files are from onesky.

74HC595 shift registers wiring: http://www.arduino.cc/en/Tutorial/ShiftOut

Blaster4 - YouTube

//  Name    : Blaster4                                          //

//  Author  : Norman McGuffey                                   //
//  Date    : 16 Feb 2013                                       //
//  Version : 1.0                                               //
//  Notes   : Code for using 3 74HC595 Shift Registers with     //
//          : 8 - 5mm Superbright CC RGB LEDs on E-11 Blaster   //
//          : Sound using WTV020-SD-16P microSD audio module    //

int resetPin2 = 2;  // Pin D2 connected to WTV20 /Reset (Pin 1)
int clockPin2 = 3;  // Pin D3 connected to WTV20 P04 (clock)(Pin 7)
int dataPin2 = 4;   // Pin D4 connected to WTV20 P05 (data)(Pin 10)
int button1Pin = 6; // Pin D6 connected to Trigger Switch
int button2Pin = 7; // Pin D7 connected to Select Switch
int latchPin = 8;   // Pin D8 connected to ST_CP (PIN 12)of 74HC595
int dataPin = 11;   // Pin D11 connected to DS (PIN 14) of 74HC595
int clockPin = 12;  // Pin D12 connected to SH_CP (PIN 11)of 74HC595
int LEDPin = 13;    // Pin D13 connected to LED
int button1State = 0;
int button2State = 0;
int button2Count = 1;

const unsigned int VOLUME_0 = 0xFFF0;
const unsigned int VOLUME_1 = 0xFFF1;
const unsigned int VOLUME_2 = 0xFFF2;
const unsigned int VOLUME_3 = 0xFFF3;
const unsigned int VOLUME_4 = 0xFFF4;
const unsigned int VOLUME_5 = 0xFFF5;
const unsigned int VOLUME_6 = 0xFFF6;
const unsigned int VOLUME_7 = 0xFFF7;

const unsigned int PLAY_PAUSE = 0xFFFE;
const unsigned int STOP = 0xFFFF;

byte dataRED;
byte dataGREEN;
byte dataBLUE;
int dataArrayRED[] = {1,8,64,0,0,0,0,0,0};
int dataArrayGREEN[] = {0,0,0,2,16,128,0,0,0};
int dataArrayBLUE[] = {0,0,0,0,0,0,4,32,0};

void setup() {
 pinMode(clockPin2, OUTPUT);
 pinMode(dataPin2, OUTPUT);
 pinMode(resetPin2, OUTPUT);
 pinMode(LEDPin, OUTPUT);
 
 digitalWrite(clockPin2, HIGH);
 digitalWrite(dataPin2, LOW);

pinMode(latchPin, OUTPUT);
 pinMode(button1Pin, INPUT);
 pinMode(button2Pin, INPUT);
 
 digitalWrite(resetPin2, HIGH);
 delay(100);
 digitalWrite(resetPin2, LOW);
 delay(10);
 digitalWrite(resetPin2, HIGH);
 delay(100);
 delay(500);
 sendCommand(0xFFF6);

digitalWrite(LEDPin, HIGH);
 delay(50);
 digitalWrite(LEDPin, LOW);
 
 Serial.begin(9600);

}

void loop() {

button2State = digitalRead(button2Pin);
 if (button2State == HIGH) {
   sendCommand(0x000);
   button2Count = button2Count +1;
   if (button2Count > 5) {
     button2Count = 1;
   }
   for (int x=0; x < button2Count; x++){
      digitalWrite(LEDPin, HIGH);
      delay(100);
      digitalWrite(LEDPin, LOW);
      delay(200);
   }
   delay(500);
   }
 
 button1State = digitalRead(button1Pin);
 
 if (button1State == HIGH) {    
  switch (button2Count) {
  case 1:
     { // Color = Red
     sendCommand(0x001);
     int dataArrayRED[] = {1,8,64,0,0,0,0,0,0};
     int dataArrayGREEN[] = {0,0,0,2,16,128,0,0,0};
     int dataArrayBLUE[] = {32,32,32,32,32,32,36,32,0};
     for (int j = 0; j < 9; j++) {
        dataRED = dataArrayRED[j];
        dataGREEN = dataArrayGREEN[j];
        dataBLUE = dataArrayBLUE[j];
        digitalWrite(latchPin, 0);
        shiftOut(dataPin, clockPin, dataBLUE);
        shiftOut(dataPin, clockPin, dataGREEN);  
        shiftOut(dataPin, clockPin, dataRED);
        digitalWrite(latchPin, 1);
        delay(60);}
      break;}
 case 2:
      { // Color = Blue
      sendCommand(0x002);
      int dataArrayRED[] = {4,32,0,0,0,0,0,0,0};
      int dataArrayGREEN[] = {0,0,1,8,64,0,0,0,0};
      int dataArrayBLUE[] = {128,128,128,128,128,130,144,128,0};
      for (int j = 0; j < 9; j++) {
        dataRED = dataArrayRED[j];
        dataGREEN = dataArrayGREEN[j];
        dataBLUE = dataArrayBLUE[j];
        digitalWrite(latchPin, 0);
        shiftOut(dataPin, clockPin, dataBLUE);
        shiftOut(dataPin, clockPin, dataGREEN);  
        shiftOut(dataPin, clockPin, dataRED);
        digitalWrite(latchPin, 1);
        delay(100);}
      break;}
   case 3:
      { // Color = Green
      sendCommand(0x003);
      int dataArrayRED[] = {2,16,128,0,0,0,0,0,0};
      int dataArrayGREEN[] = {0,0,0,4,32,0,0,0,0};
      int dataArrayBLUE[] = {64,64,64,64,64,65,72,64,0};
      for (int j = 0; j < 9; j++) {
        dataRED = dataArrayRED[j];
        dataGREEN = dataArrayGREEN[j];
        dataBLUE = dataArrayBLUE[j];
        digitalWrite(latchPin, 0);
        shiftOut(dataPin, clockPin, dataBLUE);
        shiftOut(dataPin, clockPin, dataGREEN);  
        shiftOut(dataPin, clockPin, dataRED);
        digitalWrite(latchPin, 1);
        delay(90);}
      break;}
   case 4:
      { // Color = Purple
      sendCommand(0x004);
      int dataArrayRED[] = {5,40,64,0,0,0,0,0,0};
      int dataArrayGREEN[] = {0,0,1,10,80,128,0,0,0};
      int dataArrayBLUE[] = {160,160,160,160,160,162,180,160,0};
        for (int j = 0; j < 9; j++) {
        dataRED = dataArrayRED[j];
        dataGREEN = dataArrayGREEN[j];
        dataBLUE = dataArrayBLUE[j];
        digitalWrite(latchPin, 0);
        shiftOut(dataPin, clockPin, dataBLUE);
        shiftOut(dataPin, clockPin, dataGREEN);  
        shiftOut(dataPin, clockPin, dataRED);
        digitalWrite(latchPin, 1);
        delay(90);}
      break;}
   case 5:
      { // Color = Orange
      sendCommand(0x005);
      int dataArrayRED[] = {3,24,192,0,0,0,0,0,0};
      int dataArrayGREEN[] = {0,0,0,6,48,128,0,0,0};
      int dataArrayBLUE[] = {96,96,96,96,96,97,108,96,0};
      for (int j = 0; j < 9; j++) {
        dataRED = dataArrayRED[j];
        dataGREEN = dataArrayGREEN[j];
        dataBLUE = dataArrayBLUE[j];
        digitalWrite(latchPin, 0);
        shiftOut(dataPin, clockPin, dataBLUE);
        shiftOut(dataPin, clockPin, dataGREEN);  
        shiftOut(dataPin, clockPin, dataRED);
        digitalWrite(latchPin, 1);
        delay(75);}
      break;}
  }
 }
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {

int i=0;
 int pinState;
 pinMode(myClockPin, OUTPUT);
 pinMode(myDataPin, OUTPUT);

digitalWrite(myDataPin, 0);
 digitalWrite(myClockPin, 0);
 
 for (i=7; i>=0; i--)  {
   digitalWrite(myClockPin, 0);
   
   if ( myDataOut & (1<<i) ) {
     pinState= 1;
   }
   else {
     pinState= 0;
   }
   digitalWrite(myDataPin, pinState);
   digitalWrite(myClockPin, 1);
   digitalWrite(myDataPin, 0);
 }
   digitalWrite(myClockPin, 0);
}

void blinkAll_3Bytes(int n, int d) {
 digitalWrite(latchPin, 0);
 shiftOut(dataPin, clockPin, 0);
 shiftOut(dataPin, clockPin, 0);
 digitalWrite(latchPin, 1);
 delay(200);
 for (int x = 0; x < n; x++) {
   digitalWrite(latchPin, 0);
   shiftOut(dataPin, clockPin, 0);
   shiftOut(dataPin, clockPin, 0);
   shiftOut(dataPin, clockPin, 1);
   digitalWrite(latchPin, 1);
   delay(50);
   digitalWrite(latchPin, 0);
   shiftOut(dataPin, clockPin, 0);
   shiftOut(dataPin, clockPin, 0);
   shiftOut(dataPin, clockPin, 0);
   digitalWrite(latchPin, 1);
   delay(200);
 }
}
void sendCommand(int addr)
{
 digitalWrite(clockPin2, LOW);
 delay(2);
 for (int i=15; i>=0; i--)
 {
   delayMicroseconds(200);
   if((addr>>i)&0x0001 >0)
     {
       digitalWrite(dataPin2, HIGH);
      }
   else
      {
        digitalWrite(dataPin2, LOW);
      }
   delayMicroseconds(200);
   digitalWrite(clockPin2, HIGH);
   delayMicroseconds(200);
   
   if(i>0)
   digitalWrite(dataPin2, LOW);
   else
   digitalWrite(dataPin2, HIGH);
   delayMicroseconds(200);
   
   if(i>0)
   digitalWrite(clockPin2, LOW);
   else
   digitalWrite(clockPin2, HIGH);
 }
 delay(30);
}

very well!
did you post your video in whitearmor forum too?
http://www.whitearmor.net/forum/topic/19322-arduino-a-cheap-board-for-e11-blaster-effects/page__st__120