www.pudn.com > FlashFormat.rar > FDTSounds.h


// Copyright © 1999 Middlesoft, Inc. All rights reserved.
// First Created By Lee Thomason.
// First Created On 09/08/1999.
// Last Modified On 11/09/1999.

/****************************************************************************************

				File Summary: FDTSounds.h

	This header-file contains the declarations of all low-level sound-related classes. 
	Their parent classes are in the parentheses:

		class FDTDefineSound; (public FDT)
		class FDTDefineSoundADPCM; (public FDTDefineSound)
		class FDTDefineSoundWAV; (public FDTDefineSound)
		class FDTSoundStreamBlock; (public FDT)
		class FDTSoundStreamHead; (public FDT)
		class FDTSoundStreamHead2; (public FDT)
		class FSndEnv;
		class FSoundInfo;

****************************************************************************************/

#ifndef _F_DEFINE_SOUNDS_H_ 
#define _F_DEFINE_SOUNDS_H_ 

#include "Macromedia.h"
#include "FDT.h"

#include 

// A flash object that defines a sound

class FDTDefineSound : public FDT
{
public:
	// Compression Type
	enum {
		NO_COMPRESSION,
		PCM
	};

	// Compression Level
	enum {
		Comp2 = 2,
		Comp3,
		Comp4,
		Comp5
	};

	// Sound Rate
	enum {
		Snd5k,
		Snd11k,
		Snd22k,
		Snd44k
	};

	// Sound Size
	enum {
		Snd8Bit,
		Snd16Bit
	};
	
	// Sound Type
	enum {
		Snd16Mono,
		Snd16Stereo
	};

	FDTDefineSound();
    virtual ~FDTDefineSound() {}
	virtual void WriteToSWFStream( FSWFStream* _SWFStream );

	U16 ID()			{ return soundID; }
	int NumSamples()	{ return soundData.sampleCount; }
	int Format()		{ return 4 * ( soundData.rate ) + ( soundData.size ) * 2 + ( soundData.type ); }
	int SoundType()		{ return soundData.type; }

protected:

	U16		soundID;
	SSound	soundData;
	std::vector pcmData;
};


// A flash object that defines a sound

class FDTDefineSoundADPCM : public FDTDefineSound
{
public:
	
	FDTDefineSoundADPCM( U8 rate, U8 size, U8 type, U32 sampleCount,
				         const U8* data, U32 dataSize, int compression );
};


// A flash object that defines a sound
class FDTDefineSoundWAV: public FDTDefineSound{

public:
	
	FDTDefineSoundWAV( FILE* wavFile, int compression );

private:
	bool loadWavFile( FILE* fp,
					  SSound* soundData,
					  U8** wavData,
					  int*	 wavDataSize
    				);
	U32	read32( FILE* fp )		{	U32 val;
									fread( &val, 1, 4, fp );
									return val;
								}
	U16	read16( FILE* fp )		{	U16 val;
									fread( &val, 1, 2, fp );
									return val;
								}
};


// A Flash object that defines sound data that is interleaved with frame data
//enables sound streaming

class FDTSoundStreamBlock: public FDT{

public:
	FDTSoundStreamBlock(U32 _size, U8* _data);
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U32 size;
	U8* data;
};



// A flash object that defines the start of sound data that will be interleaved within flash frames
// This is how sound streaming of networks is possible.
//	Doesn't support compressed sound (flash 2.0)  

class FDTSoundStreamHead: public FDT{

public:
	FDTSoundStreamHead(		U8 _mixFormat,	// mixer format (?) set to 6
							U8 _soundType,  // 0 mono, 1 stereo
							U16 _count		// number of sound samples
					  );
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U8 mixFormat;
	U8 soundType;
	U16 count;

};


class FDTSoundStreamHead2 : public FDT{

public:
	FDTSoundStreamHead2(U8 _mixFormat, U8 _compression, U8 _size, U8 _soundType, U16 _count);
	virtual void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U8 mixFormat;
	U8 compression;
	U8 size;
	U8 soundType;
	U16 count;

};


class FSndEnv{

public:
	FSndEnv(U32 mark44, U16 level0, U16 level1);
	void WriteToSWFStream(FSWFStream* _SWFStream);

private:
	U32 mark44;
	U16 level0;
	U16 level1;

};


// specifies how a sound character is player

class FSoundInfo{

public:
	FSoundInfo( U8 _syncFlags,	U8 _hasEnvelope,	U8 _hasLoops,	U8 _hasOutPoint,
				U8 _hasInPoint, U32 _inPoint,		U32 _outPoint,	U16 _loopCount,
				U8 _nPoints,	FSndEnv* _soundEnvelope);
	~FSoundInfo();
	void WriteToSWFStream(FSWFStream* _SWFStream);

	enum
	{
		SyncNoMultiple  = 0x01,
		SyncStor		= 0x02
	};

private:
	U8 syncFlags;
	U8 hasEnvelope;
	U8 hasLoops;
	U8 hasOutPoint;
	U8 hasInPoint;
	U32 inPoint;
	U32 outPoint;
	U16 loopCount;
	U8 nPoints;
	FSndEnv* soundEnvelope;


};


#endif