[Scummvm-cvs-logs] SF.net SVN: scummvm: [25708] scummvm/trunk/sound/mods/protracker.cpp
cyx at users.sourceforge.net
cyx at users.sourceforge.net
Sun Feb 18 22:56:53 CET 2007
Revision: 25708
http://scummvm.svn.sourceforge.net/scummvm/?rev=25708&view=rev
Author: cyx
Date: 2007-02-18 13:56:52 -0800 (Sun, 18 Feb 2007)
Log Message:
-----------
cleanup and fixed _module memory leak
Modified Paths:
--------------
scummvm/trunk/sound/mods/protracker.cpp
Modified: scummvm/trunk/sound/mods/protracker.cpp
===================================================================
--- scummvm/trunk/sound/mods/protracker.cpp 2007-02-18 21:46:40 UTC (rev 25707)
+++ scummvm/trunk/sound/mods/protracker.cpp 2007-02-18 21:56:52 UTC (rev 25708)
@@ -33,7 +33,7 @@
class ProtrackerStream : public ::Audio::Paula {
private:
- Module *_module;
+ Module _module;
int _rate;
@@ -50,7 +50,7 @@
// For effect 0xD - PatternBreak;
bool _hasPatternBreak;
- int _skiprow;
+ int _skipRow;
// For effect 0xE6 - Pattern Loop
bool _hasPatternLoop;
@@ -148,30 +148,29 @@
ProtrackerStream::ProtrackerStream(Common::ReadStream *stream, int rate, bool stereo) :
Paula(stereo, rate, rate/50) {
- _module = new Module();
- bool result = _module->load(*stream);
+ bool result = _module.load(*stream);
assert(result);
_rate = rate;
_tick = _row = _pos = 0;
+
+ _speed = 6;
+ _bpm = 125;
+
_hasJumpToPattern = false;
+ _jumpToPattern = 0;
+
_hasPatternBreak = false;
+ _skipRow = 0;
+
_hasPatternLoop = false;
- _patternDelay = 0;
_patternLoopCount = 0;
_patternLoopRow = 0;
- _speed = 6;
- _bpm = 125;
- for (int t = 0; t < 4; t++) {
- _track[t].sample = 0;
- _track[t].period = 0;
- _track[t].offset = 0.0;
- _track[t].vibrato = 0;
- _track[t].delaySampleTick = 0;
- _track[t].arpeggio = false;
- }
+ _patternDelay = 0;
+ memset(_track, 0, sizeof(_track));
+
startPlay();
}
@@ -181,7 +180,7 @@
_track[track].vibrato = 0;
_track[track].delaySampleTick = 0;
note_t note =
- _module->pattern[_module->songpos[_pos]][_row][track];
+ _module.pattern[_module.songpos[_pos]][_row][track];
int effect = note.effect >> 8;
@@ -190,14 +189,14 @@
_track[track].vibratoPos = 0;
}
_track[track].sample = note.sample;
- _track[track].finetune = _module->sample[note.sample - 1].finetune;
- _track[track].vol = _module->sample[note.sample - 1].vol;
+ _track[track].finetune = _module.sample[note.sample - 1].finetune;
+ _track[track].vol = _module.sample[note.sample - 1].vol;
}
if (note.period) {
if (effect != 3 && effect != 5) {
if (_track[track].finetune)
- _track[track].period = _module->noteToPeriod(note.note, _track[track].finetune);
+ _track[track].period = _module.noteToPeriod(note.note, _track[track].finetune);
else
_track[track].period = note.period;
_track[track].offset = 0.0;
@@ -262,9 +261,8 @@
break;
case 0xD:
_hasPatternBreak = true;
- _skiprow = ex * 10 + ey;
+ _skipRow = ex * 10 + ey;
break;
-
case 0xE:
switch (ex) {
case 0x0: // Switch filters off
@@ -277,10 +275,10 @@
break;
case 0x5: // Set finetune
_track[track].finetune = ey;
- _module->sample[_track[track].sample].finetune = ey;
+ _module.sample[_track[track].sample].finetune = ey;
if (note.period) {
if (ey)
- _track[track].period = _module->noteToPeriod(note.note, ey);
+ _track[track].period = _module.noteToPeriod(note.note, ey);
else
_track[track].period = note.period;
}
@@ -343,7 +341,7 @@
_track[track].vibrato = 0;
note_t note =
- _module->pattern[_module->songpos[_pos]][_row][track];
+ _module.pattern[_module.songpos[_pos]][_row][track];
int effect = note.effect >> 8;
@@ -356,11 +354,11 @@
if (ex || ey) {
if (_tick == 1)
_track[track].period =
- _module->noteToPeriod(_track[track].arpeggioNotes[0],
+ _module.noteToPeriod(_track[track].arpeggioNotes[0],
_track[track].finetune);
else
_track[track].period =
- _module->noteToPeriod(_track[track].arpeggioNotes[_tick % 3],
+ _module.noteToPeriod(_track[track].arpeggioNotes[_tick % 3],
_track[track].finetune);
}
break;
@@ -387,7 +385,6 @@
case 0xA:
doVolSlide(track, ex, ey);
break;
-
case 0xE:
switch (ex) {
case 0x6:
@@ -401,7 +398,7 @@
_track[track].sample = _track[track].delaySample;
_track[track].offset = 0.0;
if (_track[track].sample)
- _track[track].vol = _module->sample[_track[track].sample - 1].vol;
+ _track[track].vol = _module.sample[_track[track].sample - 1].vol;
}
break;
}
@@ -418,7 +415,7 @@
if (_tick == 0) {
if (_track[track].arpeggio) {
- _track[track].period = _module->noteToPeriod(_track[track].arpeggioNotes[0],
+ _track[track].period = _module.noteToPeriod(_track[track].arpeggioNotes[0],
_track[track].finetune);
}
if (_hasJumpToPattern) {
@@ -427,8 +424,8 @@
_row = 0;
} else if (_hasPatternBreak) {
_hasPatternBreak = false;
- _row = _skiprow;
- _pos = (_pos + 1) % _module->songlen;
+ _row = _skipRow;
+ _pos = (_pos + 1) % _module.songlen;
_patternLoopRow = 0;
} else if (_hasPatternLoop) {
_hasPatternLoop = false;
@@ -436,7 +433,7 @@
}
if (_row >= 64) {
_row = 0;
- _pos = (_pos + 1) % _module->songlen;
+ _pos = (_pos + 1) % _module.songlen;
_patternLoopRow = 0;
}
@@ -454,7 +451,7 @@
_voice[track].period = _track[track].period + _track[track].vibrato;
_voice[track].volume = _track[track].vol;
if (_track[track].sample) {
- sample_t &sample = _module->sample[_track[track].sample - 1];
+ sample_t &sample = _module.sample[_track[track].sample - 1];
_voice[track].data = sample.data;
_voice[track].dataRepeat = sample.replen > 2 ? sample.data + sample.repeat : 0;
_voice[track].length = sample.len;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list