int main(int argc, char** argv) { static char BytecodeStream[Kilobytes(64)]; static int CommandBuffer[128]; static int VarMemory0[128] = {0}; static int VarMemory1[128] = {0}; int* VarMemoryPtrs[] = {VarMemory0, VarMemory1}; load_file_result Result = LoadFileIntoMemory("bytecode", BytecodeStream, sizeof BytecodeStream); dotForthExecute(BytecodeStream, CommandBuffer, VarMemoryPtrs); CmdHnd_Entry(CommandBuffer); return 0; }
STATUS fmodCreateSoundFromFile( FMOD::System* system, FMOD::Sound** sound, const char* file ) { FMOD_RESULT result; FMOD_CREATESOUNDEXINFO exInfo; void* buff; int length; //------------------------------------------------ if( system == 0 ) { DEBUG_OUT( "system == NULL" ); return PARAM_NULL_PASSED; } if( file == 0 ) { DEBUG_OUT( "file == NULL" ); return PARAM_NULL_PASSED; } if( !LoadFileIntoMemory( file, &buff, &length ) ) { DEBUG_OUT( "LoadFileIntoMemory failed!" ); DEBUG_OUT( file ); return SOUND_FROM_FILE_FAILED; } memset( &exInfo, 0, sizeof( FMOD_CREATESOUNDEXINFO ) ); exInfo.cbsize = sizeof( FMOD_CREATESOUNDEXINFO ); exInfo.length = length; result = system->createSound( ( const char* )buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exInfo, sound ); if( result != FMOD_OK || sound == 0 ) { if( result != FMOD_OK ) DEBUG_OUT( FMOD_ErrorString( result ) ); else DEBUG_OUT( "Sound object creation failed!" ); free( buff ); return SOUND_CREATION_FAILED; } free( buff ); return OK; }
int main(int argc, char *argv[]) { FMOD_SYSTEM *system; FMOD_SOUND *sound1, *sound2, *sound3; FMOD_CHANNEL *channel = 0; FMOD_RESULT result; int key; unsigned int version; void *buff = 0; int length = 0; FMOD_CREATESOUNDEXINFO exinfo; /* Create a System object and initialize. */ result = FMOD_System_Create(&system); ERRCHECK(result); result = FMOD_System_GetVersion(system, &version); ERRCHECK(result); if (version < FMOD_VERSION) { printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION); return 0; } result = FMOD_System_Init(system, 32, FMOD_INIT_NORMAL, NULL); ERRCHECK(result); LoadFileIntoMemory("../media/drumloop.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = FMOD_System_CreateSound(system, (const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exinfo, &sound1); ERRCHECK(result); result = FMOD_Sound_SetMode(sound1, FMOD_LOOP_OFF); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! LoadFileIntoMemory("../media/jaguar.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = FMOD_System_CreateSound(system, (const char *)buff, FMOD_SOFTWARE | FMOD_OPENMEMORY, &exinfo, &sound2); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! LoadFileIntoMemory("../media/swish.wav", &buff, &length); memset(&exinfo, 0, sizeof(FMOD_CREATESOUNDEXINFO)); exinfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO); exinfo.length = length; result = FMOD_System_CreateSound(system, (const char *)buff, FMOD_HARDWARE | FMOD_OPENMEMORY, &exinfo, &sound3); ERRCHECK(result); free(buff); // don't need the original memory any more. Note! If loading as a stream, the memory must stay active so do not free it! printf("==========================================================================\n"); printf("Load from memory example. Copyright (c) Firelight Technologies 2004-2014.\n"); printf("==========================================================================\n"); printf("\n"); printf("Press '1' to play a mono sound using hardware mixing\n"); printf("Press '2' to play a mono sound using software mixing\n"); printf("Press '3' to play a stereo sound using hardware mixing\n"); printf("Press 'Esc' to quit\n"); printf("\n"); /* Main loop. */ do { if (kbhit()) { key = getch(); switch (key) { case '1' : { result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound1, 0, &channel); ERRCHECK(result); break; } case '2' : { result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound2, 0, &channel); ERRCHECK(result); break; } case '3' : { result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound3, 0, &channel); ERRCHECK(result); break; } } } FMOD_System_Update(system); { unsigned int ms = 0; unsigned int lenms = 0; int playing = 0; int paused = 0; int channelsplaying = 0; if (channel) { FMOD_SOUND *currentsound = 0; result = FMOD_Channel_IsPlaying(channel, &playing); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = FMOD_Channel_GetPaused(channel, &paused); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } result = FMOD_Channel_GetPosition(channel, &ms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } FMOD_Channel_GetCurrentSound(channel, ¤tsound); if (currentsound) { result = FMOD_Sound_GetLength(currentsound, &lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } } } result = FMOD_Sound_GetLength(sound1, &lenms, FMOD_TIMEUNIT_MS); if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN)) { ERRCHECK(result); } FMOD_System_GetChannelsPlaying(system, &channelsplaying); printf("\rTime %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying); fflush(stdout); } Sleep(10); } while (key != 27); printf("\n"); /* Shut down */ result = FMOD_Sound_Release(sound1); ERRCHECK(result); result = FMOD_Sound_Release(sound2); ERRCHECK(result); result = FMOD_Sound_Release(sound3); ERRCHECK(result); result = FMOD_System_Close(system); ERRCHECK(result); result = FMOD_System_Release(system); ERRCHECK(result); return 0; }