bool startSound (int f, bool loopy) { if (soundOK) { cacheLoopySound = loopy; int a = cacheSound (f); if (a == -1) { debugOut( "Failed to cache sound!\n"); return false; } soundCache[a].looping = loopy; soundCache[a].vol = defSoundVol; playStream (a, false, loopy); } return true; }
void playSoundList(soundList *s) { if (soundOK) { cacheLoopySound = true; int a = cacheSound (s->sound); if (a == -1) { debugOut("Failed to cache sound!\n"); return; } soundCache[a].looping = false; if (s->vol < 0) soundCache[a].vol = defSoundVol; else soundCache[a].vol = s->vol; s-> cacheIndex = a; ALboolean ok; ALuint src; soundThing *st; st = &soundCache[a]; alGenSources(1, &src); if(alGetError() != AL_NO_ERROR) { debugOut("Failed to create OpenAL source!\n"); return; } alSourcef (src, AL_GAIN, (float) soundCache[a].vol / 256); ok = alurePlaySourceStream(src, (*st).stream, NUM_BUFS, 0, list_eos_callback, s); if(!ok) { debugOut("Failed to play stream: %s\n", alureGetErrorString()); alDeleteSources(1, &src); if(alGetError() != AL_NO_ERROR) { debugOut("Failed to delete OpenAL source!\n"); } (*st).playingOnSource = 0; } else { (*st).playingOnSource = src; (*st).playing = true; } } }
bool startSound (int f, bool loopy) { if (soundOK) { int a = cacheSound (f); if (a == -1) return false; soundCache[a].looping = loopy; soundCache[a].vol = defSoundVol; soundCache[a].mostRecentChannel = BASS_SampleGetChannel (soundCache[a].sample, false); if (soundCache[a].mostRecentChannel) { BASS_ChannelPlay(soundCache[a].mostRecentChannel, true); BASS_ChannelSetAttribute(soundCache[a].mostRecentChannel, BASS_ATTRIB_VOL, defSoundVol); if (loopy) { BASS_ChannelFlags(soundCache[a].mostRecentChannel, BASS_SAMPLE_LOOP, BASS_SAMPLE_LOOP); // set LOOP flag } } } return true; }