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

📄 fsound.h

📁 swf文件结构介绍
💻 H
字号:
#ifndef SNDMIX_INCLUDED#define SNDMIX_INCLUDED// #include <windows.h>// #include <mmreg.h>#include <assert.h>#include <stdio.h>#include <vector>#include "Macromedia.h"#include "FFixed.h"struct WaveFormat{    U16        wFormatTag;         /* format type */    U16        nChannels;          /* number of channels (i.e. mono, stereo...) */    U32        nSamplesPerSec;     /* sample rate */    U32        nAvgBytesPerSec;    /* for buffer estimation */    U16        nBlockAlign;        /* block size of data */    U16        wBitsPerSample;     /* number of bits per sample of mono data */    U16        cbSize;             /* the count in bytes of the size of */};// Our supported sample rates// Note that sndRate5K is really 5512.5khz// Use defines instead of an enum since these must be 32 bits on all platforms#define sndRate5K	5512L#define sndRate11K	11025L#define sndRate22K	22050L#define sndRate44K	44100Lconst int sndMono			= 0x0;const int sndStereo			= 0x1;const int snd8Bit			= 0x0;const int snd16Bit			= 0x2;const int snd5K				= 0<<2;const int snd11K			= 1<<2;const int snd22K			= 2<<2;const int snd44K			= 3<<2;const int sndCompressNone	= 0x00; // we could add 14 more compression types here...const int sndCompressADPCM	= 0x10;const int sndCompressMP3	= 0x20;const int sndCompressNoneI	= 0x30; // save out in intel byte orderconst int sndRateMask		= 0x3 << 2;const int sndCompressMask	= 0xF0;enum {// Sound format types		snd5K8Mono = 0,		snd5K8Stereo, 		snd5K16Mono,		snd5K16Stereo, 		snd11K8Mono,		snd11K8Stereo, 		snd11K16Mono,		snd11K16Stereo, 		snd22K8Mono,		snd22K8Stereo, 		snd22K16Mono,		snd22K16Stereo, 		snd44K8Mono,		snd44K8Stereo, 		snd44K16Mono,		snd44K16Stereo 	  };// This object defines a sound sampleclass FSound {public:	int			format;			S32			nSamples; 	// the number of samples - duration = nSamples/Rate()	void *	samples;  	// this should probably be a handle on Mac	S32			dataLen;   	// length in bytes of samples - set only if needed    S32         delay;      // MP3 compression has a delay before the real sound data	static const S32 kRateTable[4];	static const int kRateShiftTable[4];	public:	void Init();	S32 Rate()				{ return kRateTable[(format >> 2)&0x3]; }	int RateShift()			{ return kRateShiftTable[(format >> 2)&0x3]; }	bool Stereo()			{ return (format & sndStereo) != 0; }	int NChannels()			{ return (format & sndStereo) ? 2 : 1; }	bool Is8Bit()			{ return (format & snd16Bit) == 0; }	int BitsPerSample()		{ return (format & snd16Bit) ? 16 : 8; }	int BytesPerSample()	{ return (format & snd16Bit) ? 2 : 1; }	int CompressFormat()	{ return format & sndCompressMask; }	bool Compressed()		{ return (format & sndCompressMask) != 0; }	// Manage the duration in 44kHz units	S32 GetDuration44() { return nSamples<<RateShift(); }	void SetDuration44(S32 d) { nSamples = d>>RateShift(); }	int BytesPerBlock() { return BytesPerSample()*NChannels(); }	S32 SizeBytes() { return nSamples*BytesPerBlock(); }	void Set( WaveFormat* );};class FSoundComp {private:	BOOL isStereo;	BOOL is8Bit;	int nBits;			// number of bits in each sample	S32 nSamples;		// samples compressed so far	S32 valpred[2];		// ADPCM state	int index[2];	// The Destination	S32 len;			// default is to just calculate the size	// State for writing bits	unsigned int bitBuf;	int bitPos;  public:	FSoundComp(FSound* snd, S32 numberBits );  // numberBits from 2-5	~FSoundComp() { assert(bitPos == 0); }	void Compress(void* src, S32 n, std::vector<U8>* stream);	void Flush( std::vector<U8>* stream );  private:	void Compress16(S16* src, S32 n, std::vector<U8>* stream );	// Write variable width bit fields	void WriteBits( std::vector<U8>* stream );	// empty the buffer of whole bytes		void PutBits(S32 v, int n, std::vector<U8>* stream ) {		assert(n<=16);		if ( bitPos + n > 32 ) WriteBits( stream );		bitBuf = (bitBuf<<n) | (v & ~(0xFFFFFFFFL<<n));		bitPos += n;	}};#endif

⌨️ 快捷键说明

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