diff src/Input/modplug/modplugbmp.h @ 0:13389e613d67 trunk

[svn] - initial import of audacious-plugins tree (lots to do)
author nenolod
date Mon, 18 Sep 2006 01:11:49 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Input/modplug/modplugbmp.h	Mon Sep 18 01:11:49 2006 -0700
@@ -0,0 +1,140 @@
+/* Modplug XMMS Plugin
+ * Authors: Kenton Varda <temporal@gauge3d.org>
+ *
+ * This source code is public domain.
+ */
+
+#ifndef __MODPLUGXMMS_CMODPLUGXMMS_H_INCLUDED__
+#define __MODPLUGXMMS_CMODPLUGXMMS_H_INCLUDED__
+
+#include <string>
+#include <glib.h>
+
+#ifndef __MODPLUGXMMS_STDDEFS_H__INCLUDED__
+#include "stddefs.h"
+#endif
+
+#include "audacious/plugin.h"
+
+/* Module files have their magic deep inside the file, at offset 1080; source: http://www.onicos.com/staff/iz/formats/mod.html and information by Michael Doering from UADE */
+#define MOD_MAGIC_PROTRACKER4	(unsigned char [4]) { 0x4D, 0x2E, 0x4B, 0x2E }  // "M.K." - Protracker 4 channel
+#define MOD_MAGIC_PROTRACKER4X	(unsigned char [4]) { 0x4D, 0x21, 0x4B, 0x21 }  // "M!K!" - Protracker 4 channel
+#define MOD_MAGIC_NOISETRACKER	(unsigned char [4]) { 0x4D, 0x26, 0x4B, 0x21 }  // "M&K!" - Noisetracker 1.3 by Kaktus & Mahoney
+#define MOD_MAGIC_STARTRACKER4	(unsigned char [4]) { 0x46, 0x4C, 0x54, 0x34 }  // "FLT4" - Startracker 4 channel (Startrekker/AudioSculpture)
+#define MOD_MAGIC_STARTRACKER8	(unsigned char [4]) { 0x46, 0x4C, 0x54, 0x38 }  // "FLT8" - Startracker 8 channel (Startrekker/AudioSculpture) 
+#define MOD_MAGIC_STARTRACKER4X	(unsigned char [4]) { 0x45, 0x58, 0x30, 0x34 }  // "EX04" - Startracker 4 channel (Startrekker/AudioSculpture)
+#define MOD_MAGIC_STARTRACKER8X	(unsigned char [4]) { 0x45, 0x58, 0x30, 0x38 }  // "EX08" - Startracker 8 channel (Startrekker/AudioSculpture) 
+#define MOD_MAGIC_FASTTRACKER4	(unsigned char [4]) { 0x34, 0x43, 0x48, 0x4E }  // "4CHN" - Fasttracker 4 channel
+#define MOD_MAGIC_FASTTRACKER6	(unsigned char [4]) { 0x36, 0x43, 0x48, 0x4E }  // "6CHN" - Fasttracker 6 channel
+#define MOD_MAGIC_FASTTRACKER8	(unsigned char [4]) { 0x38, 0x43, 0x48, 0x4E }  // "8CHN" - Fasttracker 8 channel
+#define MOD_MAGIC_OKTALYZER8	(unsigned char [4]) { 0x43, 0x44, 0x38, 0x31 }  // "CD81" - Atari oktalyzer 8 channel
+#define MOD_MAGIC_OKTALYZER8X	(unsigned char [4]) { 0x4F, 0x4B, 0x54, 0x41 }  // "OKTA" - Atari oktalyzer 8 channel
+#define MOD_MAGIC_TAKETRACKER16	(unsigned char [4]) { 0x31, 0x36, 0x43, 0x4E }  // "16CN" - Taketracker 16 channel
+#define MOD_MAGIC_TAKETRACKER32 (unsigned char [4]) { 0x33, 0x32, 0x43, 0x4E }  // "32CN" - Taketracker 32 channel
+
+#define S3M_MAGIC	(unsigned char [4]) { 0x53, 0x43, 0x52, 0x4D }			/* This is the SCRM string at offset 44 to 47 in the S3M header */
+
+/* These nicer formats have the magic bytes at the front of the file where they belong */
+#define UMX_MAGIC	(unsigned char [4]) { 0xC1, 0x83, 0x2A, 0x9E }
+#define XM_MAGIC	(unsigned char [4]) { 0x45, 0x78, 0x74, 0x65 }			/* Exte(nded Module) */
+#define M669_MAGIC	(unsigned char [4]) { 0x69, 0x66, 0x20, 0x20 }
+#define IT_MAGIC	(unsigned char [4]) { 0x49, 0x4D, 0x50, 0x4D }			/* IMPM */
+#define MTM_MAGIC	(unsigned char [4]) { 0x4D, 0x54, 0x4D, 0x10 }
+#define PSM_MAGIC	(unsigned char [4]) { 0x50, 0x53, 0x4D, 0x20 }
+
+using namespace std;
+
+class CSoundFile;
+class Archive;
+
+class ModplugXMMS
+{
+public:
+	struct Settings
+	{
+		gboolean   mSurround;
+		gboolean   mOversamp;
+		gboolean   mMegabass;
+		gboolean   mNoiseReduction;
+		gboolean   mVolumeRamp;
+		gboolean   mReverb;
+		gboolean   mFastinfo;
+		gboolean   mUseFilename;
+		gboolean   mGrabAmigaMOD;
+		gboolean   mPreamp;
+	
+		gint       mChannels;
+		gint       mBits;
+		gint       mFrequency;
+		gint       mResamplingMode;
+	
+		gint       mReverbDepth;
+		gint       mReverbDelay;
+		gint       mBassAmount;
+		gint       mBassRange;
+		gint       mSurroundDepth;
+		gint       mSurroundDelay;
+		gfloat     mPreampLevel;
+		gint       mLoopCount;
+		
+		Settings();
+	};
+
+	ModplugXMMS();
+	~ModplugXMMS();
+	
+	void Init();                      // Called when the plugin is loaded
+	bool CanPlayFile(const string& aFilename);// Return true if the plugin can handle the file
+
+	void CloseConfigureBox();
+
+	void PlayFile(const string& aFilename);// Play the file.
+	void Stop();                       // Stop playing.
+	void Pause(bool aPaused);              // Pause or unpause.
+
+	void Seek(float32 aTime);                // Seek to the specified time.
+	float32 GetTime();                   // Get the current play time.
+
+	void GetSongInfo(const string& aFilename, char*& aTitle, int32& aLength); // Function to grab the title string
+
+	void SetInputPlugin(InputPlugin& aInPlugin);
+	void SetOutputPlugin(OutputPlugin& aOutPlugin);
+
+	const Settings& GetModProps();
+	void SetModProps(const Settings& aModProps);
+
+private:
+	InputPlugin*  mInPlug;
+	OutputPlugin* mOutPlug;
+
+	uchar*  mBuffer;
+	uint32  mBufSize;
+
+	bool          mPaused;
+	volatile bool mStopped;
+
+	Settings mModProps;
+
+	AFormat mFormat;
+
+	uint32  mBufTime;		//milliseconds
+
+	CSoundFile* mSoundFile;
+	Archive*    mArchive;
+
+	uint32      mPlayed;
+
+	GThread*    mDecodeThread;
+
+	char        mModName[100];
+	
+	float mPreampFactor;
+
+	void PlayLoop();
+	static void* PlayThread(void* arg);
+	const char* Bool2OnOff(bool aValue);
+};
+
+extern ModplugXMMS gModplugXMMS;
+
+#endif //included