summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2019-05-23 17:17:17 +0200
committerGitHub <[email protected]>2019-05-23 17:17:17 +0200
commitbcb83a31275beeac17ce85513cee901ba16171c6 (patch)
tree541617925bf81918cf28458a5d00496f25b33c0a /src
parent5e8ffec0f6bd9ae267da0843a0930225b86f0bde (diff)
parentdec604bd71dccb04a768c33b15cecb573644c10a (diff)
downloadraylib-bcb83a31275beeac17ce85513cee901ba16171c6.tar.gz
raylib-bcb83a31275beeac17ce85513cee901ba16171c6.zip
Merge pull request #850 from wbrbr/xm_fix
Add rewind for the XM music format
Diffstat (limited to 'src')
-rw-r--r--src/external/jar_xm.h17
-rw-r--r--src/raudio.c2
2 files changed, 17 insertions, 2 deletions
diff --git a/src/external/jar_xm.h b/src/external/jar_xm.h
index c8c9e3c9..36b774d2 100644
--- a/src/external/jar_xm.h
+++ b/src/external/jar_xm.h
@@ -1925,7 +1925,6 @@ static void jar_xm_handle_note_and_instrument(jar_xm_context_t* ctx, jar_xm_chan
case 33: /* Xxy: Extra stuff */
switch(s->effect_param >> 4) {
-
case 1: /* X1y: Extra fine portamento up */
if(s->effect_param & 0x0F) {
ch->extra_fine_portamento_up_param = s->effect_param & 0x0F;
@@ -2660,6 +2659,22 @@ int jar_xm_create_context_from_file(jar_xm_context_t** ctx, uint32_t rate, const
return 0;
}
+// not part of the original library
+void jar_xm_reset(jar_xm_context_t* ctx)
+{
+ // I don't know what I am doing
+ // this is probably very broken
+ // but it kinda works
+ for (uint16_t i = 0; i < jar_xm_get_number_of_channels(ctx); i++)
+ {
+ jar_xm_cut_note(&ctx->channels[i]);
+ }
+ ctx->current_row = 0;
+ ctx->current_table_index = 1;
+ ctx->current_tick = 0;
+}
+
+
#endif//end of JAR_XM_IMPLEMENTATION
//-------------------------------------------------------------------------------
diff --git a/src/raudio.c b/src/raudio.c
index e5aef5cf..6ac0110c 100644
--- a/src/raudio.c
+++ b/src/raudio.c
@@ -1335,7 +1335,7 @@ void StopMusicStream(Music music)
case MUSIC_AUDIO_MP3: drmp3_seek_to_pcm_frame(&music->ctxMp3, 0); break;
#endif
#if defined(SUPPORT_FILEFORMAT_XM)
- case MUSIC_MODULE_XM: /* TODO: Restart XM context */ break;
+ case MUSIC_MODULE_XM: jar_xm_reset(music->ctxXm); break;
#endif
#if defined(SUPPORT_FILEFORMAT_MOD)
case MUSIC_MODULE_MOD: jar_mod_seek_start(&music->ctxMod); break;