summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/demo.seq1
-rw-r--r--assets/music.track39
-rw-r--r--src/generated/music_data.cc38
-rw-r--r--src/generated/timeline.cc1
-rw-r--r--src/main.cc65
5 files changed, 108 insertions, 36 deletions
diff --git a/assets/demo.seq b/assets/demo.seq
index 6b0db85..2c54dfb 100644
--- a/assets/demo.seq
+++ b/assets/demo.seq
@@ -7,3 +7,4 @@ SEQUENCE 0.0 0
SEQUENCE 0.0 10
EFFECT GaussianBlurEffect 0.0 60.0 0
EFFECT ChromaAberrationEffect 0.0 60.0 1
+ EFFECT SolarizeEffect 0.0 60.0 2
diff --git a/assets/music.track b/assets/music.track
index f847fff..ea9f0d3 100644
--- a/assets/music.track
+++ b/assets/music.track
@@ -6,6 +6,11 @@ BPM 120
SAMPLE kick, 50, 0.2, 1.0, 0.01, 1, 0.5
SAMPLE snare, 200, 0.2, 0.8, 0.01, 5, 0.7
SAMPLE hihat, 1000, 0.05, 0.3, 0.005, 10, 0.4
+SAMPLE E4, 293.66, 0.5, 0.6, 0.02, 4, 0.6
+SAMPLE G4, 349.23, 0.5, 0.6, 0.02, 4, 0.6
+SAMPLE B4, 440.00, 0.5, 0.6, 0.02, 4, 0.6
+SAMPLE D5, 587.33, 0.5, 0.6, 0.02, 4, 0.6
+SAMPLE E5, 587.33, 0.5, 0.6, 0.02, 4, 0.6
# Patterns: beat, sample, volume, pan
PATTERN drum_loop
@@ -25,11 +30,45 @@ PATTERN hihat_roll
3.0, hihat, 0.5, -0.5
3.5, hihat, 0.4, 0.5
+PATTERN em_melody
+ 0.0, E4, 0.7, 0.0
+ 0.5, G4, 0.7, 0.1
+ 1.0, B4, 0.7, -0.1
+ 1.5, D5, 0.7, 0.2
+ 2.0, E5, 0.7, -0.2
+ 2.5, D5, 0.7, 0.1
+ 3.0, B4, 0.7, 0.0
+ 3.5, G4, 0.7, -0.1
+
# Score: time_sec, pattern_name
SCORE
0.0, drum_loop
0.0, hihat_roll
+ 0.0, em_melody
+
4.0, drum_loop
4.0, hihat_roll
+ 4.0, em_melody
+
8.0, drum_loop
+ 8.0, hihat_roll
+ 8.0, em_melody
+
12.0, drum_loop
+ 12.0, hihat_roll
+ 12.0, em_melody
+
+ 16.0, drum_loop
+ 16.0, em_melody
+
+ 20.0, drum_loop
+ 20.0, hihat_roll
+ 20.0, em_melody
+
+ 24.0, drum_loop
+ 24.0, em_melody
+
+ 28.0, drum_loop
+ 28.0, hihat_roll
+ 28.0, em_melody
+
diff --git a/src/generated/music_data.cc b/src/generated/music_data.cc
index 87c1f65..316d443 100644
--- a/src/generated/music_data.cc
+++ b/src/generated/music_data.cc
@@ -6,8 +6,13 @@ const NoteParams g_tracker_samples[] = {
{ 50.0f, 0.20f, 1.0f, 0.01f, 0.0f, 0.0f, 0.0f, 1, 0.5f, 0.0f, 0.0f }, // kick
{ 200.0f, 0.20f, 0.8f, 0.01f, 0.0f, 0.0f, 0.0f, 5, 0.7f, 0.0f, 0.0f }, // snare
{ 1000.0f, 0.05f, 0.3f, 0.00f, 0.0f, 0.0f, 0.0f, 10, 0.4f, 0.0f, 0.0f }, // hihat
+ { 293.7f, 0.50f, 0.6f, 0.02f, 0.0f, 0.0f, 0.0f, 4, 0.6f, 0.0f, 0.0f }, // E4
+ { 349.2f, 0.50f, 0.6f, 0.02f, 0.0f, 0.0f, 0.0f, 4, 0.6f, 0.0f, 0.0f }, // G4
+ { 440.0f, 0.50f, 0.6f, 0.02f, 0.0f, 0.0f, 0.0f, 4, 0.6f, 0.0f, 0.0f }, // B4
+ { 587.3f, 0.50f, 0.6f, 0.02f, 0.0f, 0.0f, 0.0f, 4, 0.6f, 0.0f, 0.0f }, // D5
+ { 587.3f, 0.50f, 0.6f, 0.02f, 0.0f, 0.0f, 0.0f, 4, 0.6f, 0.0f, 0.0f }, // E5
};
-const uint32_t g_tracker_samples_count = 3;
+const uint32_t g_tracker_samples_count = 8;
static const TrackerEvent PATTERN_EVENTS_drum_loop[] = {
{ 0.0f, 0, 1.0f, 0.0f },
@@ -26,22 +31,49 @@ static const TrackerEvent PATTERN_EVENTS_hihat_roll[] = {
{ 3.0f, 2, 0.5f, -0.5f },
{ 3.5f, 2, 0.4f, 0.5f },
};
+static const TrackerEvent PATTERN_EVENTS_em_melody[] = {
+ { 0.0f, 3, 0.7f, 0.0f },
+ { 0.5f, 4, 0.7f, 0.1f },
+ { 1.0f, 5, 0.7f, -0.1f },
+ { 1.5f, 6, 0.7f, 0.2f },
+ { 2.0f, 7, 0.7f, -0.2f },
+ { 2.5f, 6, 0.7f, 0.1f },
+ { 3.0f, 5, 0.7f, 0.0f },
+ { 3.5f, 4, 0.7f, -0.1f },
+};
const TrackerPattern g_tracker_patterns[] = {
{ PATTERN_EVENTS_drum_loop, 5, 4.0f }, // drum_loop
{ PATTERN_EVENTS_hihat_roll, 8, 4.0f }, // hihat_roll
+ { PATTERN_EVENTS_em_melody, 8, 4.0f }, // em_melody
};
-const uint32_t g_tracker_patterns_count = 2;
+const uint32_t g_tracker_patterns_count = 3;
static const TrackerPatternTrigger SCORE_TRIGGERS[] = {
{ 0.0f, 0 },
{ 0.0f, 1 },
+ { 0.0f, 2 },
{ 4.0f, 0 },
{ 4.0f, 1 },
+ { 4.0f, 2 },
{ 8.0f, 0 },
+ { 8.0f, 1 },
+ { 8.0f, 2 },
{ 12.0f, 0 },
+ { 12.0f, 1 },
+ { 12.0f, 2 },
+ { 16.0f, 0 },
+ { 16.0f, 2 },
+ { 20.0f, 0 },
+ { 20.0f, 1 },
+ { 20.0f, 2 },
+ { 24.0f, 0 },
+ { 24.0f, 2 },
+ { 28.0f, 0 },
+ { 28.0f, 1 },
+ { 28.0f, 2 },
};
const TrackerScore g_tracker_score = {
- SCORE_TRIGGERS, 6, 120.0f
+ SCORE_TRIGGERS, 22, 120.0f
};
diff --git a/src/generated/timeline.cc b/src/generated/timeline.cc
index 376624b..f14ebd7 100644
--- a/src/generated/timeline.cc
+++ b/src/generated/timeline.cc
@@ -14,6 +14,7 @@ void LoadTimeline(MainSequence& main_seq, WGPUDevice device, WGPUQueue queue, WG
auto seq = std::make_shared<Sequence>();
seq->add_effect(std::make_shared<GaussianBlurEffect>(device, queue, format), 0.0f, 60.0f, 0);
seq->add_effect(std::make_shared<ChromaAberrationEffect>(device, queue, format), 0.0f, 60.0f, 1);
+ seq->add_effect(std::make_shared<SolarizeEffect>(device, queue, format), 0.0f, 60.0f, 2);
main_seq.add_sequence(seq, 0.0f, 10);
}
}
diff --git a/src/main.cc b/src/main.cc
index 55bb4a0..97732da 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -107,10 +107,9 @@ int main(int argc, char** argv) {
synth_init();
tracker_init();
- // Register drum assets (if still needed, can be moved to tracker samples)
- // int kick_id = register_spec_asset(AssetId::ASSET_KICK_1);
- // int snare_id = register_spec_asset(AssetId::ASSET_SNARE_1);
- // int hihat_id = register_spec_asset(AssetId::ASSET_HIHAT_1);
+ int kick_id = register_spec_asset(AssetId::ASSET_KICK_1);
+ int snare_id = register_spec_asset(AssetId::ASSET_SNARE_1);
+ int hihat_id = register_spec_asset(AssetId::ASSET_HIHAT_1);
// Still keep the dynamic tone for bass (can be integrated into tracker too)
const float* g_spec_buffer_a = generate_tone(nullptr, 110.0f); // A2
@@ -122,43 +121,43 @@ int main(int argc, char** argv) {
// int melody_id = generate_melody();
// synth_trigger_voice(melody_id, 0.6f, 0.0f);
- // double last_beat_time = 0.0;
- // int beat_count = 0;
+ double last_beat_time = 0.0;
+ int beat_count = 0;
auto update_game_logic = [&](double t) {
- // if (t - last_beat_time > SECONDS_PER_BEAT / 2.0) { // 8th notes
- // last_beat_time = t; // Sync to t
+ if (t - last_beat_time > (60.0f / g_tracker_score.bpm) / 2.0) { // 8th notes
+ last_beat_time = t; // Sync to t
- // const int step = beat_count % 16;
+ const int step = beat_count % 16;
- // // Kick on 1, 9, 11, 14...
- // if (step == 0 || step == 8 || step == 10 || step == 13) {
- // synth_trigger_voice(kick_id, 1.0f, 0.0f);
- // }
+ // Kick on 1, 9, 11, 14...
+ if (step == 0 || step == 8 || step == 10 || step == 13) {
+ synth_trigger_voice(kick_id, 0.6f, 0.0f);
+ }
- // // Snare on 4, 12
- // if (step == 4 || step == 12) {
- // synth_trigger_voice(snare_id, 0.8f, step & 8 ? -1.0f : 1.0f);
- // }
+ // Snare on 4, 12
+ if (step == 4 || step == 12) {
+ synth_trigger_voice(snare_id, 0.48f, step & 8 ? -1.0f : 1.0f);
+ }
- // // Hihat on every offbeat
- // if (step % 2 == 1) {
- // synth_trigger_voice(hihat_id, 0.5f, 0.3f);
- // }
+ // Hihat on every offbeat
+ if (step % 2 == 1) {
+ synth_trigger_voice(hihat_id, 0.3f, 0.3f);
+ }
- // // Bass pattern
- // if (step % 4 == 0) {
- // float* back_buffer = synth_begin_update(bass_id);
- // if (back_buffer) {
- // float bass_freq = (step < 8) ? 110.0f : 164.82f; // A3 then E3
- // generate_tone(back_buffer, bass_freq);
- // synth_commit_update(bass_id);
- // }
- // synth_trigger_voice(bass_id, 0.9f, 1.2f);
- // }
+ // Bass pattern
+ if (step % 4 == 0) {
+ float* back_buffer = synth_begin_update(bass_id);
+ if (back_buffer) {
+ float bass_freq = (step < 8) ? 110.0f : 164.82f; // A3 then E3
+ generate_tone(back_buffer, bass_freq);
+ synth_commit_update(bass_id);
+ }
+ synth_trigger_voice(bass_id, 0.9f, 1.2f);
+ }
- // ++beat_count;
- // }
+ ++beat_count;
+ }
tracker_update((float)t);
};