// 1. If this AudioScheduledSourceNode internal slot [[source started]] is true, an InvalidStateError exception MUST be thrown.
if(source_started())
returnWebIDL::InvalidStateError::create(realm(),"AudioScheduledSourceNode source has already started"_string);
// 2. Check for any errors that must be thrown due to parameter constraints described below. If any exception is thrown during this step, abort those steps.
// A RangeError exception MUST be thrown if when is negative.
if(when<0)
returnWebIDL::SimpleException{WebIDL::SimpleExceptionType::RangeError,"when must not be negative"sv};
// 3. Set the internal slot [[source started]] on this AudioScheduledSourceNode to true.
set_source_started(true);
// FIXME: 4. Queue a control message to start the AudioScheduledSourceNode, including the parameter values in the message.
// FIXME: 5. Send a control message to the associated AudioContext to start running its rendering thread only when all the following conditions are met: