#include "audio-param.hpp"
#include "audio-context.hpp"
IMPLEMENT_ES5_CLASS(AudioParam);
void AudioParam::init(Napi::Env env, Napi::Object exports) {
Napi::Function ctor = wrap(env);
JS_ASSIGN_SETTER(value);
JS_ASSIGN_METHOD(cancelAndHoldAtTime);
JS_ASSIGN_METHOD(cancelScheduledValues);
JS_ASSIGN_METHOD(setValueCurveAtTime);
JS_ASSIGN_METHOD(setTargetAtTime);
JS_ASSIGN_METHOD(exponentialRampToValueAtTime);
JS_ASSIGN_METHOD(linearRampToValueAtTime);
JS_ASSIGN_METHOD(setValueAtTime);
JS_ASSIGN_GETTER(maxValue);
JS_ASSIGN_GETTER(minValue);
JS_ASSIGN_GETTER(defaultValue);
JS_ASSIGN_METHOD(destroy);
exports.Set("AudioParam", ctor);
}
bool AudioParam::isAudioParam(Napi::Object obj) {
return obj.InstanceOf(_ctorEs5.Value());
}
AudioParam::AudioParam(const Napi::CallbackInfo &info) : CommonParam(info.This(), "AudioParam") {
NAPI_ENV;
super(info);
Napi::Object context = info[0].As();
Napi::External extParam = info[1].As();
ParamPtr *param = reinterpret_cast(extParam.Data());
reset(context, *param);
}
AudioParam::~AudioParam() {
_destroy();
}
void AudioParam::_destroy() {
DES_CHECK;
CommonParam::_destroy();
}
JS_IMPLEMENT_METHOD(AudioParam, setValueAtTime) {
THIS_CHECK;
REQ_FLOAT_ARG(0, value);
REQ_FLOAT_ARG(1, time);
_impl->setValueAtTime(value, time);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, linearRampToValueAtTime) {
THIS_CHECK;
REQ_FLOAT_ARG(0, value);
REQ_FLOAT_ARG(1, time);
_impl->linearRampToValueAtTime(value, time);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, exponentialRampToValueAtTime) {
THIS_CHECK;
REQ_FLOAT_ARG(0, value);
REQ_FLOAT_ARG(1, time);
_impl->exponentialRampToValueAtTime(value, time);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, setTargetAtTime) {
THIS_CHECK;
REQ_FLOAT_ARG(0, target);
REQ_FLOAT_ARG(1, time);
REQ_FLOAT_ARG(2, timeConstant);
_impl->setTargetAtTime(target, time, timeConstant);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, setValueCurveAtTime) {
THIS_CHECK;
REQ_OBJ_ARG(0, values);
REQ_FLOAT_ARG(1, time);
REQ_FLOAT_ARG(2, duration);
std::vector curve;
// TODO: read array
_impl->setValueCurveAtTime(curve, time, duration);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, cancelScheduledValues) {
THIS_CHECK;
REQ_FLOAT_ARG(0, startTime);
_impl->cancelScheduledValues(startTime);
RET_UNDEFINED;
}
JS_IMPLEMENT_METHOD(AudioParam, cancelAndHoldAtTime) {
THIS_CHECK;
REQ_FLOAT_ARG(0, startTime);
// TODO: implement
// _impl->cancelAndHoldAtTime(startTime);
RET_UNDEFINED;
}
JS_IMPLEMENT_GETTER(AudioParam, value) {
THIS_CHECK;
Napi::Object context = _context.Value();
AudioContext *audioContext = AudioContext::unwrap(context);
lab::ContextRenderLock renderLock(audioContext->getCtx().get(), "AudioParam::valueGetter");
RET_NUM(_impl->value());
}
JS_IMPLEMENT_SETTER(AudioParam, value) {
THIS_CHECK;
SETTER_FLOAT_ARG;
_impl->setValue(v);
RET_UNDEFINED;
}
JS_IMPLEMENT_GETTER(AudioParam, defaultValue) {
THIS_CHECK;
RET_NUM(_impl->defaultValue());
}
JS_IMPLEMENT_GETTER(AudioParam, minValue) {
THIS_CHECK;
RET_NUM(_impl->minValue());
}
JS_IMPLEMENT_GETTER(AudioParam, maxValue) {
THIS_CHECK;
RET_NUM(_impl->maxValue());
}
JS_IMPLEMENT_METHOD(AudioParam, destroy) {
THIS_CHECK;
emit("destroy");
_destroy();
RET_UNDEFINED;
}