status_t BFileGameSound::SetPaused(bool isPaused, bigtime_t rampTime) { if (fPaused == isPaused) return EALREADY; Lock(); // Clear any old ramping delete fPausing; fPausing = NULL; if (rampTime > 100000) { // Setup for ramping if (isPaused) fPausing = InitRamp(&fPauseGain, 0.0, Format().frame_rate, rampTime); else fPausing = InitRamp(&fPauseGain, 1.0, Format().frame_rate, rampTime); } fPaused = isPaused; Unlock(); return B_OK; }
status_t GameSoundBuffer::SetGain(float gain, bigtime_t duration) { if (gain < 0.0 || gain > 1.0) return B_BAD_VALUE; delete fGainRamp; fGainRamp = NULL; if (duration > 100000) fGainRamp = InitRamp(&fGain, gain, fFormat.frame_rate, duration); else fGain = gain; return B_OK; }
status_t GameSoundBuffer::SetPan(float pan, bigtime_t duration) { if (pan < -1.0 || pan > 1.0) return B_BAD_VALUE; delete fPanRamp; fPanRamp = NULL; if (duration < 100000) { fPan = pan; if (fPan < 0.0) { fPanLeft = 1.0; fPanRight = 1.0 + fPan; } else { fPanRight = 1.0; fPanLeft = 1.0 - fPan; } } else fPanRamp = InitRamp(&fPan, pan, fFormat.frame_rate, duration); return B_OK; }