亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gameswf_sound_handler_sdl.cpp

?? 一個開源的嵌入式flash播放器的源代碼
?? CPP
字號:
// gameswf_sound_handler_sdl.cpp	-- Thatcher Ulrich http://tulrich.com 2003// This source code has been donated to the Public Domain.  Do// whatever you want with it.// A gameswf::sound_handler that uses SDL_mixer for output#include "gameswf/gameswf.h"#include "base/container.h"#include "SDL_mixer.h"#include "gameswf/gameswf_log.h"#include "gameswf/gameswf_types.h"	// for IF_VERBOSE_* macros// Use SDL_mixer to handle gameswf sounds.struct SDL_sound_handler : gameswf::sound_handler{	bool	m_opened;	bool	m_stereo;	int	m_sample_rate;	Uint16 m_format;	array<Mix_Chunk*>	m_samples;	#define	SAMPLE_RATE 44100	#define MIX_CHANNELS 8	#define CHANNELS 2		//stereo - 2, mono - 1	#define BUFSIZE 4096		// for 44100 bufsize 1024 is small	SDL_sound_handler()		:		m_opened(false),		m_stereo(false),		m_sample_rate(0),		m_format(0)	{		// !!! some drivers on Linux always open audio with channels=2		if (Mix_OpenAudio(SAMPLE_RATE, AUDIO_S16SYS, CHANNELS, BUFSIZE) != 0)		{			gameswf::log_error("can't open SDL_mixer: %s\n", Mix_GetError());		}		else		{			m_opened = true;     			Mix_AllocateChannels(MIX_CHANNELS);			Mix_Volume(-1, MIX_MAX_VOLUME);			// get and print the audio format in use			int channels;			int num_times_opened = Mix_QuerySpec(&m_sample_rate, &m_format, &channels);			UNUSED(num_times_opened);			m_stereo = channels == 2 ? true : false;						const char *format_str = "Unknown";			switch (m_format)			{			case AUDIO_U8: format_str = "U8"; break;			case AUDIO_S8: format_str = "S8"; break;			case AUDIO_U16LSB: format_str = "U16LSB"; break;			case AUDIO_S16LSB: format_str = "S16LSB"; break;			case AUDIO_U16MSB: format_str = "U16MSB"; break;			case AUDIO_S16MSB: format_str = "S16MSB"; break;			}	    			// @@ Usually I don't care about this.  Need a IF_VERBOSE_SOUND or something.			// IF_VERBOSE_DEBUG(			// 	gameswf::log_msg("SDL_mixer: opened %d times, frequency=%dHz, format=%s, stereo=%s\n",			// 		     num_times_opened,			// 		     m_sample_rate,			// 		     format_str,			// 		     m_stereo ? "yes" : "no"));			// char name[32];			// IF_VERBOSE_DEBUG(			// 	gameswf::log_msg("Using audio driver: %s\n", SDL_AudioDriverName(name, 32)));		}	}	~SDL_sound_handler()	{		if (m_opened)		{			Mix_CloseAudio();			for (int i = 0, n = m_samples.size(); i < n; i++)			{				if (m_samples[i])				{					Mix_FreeChunk(m_samples[i]);				}			}		}		else		{			assert(m_samples.size() == 0);		}	}	virtual int	create_sound(		void* data,		int data_bytes,		int sample_count,		format_type format,		int sample_rate,		bool stereo)	// Called by gameswf to create a sample.  We'll return a sample ID that gameswf	// can use for playing it.	{		if (m_opened == false)		{			return 0;		}		Sint16*	adjusted_data = 0;		int	adjusted_size = 0;		Mix_Chunk*	sample = 0;		switch (format)		{		case FORMAT_RAW:			convert_raw_data(&adjusted_data, &adjusted_size, data, sample_count, 1, sample_rate, stereo);			break;		case FORMAT_NATIVE16:			convert_raw_data(&adjusted_data, &adjusted_size, data, sample_count, 2, sample_rate, stereo);			break;		case FORMAT_MP3:#ifdef GAMESWF_MP3_SUPPORT			extern void convert_mp3_data(Sint16 **adjusted_data, int *adjusted_size, void *data, const int sample_count, const int sample_size, const int sample_rate, const bool stereo);			if (1) {				Sint16*	x_adjusted_data = 0;				int	x_adjusted_size = 0;				Mix_Chunk*	x_sample = 0;				convert_mp3_data(&x_adjusted_data, &x_adjusted_size, data, sample_count, 0, sample_rate, stereo);				/* convert_mp3_data doesn't ACTUALLY convert				   samplerate, so... */				convert_raw_data(&adjusted_data, &adjusted_size, x_adjusted_data, sample_count, 0, sample_rate, stereo);				if (x_adjusted_data) {					delete x_adjusted_data;				}			} else {				convert_mp3_data(&adjusted_data, &adjusted_size, data, sample_count, 0, sample_rate, stereo);			}#else			IF_VERBOSE_DEBUG(gameswf::log_error("mp3 format sound requested; this demo does not handle mp3\n"));#endif			break;		default:			// Unhandled format.			IF_VERBOSE_DEBUG(gameswf::log_error("unknown format sound requested; this demo does not handle it\n"));			break;		}		if (adjusted_data)		{			sample = Mix_QuickLoad_RAW((unsigned char*) adjusted_data, adjusted_size);			Mix_VolumeChunk(sample, MIX_MAX_VOLUME);	// full volume by default		}		m_samples.push_back(sample);		return m_samples.size() - 1;	}	virtual void	play_sound(int sound_handle, int loop_count /* other params */)	// Play the index'd sample.	{		if (sound_handle >= 0 && sound_handle < m_samples.size())		{			if (m_samples[sound_handle])			{				// Play this sample on the first available channel.				Mix_PlayChannel(-1, m_samples[sound_handle], loop_count);			}		}	}		virtual void	stop_sound(int sound_handle)	{		if (sound_handle < 0 || sound_handle >= m_samples.size())		{			// Invalid handle.			return;		}		for (int i = 0; i < MIX_CHANNELS; i++)		{			Mix_Chunk*	playing_chunk = Mix_GetChunk(i);			if (Mix_Playing(i)			    && playing_chunk == m_samples[sound_handle])			{				// Stop this channel.				Mix_HaltChannel(i);			}		}	}	virtual void	delete_sound(int sound_handle)	// gameswf calls this when it's done with a sample.	{		if (sound_handle >= 0 && sound_handle < m_samples.size())		{			Mix_Chunk*	chunk = m_samples[sound_handle];			if (chunk)			{				delete [] (chunk->abuf);				Mix_FreeChunk(chunk);				m_samples[sound_handle] = 0;			}		}	}	virtual void convert_raw_data(		Sint16** adjusted_data,		int* adjusted_size,		void* data,		int sample_count,		int sample_size,		int sample_rate,		bool stereo)	// VERY crude sample-rate & sample-size conversion.  Converts	// input data to the SDL_mixer output format (SAMPLE_RATE,	// stereo, 16-bit native endianness)	{// 		// xxxxx debug pass-thru// 		{// 			int	output_sample_count = sample_count * (stereo ? 2 : 1);// 			Sint16*	out_data = new Sint16[output_sample_count];// 			*adjusted_data = out_data;// 			*adjusted_size = output_sample_count * 2;	// 2 bytes per sample// 			memcpy(out_data, data, *adjusted_size);// 			return;// 		}// 		// xxxxx		// simple hack to handle dup'ing mono to stereo		if ( !stereo && m_stereo)		{			sample_rate >>= 1;		}		 // simple hack to lose half the samples to get mono from stereo		if ( stereo && !m_stereo)		{			sample_rate <<= 1; 		}		// Brain-dead sample-rate conversion: duplicate or		// skip input samples an integral number of times.		int	inc = 1;	// increment		int	dup = 1;	// duplicate		if (sample_rate > m_sample_rate)		{			inc = sample_rate / m_sample_rate;		}		else if (sample_rate < m_sample_rate)		{			dup = m_sample_rate / sample_rate;		}		int	output_sample_count = (sample_count * dup) / inc;		Sint16*	out_data = new Sint16[output_sample_count];		*adjusted_data = out_data;		*adjusted_size = output_sample_count * 2;	// 2 bytes per sample		if (sample_size == 1)		{			// Expand from 8 bit to 16 bit.			Uint8*	in = (Uint8*) data;			for (int i = 0; i < output_sample_count; i++)			{				Uint8	val = *in;				for (int j = 0; j < dup; j++)				{					*out_data++ = (int(val) - 128);				}				in += inc;			}		}		else		{			// 16-bit to 16-bit conversion.			Sint16*	in = (Sint16*) data;			for (int i = 0; i < output_sample_count; i += dup)			{				Sint16	val = *in;				for (int j = 0; j < dup; j++)				{					*out_data++ = val;				}				in += inc;			}		}	}};gameswf::sound_handler*	gameswf::create_sound_handler_sdl()// Factory.{	return new SDL_sound_handler;}// Local Variables:// mode: C++// c-basic-offset: 8 // tab-width: 8// indent-tabs-mode: t// End:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本怡春院一区二区| 99精品视频中文字幕| 欧美一区二区精品在线| 五月婷婷另类国产| 欧美日韩大陆在线| 日韩电影免费一区| 精品少妇一区二区三区在线播放 | 亚洲欧洲成人精品av97| 国产精品亚洲视频| 欧美激情综合五月色丁香| 成人av在线看| 亚洲自拍偷拍九九九| 3d动漫精品啪啪| 国产一区二区主播在线| 国产精品水嫩水嫩| 色综合久久综合网欧美综合网| 亚洲人成网站精品片在线观看 | 国产黑丝在线一区二区三区| 久久蜜臀精品av| 91在线视频免费91| 丝袜a∨在线一区二区三区不卡| 欧美日韩久久不卡| 国产在线精品一区二区三区不卡| 国产亚洲精品bt天堂精选| 97国产一区二区| 日韩专区一卡二卡| 国产欧美日韩中文久久| 91国偷自产一区二区开放时间| 婷婷亚洲久悠悠色悠在线播放| 久久久久国产成人精品亚洲午夜| 99国产精品久久| 免费成人美女在线观看.| 国产亚洲成av人在线观看导航| 99久久伊人精品| 麻豆精品新av中文字幕| 国产精品区一区二区三| 欧美精品v国产精品v日韩精品 | 天堂影院一区二区| 国产午夜亚洲精品不卡| 欧美中文字幕一区| 国产乱一区二区| 亚洲国产精品一区二区www| 日韩欧美精品三级| 91美女蜜桃在线| 黑人巨大精品欧美一区| 亚洲与欧洲av电影| 国产精品污www在线观看| 欧美精品第一页| 色综合av在线| 成人毛片视频在线观看| 免费成人在线视频观看| 亚洲成av人片在www色猫咪| 中文字幕精品综合| 欧美xxxxxxxx| 91精品午夜视频| 欧亚洲嫩模精品一区三区| 成人综合在线观看| 久久99国产精品成人| 亚洲福利视频一区| 亚洲日本青草视频在线怡红院| 精品国产乱码久久久久久久| 欧美日韩高清影院| 色综合久久久久网| 成人一区二区三区视频在线观看 | 国产成人精品三级| 美女精品一区二区| 石原莉奈一区二区三区在线观看| 亚洲欧洲制服丝袜| 国产精品免费视频一区| 久久久九九九九| 欧美大片顶级少妇| 91精品欧美一区二区三区综合在| 欧美在线你懂得| 在线免费观看成人短视频| www.视频一区| 北岛玲一区二区三区四区| 国产精品小仙女| 国产成人精品aa毛片| 国产精品一卡二卡| 九一九一国产精品| 国产一区久久久| 国产精品一区一区三区| 国产精品影视网| 成人黄色综合网站| eeuss鲁片一区二区三区在线看| 丁香婷婷综合激情五月色| 国产99久久久国产精品潘金| 国产精品资源网站| 成人小视频免费在线观看| 成人一区在线观看| 色综合久久中文字幕| 欧美自拍丝袜亚洲| 欧美色综合久久| 欧美区在线观看| 日韩精品一区在线| 久久精品视频在线免费观看| 日本一区二区三区视频视频| 18成人在线视频| 亚洲午夜私人影院| 蜜桃av一区二区在线观看| 卡一卡二国产精品 | 国产日韩欧美a| 自拍偷拍国产亚洲| 亚洲国产精品麻豆| 免费观看久久久4p| 国产成人午夜精品5599| 91麻豆免费观看| 欧美日韩国产高清一区| 精品久久久久久最新网址| 国产欧美日韩另类一区| 一区二区三区欧美日| 免费欧美高清视频| 国产福利精品一区二区| 91在线观看视频| 欧美日韩三级在线| 久久婷婷久久一区二区三区| 国产精品久久久久久久久免费樱桃| 亚洲欧美日韩国产另类专区| 日韩国产高清影视| 成人国产一区二区三区精品| 欧美日韩亚洲丝袜制服| www国产成人| 夜夜精品浪潮av一区二区三区| 日本欧美肥老太交大片| 成人av在线电影| 日韩欧美国产一区二区三区| 国产精品久久久久影院老司| 视频在线观看一区二区三区| 成人在线视频一区二区| 欧美精品免费视频| 国产精品蜜臀在线观看| 蜜臂av日日欢夜夜爽一区| 成人av影视在线观看| 欧美一级爆毛片| 亚洲欧美一区二区三区国产精品 | 欧美日本一道本在线视频| 国产欧美一区视频| 日日嗨av一区二区三区四区| 99精品欧美一区二区蜜桃免费| 日韩精品一区二区三区中文不卡 | 久久精品国产第一区二区三区| 成人sese在线| 久久免费视频色| 日本aⅴ免费视频一区二区三区| 色综合久久久久综合| 中文字幕+乱码+中文字幕一区| 免费观看日韩av| 欧美日韩小视频| 亚洲日本欧美天堂| 波多野洁衣一区| 国产午夜精品久久久久久久| 国产色婷婷亚洲99精品小说| 国产精品免费久久| 国产一区二区福利视频| 欧美专区日韩专区| 亚洲国产精品传媒在线观看| 亚洲最新在线观看| 国产在线精品免费av| 一本色道久久综合亚洲精品按摩| 欧美成人精品1314www| 中文字幕永久在线不卡| 欧美精品乱码久久久久久按摩 | 亚洲精品日韩综合观看成人91| 麻豆精品视频在线观看免费| 欧美一区国产二区| 亚洲综合一区在线| 国产suv精品一区二区6| 欧美一区二区精美| 奇米综合一区二区三区精品视频| 91色在线porny| 亚洲国产高清在线观看视频| 麻豆精品视频在线观看免费| 欧美日韩国产综合视频在线观看| 国产精品白丝在线| 国产精品综合一区二区三区| 欧美一区二区人人喊爽| 欧美bbbbb| 欧美精品一级二级| 亚洲电影视频在线| 91成人国产精品| 午夜亚洲福利老司机| 欧美自拍丝袜亚洲| 亚洲女同一区二区| 从欧美一区二区三区| 国产精品久久久久久久蜜臀| 国产91精品露脸国语对白| 久久久精品人体av艺术| 丁香天五香天堂综合| 国产欧美一区二区三区鸳鸯浴| 久久99这里只有精品| 欧美一区二区三区免费观看视频| 青青草精品视频| 精品久久久久久综合日本欧美| 日韩福利视频导航| 欧美日韩国产高清一区二区| 久久99久久99| 国产日韩在线不卡| 成人综合婷婷国产精品久久蜜臀| 亚洲欧美日韩一区| 在线免费不卡电影|