1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- SoLoud audio engine
- Copyright (c) 2013-2021 Jari Komppa
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source
- distribution.
- */
- #ifndef ADSR_H
- #define ADSR_H
- #include "soloud.h"
- namespace SoLoud
- {
- class ADSR
- {
- public:
- float mA, mD, mS, mR;
- ADSR()
- {
- mA = 0.0f;
- mD = 0.0f;
- mS = 1.0f;
- mR = 0.0f;
- }
- ADSR(float aA, float aD, float aS, float aR)
- {
- mA = aA;
- mD = aD;
- mS = aS;
- mR = aR;
- }
-
- float val(float aT, float aRelTime)
- {
- if (aT < mA)
- {
- return aT / mA;
- }
- aT -= mA;
- if (aT < mD)
- {
- return 1.0f - ((aT / mD)) * (1.0f - mS);
- }
- aT -= mD;
- if (aT < aRelTime)
- return mS;
- aT -= aRelTime;
- if (aT >= mR)
- {
- return 0.0f;
- }
- return (1.0f - aT / mR) * mS;
- }
- };
- };
- #endif
|