-
-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathOscillatorNodeHostObject.cpp
84 lines (68 loc) · 3.29 KB
/
OscillatorNodeHostObject.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "OscillatorNodeHostObject.h"
#include <android/log.h>
namespace audiocontext {
using namespace facebook;
std::vector<jsi::PropNameID> OscillatorNodeHostObject::getPropertyNames(jsi::Runtime& runtime) {
std::vector<jsi::PropNameID> propertyNames;
propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "start"));
propertyNames.push_back(jsi::PropNameID::forAscii(runtime, "stop"));
return propertyNames;
}
jsi::Value OscillatorNodeHostObject::get(jsi::Runtime& runtime, const jsi::PropNameID& propNameId) {
auto propName = propNameId.utf8(runtime);
if (propName == "start") {
return start(runtime, propNameId);
}
if (propName == "stop") {
return stop(runtime, propNameId);
}
if (propName == "frequency") {
return frequency(runtime, propNameId);
}
if (propName == "detune") {
return detune(runtime, propNameId);
}
throw std::runtime_error("Prop not yet implemented!");
}
void OscillatorNodeHostObject::set(jsi::Runtime& runtime, const jsi::PropNameID& propNameId, const jsi::Value& value) {
auto propName = propNameId.utf8(runtime);
if (propName == "frequency") {
auto frequency = value.asNumber();
oscillator_->setFrequency(frequency);
return;
}
if (propName == "detune") {
auto detune = value.asNumber();
oscillator_->setDetune(detune);
return;
}
throw std::runtime_error("Not yet implemented!");
}
jsi::Value OscillatorNodeHostObject::start(jsi::Runtime& runtime, const jsi::PropNameID& propNameId) {
return jsi::Function::createFromHostFunction(runtime, propNameId, 0, [this](jsi::Runtime& rt, const jsi::Value& thisValue, const jsi::Value* args, size_t count) -> jsi::Value {
oscillator_->start();
return jsi::Value::undefined();
});
}
jsi::Value OscillatorNodeHostObject::stop(jsi::Runtime &runtime,
const jsi::PropNameID &propNameId) {
return jsi::Function::createFromHostFunction(runtime, propNameId, 0, [this](jsi::Runtime& rt, const jsi::Value& thisValue, const jsi::Value* args, size_t count) -> jsi::Value {
oscillator_->stop();
return jsi::Value::undefined();
});
}
jsi::Value OscillatorNodeHostObject::frequency(jsi::Runtime &runtime,
const jsi::PropNameID &propNameId) {
return jsi::Function::createFromHostFunction(runtime, propNameId, 0, [this](jsi::Runtime& rt, const jsi::Value& thisValue, const jsi::Value* args, size_t count) -> jsi::Value {
auto frequency = oscillator_->getFrequency();
return jsi::Value(frequency);
});
}
jsi::Value OscillatorNodeHostObject::detune(jsi::Runtime &runtime,
const jsi::PropNameID &propNameId) {
return jsi::Function::createFromHostFunction(runtime, propNameId, 0, [this](jsi::Runtime& rt, const jsi::Value& thisValue, const jsi::Value* args, size_t count) -> jsi::Value {
auto detune = oscillator_->getDetune();
return jsi::Value(detune);
});
}
}