diff options
author | Norbert Lange | 2009-07-01 23:11:56 +0000 |
---|---|---|
committer | Norbert Lange | 2009-07-01 23:11:56 +0000 |
commit | 9f8d9de11db887801940a042c59da9591b120bf5 (patch) | |
tree | c37cee8ea09630b6b0ed012a0d71d17370858891 | |
parent | 7c7ad0d5f139e24a56da22123376452c87535669 (diff) | |
download | scummvm-rg350-9f8d9de11db887801940a042c59da9591b120bf5.tar.gz scummvm-rg350-9f8d9de11db887801940a042c59da9591b120bf5.tar.bz2 scummvm-rg350-9f8d9de11db887801940a042c59da9591b120bf5.zip |
added a skeleton for maxtrax modules. Not much happening yet, just reading and displaying a bit of information for maxtrax file
svn-id: r42013
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 4 | ||||
-rw-r--r-- | base/main.cpp | 6 | ||||
-rw-r--r-- | dists/msvc9/scummvm-tfmx.vcproj | 14 | ||||
-rw-r--r-- | sound/mods/maxtrax.cpp | 32 | ||||
-rw-r--r-- | sound/mods/maxtrax.h | 43 | ||||
-rw-r--r-- | sound/mods/tfmx.cpp | 2 | ||||
-rw-r--r-- | sound/mods/tfmx.h | 2 | ||||
-rw-r--r-- | sound/module.mk | 1 | ||||
-rw-r--r-- | tfmx/module.mk | 1 | ||||
-rw-r--r-- | tfmx/mxtxplayer.cpp | 214 | ||||
-rw-r--r-- | tfmx/tfmxplayer.cpp | 7 |
11 files changed, 315 insertions, 11 deletions
diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 52355f60cc..57a277d1ff 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -90,7 +90,7 @@ void OSystem_SDL::initBackend() { int joystick_num = ConfMan.getInt("joystick_num"); joystick_num = 0; -#if !defined(TFMX_CMDLINE_TOOL) +#if !defined(TFMX_CMDLINE_TOOL) && !defined(MXTX_CMDLINE_TOOL) uint32 sdlFlags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER; #else uint32 sdlFlags = /*SDL_INIT_VIDEO |*/ SDL_INIT_AUDIO | SDL_INIT_TIMER; @@ -115,7 +115,7 @@ void OSystem_SDL::initBackend() { _graphicsMutex = createMutex(); -#if !defined(TFMX_CMDLINE_TOOL) +#if !defined(TFMX_CMDLINE_TOOL) && !defined(MXTX_CMDLINE_TOOL) SDL_ShowCursor(SDL_DISABLE); // Enable unicode support if possible diff --git a/base/main.cpp b/base/main.cpp index 913d4a4010..99add697f5 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -295,8 +295,8 @@ static void setupKeymapper(OSystem &system) { } -#if defined(TFMX_CMDLINE_TOOL) -void tfmxmain(int argc, const char * const argv[]); +#if defined(TFMX_CMDLINE_TOOL) || defined(MXTX_CMDLINE_TOOL) +void modcmdmain(int argc, const char * const argv[]); extern "C" int scummvm_main(int argc, const char * const argv[]) { Common::String specialDebug; @@ -317,7 +317,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { system.initBackend(); // pass control to my own main-function, including arguments - tfmxmain(argc,argv); + modcmdmain(argc,argv); PluginManager::instance().unloadPlugins(); PluginManager::destroy(); diff --git a/dists/msvc9/scummvm-tfmx.vcproj b/dists/msvc9/scummvm-tfmx.vcproj index 091f32b752..60be0bbfab 100644 --- a/dists/msvc9/scummvm-tfmx.vcproj +++ b/dists/msvc9/scummvm-tfmx.vcproj @@ -223,7 +223,7 @@ Optimization="0" InlineFunctionExpansion="0" AdditionalIncludeDirectories="../../;../../engines" - PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;TFMX_CMDLINE_TOOL" + PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;NOT_TFMX_CMDLINE_TOOL;MXTX_CMDLINE_TOOL" MinimalRebuild="true" ExceptionHandling="1" BasicRuntimeChecks="3" @@ -1145,6 +1145,14 @@ > </File> <File + RelativePath="..\..\sound\mods\maxtrax.cpp" + > + </File> + <File + RelativePath="..\..\sound\mods\maxtrax.h" + > + </File> + <File RelativePath="..\..\sound\mods\module.cpp" > </File> @@ -2085,6 +2093,10 @@ Name="TFMX" > <File + RelativePath="..\..\tfmx\mxtxplayer.cpp" + > + </File> + <File RelativePath="..\..\TFMX\README.txt" > </File> diff --git a/sound/mods/maxtrax.cpp b/sound/mods/maxtrax.cpp new file mode 100644 index 0000000000..8fcc59b0fa --- /dev/null +++ b/sound/mods/maxtrax.cpp @@ -0,0 +1,32 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/scummsys.h" +#include "common/endian.h" +#include "common/stream.h" +#include "common/util.h" +#include "common/debug.h" + +#include "sound/mods/maxtrax.h"
\ No newline at end of file diff --git a/sound/mods/maxtrax.h b/sound/mods/maxtrax.h new file mode 100644 index 0000000000..8eb9d2ba51 --- /dev/null +++ b/sound/mods/maxtrax.h @@ -0,0 +1,43 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef SOUND_MODS_MAXTRAX_H +#define SOUND_MODS_MAXTRAX_H + +#include "sound/mods/paula.h" + +namespace Audio { + +class MaxTrax : public Paula { +public: + MaxTrax(int rate, bool stereo); + virtual ~MaxTrax(); + + void interrupt(); +}; + +} // End of namespace Audio + +#endif
\ No newline at end of file diff --git a/sound/mods/tfmx.cpp b/sound/mods/tfmx.cpp index b0761efa62..b2826d6299 100644 --- a/sound/mods/tfmx.cpp +++ b/sound/mods/tfmx.cpp @@ -993,4 +993,4 @@ int Tfmx::doSfx(uint16 sfxIndex, bool unlockChannel) { return -1; } -} +} // End of namespace Audio diff --git a/sound/mods/tfmx.h b/sound/mods/tfmx.h index e06be89759..2f05b0da70 100644 --- a/sound/mods/tfmx.h +++ b/sound/mods/tfmx.h @@ -291,6 +291,6 @@ private: void noteCommand(uint8 note, uint8 param1, uint8 param2, uint8 param3); }; -} +} // End of namespace Audio #endif diff --git a/sound/module.mk b/sound/module.mk index 0c24e0cf0e..5f8ef0dbbe 100644 --- a/sound/module.mk +++ b/sound/module.mk @@ -24,6 +24,7 @@ MODULE_OBJS := \ vorbis.o \ wave.o \ mods/infogrames.o \ + mods/maxtrax.o \ mods/module.o \ mods/protracker.o \ mods/paula.o \ diff --git a/tfmx/module.mk b/tfmx/module.mk index 41d114bfb0..5227ae7e7e 100644 --- a/tfmx/module.mk +++ b/tfmx/module.mk @@ -1,6 +1,7 @@ MODULE := tfmx MODULE_OBJS := \ + mxtxplayer.o \ tfmxplayer.o \ tfmxdebug.o diff --git a/tfmx/mxtxplayer.cpp b/tfmx/mxtxplayer.cpp new file mode 100644 index 0000000000..b7f59a3327 --- /dev/null +++ b/tfmx/mxtxplayer.cpp @@ -0,0 +1,214 @@ +#include "common/scummsys.h" +#include "common/system.h" +#include "common/stream.h" +#include "common/file.h" +#include "common/fs.h" +#include "common/endian.h" +#include "common/debug.h" + +#include "sound/mixer.h" +#include "sound/mods/maxtrax.h" + +#if defined(MXTX_CMDLINE_TOOL) + +// #include "tfmx/tfmxdebug.h" + +#define FILEDIR "" + +using namespace Common; + +#define MUSICFILE "introscr.mx" + +bool load(Common::SeekableReadStream &musicData) { + bool res = false; + + char buf[2 * 1024]; + uint16 tempo, flags; + uint16 numScores; + + // 0x0000: 4 Bytes Header "MXTX" + // 0x0004: uint16 tempo + // 0x0006: uint16 flags. bit0 = lowpassfilter, bit1 = attackvolume, bit15 = microtonal + musicData.read(buf, 4); + tempo = musicData.readUint16BE(); + flags = musicData.readUint16BE(); + buf[4] = '\0'; + debug("Header: %s %02X %02X", buf, tempo, flags); + + if (flags & (1 << 15)) { + // uint16 microtonal[128] + musicData.skip(128 * 2); + } + + // uint16 number of Scores + numScores = musicData.readUint16BE(); + debug("#Scores: %d", numScores); + int scoresLoaded = 0; + byte *scorePtr; // array of scorestructures + for (int i = 0; i < numScores; ++i) { + uint32 numEvents = musicData.readUint32BE(); + uint32 dataLength = numEvents * 6; + const int scoremax = 128; // some variable which is set upon initialisation of player + if (scoresLoaded < scoremax) { + // allocate dataLength zeroed bytes + // increase _globaldata+glob_TotalScores and _maxtrax+mxtx_TotalScores + // load events data + debug("score %i: %i Events", scoresLoaded, numEvents); + for (int j = 0; j < numEvents; ++j) { + byte command, data; + uint16 startTime, stopTime; + command = musicData.readByte(); + data = musicData.readByte(); + startTime = musicData.readUint16BE(); + stopTime = musicData.readUint16BE(); + debug("cmd, data, start, stop: %02X, %02X, %04X, %04X", command, data, startTime, stopTime); + + } + debug(""); + // store pointer to events and # events in scorePtr, then increase scorePtr by structsize + scoresLoaded++; + } else + musicData.skip(dataLength); + } + + uint16 numSamples; + // uint16 number of Samples + numSamples = numSamples.readUint16BE(); + for (int i = 0; i < numSamples; ++i) { + // load disksample structure + uint16 number = musicData.readUint16BE(); + uint16 tune = musicData.readUint16BE(); + uint16 volume = musicData.readUint16BE(); + uint16 octaves = musicData.readUint16BE(); + uint32 attackLen = musicData.readUint32BE(); + uint32 sustainLen = musicData.readUint32BE(); + uint16 attackCount = musicData.readUint16BE(); + uint16 releaseCount = musicData.readUint16BE(); + + byte *samplePtr = 0; // samplestructure ptrs + samplePtr += number; + + byte *patchPtr = 0; // array of patchstructs + patchPtr += number; + + // Tune and Volume Info + // copy tune, volume to patch_Tune, patch_Volume + + // Attack Segment + int attacksize = attackCount * 4; + // allocate attacksize bytes + // store allocated Ptr in patch_Attack + // store attackCount in patch_AttackCount + + // read attack segment + for (int j = 0; j < attackCount; ++j) { + uint16 envDuration = musicData.readUint16BE(); + uint16 envVolume = musicData.readUint16BE(); + // store into patch_Attack + } + + // Release Segment + int releasesize = releaseCount * 4; + // allocate releasesize bytes + // store allocated Ptr in patch_Release + // store attackCount in patch_ReleaseCount + + // read release segment + for (int j = 0; j < releaseCount; ++j) { + uint16 envDuration = musicData.readUint16BE(); + uint16 envVolume = musicData.readUint16BE(); + // store into patch_Release + } + + + + + + + + + + + + + + } + + /* + + STRUCTURE PatchData,0 + APTR patch_Sample ; Amiga sample data + APTR patch_Attack ; array of env. segments + APTR patch_Release ; array of env. segments + WORD patch_AttackCount ; number of attack env. + WORD patch_ReleaseCount ; number of release env. + WORD patch_Volume ; sample volume + WORD patch_Tune ; sample tuning + BYTE patch_Number ; self-identifing + BYTE patch_pad + LABEL patch_sizeof + + STRUCTURE DiskSample,0 + WORD dsamp_Number + WORD dsamp_Tune + WORD dsamp_Volume + WORD dsamp_Octaves + LONG dsamp_AttackLength + LONG dsamp_SustainLength + WORD dsamp_AttackCount + WORD dsamp_ReleaseCount + LABEL dsamp_sizeof + + STRUCTURE CookedEvent,0 + BYTE cev_Command + BYTE cev_Data + WORD cev_StartTime + WORD cev_StopTime + LABEL cev_sizeof + + STRUCTURE EnvelopeData,0 + WORD env_Duration ; duration in milliseconds + WORD env_Volume ; volume of envelope + LABEL env_sizeof + + STRUCTURE SampleData,0 + APTR samp_NextSample + APTR samp_Waveform + LONG samp_AttackSize + LONG samp_SustainSize + LABEL samp_sizeof + */ + return res; +} + +void *loadMtmxfile(const char *mdatName) { + FSNode fileDir(FILEDIR); + FSNode musicNode = fileDir.getChild(mdatName); + SeekableReadStream *musicIn = musicNode.createReadStream(); + if (0 == musicIn) { + debug("Couldnt load file %s", mdatName); + return 0; + } + + load(*musicIn); + + + delete musicIn; + + return 0; +} + +void modcmdmain(const int argc, const char *const argv[]) { + debug("Started Scumm&VM"); + debug("Sound celebrating utility for malcoms menace & Various Malfunctions"); + debug(""); + + loadMtmxfile(MUSICFILE); + +#ifdef _MSC_VER + printf("\npress a key"); + getc(stdin); +#endif +} + +#endif // #if defined(MXTX_CMDLINE_TOOL)
\ No newline at end of file diff --git a/tfmx/tfmxplayer.cpp b/tfmx/tfmxplayer.cpp index efc3ce68b1..7dddb9fd88 100644 --- a/tfmx/tfmxplayer.cpp +++ b/tfmx/tfmxplayer.cpp @@ -7,9 +7,10 @@ #include "common/debug.h" #include "sound/mixer.h" -#include "sound/mods/protracker.h" #include "sound/mods/tfmx.h" +#if defined(TFMX_CMDLINE_TOOL) + #include "tfmx/tfmxdebug.h" #define FILEDIR "" @@ -46,7 +47,7 @@ Audio::Tfmx *loadTfmxfile(const char *mdatName, const char *sampleName) { void runFlac(int chan, int bits, int sr, const char *fileName); -void tfmxmain(const int argc, const char *const argv[]) { +void modcmdmain(const int argc, const char *const argv[]) { debug("Started Scumm&VM"); debug("Sound celebrating utility for monkey melodies & Various Malfunctions"); debug(""); @@ -167,4 +168,4 @@ void runFlac( int chan, int bits, int sr, const char *fileName) { system(cmd); } - +#endif // #if defined(TFMX_CMDLINE_TOOL) |