diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2025-12-15 22:19:59 -0500 |
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2025-12-15 22:19:59 -0500 |
| commit | b7b00994fa6ddd4c29c20f37dde7e10fa88d5812 (patch) | |
| tree | 2ceff2003b1e6f685e19224c3fa948bb9b9cc22a /project/Core/Src/Project | |
| parent | 0616056e336da34b0a84e98e6e0ee286d4b69b8b (diff) | |
| download | 340-repo-Sowgro-b7b00994fa6ddd4c29c20f37dde7e10fa88d5812.tar.gz 340-repo-Sowgro-b7b00994fa6ddd4c29c20f37dde7e10fa88d5812.tar.bz2 340-repo-Sowgro-b7b00994fa6ddd4c29c20f37dde7e10fa88d5812.zip | |
Push most recent code
Diffstat (limited to '')
| -rw-r--r-- | project/Core/Src/Project/parser.c | 23 | ||||
| -rw-r--r-- | project/Core/Src/Project/tone.c | 28 |
2 files changed, 40 insertions, 11 deletions
diff --git a/project/Core/Src/Project/parser.c b/project/Core/Src/Project/parser.c index 397dd7b..1c04ab5 100644 --- a/project/Core/Src/Project/parser.c +++ b/project/Core/Src/Project/parser.c @@ -19,15 +19,24 @@ static track_t tracks[4]; static int nTracks; static int startTime; static song_info_t song_info; +static uint16_t division; /** * Prepare the parser to play the notes * Expected that parse_song() was called first */ void parser_play_init() { + DAC_Init(); + DAC_Start(); startTime = systick_get_count(); } +uint32_t ticks_to_ms(uint32_t ticks) { + // tempo is in microseconds per quarter note + uint32_t us_per_tick = song_info.tempo / division; + return (ticks * us_per_tick) / 1000; +} + /** * Play any notes that are ready to be played * Should be called continuously in the play state @@ -35,9 +44,13 @@ void parser_play_init() { */ void parser_play_loop() { int curAbsTime = systick_get_count() - startTime; - for (int i = 0; i < nTracks; i++) { + for (int i = 1; i < 2; i++) { + if (tracks[i].curEventIndex >= tracks[i].nEvents) { + continue; + } note_event_t curEvent = tracks[i].events[tracks[i].curEventIndex]; - if (curEvent.abs_time >= curAbsTime) { + if (ticks_to_ms(curEvent.abs_time) <= curAbsTime) { + printf("%i %i %i\r\n", curEvent.ev_type, curEvent.key_number, curEvent.value); switch (curEvent.ev_type) { case NOTE_OFF_EVENT: remove_tone(curEvent.key_number); break; @@ -61,10 +74,13 @@ void parse_song(uint8_t *p_song) { parse_song_info(p_song, &song_info); + division = header.division; + nTracks = header.ntrcks; for(int i = 0; i < nTracks; i++){ p_song = parse_track(p_song, &tracks[i]); } + printf("done\r\n"); } /** @@ -81,7 +97,7 @@ uint8_t *parse_track(uint8_t *p_song, track_t *track) { int curEvent = 0; uint32_t prev_abs_time = 0; - for (uint8_t *p_end = p_song + MTrk_len; p_song != p_end; p_song++) { + for (uint8_t *p_end = p_song + MTrk_len; p_song != p_end; ) { note_event_t note; parseDelay_result_t delay_result = parseDelay(p_song); @@ -111,6 +127,7 @@ uint8_t *parse_track(uint8_t *p_song, track_t *track) { p_song++; track->events[curEvent++] = note; + printf("%i %i %i\r\n", note.ev_type, note.key_number, note.value); } track->nEvents = curEvent; track->curEventIndex = 0; diff --git a/project/Core/Src/Project/tone.c b/project/Core/Src/Project/tone.c index eb6d4b0..d6449b2 100644 --- a/project/Core/Src/Project/tone.c +++ b/project/Core/Src/Project/tone.c @@ -76,14 +76,26 @@ uint8_t remove_tone (uint8_t note) { // Play any tones in the array void play_tones () { - int power_sum = 0; - for (int i = 0; i < MAX_TONES; i++) { - uint32_t rollover = hertz_to_systicks (tones[i].note); - if ((systick_get_count () % rollover) < (rollover >> 1)) { - power_sum += 500; - } - } - DAC_Set_Value(power_sum); +// int power_sum = 0; +// for (int i = 0; i < MAX_TONES; i++) { +// uint32_t rollover = tones[i].note; +//// printf("%i\r\n", tones[i].note); +// if ((systick_get_count () % rollover) < (rollover >> 1)) { +// power_sum += 500; +// } +// } +// DAC_Set_Value(power_sum); +// printf("called %i\r\n", power_sum); + + uint32_t rollover = tones[0].note; + if ((systick_get_count () % rollover) < (rollover >> 1)) { + DAC_Set_Value(500); +// printf ("1"); + } + else { + DAC_Set_Value(0); +// printf ("0"); + } } |
