You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
5.6 KiB
215 lines
5.6 KiB
/* |
|
* sounds.c |
|
* |
|
* Created on: Oct 26, 2013 |
|
* Author: superman |
|
*/ |
|
|
|
#include "sounds.h" |
|
|
|
extern int shoot_numberOfSamples; |
|
extern int tankDeath_numberOfSamples; |
|
extern int spaceShipSound_numberOfSamples; |
|
extern int spaceShipDeathSound_numberOfSamples; |
|
extern int alienDeathSound_numberOfSamples; |
|
extern int alienMovement1Sound_numberOfSamples; |
|
extern int alienMovement2Sound_numberOfSamples; |
|
extern int alienMovement3Sound_numberOfSamples; |
|
extern int alienMovement4Sound_numberOfSamples; |
|
|
|
|
|
extern int shoot_soundData[]; |
|
extern int tankDeath_soundData[]; |
|
extern int spaceShipSound_soundData[]; |
|
extern int spaceShipDeathSound_soundData[]; |
|
extern int alienDeathSound_soundData[]; |
|
extern int alienMovement1Sound_soundData[]; |
|
extern int alienMovement2Sound_soundData[]; |
|
extern int alienMovement3Sound_soundData[]; |
|
extern int alienMovement4Sound_soundData[]; |
|
extern int alienSilenceSound_soundData[]; |
|
int haveTankBulletSound = 0; |
|
int haveTankDeathSound = 0; |
|
int haveSpaceShipSound = 0; |
|
int haveSpaceShipDeathSound = 0; |
|
int haveAlienDeathSound = 0; |
|
int haveAlienMoveSound =1; |
|
|
|
int bulletSoundIndex = 0; |
|
int tankDeathIndex = 0; |
|
int spaceShipIndex = 0; |
|
int spaceShipDeathIndex = 0; |
|
int alienDeathIndex = 0; |
|
int alienCadenceIndex = 1; |
|
int alien1Index=0; |
|
int alien2Index=0; |
|
int alien3Index=0; |
|
int alien4Index=0; |
|
int isHaveTankBulletSound() { |
|
return haveTankBulletSound; |
|
} |
|
void setHaveTankBulletSound(int x) { |
|
haveTankBulletSound = x; |
|
} |
|
|
|
int isHaveTankDeathSound() { |
|
return haveTankDeathSound; |
|
} |
|
void setHaveTankDeathSound(int x) { |
|
haveTankDeathSound = x; |
|
} |
|
|
|
int isHaveSpaceShipSound() { |
|
return haveSpaceShipSound; |
|
} |
|
void setHaveSpaceShipSound(int x) { |
|
haveSpaceShipSound = x; |
|
} |
|
|
|
int isHaveSpaceShipDeathSound() { |
|
return haveSpaceShipDeathSound; |
|
} |
|
void setHaveSpaceShipDeathSound(int x) { |
|
haveSpaceShipDeathSound = x; |
|
} |
|
|
|
int isHaveAlienDeathSound() { |
|
return haveAlienDeathSound; |
|
} |
|
void setHaveAlienDeathSound(int x) { |
|
haveAlienDeathSound = x; |
|
} |
|
int isAlienSoundCadence(){ |
|
return alienCadenceIndex; |
|
} |
|
void setAlienSoundCadence(int x){ |
|
alienCadenceIndex = x; |
|
} |
|
//Responsible for rotating the different alien sounds called in the timer |
|
void incrementAlienSoundCadence(){ |
|
if(isAlienSoundCadence() == 8) |
|
setAlienSoundCadence(1); |
|
else |
|
setAlienSoundCadence(isAlienSoundCadence() + 1); |
|
} |
|
|
|
void fillSound(){ |
|
int i; |
|
for(i=0;i<256;i++){ |
|
Xuint32 sample = getNextSample(); |
|
XAC97_mSetInFifoData(XPAR_AXI_AC97_0_BASEADDR,sample); |
|
} |
|
} |
|
|
|
|
|
Xuint32 getNextSample(){ |
|
|
|
Xuint32 sample = 0x00000000; //Play no sound |
|
|
|
if (haveTankBulletSound != 0) { |
|
sample = (shoot_soundData[bulletSoundIndex] | (shoot_soundData[bulletSoundIndex])<<16); |
|
if(bulletSoundIndex < (shoot_numberOfSamples - 1)){ |
|
bulletSoundIndex++; |
|
} else { |
|
bulletSoundIndex = 0; |
|
haveTankBulletSound = 0; |
|
} |
|
} else if (haveTankDeathSound != 0) { |
|
sample = (tankDeath_soundData[tankDeathIndex] | (tankDeath_soundData[tankDeathIndex])<<16); |
|
if (tankDeathIndex < (tankDeath_numberOfSamples - 1)) { |
|
tankDeathIndex++; |
|
} else { |
|
tankDeathIndex = 0; |
|
haveTankDeathSound = 0; |
|
} |
|
} else if (haveSpaceShipSound != 0 ) { //set in setHaveSpaceShip global |
|
sample = (spaceShipSound_soundData[spaceShipIndex] | (spaceShipSound_soundData[spaceShipIndex])<<16); |
|
if (spaceShipIndex < (spaceShipSound_numberOfSamples -1)) { |
|
spaceShipIndex++; |
|
} else { |
|
spaceShipIndex = 0; |
|
//Set no sound when it goes off the page - Done by setHaveSpaceShip global |
|
|
|
} |
|
} else if (haveSpaceShipDeathSound != 0) { |
|
sample = (spaceShipDeathSound_soundData[spaceShipDeathIndex] | (spaceShipDeathSound_soundData[spaceShipDeathIndex])<<16); |
|
if (spaceShipDeathIndex < (spaceShipDeathSound_numberOfSamples - 1)) { |
|
spaceShipDeathIndex++; |
|
} else { |
|
spaceShipDeathIndex = 0; |
|
haveSpaceShipDeathSound = 0; |
|
} |
|
|
|
} |
|
else if (haveAlienDeathSound != 0) { |
|
sample = (alienDeathSound_soundData[alienDeathIndex] | (alienDeathSound_soundData[alienDeathIndex])<<16); |
|
if (alienDeathIndex < (alienDeathSound_numberOfSamples - 1)) { |
|
alienDeathIndex++; |
|
} else { |
|
alienDeathIndex = 0; |
|
haveAlienDeathSound = 0; |
|
} |
|
} |
|
//Set to always on since aliens are always in the game |
|
else if (haveAlienMoveSound != 0){ |
|
//Performs the change in the four different sounds which are incremented by the alienCounter which is in timer_interrupt_handler() |
|
switch (isAlienSoundCadence()){ |
|
case 1: |
|
sample = (alienMovement1Sound_soundData[alien1Index] | (alienMovement1Sound_soundData[alien1Index]) <<16); |
|
|
|
if(alien1Index < (alienMovement1Sound_numberOfSamples -1)){ |
|
alien1Index++; |
|
} |
|
else{ |
|
alien1Index = 0; |
|
} |
|
|
|
|
|
break; |
|
case 3: |
|
sample = (alienMovement2Sound_soundData[alien2Index] | (alienMovement2Sound_soundData[alienCadenceIndex]) <<16); |
|
|
|
if(alien2Index < (alienMovement2Sound_numberOfSamples -1)){ |
|
alien2Index++; |
|
} |
|
else{ |
|
alien2Index = 0; |
|
} |
|
break; |
|
case 5: |
|
sample = (alienMovement3Sound_soundData[alien3Index] | (alienMovement3Sound_soundData[alienCadenceIndex]) <<16); |
|
|
|
if(alien3Index < (alienMovement3Sound_numberOfSamples -1)){ |
|
alien3Index++; |
|
} |
|
else{ |
|
alien3Index = 0; |
|
} |
|
break; |
|
case 7: |
|
|
|
|
|
sample = (alienMovement4Sound_soundData[alien4Index] | (alienMovement4Sound_soundData[alienCadenceIndex]) <<16); |
|
|
|
if(alien4Index < (alienMovement4Sound_numberOfSamples -1)){ |
|
alien4Index++; |
|
} |
|
else{ |
|
alien4Index = 0; |
|
} |
|
break; |
|
default: |
|
sample = 0x00000080; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
return sample; |
|
} |
|
|
|
|
|
|