summaryrefslogtreecommitdiff
path: root/drivers/chibi/cp_loader_xm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/chibi/cp_loader_xm.cpp')
-rw-r--r--drivers/chibi/cp_loader_xm.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/chibi/cp_loader_xm.cpp b/drivers/chibi/cp_loader_xm.cpp
index 8bde6b673e..8ab6abc650 100644
--- a/drivers/chibi/cp_loader_xm.cpp
+++ b/drivers/chibi/cp_loader_xm.cpp
@@ -5,7 +5,7 @@
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
-/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
@@ -627,6 +627,10 @@ CPLoader::Error CPLoader_XM::load_instrument_internal(CPInstrument *p_instr,bool
CPSample *sample=song->get_sample(sample_index[j]);
CPSample_ID sid=sample->get_sample_data();
+ sm->lock_data(sid);
+
+ void*dataptr=sm->get_data(sid);
+
if (sm->is_16bits( sid)) {
int16_t old=0;
@@ -638,8 +642,9 @@ CPLoader::Error CPLoader_XM::load_instrument_internal(CPInstrument *p_instr,bool
int16_t sampleval=file->get_word();
newsample=sampleval+old;
old=newsample;
-
- sm->set_data( sid, k, newsample );
+
+ ((int16_t*)dataptr)[k]=newsample;
+ //sm->set_data( sid, k, newsample );
}
} else {
@@ -653,10 +658,15 @@ CPLoader::Error CPLoader_XM::load_instrument_internal(CPInstrument *p_instr,bool
newsample=sampleval+old;
old=newsample;
- sm->set_data( sid, k, (int16_t)newsample << 8 );
+ ((int8_t*)dataptr)[k]=newsample;
+
+ //sm->set_data( sid, k, (int16_t)newsample << 8 );
}
}
+
+ sm->unlock_data(sid);
+
}
for (int j=0;j<96;j++) {