1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/blumia-PineappleSynth

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ADSRVisualizationControl.cpp 3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Gary Wang Отправлено 22.08.2016 18:46 46f773b
#include "ADSRVisualizationControl.h"
double ADSRVisualizationControl::convertToGraphicX(double value) {
double min = (double) this->mRECT.L;
double distance = (double) this->mRECT.W();
return value * distance + min;
};
double ADSRVisualizationControl::convertToPercentX(double value) {
double min = (double) this->mRECT.L;
double position = value - min;
double distance = (double) this->mRECT.W();
return position / distance;
};
double ADSRVisualizationControl::convertToGraphicY(double value) {
double min = (double) this->mRECT.T;
double distance = (double) this->mRECT.H();
// We use (1 - value) as the max value 1 is located on top of graphics and not bottom
return (1 - value) * distance + min;
};
double ADSRVisualizationControl::convertToPercentY(double value) {
double min = (double) this->mRECT.T;
double position = value - min;
double distance = (double) this->mRECT.H();
// We return the 1 - distance as the value 1 is located on top of graphics and not bottom
return 1 - position / distance;
};
bool ADSRVisualizationControl::Draw(IGraphics *pGraphics) {
//Cycles
pGraphics->DrawCircle(&lineColor, convertToGraphicX(startPoint.x), convertToGraphicY(startPoint.y), 3, 0, true);
pGraphics->DrawCircle(&lineColor, convertToGraphicX(attackPoint.x), convertToGraphicY(attackPoint.y), 3, 0, true);
pGraphics->DrawCircle(&lineColor, convertToGraphicX(retainPoint.x), convertToGraphicY(retainPoint.y), 3, 0, true);
pGraphics->DrawCircle(&lineColor, convertToGraphicX(endPoint.x), convertToGraphicY(endPoint.y), 3, 0, true);
//Lines
pGraphics->DrawLine(&lineColor,
convertToGraphicX(startPoint.x), convertToGraphicY(startPoint.y),
convertToGraphicX(attackPoint.x), convertToGraphicY(attackPoint.y),
0, true);
pGraphics->DrawLine(&lineColor,
convertToGraphicX(attackPoint.x), convertToGraphicY(attackPoint.y),
convertToGraphicX(retainPoint.x), convertToGraphicY(retainPoint.y),
0, true);
pGraphics->DrawLine(&lineColor,
convertToGraphicX(retainPoint.x), convertToGraphicY(retainPoint.y),
convertToGraphicX(endPoint.x), convertToGraphicY(endPoint.y),
0, true);
return true;
};
void ADSRVisualizationControl::initPoints() {
setADSR(0.01, 0.5, 0.1, 1.0);
}
//Four stage with different max value, and make it to [0,1]
void ADSRVisualizationControl::setADSR(float att, float dec, float sus, float rel) {
attack = att;//ToNormalizedParam(att / 10, 0, 1, 3);
decay = dec;//ToNormalizedParam(dec / 15, 0, 1, 3);
sustain = sus;// ToNormalizedParam(sus, 0, 1, 2);
release = rel;// ToNormalizedParam(rel / 15, 0, 1, 3);
updatePointPosition();
}
void ADSRVisualizationControl::updatePointPosition() {
//if add a delay stage, should change this.
startPoint.x = 0;
startPoint.y = 0.1;
//accoriding to attack value, div 3 in order to let it in the currect pos;
attackPoint.x = attack / 3 + startPoint.x;
attackPoint.y = 1;
//accroiding to decay value and sustain value
retainPoint.x = decay / 3 + attackPoint.x;
retainPoint.y = sustain * 0.9 + 0.1;
//end value
endPoint.x = retainPoint.x + release / 3;
endPoint.y = 0.1;
//set dirty
SetDirty();
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/blumia-PineappleSynth.git
git@api.gitlife.ru:oschina-mirror/blumia-PineappleSynth.git
oschina-mirror
blumia-PineappleSynth
blumia-PineappleSynth
master