//Update Wave void Wave::Update(float deltaTime) { //Checks if the wave is ready //If it isn't, create the wave if (!waveReady) CreateWave(); //If the wave is ready, spawn enemies if (waveReady) { //Check to make sure the wave isn't empty if (!Enemies.empty()) { //Iterate through the list of enemies and update them for (list_it = Enemies.begin(); list_it != Enemies.end(); list_it++) { list_it->Update(deltaTime); } //Call Draw //This isn't really necessary, but it doesn't hurt anything either //Draw(); } } }
int main(int argc, char *argv[]) { enum WaveType wavetype = WT_Sine; ALuint source, buffer; ALint last_pos, num_loops; ALint max_loops = 4; ALint srate = -1; ALint tone_freq = 1000; ALCint dev_rate; ALenum state; int i; for(i = 1;i < argc;i++) { if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) { fprintf(stderr, "OpenAL Tone Generator\n" "\n" "Usage: %s <options>\n" "\n" "Available options:\n" " --help/-h This help text\n" " -t <seconds> Time to play a tone (default 5 seconds)\n" " --waveform/-w <type> Waveform type: sine (default), square, sawtooth,\n" " triangle, impulse\n" " --freq/-f <hz> Tone frequency (default 1000 hz)\n" " --srate/-s <sample rate> Sampling rate (default output rate)\n", argv[0] ); return 1; } else if(i+1 < argc && strcmp(argv[i], "-t") == 0) { i++; max_loops = atoi(argv[i]) - 1; } else if(i+1 < argc && (strcmp(argv[i], "--waveform") == 0 || strcmp(argv[i], "-w") == 0)) { i++; if(strcmp(argv[i], "sine") == 0) wavetype = WT_Sine; else if(strcmp(argv[i], "square") == 0) wavetype = WT_Square; else if(strcmp(argv[i], "sawtooth") == 0) wavetype = WT_Sawtooth; else if(strcmp(argv[i], "triangle") == 0) wavetype = WT_Triangle; else if(strcmp(argv[i], "impulse") == 0) wavetype = WT_Impulse; else fprintf(stderr, "Unhandled waveform: %s\n", argv[i]); } else if(i+1 < argc && (strcmp(argv[i], "--freq") == 0 || strcmp(argv[i], "-f") == 0)) { i++; tone_freq = atoi(argv[i]); if(tone_freq < 1) { fprintf(stderr, "Invalid tone frequency: %s (min: 1hz)\n", argv[i]); tone_freq = 1; } } else if(i+1 < argc && (strcmp(argv[i], "--srate") == 0 || strcmp(argv[i], "-s") == 0)) { i++; srate = atoi(argv[i]); if(srate < 40) { fprintf(stderr, "Invalid sample rate: %s (min: 40hz)\n", argv[i]); srate = 40; } } } InitAL(); if(!alIsExtensionPresent("AL_EXT_FLOAT32")) { fprintf(stderr, "Required AL_EXT_FLOAT32 extension not supported on this device!\n"); CloseAL(); return 1; } { ALCdevice *device = alcGetContextsDevice(alcGetCurrentContext()); alcGetIntegerv(device, ALC_FREQUENCY, 1, &dev_rate); assert(alcGetError(device)==ALC_NO_ERROR && "Failed to get device sample rate"); } if(srate < 0) srate = dev_rate; /* Load the sound into a buffer. */ buffer = CreateWave(wavetype, tone_freq, srate); if(!buffer) { CloseAL(); return 1; } printf("Playing %dhz %s-wave tone with %dhz sample rate and %dhz output, for %d second%s...\n", tone_freq, GetWaveTypeName(wavetype), srate, dev_rate, max_loops+1, max_loops?"s":""); fflush(stdout); /* Create the source to play the sound with. */ source = 0; alGenSources(1, &source); alSourcei(source, AL_BUFFER, buffer); assert(alGetError()==AL_NO_ERROR && "Failed to setup sound source"); /* Play the sound for a while. */ num_loops = 0; last_pos = 0; alSourcei(source, AL_LOOPING, (max_loops > 0) ? AL_TRUE : AL_FALSE); alSourcePlay(source); do { ALint pos; al_nssleep(10000000); alGetSourcei(source, AL_SAMPLE_OFFSET, &pos); alGetSourcei(source, AL_SOURCE_STATE, &state); if(pos < last_pos && state == AL_PLAYING) { ++num_loops; if(num_loops >= max_loops) alSourcei(source, AL_LOOPING, AL_FALSE); printf("%d...\n", max_loops - num_loops + 1); fflush(stdout); } last_pos = pos; } while(alGetError() == AL_NO_ERROR && state == AL_PLAYING); /* All done. Delete resources, and close OpenAL. */ alDeleteSources(1, &source); alDeleteBuffers(1, &buffer); /* Close up OpenAL. */ CloseAL(); return 0; }
//----------------------------------------------------------------------------- // Purpose: Wrapper for CreateWave() //----------------------------------------------------------------------------- CAudioSource *Audio_CreateMemoryWave( const char *pName ) { return CreateWave( pName ); }