Esempio n. 1
0
/****************************************************
    連続再生設定
		引数	_data = サウンドデータ
				_size = サウンドデータサイズ
				_loop = ループ回数(0:無限ループ)
 ****************************************************/
void	SoundPlayer::set_next(const void* _data, u32 _size, int _loop)
{
	if ( sound_data == NULL ) {				// すでに鳴り終わっている可能性
		play(_data, _size, _loop);
		return;
	}

	void*	_file_data;

	switch ( _size ) {
	  case FILE_ASSET :				// assetファイル
		_file_data = load_asset((char*)_data, &_size);
		_data = _file_data;
		break;

	  default :						// メモリ
		_file_data = NULL;
		break;
	}

	switch ( format ) {
	  case FORMAT_WAV :						// WAVデータ
		assert(*((u32*)_data) == 0x46464952);
		{
			WaveFormat*		_info = (WaveFormat*)_data;

			sound_data->set_next(new SoundData((char*)((u32)_data + sizeof(WaveFormat)), _info->data_size, _loop, _file_data));
		}
		break;

	  case FORMAT_OGG :						// OGGデータ
		assert(*((u32*)_data) == 0x5367674f);
		sound_data->set_next(new SoundData((char*)_data, _size, _loop, _file_data));
		break;
	}
}
Esempio n. 2
0
void GameCanvas::load_assets()
{
    assets["arrow"] = load_asset("://ui/szczalka");
    assets["obstacle"] = load_asset("://map/wall");
    assets["background"] = load_asset("://map/back");
    assets["doors"] = load_asset("://map/door");
    assets["force_field"] = load_asset("://map/force_field");
    assets["ui"] = load_asset("://ui/background");
    assets["sky"] = load_asset("://map/sky");
    assets["pc"] = load_asset("://map/pc");
    assets["big_pc"] = load_asset("://map/big_pc");

    assets["ui/labels"] = load_asset("://ui/labels");

    // Generate lists to iterate through
    QStringList hairtypes, states;
    hairtypes << "blonde" << "brown" << "gray" << "red";
    states << "m" << "m_dead" << "f" << "f_dead" << "f_boss";

    // iterate through hairtypes and states
    for (int i=0; i<hairtypes.count(); i++) {
        for (int j=0; j<states.count(); j++) {
            // create path
            QString path = "people/" + hairtypes.at(i) + "/" + states.at(j);

            // load asset from qrc
            assets[path] = load_asset("://"+path);
        }
    }

    // load all the pcs
    QStringList types;
    types << "bsod" << "av_01" << "av_02" << "broken_01" << "broken_02" << "broken_03" << "fixed_01" << "fixed_02" << "working_03" << "apple" << "net5" << "big_av_01" << "big_av_02" << "big_corrupted";

    // iterate through types
    for (int i=0; i<types.count(); i++) {
         // load asset from qrc
         assets["pc_"+types.at(i)] = load_asset("://map/pc_states/"+types.at(i));
    }
}
Esempio n. 3
0
/****************************************************
    再生
		引数	_data = サウンドデータ
				_size = サウンドデータサイズ
				_loop = ループ回数(0:無限ループ)
				_vol  = 音量
 ****************************************************/
void	SoundPlayer::prepare(const void* _data, u32 _size, int _loop, float _vol)
{
	stop();

	void*	_file_data;

	switch ( _size ) {
	  case FILE_ASSET :				// assetファイル
		_file_data = load_asset((char*)_data, &_size);
		_data = _file_data;
		break;

	  default :						// メモリ
		_file_data = NULL;
		break;
	}


	SLDataLocator_AndroidSimpleBufferQueue	loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
	SLDataFormat_PCM						format_pcm;
	SLDataSource							audioSrc = {&loc_bufq, &format_pcm};

	switch ( *((u32*)_data) ) {						// データフォーマット
	  case 0x46464952 :			// WAV
		{
			format = FORMAT_WAV;

			WaveFormat*		_info = (WaveFormat*)_data;

			format_pcm.formatType		= SL_DATAFORMAT_PCM;
			format_pcm.numChannels		= (SLuint32)_info->channel;
			format_pcm.samplesPerSec	= (SLuint32)_info->rate*1000;
			format_pcm.bitsPerSample	= (SLuint32)_info->bit;
			format_pcm.containerSize	= (SLuint32)_info->bit;
			format_pcm.channelMask		= (_info->channel == 1) ? SL_SPEAKER_FRONT_CENTER : (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT);
			format_pcm.endianness		= SL_BYTEORDER_LITTLEENDIAN;

			sound_data = new SoundData((char*)((u32)_data + sizeof(WaveFormat)), _info->data_size, _loop, _file_data);
		}
		break;

	  case 0x5367674f :			// OGG
		{
			format = FORMAT_OGG;

			sound_data = new SoundData((char*)_data, _size, _loop, _file_data);
			ov_pos = 0;								// 現在位置
			if ( ::ov_open_callbacks(this, &ov_file, NULL, 0, callbacks) ) {
				LOGE("ov_open_callbacks ERROR!");
				::ov_clear(&ov_file);
				delete	sound_data;
				return;
			}

			vorbis_info*	_info = ::ov_info(&ov_file, -1);

			format_pcm.formatType		= SL_DATAFORMAT_PCM;
			format_pcm.numChannels		= (SLuint32)_info->channels;
			format_pcm.samplesPerSec	= (SLuint32)_info->rate*1000;
			format_pcm.bitsPerSample	= (SLuint32)SL_PCMSAMPLEFORMAT_FIXED_16;
			format_pcm.containerSize	= (SLuint32)SL_PCMSAMPLEFORMAT_FIXED_16;
			format_pcm.channelMask		= (_info->channels == 1) ? SL_SPEAKER_FRONT_CENTER : (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT);
			format_pcm.endianness		= SL_BYTEORDER_LITTLEENDIAN;
		}
		break;

	  default :
		assert(FALSE);
		break;
	}

	SLDataLocator_OutputMix		loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, outputMixObject};
	SLDataSink					audioSnk = {&loc_outmix, NULL};

	const SLInterfaceID		ids[3] = {SL_IID_PLAY, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, SL_IID_VOLUME};
	const SLboolean			req[3] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};

	SLresult	result;

	result = (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, &audioSrc, &audioSnk, 3, ids, req);
	if ( SL_RESULT_SUCCESS != result ) {									// プレイヤーオブジェクト作成
		bqPlayerObject = NULL;
		return;
	}

	result = (*bqPlayerObject)->Realize(bqPlayerObject, SL_BOOLEAN_FALSE);	// リアライズ
	assert(SL_RESULT_SUCCESS == result);

	result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_PLAY, &bqPlayerPlay);
	assert(SL_RESULT_SUCCESS == result);									// インタフェース取得

	result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &bqPlayerBufferQueue);
	assert(SL_RESULT_SUCCESS == result);									// バッファキューインタフェース

	result = (*bqPlayerObject)->GetInterface(bqPlayerObject, SL_IID_VOLUME, &bqPlayerVolume);
	assert(SL_RESULT_SUCCESS == result);									// 音量インタフェース
	set_volume(_vol);														// 音量設定

	switch ( format ) {
	  case FORMAT_WAV :			// WAV
		{
			result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallbackWAV, this);
			assert(SL_RESULT_SUCCESS == result);							// 再生コールバック設定

			(*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, sound_data->data, (SLuint32)sound_data->size);
		}
		break;

	  case FORMAT_OGG :			// OGG
		{
			result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallbackOGG, this);
			assert(SL_RESULT_SUCCESS == result);							// 再生コールバック設定

			callback_ogg();													// データ読み込み
		}
		break;
	}
	state = PREPARED;
}