You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
5.6 KiB
C
216 lines
5.6 KiB
C
/*
|
|
* 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;
|
|
}
|
|
|
|
|