[Change] Just some small tweaks to sound. I am hunting a bug...
This commit is contained in:
parent
fccd9dcc22
commit
999bdc7c8a
89
src/sound.c
89
src/sound.c
@ -9,7 +9,16 @@
|
||||
#include "music.h"
|
||||
#include "sound.h"
|
||||
|
||||
#define SOUND_PREFIX "snd/sounds/"
|
||||
// ==============================================
|
||||
// sound.c controls the routines for using a
|
||||
// virtual voice wrapper system around the openal
|
||||
// library to get 3D sound.
|
||||
//
|
||||
// We only use position sound and no doppler effect
|
||||
// right now.
|
||||
// ==============================================
|
||||
|
||||
#define SOUND_PREFIX "../snd/sounds/"
|
||||
#define SOUND_SUFFIX ".wav"
|
||||
|
||||
// Give the buffers a name.
|
||||
@ -45,6 +54,7 @@ static int mvoice_stack = 0;
|
||||
static int sound_makeList(void);
|
||||
static int sound_load(ALuint* buffer, char* filename);
|
||||
static void sound_free(alSound* snd);
|
||||
static int voice_getSource(alVoice* voc);
|
||||
|
||||
int sound_init(void) {
|
||||
sound_lock = SDL_CreateMutex();
|
||||
@ -99,7 +109,7 @@ int sound_init(void) {
|
||||
void sound_exit(void) {
|
||||
int i;
|
||||
// Free the sounds.
|
||||
for(i = 0; i < &nsound_list; i++)
|
||||
for(i = 0; i < nsound_list; i++)
|
||||
sound_free(&sound_list[i]);
|
||||
free(sound_list);
|
||||
sound_list = NULL;
|
||||
@ -231,19 +241,11 @@ void sound_update(void) {
|
||||
SDL_mutexV(sound_lock);
|
||||
}
|
||||
|
||||
// Create a dynamic moving voice.
|
||||
alVoice* sound_addVoice(int priority, double px, double py, double vx, double vy,
|
||||
const ALuint buffer, const int looping) {
|
||||
|
||||
alVoice* voc;
|
||||
static int voice_getSource(alVoice* voc) {
|
||||
int ret;
|
||||
ALenum err;
|
||||
|
||||
nvoice_stack++;
|
||||
if(nvoice_stack > mvoice_stack)
|
||||
voice_stack = realloc(voice_stack, ++mvoice_stack*sizeof(alVoice*));
|
||||
|
||||
voc = malloc(sizeof(alVoice));
|
||||
voice_stack[nvoice_stack-1] = voc;
|
||||
ret = 0; // Default return.
|
||||
|
||||
SDL_mutexP(sound_lock);
|
||||
|
||||
@ -251,24 +253,17 @@ alVoice* sound_addVoice(int priority, double px, double py, double vx, double vy
|
||||
voc->source = 0;
|
||||
alGenSources(1, &voc->source);
|
||||
err = alGetError();
|
||||
if(err != AL_NO_ERROR) voc->source = 0;
|
||||
|
||||
// Set the data.
|
||||
voc->priority = priority;
|
||||
voc->start = SDL_GetTicks();
|
||||
voc->buffer = buffer;
|
||||
if(looping) voice_set(voc, VOICE_LOOPING);
|
||||
voc->px = px;
|
||||
voc->py = py;
|
||||
//voc->vx = vx;
|
||||
//voc->vy = vy;
|
||||
if(err != AL_NO_ERROR) {
|
||||
voc->source = 0;
|
||||
ret = 1;
|
||||
} else {
|
||||
// Set the properties.
|
||||
alSourcei(voc->source, AL_BUFFER, voc->buffer);
|
||||
|
||||
// Set the source.
|
||||
if(voc->source) {
|
||||
alSourcei(voc->source, AL_BUFFER, buffer);
|
||||
|
||||
alSourcef(voc->source, AL_MAX_DISTANCE, 1000.);
|
||||
alSourcef(voc->source, AL_REFERENCE_DISTANCE, 250.);
|
||||
// Distance model.
|
||||
alSourcef(voc->source, AL_MAX_DISTANCE, 200.);
|
||||
alSourcef(voc->source, AL_REFERENCE_DISTANCE, 50.);
|
||||
|
||||
alSourcei(voc->source, AL_SOURCE_RELATIVE, AL_FALSE);
|
||||
alSourcef(voc->source, AL_GAIN, 0.5);
|
||||
@ -283,10 +278,40 @@ alVoice* sound_addVoice(int priority, double px, double py, double vx, double vy
|
||||
alSourcePlay(voc->source);
|
||||
err = alGetError();
|
||||
if(err == AL_NO_ERROR) voice_set(voc, VOICE_PLAYING);
|
||||
else DEBUG("Source player failure");
|
||||
else ret = 2;
|
||||
}
|
||||
SDL_mutexV(sound_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
alVoice* sound_addVoice(int priority, double px, double py, double vx, double vy,
|
||||
const ALuint buffer, const int looping) {
|
||||
|
||||
(void)vx;
|
||||
(void)vy;
|
||||
|
||||
alVoice* voc;
|
||||
|
||||
nvoice_stack++;
|
||||
if(nvoice_stack > mvoice_stack)
|
||||
voice_stack = realloc(voice_stack, ++mvoice_stack*sizeof(alVoice*));
|
||||
|
||||
voc = malloc(sizeof(alVoice));
|
||||
voice_stack[nvoice_stack-1] = voc;
|
||||
|
||||
// Set the data.
|
||||
voc->priority = priority;
|
||||
voc->start = SDL_GetTicks();
|
||||
voc->buffer = buffer;
|
||||
if(looping) voice_set(voc, VOICE_LOOPING);
|
||||
voc->px = px;
|
||||
voc->py = py;
|
||||
//voc->vx = vx;
|
||||
//voc->vy = vy;
|
||||
|
||||
voice_getSource(voc);
|
||||
|
||||
return voc;
|
||||
}
|
||||
|
||||
@ -322,6 +347,8 @@ void sound_delVoice(alVoice* voice) {
|
||||
}
|
||||
|
||||
void voice_update(alVoice* voice, double px, double py, double vx, double vy) {
|
||||
(void) vx;
|
||||
(void) vy;
|
||||
voice->px = px;
|
||||
voice->py = py;
|
||||
//voice->vx = vx;
|
||||
@ -329,6 +356,8 @@ void voice_update(alVoice* voice, double px, double py, double vx, double vy) {
|
||||
}
|
||||
|
||||
void sound_listener(double dir, double px, double py, double vx, double vy) {
|
||||
(void)vx;
|
||||
(void)vy;
|
||||
SDL_mutexP(sound_lock);
|
||||
|
||||
ALfloat ori[] = { 0., 0., 0., 0., 0., 1. };
|
||||
|
Loading…
Reference in New Issue
Block a user