1 |
/* |
/* |
2 |
* Copyright (c) 2014-2019 Christian Schoenebeck |
* Copyright (c) 2014-2020 Christian Schoenebeck |
3 |
* |
* |
4 |
* http://www.linuxsampler.org |
* http://www.linuxsampler.org |
5 |
* |
* |
205 |
|
|
206 |
const event_id_t id = pEngineChannel->ScheduleEventMicroSec(&e, 0); |
const event_id_t id = pEngineChannel->ScheduleEventMicroSec(&e, 0); |
207 |
|
|
208 |
|
// even if id is null, don't return an errorResult() here, because that |
209 |
|
// would abort the script, and under heavy load it may be considerable |
210 |
|
// that ScheduleEventMicroSec() fails above, so simply ignore that |
211 |
|
return successResult( ScriptID::fromEventID(id) ); |
212 |
|
} |
213 |
|
|
214 |
|
// set_rpn() function |
215 |
|
|
216 |
|
InstrumentScriptVMFunction_set_rpn::InstrumentScriptVMFunction_set_rpn(InstrumentScriptVM* parent) |
217 |
|
: m_vm(parent) |
218 |
|
{ |
219 |
|
} |
220 |
|
|
221 |
|
VMFnResult* InstrumentScriptVMFunction_set_rpn::exec(VMFnArgs* args) { |
222 |
|
vmint parameter = args->arg(0)->asInt()->evalInt(); |
223 |
|
vmint value = args->arg(1)->asInt()->evalInt(); |
224 |
|
|
225 |
|
if (parameter < 0 || parameter > 16383) { |
226 |
|
errMsg("set_rpn(): argument 1 exceeds RPN parameter number range"); |
227 |
|
return errorResult(); |
228 |
|
} |
229 |
|
if (value < 0 || value > 16383) { |
230 |
|
errMsg("set_rpn(): argument 2 exceeds RPN value range"); |
231 |
|
return errorResult(); |
232 |
|
} |
233 |
|
|
234 |
|
AbstractEngineChannel* pEngineChannel = |
235 |
|
static_cast<AbstractEngineChannel*>(m_vm->m_event->cause.pEngineChannel); |
236 |
|
|
237 |
|
Event e = m_vm->m_event->cause; // copy to get fragment time for "now" |
238 |
|
e.Init(); // clear IDs |
239 |
|
e.Type = Event::type_rpn; |
240 |
|
e.Param.RPN.Parameter = parameter; |
241 |
|
e.Param.RPN.Value = value; |
242 |
|
|
243 |
|
const event_id_t id = pEngineChannel->ScheduleEventMicroSec(&e, 0); |
244 |
|
|
245 |
|
// even if id is null, don't return an errorResult() here, because that |
246 |
|
// would abort the script, and under heavy load it may be considerable |
247 |
|
// that ScheduleEventMicroSec() fails above, so simply ignore that |
248 |
|
return successResult( ScriptID::fromEventID(id) ); |
249 |
|
} |
250 |
|
|
251 |
|
// set_nrpn() function |
252 |
|
|
253 |
|
InstrumentScriptVMFunction_set_nrpn::InstrumentScriptVMFunction_set_nrpn(InstrumentScriptVM* parent) |
254 |
|
: m_vm(parent) |
255 |
|
{ |
256 |
|
} |
257 |
|
|
258 |
|
VMFnResult* InstrumentScriptVMFunction_set_nrpn::exec(VMFnArgs* args) { |
259 |
|
vmint parameter = args->arg(0)->asInt()->evalInt(); |
260 |
|
vmint value = args->arg(1)->asInt()->evalInt(); |
261 |
|
|
262 |
|
if (parameter < 0 || parameter > 16383) { |
263 |
|
errMsg("set_nrpn(): argument 1 exceeds NRPN parameter number range"); |
264 |
|
return errorResult(); |
265 |
|
} |
266 |
|
if (value < 0 || value > 16383) { |
267 |
|
errMsg("set_nrpn(): argument 2 exceeds NRPN value range"); |
268 |
|
return errorResult(); |
269 |
|
} |
270 |
|
|
271 |
|
AbstractEngineChannel* pEngineChannel = |
272 |
|
static_cast<AbstractEngineChannel*>(m_vm->m_event->cause.pEngineChannel); |
273 |
|
|
274 |
|
Event e = m_vm->m_event->cause; // copy to get fragment time for "now" |
275 |
|
e.Init(); // clear IDs |
276 |
|
e.Type = Event::type_nrpn; |
277 |
|
e.Param.NRPN.Parameter = parameter; |
278 |
|
e.Param.NRPN.Value = value; |
279 |
|
|
280 |
|
const event_id_t id = pEngineChannel->ScheduleEventMicroSec(&e, 0); |
281 |
|
|
282 |
// even if id is null, don't return an errorResult() here, because that |
// even if id is null, don't return an errorResult() here, because that |
283 |
// would abort the script, and under heavy load it may be considerable |
// would abort the script, and under heavy load it may be considerable |
284 |
// that ScheduleEventMicroSec() fails above, so simply ignore that |
// that ScheduleEventMicroSec() fails above, so simply ignore that |