summaryrefslogtreecommitdiff
path: root/src/audio/tracker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/tracker.cc')
-rw-r--r--src/audio/tracker.cc38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/audio/tracker.cc b/src/audio/tracker.cc
index 651c4d2..95b8022 100644
--- a/src/audio/tracker.cc
+++ b/src/audio/tracker.cc
@@ -20,7 +20,7 @@ static uint32_t g_last_trigger_idx = 0;
// Active pattern instance tracking
struct ActivePattern {
uint16_t pattern_id;
- float start_music_time; // When this pattern was triggered (music time)
+ double start_music_time; // When this pattern was triggered (music time)
uint32_t next_event_idx; // Next event to trigger within this pattern
bool active;
};
@@ -315,21 +315,21 @@ static void trigger_note_event(const TrackerEvent& event,
start_offset_samples);
}
-void tracker_update(float music_time_sec, float dt_music_sec) {
+void tracker_update(double music_time_sec, double dt_music_sec) {
// Unit-less timing: 1 unit = 4 beats (by convention)
- const float BEATS_PER_UNIT = 4.0f;
- const float unit_duration_sec =
- (BEATS_PER_UNIT / g_tracker_score.bpm) * 60.0f;
+ const double BEATS_PER_UNIT = 4.0;
+ const double unit_duration_sec =
+ (BEATS_PER_UNIT / (double)g_tracker_score.bpm) * 60.0;
- const float end_music_time = music_time_sec + dt_music_sec;
- const float tempo_scale = synth_get_tempo_scale();
+ const double end_music_time = music_time_sec + dt_music_sec;
+ const double tempo_scale = (double)synth_get_tempo_scale();
// Step 1: Process new pattern triggers
while (g_last_trigger_idx < g_tracker_score.num_triggers) {
const TrackerPatternTrigger& trigger =
g_tracker_score.triggers[g_last_trigger_idx];
- const float trigger_time_sec = trigger.unit_time * unit_duration_sec;
+ const double trigger_time_sec = (double)trigger.unit_time * unit_duration_sec;
if (trigger_time_sec > end_music_time)
break;
@@ -357,8 +357,8 @@ void tracker_update(float music_time_sec, float dt_music_sec) {
// Trigger all events that have passed their unit time
while (active.next_event_idx < pattern.num_events) {
const TrackerEvent& event = pattern.events[active.next_event_idx];
- const float event_music_time =
- active.start_music_time + event.unit_time * unit_duration_sec;
+ const double event_music_time =
+ active.start_music_time + (double)event.unit_time * unit_duration_sec;
if (event_music_time > end_music_time)
break; // This event hasn't reached its time yet
@@ -368,7 +368,7 @@ void tracker_update(float music_time_sec, float dt_music_sec) {
int sample_offset = 0;
if (event_music_time > music_time_sec) {
sample_offset = (int)((event_music_time - music_time_sec) / tempo_scale *
- RING_BUFFER_SAMPLE_RATE);
+ (double)RING_BUFFER_SAMPLE_RATE);
}
// Apply humanization if enabled
@@ -378,22 +378,22 @@ void tracker_update(float music_time_sec, float dt_music_sec) {
uint32_t event_hash = g_tracker_score.humanize_seed ^
(active.pattern_id << 16) ^ active.next_event_idx;
std::minstd_rand rng(event_hash);
- std::uniform_real_distribution<float> dist(-1.0f, 1.0f);
+ std::uniform_real_distribution<double> dist(-1.0, 1.0);
// Timing variation: jitter by % of beat duration
if (g_tracker_score.timing_variation_pct > 0.0f) {
- float beat_sec = 60.0f / g_tracker_score.bpm;
- float jitter = dist(rng) *
- (g_tracker_score.timing_variation_pct / 100.0f) *
+ double beat_sec = 60.0 / (double)g_tracker_score.bpm;
+ double jitter = dist(rng) *
+ (double)(g_tracker_score.timing_variation_pct / 100.0f) *
beat_sec;
sample_offset +=
- (int)(jitter / tempo_scale * RING_BUFFER_SAMPLE_RATE);
+ (int)(jitter / tempo_scale * (double)RING_BUFFER_SAMPLE_RATE);
}
// Volume variation: vary by %
if (g_tracker_score.volume_variation_pct > 0.0f) {
volume_mult +=
- dist(rng) * (g_tracker_score.volume_variation_pct / 100.0f);
+ (float)(dist(rng) * (double)(g_tracker_score.volume_variation_pct / 100.0f));
}
}
@@ -402,8 +402,8 @@ void tracker_update(float music_time_sec, float dt_music_sec) {
}
// Pattern remains active until full duration elapses
- const float pattern_end_time =
- active.start_music_time + pattern.unit_length * unit_duration_sec;
+ const double pattern_end_time =
+ active.start_music_time + (double)pattern.unit_length * unit_duration_sec;
if (pattern_end_time <= end_music_time) {
active.active = false;
}