Skip to content

Commit 4134800

Browse files
committed
enforce min task duration
*to be revisited later with zero duration support
1 parent 311cba5 commit 4134800

6 files changed

Lines changed: 15 additions & 14 deletions

File tree

platforms/godot/performer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ void BarelyTaskResource::set_position(double position) {
2424
}
2525

2626
void BarelyTaskResource::set_duration(double duration) {
27-
static constexpr double kMinTaskDuration = 1e-6;
28-
duration_ = std::max(duration, kMinTaskDuration);
27+
duration_ = duration;
2928
emit_changed();
3029
}
3130

platforms/unity/Assets/BarelyMusician/Scripts/Engine.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,7 @@ public static void Task_Create(Task task, UInt32 performerId, double position,
565565
if (taskId > 0 || Handle == IntPtr.Zero) {
566566
return;
567567
}
568-
taskId = BarelyPerformer_CreateTask(_handle, performerId, position,
569-
Math.Max(duration, _minTaskDuration), priority,
568+
taskId = BarelyPerformer_CreateTask(_handle, performerId, position, duration, priority,
570569
Task_OnEvent, ref taskId);
571570
if (taskId == 0) {
572571
Debug.LogError("Failed to create task '" + task + "'");
@@ -590,7 +589,7 @@ public static bool Task_IsActive(UInt32 taskId) {
590589
}
591590

592591
public static void Task_SetDuration(UInt32 taskId, double duration) {
593-
BarelyTask_SetDuration(_handle, taskId, Math.Max(duration, _minTaskDuration));
592+
BarelyTask_SetDuration(_handle, taskId, duration);
594593
}
595594

596595
public static void Task_SetPosition(UInt32 taskId, double position) {
@@ -659,9 +658,6 @@ private static IntPtr Handle {
659658
}
660659
private static IntPtr _handle = IntPtr.Zero;
661660

662-
// Minimum task duration to avoid zero duration tasks.
663-
private const double _minTaskDuration = 1e-6;
664-
665661
// Denotes if the system is shutting down to avoid re-initialization.
666662
private static bool _isShuttingDown = false;
667663

src/barelymusician.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ void BarelyInstrument_SetSampleData(BarelyEngine* engine, uint32_t instrument_id
199199
uint32_t BarelyPerformer_CreateTask(BarelyEngine* engine, uint32_t performer_id, double position,
200200
double duration, int32_t priority, BarelyTaskCallback callback,
201201
void* user_data) {
202-
if (engine != nullptr && engine->IsValidPerformer(performer_id) && duration > 0.0) {
202+
if (engine != nullptr && engine->IsValidPerformer(performer_id)) {
203203
const uint32_t task_index = engine->controller.performer_controller().AcquireTask(
204204
engine->state.GetIdIndex(performer_id), position, duration, priority, callback, user_data);
205205
if (task_index != barely::kInvalidIndex) {
@@ -291,7 +291,7 @@ void BarelyTask_SetCallback(BarelyEngine* engine, uint32_t task_id, BarelyTaskCa
291291
}
292292

293293
void BarelyTask_SetDuration(BarelyEngine* engine, uint32_t task_id, double duration) {
294-
if (engine != nullptr && engine->IsValidTask(task_id) && duration > 0.0) {
294+
if (engine != nullptr && engine->IsValidTask(task_id)) {
295295
engine->controller.performer_controller().SetTaskDuration(engine->state.GetIdIndex(task_id),
296296
duration);
297297
}

src/core/constants.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ inline constexpr uint32_t kInvalidIndex = UINT32_MAX;
1515
inline constexpr float kMaxDelayFeedback = 0.9995f;
1616

1717
// Minimum filter frequency in hertz.
18-
static constexpr float kMinFilterFreq = 20.0f;
18+
inline constexpr float kMinFilterFreq = 20.0f;
1919

2020
// Reference frequency which is tuned to middle C in hertz.
2121
inline constexpr float kReferenceFreq = 261.62555f;

src/engine/performer_controller.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ uint32_t PerformerController::AcquireTask(uint32_t performer_index, double posit
5151
const uint32_t task_index = engine_.task_pool.Acquire();
5252
if (task_index != kInvalidIndex) {
5353
TaskState& task = engine_.GetTask(task_index);
54-
task = {{callback, user_data}, position, duration, priority, performer_index};
54+
task = {
55+
{callback, user_data}, position, std::max(duration, kMinTaskDuration), priority,
56+
performer_index,
57+
};
5558
InsertInactiveTask(engine_.GetPerformer(performer_index), task_index);
5659
}
5760
return task_index;
@@ -140,9 +143,9 @@ void PerformerController::Stop(uint32_t performer_index) noexcept {
140143
}
141144

142145
void PerformerController::SetTaskDuration(uint32_t task_index, double duration) noexcept {
143-
assert(duration > 0.0 && "Invalid task duration");
144146
auto& task = engine_.GetTask(task_index);
145147
auto& performer = engine_.GetPerformer(task.performer_index);
148+
duration = std::max(duration, kMinTaskDuration);
146149
if (task.duration == duration) return;
147150
task.duration = duration;
148151
if (task.is_active) {

src/engine/performer_state.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <barelymusician.h>
55

6+
#include <cfloat>
67
#include <cmath>
78
#include <cstdint>
89

@@ -11,6 +12,8 @@
1112

1213
namespace barely {
1314

15+
inline constexpr double kMinTaskDuration = DBL_EPSILON;
16+
1417
struct PerformerState {
1518
public:
1619
double loop_begin_position = 0.0;
@@ -38,7 +41,7 @@ struct TaskState {
3841
Callback<BarelyTaskCallback> callback = {};
3942

4043
double position = 0.0;
41-
double duration = 0.0;
44+
double duration = kMinTaskDuration;
4245
int32_t priority = 0;
4346

4447
uint32_t performer_index = kInvalidIndex;

0 commit comments

Comments
 (0)