adding in ecen427 space invaders final lab
This commit is contained in:
@@ -0,0 +1,215 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user