Add audio async
This commit is contained in:
		
							parent
							
								
									2ea2f31c03
								
							
						
					
					
						commit
						c94323ec16
					
				
					 6 changed files with 41 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -35,6 +35,10 @@
 | 
			
		|||
#include <SDL_thread.h>
 | 
			
		||||
#include <SDL_timer.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __EMSCRIPTEN__
 | 
			
		||||
#include "emscripten.hpp"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
ALStream::ALStream(LoopMode loopMode,
 | 
			
		||||
		           const std::string &threadId)
 | 
			
		||||
	: looped(loopMode == Looped),
 | 
			
		||||
| 
						 | 
				
			
			@ -256,6 +260,10 @@ struct ALStreamOpenHandler : FileSystem::OpenHandler
 | 
			
		|||
 | 
			
		||||
void ALStream::openSource(const std::string &filename)
 | 
			
		||||
{
 | 
			
		||||
#ifdef __EMSCRIPTEN__
 | 
			
		||||
	load_file_async(filename.c_str());
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	ALStreamOpenHandler handler(srcOps, looped);
 | 
			
		||||
	shState->fileSystem().openRead(handler, filename.c_str());
 | 
			
		||||
	source = handler.source;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -248,7 +248,7 @@ struct BitmapOpenHandler : FileSystem::OpenHandler
 | 
			
		|||
	bool tryRead(SDL_RWops &ops, const char *ext, const char * fullPath)
 | 
			
		||||
	{
 | 
			
		||||
#ifdef __EMSCRIPTEN__
 | 
			
		||||
		load_file_async(fullPath);
 | 
			
		||||
		load_file_async_js(fullPath);
 | 
			
		||||
		surf = IMG_Load(fullPath);
 | 
			
		||||
#else
 | 
			
		||||
		surf = IMG_LoadTyped_RW(&ops, 1, ext);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,8 @@
 | 
			
		|||
#include "emscripten.hpp"
 | 
			
		||||
#include "filesystem.h"
 | 
			
		||||
#include "sharedstate.h"
 | 
			
		||||
 | 
			
		||||
EM_JS(void, load_file_async, (const char* fullPathC), {
 | 
			
		||||
EM_JS(void, load_file_async_js, (const char* fullPathC), {
 | 
			
		||||
	Asyncify.handleSleep(function(wakeUp) {
 | 
			
		||||
		const fullPath = UTF8ToString(fullPathC);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -31,3 +33,20 @@ EM_JS(void, load_file_async, (const char* fullPathC), {
 | 
			
		|||
	});
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
struct LoadOpenHandler : FileSystem::OpenHandler
 | 
			
		||||
{
 | 
			
		||||
	LoadOpenHandler()
 | 
			
		||||
	{}
 | 
			
		||||
 | 
			
		||||
	bool tryRead(SDL_RWops &ops, const char *ext, const char *fullPath)
 | 
			
		||||
	{
 | 
			
		||||
		load_file_async_js(fullPath);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void load_file_async(const char * filename) {
 | 
			
		||||
	LoadOpenHandler handler;
 | 
			
		||||
	shState->fileSystem().openRead(handler, filename);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,9 @@
 | 
			
		|||
#include <emscripten.h>
 | 
			
		||||
 | 
			
		||||
extern "C" {
 | 
			
		||||
	void load_file_async(const char* fullPathC);
 | 
			
		||||
	void load_file_async_js(const char* fullPathC);
 | 
			
		||||
 | 
			
		||||
	void load_file_async(const char* filename);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,10 @@
 | 
			
		|||
 | 
			
		||||
#include <SDL_sound.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __EMSCRIPTEN__
 | 
			
		||||
#include "emscripten.hpp"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define SE_CACHE_MEM (10*1024*1024) // 10 MB
 | 
			
		||||
 | 
			
		||||
struct SoundBuffer
 | 
			
		||||
| 
						 | 
				
			
			@ -238,6 +242,10 @@ SoundBuffer *SoundEmitter::allocateBuffer(const std::string &filename)
 | 
			
		|||
	else
 | 
			
		||||
	{
 | 
			
		||||
		/* Buffer not in cache, needs to be loaded */
 | 
			
		||||
#ifdef __EMSCRIPTEN__
 | 
			
		||||
		load_file_async(filename.c_str());
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		SoundOpenHandler handler;
 | 
			
		||||
		shState->fileSystem().openRead(handler, filename.c_str());
 | 
			
		||||
		buffer = handler.buffer;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue