void capture(const char *save_file_name, RawData &data, bool playback) {
    DAEPAnalysis ep;
    AutoCapture c(&ep);
    
    Tip("Press any key to capture:");
    getch();
    puts("");
    Tip("Preparing...");
    sleep(1);
    
    char fn_buffer [128]="";
    
    Tip("Start talking");

    if(c.capture(&data)) {
        data.saveWav(stringFile(save_file_name,".wav",fn_buffer));
        
        //if(playback)c.play(&data);
        
        ep.smooth();
        ep.cut();
        
        if(playback) c.play(&data);
        
        data.saveWav(stringFile(save_file_name,"_cut.wav",fn_buffer));
    }
    else{
        ErrorLog("Capture error");
    }
}
SP_RESULT load_calc(const char *load_file_name,
               const char *file_name,
               EPAnalysis& ep,
               bool playback) {
    RawData data;
    Capture c;
    char fn_buffer [128]="";
    
    data.loadWav(stringFile(load_file_name,".wav",fn_buffer));
    ep.Initial(&data);
    ep.reCalcAllData();
    ep.saveMatlab(stringFile(file_name,".dat",fn_buffer));
    
    if(playback)c.play(&data);
    
    ep.smooth();
    ep.saveMatlab(stringFile(file_name,"_smooth.dat",fn_buffer));
    ep.cut();
    ep.saveMatlab(stringFile(file_name,"_cut.dat",fn_buffer));
    
    //ep.smooth();
    //ep.cut();
    //ep.saveMatlab(stringFile(file_name,"_cut_2.m",fn_buffer));

    if(playback)c.play(&data);

    return SP_SUCCESS;
}
SP_RESULT load_wav_file(const char *file_name, RawData &data) {
    DAEPAnalysis da_ep;
    Capture c;
    char fn_buffer[128] = "";
    data.loadWav(stringFile(file_name, ".wav", fn_buffer));
    da_ep.Initial(&data);
    da_ep.reCalcAllData();
//    da_ep.smooth();
//    da_ep.cut();

    return SP_SUCCESS;
}
Exemplo n.º 4
0
	wxString StringReader::getString( ) const {
		wxString string;

		// Table header.
		string << L"Entry;String" << L"\r\n";

		gw2f::StringsFile stringFile( m_data.GetPointer( ), m_data.GetSize( ) );

#ifdef _DEBUG
		auto language = stringFile.language( );
		switch ( language ) {
		case gw2f::language::English:
			wxLogDebug( wxT( "English String." ) );
			break;
		case gw2f::language::French:
			wxLogDebug( wxT( "French String." ) );
			break;
		case gw2f::language::German:
			wxLogDebug( wxT( "German String." ) );
			break;
		case gw2f::language::Korean:
			wxLogDebug( wxT( "Korean String." ) );
			break;
		case gw2f::language::Spanish:
			wxLogDebug( wxT( "Spanish String." ) );
			break;
		default:
			wxLogDebug( wxT( "Unknown Language: %d" ), language );
		}
#endif

		for ( size_t i = 0; i < stringFile.entryCount( ); i++ ) {
			auto& entry = stringFile.entry( i );

			wxString str;
			if ( entry.isEncrypted( ) ) {
				str = L"Encrypted string";
			} else {
				str = entry.get( );
				if ( str.IsEmpty( ) ) {
					str = L"Empty string";
				}
			}
			string << i << L";\"" << str << L"\"\r\n";
		}
		return string;
	}
Exemplo n.º 5
0
int main( int argc, char** argv ) {
	if ( argc <= 1 ) {
		std::cout << "Usage: " << argv[0] << " <strs file>" << std::endl;
		return 0;
	}

	// Characters below 128 are the same as for ANSI
	auto isAbove127 = []( gw2f::char16 c ) { return ( c >= 0x80 ); };

	gw2f::StringsFile stringFile( argv[1] );
	for ( size_t i = 0; i < stringFile.entryCount( ); i++ ) {
		auto& entry = stringFile.entry( i );

		// Under windows, this poses the same problem as the Eula sample. When
		// it encounters a character that the console cannot output, any
		// subsequent characters sent to the stream are discarded. To prevent
		// this, I am replacing all potentially invalid characters with a
		// question mark.

		std::basic_string<gw2f::char16> str;
		if ( entry.isEncrypted( ) ) {
			str = GW2F_U16( "Encrypted string" );
		} else {
			str = entry.get( );
			if ( str.empty( ) ) {
				str = GW2F_U16( "Empty string" );
			}
			std::replace_if( std::begin( str ), std::end( str ), isAbove127, '?' );
		}
#if defined(_MSC_VER)
		std::wcout << i << L";\"" << str << L"\"" << std::endl;
#elif defined(__GNUC__) || defined(__GNUG__)
		std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> temp;
		std::string mbs = temp.to_bytes( str );

		std::cout << i << ";\"" << mbs.c_str( ) << "\"" << std::endl;
#endif
	}

	return 0;
}
Exemplo n.º 6
0
	DatIndexCategory* ScanDatTask::categorize( ANetFileType p_fileType, const byte* p_data, size_t p_size ) {
		DatIndexCategory* category = nullptr;

		switch ( p_fileType ) {
		case ANFT_ATEX:
		case ANFT_ATTX:
		case ANFT_ATEC:
		case ANFT_ATEP:
		case ANFT_ATEU:
		case ANFT_ATET:
		case ANFT_DDS:
		case ANFT_JPEG:
		case ANFT_WEBP:
			MakeCategory( wxT( "Textures" ) );

			switch ( p_fileType ) {
			case ANFT_ATEX:
				MakeSubCategory( wxT( "Generic Textures" ) );
				break;
			case ANFT_ATTX:
				MakeSubCategory( wxT( "Terrain Textures" ) );
				break;
			case ANFT_ATEC:
				MakeSubCategory( wxT( "ATEC" ) );
				break;
			case ANFT_ATEP:
				MakeSubCategory( wxT( "Map Textures" ) );
				break;
			case ANFT_ATEU:
				MakeSubCategory( wxT( "UI Textures" ) );
				break;
			case ANFT_ATET:
				MakeSubCategory( wxT( "ATET" ) );
				break;
			case ANFT_DDS:
				MakeSubCategory( wxT( "DDS" ) );
				break;
			case ANFT_JPEG:
				MakeSubCategory( wxT( "JPEG" ) );
				break;
			case ANFT_WEBP:
				MakeSubCategory( wxT( "WebP" ) );
				break;
			}

			if ( ( p_fileType == ANFT_ATEX || p_fileType == ANFT_ATTX || p_fileType == ANFT_ATEC ||
				p_fileType == ANFT_ATEP || p_fileType == ANFT_ATEU || p_fileType == ANFT_ATET ) ) {
				uint16 width = *reinterpret_cast<const uint16*>( p_data + 8 );
				uint16 height = *reinterpret_cast<const uint16*>( p_data + 10 );
				MakeSubCategory( wxString::Format( wxT( "%ux%u" ), width, height ) );
			} else if ( p_fileType == ANFT_DDS && p_size >= 20 ) {
				uint32 width = *reinterpret_cast<const uint32*>( p_data + 16 );
				uint32 height = *reinterpret_cast<const uint32*>( p_data + 12 );
				MakeSubCategory( wxString::Format( wxT( "%ux%u" ), width, height ) );
			}

			break;
		case ANFT_Sound:
		case ANFT_MP3:
		case ANFT_Ogg:
		case ANFT_PackedMP3:
		case ANFT_PackedOgg:
		case ANFT_asndMP3:
		case ANFT_asndOgg:
			MakeCategory( wxT( "Sounds" ) );

			switch ( p_fileType ) {
			case ANFT_MP3:
				MakeSubCategory( wxT( "MP3" ) );
				break;
			case ANFT_Ogg:
				MakeSubCategory( wxT( "Ogg" ) );
				break;
			case ANFT_asndMP3:
				MakeSubCategory( wxT( "asndMP3" ) );
				break;
			case ANFT_asndOgg:
				MakeSubCategory( wxT( "asndOgg" ) );
				break;
			case ANFT_PackedMP3:
				MakeSubCategory( wxT( "PackedMP3" ) );
				break;
			case ANFT_PackedOgg:
				MakeSubCategory( wxT( "PackedOgg" ) );
				break;
			}
			break;

		case ANFT_Binary:
		case ANFT_EXE:
		case ANFT_DLL:
			MakeCategory( wxT( "Binaries" ) );
			break;

		// when catagorize string files the process will slower,
		// due to strs file format that have to read near end of file to know what language is
		case ANFT_StringFile:
		{
			uint32 entryNumber = this->currentProgress( );

			auto buffer = allocate<byte>( m_datFile.fileSize( entryNumber ) );
			auto size = m_datFile.readFile( entryNumber, buffer );

			gw2f::StringsFile stringFile( buffer, size );

			MakeCategory( wxT( "Strings" ) );

			switch ( stringFile.language( ) ) {
			case gw2f::language::English:
				MakeSubCategory( wxT( "English" ) );
				break;
			case gw2f::language::French:
				MakeSubCategory( wxT( "French" ) );
				break;
			case gw2f::language::German:
				MakeSubCategory( wxT( "German" ) );
				break;
			case gw2f::language::Korean:
				MakeSubCategory( wxT( "Korean" ) );
				break;
			case gw2f::language::Spanish:
				MakeSubCategory( wxT( "Spanish" ) );
				break;
			}
			freePointer( buffer );

			break;
		}

		case ANFT_Manifest:
			MakeCategory( wxT( "Manifests" ) );
			break;
		case ANFT_PortalManifest:
			MakeCategory( wxT( "Portal Manifests" ) );
			break;
		case ANFT_TextPackManifest:
			MakeCategory( wxT( "TextPack Manifests" ) );
			break;
		case ANFT_TextPackVariant:
			MakeCategory( wxT( "TextPack Variant" ) );
			break;
		case ANFT_TextPackVoices:
			MakeCategory( wxT( "TextPack Voices" ) );
			break;
		case ANFT_Bank:
			MakeCategory( wxT( "Soundbank" ) );
			break;
		case ANFT_BankIndex:
			MakeCategory( wxT( "Soundbank Index" ) );
			break;
		case ANFT_AudioScript:
			MakeCategory( wxT( "Audio Scripts" ) );
			break;
		case ANFT_Model:
			MakeCategory( wxT( "Models" ) );
			break;
		case ANFT_DependencyTable:
			MakeCategory( wxT( "Dependency Tables" ) );
			break;
		case ANFT_EULA:
			MakeCategory( wxT( "EULA" ) );
			break;
		case ANFT_Cinematic:
			MakeCategory( wxT( "Cinematics" ) );
			break;
		case ANFT_HavokCollision:
			MakeCategory( wxT( "Havok Collision" ) );
			break;
		case ANFT_MapContent:
			MakeCategory( wxT( "Map Content" ) );
			break;
		case ANFT_MapParam:
			MakeCategory( wxT( "Map Parameter" ) );
			break;
		case ANFT_MapShadow:
			MakeCategory( wxT( "Map Shadow" ) );
			break;
		case ANFT_PagedImageTable:
			MakeCategory( wxT( "Paged Image Table" ) );
			break;
		case ANFT_Material:
			MakeCategory( wxT( "Materials" ) );
			break;
		case ANFT_Composite:
			MakeCategory( wxT( "Composite Data" ) );
			break;
		case ANFT_AnimSequences:
			MakeCategory( wxT( "Animation Sequences" ) );
			break;
		case ANFT_EmoteAnimation:
			MakeCategory( wxT( "Emote Animations" ) );
			break;
		case ANFT_FontFile:
			MakeCategory( wxT( "Font" ) );
			break;
		case ANFT_Bink2Video:
			MakeCategory( wxT( "Bink Videos" ) );
			break;
		case ANFT_ShaderCache:
			MakeCategory( wxT( "Shader Cache" ) );
			break;
		case ANFT_Config:
			MakeCategory( wxT( "Configuration" ) );
			break;
		case ANFT_PF:
		case ANFT_ARAP:
			MakeCategory( wxT( "Misc" ) );

			if ( p_fileType == ANFT_PF && p_size >= 12 ) {
				MakeSubCategory( wxString( reinterpret_cast<const char*>( p_data + 8 ), 4 ) );
			}
			break;

		default: // unknown stuff
			MakeCategory( wxT( "Unknown" ) );

			// to do: printable character detection in files for detect text files.
			//MakeSubCategory( wxString::Format( wxT( "%x" ), *reinterpret_cast<const uint32*>( p_data ) ) );

			break;
		}
		return category;
	}
Exemplo n.º 7
0
bool fileReader::readFile(char* filename, CMMPointer<level> map) {
	// read files into streams
	ifstream mapInput(filename);

	if (mapInput.fail()){
		std::string stringFile(filename); //string filename for passing to the logger
		Logger::Instance()->err("failed to open " + stringFile + " attempting to add .db extension");
		mapInput.clear();

		char fileExt[] = ".db";
		strcat(filename, fileExt);
		Logger::Instance()->write("Attempting to open level file with appended name: " + stringFile + ".db");
		mapInput.open(filename, ifstream::in);

		// throws error if reading failed
		if (mapInput.fail()) 
		{
			Logger::Instance()->err("Error: File not Found: " + stringFile);
			return false;
		}
	}



	string line;
	int lineNumber = 1;


	getline(mapInput, line);

	while (line.length() > 0) {
		vector<string> tokens = strSplit(line);

		// first token to the dataType
		string type = tokens[0];

		//A string stream of the line number for the logger
		std::stringstream sLineNumber;
		sLineNumber << lineNumber;

		if (tokens.size() < 5) {
			Logger::Instance()->err("Error: Invalid data in data file, line " + sLineNumber.str() );
			return false;
		} else if (tokens[0].compare(DataTypeTile) == 0) {

			int id = atoi(tokens[1].c_str());
			int numVertices = atoi(tokens[2].c_str());

			// if total number of tokens dont add up, throw an error
			//type, id, numVertices + 3 verts and 1 neighbor per vertex
			if (tokens.size() != 3 + 4 * numVertices) {
				Logger::Instance()->err("Error: Invalid data in data file, line " + sLineNumber.str() );
				return false;
			}

			vector<Vec3f> verticesTemp;
			vector<int> neighborsTemp;

			int index = 3;
			int neighborIndex = tokens.size() - numVertices; 
			for (int i = 0; i < numVertices; i++) {
				// load the vertices
				Vec3f vert = 
					Vec3f (atof(tokens[index].c_str()),
					atof(tokens[index + 1].c_str()),
					atof(tokens[index + 2].c_str()));

				// add the vertices and the neighbor indices
				verticesTemp.push_back(vert);
				neighborsTemp.push_back( atoi(tokens[neighborIndex].c_str()) );

				index += 3;
				neighborIndex ++;
			}

			CMMPointer<tile>* tempTile = 
				new CMMPointer<tile>(new tile(id, verticesTemp, neighborsTemp, TILE_COLOR));

			map->addTile(id, tempTile);

			delete tempTile;

		} else if (tokens[0].compare(DataTypeCup) == 0) {

			int id = atoi(tokens[1].c_str());
			Vec3f position(atof(tokens[2].c_str()),
				atof(tokens[3].c_str()),
				atof(tokens[4].c_str()));
			CMMPointer<cup>* tempCup = new CMMPointer<cup>(new cup(id, position));
			map->addCup(id, tempCup);
			tempCup = 0;
			delete tempCup;
		} else if (tokens[0].compare(DataTypeTee) == 0) {

			int id = atoi(tokens[1].c_str());
			Vec3f position = Vec3f(atof(tokens[2].c_str()),
				atof(tokens[3].c_str()),
				atof(tokens[4].c_str()));
			CMMPointer<tee>* tempTee = new CMMPointer<tee>(new tee(id, position));
			map->addTee(id, tempTee);

			//add a ball in the location of the tee
			CMMPointer<ball>* tempBall = new CMMPointer<ball>(new ball(id, position, BALL_COLOR, BALL_RADIUS));
			map->addBall(id, tempBall);

			tempTee = 0;
			tempBall = 0;
			delete tempTee;
			delete tempBall;
		} else {
			Logger::Instance()->err("Error: Unknown Type in data file, line " + sLineNumber.str() );
			return false;
		}

		lineNumber++;
		getline(mapInput, line);
	}

	mapInput.close();

	if (!map->checkLevel()) {
		return false;
	}

	return true;
}
Exemplo n.º 8
0
bool fileReader::readCourseFile(char* filename, CMMPointer<Course> course) {
	// read files into streams
	ifstream mapInput(filename);

	if (mapInput.fail()){
		std::string stringFile(filename); //string filename for passing to the logger
		Logger::Instance()->err("failed to open " + stringFile + " attempting to add .db extension");
		mapInput.clear();

		char fileExt[] = ".db";
		strcat(filename, fileExt);
		Logger::Instance()->write("Attempting to open level file with appended name: " + stringFile + ".db");
		mapInput.open(filename, ifstream::in);

		// throws error if reading failed
		if (mapInput.fail()) 
		{
			Logger::Instance()->err("Error: File not Found: " + stringFile);
			return false;
		}
	}

	string line;
	int lineNumber = 1;
	int numLevelsToParse = 0;
	int beginCount = 0;
	int endCount = 0;
	bool beganTile = false;
	CMMPointer<level> newLevel;

	while (getline(mapInput, line)) {

		vector<string> tokens = strSplit(line);

		// first token to the dataType
		string type = tokens[0];
		
		//A string stream of the line number for the logger
		std::stringstream sLineNumber;
		sLineNumber << lineNumber;

		// loads course name and number of levels
		if (tokens[0].compare("course") == 0) {
			vector<string> names = strSplit(line, "\"");

			if (tokens.size() < 3) {
				Logger::Instance()->err("Error: Invalid course tokens, line " + sLineNumber.str() );
				return false;
			} else if (names.size() < 2) {
				Logger::Instance()->err("Error: Invalid course name, line " + sLineNumber.str() );
				return false;
			} else { 
				numLevelsToParse = atoi(tokens.back().c_str());
				course->setNumLevels(numLevelsToParse);
				course->setCourseName(names[1]);
			}

			// does check for begin holes and end holes
		} else if (tokens[0].compare("begin_hole") == 0) {
			if (beganTile) {
				Logger::Instance()->err("Error: trying to begin_hole when another begin_hole has started, line " + sLineNumber.str());
				return false;
			} else {
				beginCount++;
				newLevel = new level();
				beganTile = true;
			}
		} else if (tokens[0].compare("end_hole") == 0) {
			if (!beganTile) {
				Logger::Instance()->err("Error: trying to end_hole before a valid begin_hole, line " + sLineNumber.str());
				return false;
			} else {
				endCount++;
				beganTile = false;

				if (!newLevel->checkLevel()) {
					return false;
				} else {
					course->addLevel(beginCount, newLevel);
				}
			}


			// parsing of level name
		} else if (tokens[0].compare("name") == 0) {
			vector<string> names = strSplit(line, "\"");
			if (names.size() < 2) {
				Logger::Instance()->err("Error: Invalid level name, line " + sLineNumber.str() );
				return false;
			} else {
				newLevel->setLevelName(names[1]);
			}

		} else if (tokens[0].compare("par") == 0) {
			if (tokens.size() < 2) {
				Logger::Instance()->err("Error: Invalid par entry, line " + sLineNumber.str() );
				return false;
			} else {
				newLevel->setPar(atoi(tokens[1].c_str()));
			}

			// parsing of actual tile, tee, cups
		} else {
			if (tokens.size() < 5) {
				Logger::Instance()->err("Error: Invalid data in data file, line " + sLineNumber.str() );
				return false;
			} else if (tokens[0].compare(DataTypeTile) == 0) {

				int id = atoi(tokens[1].c_str());
				int numVertices = atoi(tokens[2].c_str());

				// if total number of tokens dont add up, throw an error
				//type, id, numVertices + 3 verts and 1 neighbor per vertex
				if (tokens.size() != 3 + 4 * numVertices) {
					Logger::Instance()->err("Error: Invalid data in data file, line " + sLineNumber.str() );
					return false;
				}

				vector<Vec3f> verticesTemp;
				vector<int> neighborsTemp;

				int index = 3;
				int neighborIndex = tokens.size() - numVertices; 
				for (int i = 0; i < numVertices; i++) {
					// load the vertices
					Vec3f vert = 
						Vec3f (atof(tokens[index].c_str()),
						atof(tokens[index + 1].c_str()),
						atof(tokens[index + 2].c_str()));

					// add the vertices and the neighbor indices
					verticesTemp.push_back(vert);
					neighborsTemp.push_back( atoi(tokens[neighborIndex].c_str()) );

					index += 3;
					neighborIndex ++;
				}

				CMMPointer<tile>* tempTile = 
					new CMMPointer<tile>(new tile(id, verticesTemp, neighborsTemp, TILE_COLOR));

				newLevel->addTile(id, tempTile);

				delete tempTile;

			} else if (tokens[0].compare(DataTypeCup) == 0) {

				int id = atoi(tokens[1].c_str());
				Vec3f position(atof(tokens[2].c_str()),
					atof(tokens[3].c_str()),
					atof(tokens[4].c_str()));
				CMMPointer<cup>* tempCup = new CMMPointer<cup>(new cup(id, position));
				newLevel->addCup(id, tempCup);
				tempCup = 0;
				delete tempCup;
			} else if (tokens[0].compare(DataTypeTee) == 0) {

				int id = atoi(tokens[1].c_str());
				Vec3f position = Vec3f(atof(tokens[2].c_str()),
					atof(tokens[3].c_str()),
					atof(tokens[4].c_str()));
				CMMPointer<tee>* tempTee = new CMMPointer<tee>(new tee(id, position));
				newLevel->addTee(id, tempTee);

				//add a ball in the location of the tee
				CMMPointer<ball>* tempBall = new CMMPointer<ball>(new ball(0, position, BALL_COLOR, BALL_RADIUS));
				newLevel->addBall(0, tempBall);

				tempTee = 0;
				tempBall = 0;
				delete tempTee;
				delete tempBall;
			} else {
				Logger::Instance()->err("Error: Unknown Type in data file, line " + sLineNumber.str() );
				return false;
			}

		}
		lineNumber++;
	}

	mapInput.close();

	course->setNumLevels(numLevelsToParse);

	if (beginCount != endCount || course->getNumLevels() != endCount)
	{

		std::stringstream errorLog;
		errorLog << "Error: Invalid number of levels parse. Expected: " << numLevelsToParse << " being_hole count: " << beginCount << " end_hole count: " << endCount;
		Logger::Instance()->err(errorLog.str());
		return false;
	}

	return true;

}