⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fsound.h

📁 这是一个用VC++开发的flashsource端的程序
💻 H
字号:
#ifndef FSOUND_H_FILE
#define FSOUND_H_FILE

#include "FBase.h"
#include <vector>
#include <iostream>


#define FTDS_COMPRESS_NONE		(0 << 4)
#define FTDS_COMPRESS_ADPCM		(1 << 4)
#define FTDS_COMPRESS_MP3		(2 << 4)

#define FTDS_RATE_5_5_KHZ		(0 << 2)
#define FTDS_RATE_11_KHZ		(1 << 2)
#define FTDS_RATE_22_KHZ		(2 << 2)
#define FTDS_RATE_44_KHZ		(3 << 2)

#define FTDS_SND_16BIT			(1 << 1)
#define FTDS_SND_8BIT			(0 << 1)

#define FTDS_SND_STEREO			(1)
#define FTDS_SND_MONO			(0)

class FlashTagDefineSound : public FlashTag, public FlashIDEnabled
{
	DEFINE_RW_INTERFACE
		FlashTagDefineSound() {}
public:
	FlashTagDefineSound(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len)
		: samples(_samples), flags(_flags), samplecount(_samplecount), len(_len) {}

	friend class FlashImportHandler;	
	friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSound &data);
	friend std::istream& operator>>(std::istream& in, FlashTagDefineSound &data);


	char GetFlags() const { return flags; }
	UDWORD GetSampleCount() const { return samplecount; };
	UDWORD GetSampleLength() const { return len; };
	char *GetSamples() { return samples; };
protected:
	char *samples;
	gc_vector<char *>samplevec;
	unsigned char flags;
	UDWORD samplecount;
	UDWORD len;
};


class FlashTagDefineSoundMP3 : public FlashTagDefineSound
{
	DEFINE_RW_INTERFACE
public:
	FlashTagDefineSoundMP3() {}
	FlashTagDefineSoundMP3(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len, UWORD _delayseek)
		: FlashTagDefineSound((unsigned char)((_flags & 0xf) | (2 << 4)) , _samplecount, _samples, _len), delayseek(_delayseek) {}

	friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSoundMP3 &data);
	friend std::istream& operator>>(std::istream& in, FlashTagDefineSoundMP3 &data);
private:
	gc_vector<char *>samplevec;
	UWORD delayseek;
public:
	UWORD GetDelaySeek() const { return delayseek; }
};

class FlashSoundEnvelope
{
public:	
	FlashSoundEnvelope(UDWORD _mark44, UWORD _level0, UWORD _level1) : mark44(_mark44), 
		level0(_level0), level1(_level1)   {}

	friend std::ostream& operator<<(std::ostream& out, FlashSoundEnvelope &data);
	friend std::istream& operator>>(std::istream& in, FlashSoundEnvelope &data);

private:
	UDWORD mark44;
	UWORD level0;
	UWORD level1;
};

#define FSI_SYNC_NO_MULTIPLE	(1 << 4)
#define FSI_SYNC_STOP			(2 << 4)
#define FSI_HAS_ENVELOPE		(1 << 3)
#define FSI_HAS_LOOP			(1 << 2)
#define FSI_HAS_OUT				(1 << 1)
#define FSI_HAS_IN				(1)

class FlashTagStartSound;

class FlashSoundInfo 
{
	FlashSoundInfo() {}
public:
	FlashSoundInfo(unsigned char _flags) : flags(_flags & 0xf0) {}
	FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount)  :
		flags(_flags & 0xfe), inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount) {}
	FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount, 
		std::vector<FlashSoundEnvelope> &v) : flags(_flags),
		inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount), v_snd_env(v) {}
private:
	friend class FlashTagStartSound;
	friend std::ostream& operator<<(std::ostream& out, FlashSoundInfo &data);
	friend std::istream& operator>>(std::istream& in, FlashSoundInfo &data);

public:
	
	void SetFlags(unsigned char _flags) { flags = _flags; };
	void SetLoopCount(UWORD lc) { flags |= FSI_HAS_LOOP; loopCount = lc; }
	void SetInPoint(UDWORD p) { flags |= FSI_HAS_IN; inPoint = p; }
	void SetOutPoint(UDWORD p) { flags |= FSI_HAS_OUT; outPoint = p; }
	void AddEnvelope(FlashSoundEnvelope e) { flags |= FSI_HAS_ENVELOPE; v_snd_env.push_back(e); }

	unsigned char GetFlags() { return flags; }
	UDWORD GetInPoint() { return inPoint; }
	UDWORD GetOutPoint() { return outPoint; }
	UDWORD GetLoopCount() { return loopCount; }
	std::vector<FlashSoundEnvelope> &GetEnvelopes() { return v_snd_env; }


private:
	unsigned char flags;
	UDWORD inPoint;
	UDWORD outPoint;
	UWORD loopCount;
	std::vector<FlashSoundEnvelope> v_snd_env;
};

class FlashTagStartSound : public FlashSpriteEnabled
{
	DEFINE_RW_INTERFACE
public:
	FlashTagStartSound() {}
	FlashTagStartSound(UWORD _id, FlashSoundInfo &s) : id(_id), si(s) {}

	friend std::ostream& operator<<(std::ostream& out, FlashTagStartSound &data);
	friend std::istream& operator>>(std::istream& in, FlashTagStartSound &data);

	UWORD GetID() const { return id; }
	FlashSoundInfo GetSoundInfo() { return si; }

private:
	UWORD id;
	FlashSoundInfo si;	
};

#define FTSSH_RATE_5_5_KHZ 0
#define FTSSH_RATE_11_KHZ  1
#define FTSSH_RATE_22_KHZ  2
#define FTSSH_RATE_44_KHZ  3

class FlashTagSoundStreamHead : public FlashSpriteEnabled
{
	DEFINE_RW_INTERFACE
public:
	FlashTagSoundStreamHead() {}
	FlashTagSoundStreamHead(char play_rate, bool play_16bit, bool play_stereo, 
							char stream_rate, bool stream_16bit, bool stream_stereo, UWORD samplecountavg)
							: mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 
							mcompression(1), mstream_rate(stream_rate), mstream_16bit(stream_16bit), 
							mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {}

	friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead &data);
	friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead &data);

public:
	char GetPlayRate() { return mplay_rate; }
	bool GetPlay16bit() { return mplay_16bit; }
	bool GetPlayStereo() { return mplay_stereo; }
	void SetCompression(char c) { mcompression = c; }
	char GetCompression() { return mcompression; }
	char GetStreamRate() { return mstream_rate; }
	bool GetStream16bit() { return mstream_16bit; }
	bool GetStreamStereo() { return mstream_stereo; }
	UWORD GetSampleCountAvg() { return msamplecountavg; }
private:	
	char mplay_rate;
	bool mplay_16bit;
	bool mplay_stereo;
	char mcompression;
	char mstream_rate;
	bool mstream_16bit;
	bool mstream_stereo; 
	UWORD msamplecountavg;	
};

#define FTSSH2_RATE_5_5_KHZ 0
#define FTSSH2_RATE_11_KHZ  1
#define FTSSH2_RATE_22_KHZ  2
#define FTSSH2_RATE_44_KHZ  3

#define FTSSH2_COMPRESS_NONE   0
#define FTSSH2_COMPRESS_ADPCM  1
#define FTSSH2_COMPRESS_MP3    2

class FlashTagSoundStreamHead2 : public FlashSpriteEnabled
{
	DEFINE_RW_INTERFACE
public:
	FlashTagSoundStreamHead2() {}
	FlashTagSoundStreamHead2(char play_rate, bool play_16bit, bool play_stereo, char compression,
							char stream_rate, bool stream_16bit, bool stream_stereo, UWORD samplecountavg)
							: mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 
							mcompression(compression), mstream_rate(stream_rate), mstream_16bit(stream_16bit), 
							mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {}

	friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead2 &data);
	friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead2 &data);

public:
	char GetPlayRate() { return mplay_rate; }
	bool GetPlay16bit() { return mplay_16bit; }
	bool GetPlayStereo() { return mplay_stereo; }
	char GetCompression() { return mcompression; }
	char GetStreamRate() { return mstream_rate; }
	bool GetStream16bit() { return mstream_16bit; }
	bool GetStreamStereo() { return mstream_stereo; }
	UWORD GetSampleCountAvg() { return msamplecountavg; }
private:
	char mplay_rate;
	bool mplay_16bit;
	bool mplay_stereo;
	char mcompression;
	char mstream_rate;
	bool mstream_16bit;
	bool mstream_stereo; 
	UWORD msamplecountavg;	
};


class FlashTagSoundStreamBlock : public FlashSpriteEnabled
{
	DEFINE_RW_INTERFACE
public:
	FlashTagSoundStreamBlock() {}
	FlashTagSoundStreamBlock(char *_data, UDWORD _len) : data(_data), len(_len) {}

	friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlock &data);
	friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlock &data);

	UDWORD GetSampleLength() const { return len; }
	char *GetSamples() { return data; }
protected:
        char *data;
	UDWORD len;

	
	gc_vector<char *> gc;
};

class FlashTagSoundStreamBlockMP3 : public FlashTagSoundStreamBlock
{
	DEFINE_RW_INTERFACE
public:
        FlashTagSoundStreamBlockMP3() {}
        FlashTagSoundStreamBlockMP3(UWORD _samplecount, UWORD _delayseek, char *_data, UDWORD _len) : FlashTagSoundStreamBlock(_data,_len), samplecount(_samplecount), delay_seek(_delayseek) {}

	friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlockMP3 &data);
	friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlockMP3 &data);

private:
    UWORD samplecount;
	UWORD delay_seek;

};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -