Ajout version Release/x64 avec les libraries x64 et tuning de la version Debug
This commit is contained in:
		
							
								
								
									
										157
									
								
								SQCSim2021/external/irrKlang-64bit-1.6.0/examples/04.OverrideFileAccess/main.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								SQCSim2021/external/irrKlang-64bit-1.6.0/examples/04.OverrideFileAccess/main.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,157 @@ | ||||
| // This example will show how to override file access with irrKlang. | ||||
| // This is useful if you want to read sounds from other sources than | ||||
| // just files, for example from custom internet streams or  | ||||
| // an own encypted archive format. | ||||
|  | ||||
| // lets start: include irrKlang headers and other input/output stuff | ||||
| // needed to print and get user input from the console. | ||||
| #if defined(WIN32) | ||||
| #include <conio.h> | ||||
| #else | ||||
| #include "../common/conio.h" | ||||
| #endif | ||||
|  | ||||
| #include <string.h> | ||||
| #include <stdio.h> | ||||
| #include <irrKlang.h> | ||||
| using namespace irrklang; | ||||
|  | ||||
| #pragma comment(lib, "irrKlang.lib") // link with irrKlang.dll | ||||
|  | ||||
| // To start, we need to implement the class IFileFactory, which irrKlang uses | ||||
| // to open files. The interface consists only of one single method named  | ||||
| // createFileReader(const ik_c8* filename). In this method, we create return  | ||||
| // our own file access class and return it: | ||||
|  | ||||
| // a class implementing the IFileFactory interface to override irrklang file access | ||||
| class CMyFileFactory : public IFileFactory | ||||
| { | ||||
| public: | ||||
|  | ||||
| 	//! Opens a file for read access. Simply return 0 if file not found. | ||||
| 	virtual IFileReader* createFileReader(const ik_c8* filename) | ||||
| 	{ | ||||
| 		printf("MyFileFactory: open file %s\n", filename); | ||||
|  | ||||
| 		FILE* file = fopen(filename, "rb"); | ||||
| 		if (!file) | ||||
| 			return 0; | ||||
|  | ||||
| 		return new CMyReadFile(file, filename); | ||||
| 	} | ||||
|  | ||||
| protected: | ||||
|  | ||||
| 	// To write our own file access methods returned in the method above, | ||||
| 	// we only need to implement the IFileReader interface, which has some | ||||
| 	// standard methods like read(), seek(), getPos() etc. In this example | ||||
| 	// we simply use fopen, fread, fseek etc and print to the console  | ||||
| 	// when we are reading or seeking: | ||||
|  | ||||
| 	// an own implementation of IReadFile to overwrite read access to files  | ||||
| 	class CMyReadFile : public IFileReader | ||||
| 	{ | ||||
| 	public: | ||||
|  | ||||
| 		// constructor, store size of file and filename | ||||
| 		CMyReadFile(FILE* openedFile, const ik_c8* filename) | ||||
| 		{ | ||||
| 			File = openedFile; | ||||
| 			strcpy(Filename, filename); | ||||
|  | ||||
| 			// get file size | ||||
| 			fseek(File, 0, SEEK_END); | ||||
| 			FileSize = ftell(File); | ||||
| 			fseek(File, 0, SEEK_SET); | ||||
| 		} | ||||
|  | ||||
| 		~CMyReadFile() | ||||
| 		{ | ||||
| 			fclose(File); | ||||
| 		} | ||||
|  | ||||
| 		//! reads data, returns how much was read | ||||
| 		ik_s32 read(void* buffer, ik_u32 sizeToRead) | ||||
| 		{ | ||||
| 			printf("CMyReadFile: read %d bytes\n", sizeToRead); | ||||
| 			return (ik_s32)fread(buffer, 1, sizeToRead, File); | ||||
| 		} | ||||
|  | ||||
| 		//! changes position in file, returns true if successful | ||||
| 		bool seek(ik_s32 finalPos, bool relativeMovement) | ||||
| 		{ | ||||
| 			printf("CMyReadFile: seek to position %d\n", finalPos); | ||||
| 			return fseek(File, finalPos, relativeMovement ? SEEK_CUR : SEEK_SET) == 0; | ||||
| 		} | ||||
|  | ||||
| 		//! returns size of file | ||||
| 		ik_s32 getSize() | ||||
| 		{ | ||||
| 			return FileSize; | ||||
| 		} | ||||
|  | ||||
| 		//! returns where in the file we are. | ||||
| 		ik_s32 getPos() | ||||
| 		{ | ||||
| 			return ftell(File); | ||||
| 		} | ||||
|  | ||||
| 		//! returns name of file | ||||
| 		const ik_c8* getFileName() | ||||
| 		{ | ||||
| 			return Filename; | ||||
| 		} | ||||
|  | ||||
| 		FILE* File; | ||||
| 		char Filename[1024]; | ||||
| 		ik_s32 FileSize; | ||||
|  | ||||
| 	}; // end class CMyReadFile | ||||
|  | ||||
| }; // end class CMyFileFactory | ||||
|  | ||||
|  | ||||
|  | ||||
| // The main work is done, the only thing missing is to start up the  | ||||
| // sound engine and tell it to use the created FileFactory for file access: | ||||
|  | ||||
| // irrKlang 3D sound engine example 04,  | ||||
| // demonstrating how to override file access of irrKlang | ||||
| int main(int argc, const char** argv) | ||||
| { | ||||
| 	// start the sound engine with default parameters | ||||
| 	ISoundEngine* engine = createIrrKlangDevice(); | ||||
|  | ||||
| 	if (!engine) | ||||
| 		return 0; // error starting up the engine | ||||
|  | ||||
| 	// create an instance of the file factory and let | ||||
| 	// irrKlang know about it. irrKlang will drop() the | ||||
| 	// factory itself if it doesn't need it any longer. | ||||
|  | ||||
| 	CMyFileFactory* factory = new CMyFileFactory(); | ||||
| 	engine->addFileFactory(factory); | ||||
| 	factory->drop(); // we don't need it anymore, delete it | ||||
|  | ||||
| 	// that's it, play some sounds with our overriden | ||||
| 	// file access methods: | ||||
|  | ||||
| 	printf("\nDemonstrating file access overriding.\n"); | ||||
| 	printf("Press any key to start playing sounds, then press escape to cancel\n"); | ||||
|  | ||||
| 	getch(); | ||||
| 	 | ||||
| 	engine->play2D("../../media/getout.ogg", true); | ||||
|  | ||||
| 	while(true) // endless loop until user exits | ||||
| 	{ | ||||
| 		// play some wave sound | ||||
| 		engine->play2D("../../media/explosion.wav"); | ||||
| 		 | ||||
| 		if (getch() == 27) | ||||
| 			break; // user pressed ESCAPE key, cancel | ||||
| 	} | ||||
|  | ||||
| 	engine->drop(); // delete engine | ||||
| 	return 0; | ||||
| }  | ||||
		Reference in New Issue
	
	Block a user