BOOL MikMod_Reset(void) /* Reset the driver using the new global variable settings. */ /* If the driver has not been initialized, it will be now. */ { if(!initialized) return MikMod_Init(); if((md_driver->Reset == NULL) || (md_device != idevice)) { /* md_driver->Reset was NULL, or md_device was changed, */ /* so do a full reset of the driver. */ if(isplaying) md_driver->PlayStop(); md_driver->Exit(); if(MikMod_Init()) { MikMod_Exit(); if(_mm_errorhandler!=NULL) _mm_errorhandler(); return 1; } if(isplaying) md_driver->PlayStart(); } else { if(md_driver->Reset()) { MikMod_Exit(); if(_mm_errorhandler!=NULL) _mm_errorhandler(); return 1; } } return 0; }
int init_sound_engine (void) { if (nosound) { nosfx = 1; return 0; } dmsg (D_SYSTEM | D_SOUND_TRACK, "initialize libMikMod"); /* register all the drivers */ MikMod_RegisterAllDrivers (); dmsg (D_SOUND_TRACK, "libMikMod driver registered"); /* register the all module loader (the user can use something else than .xm) */ MikMod_RegisterAllLoaders (); dmsg (D_SOUND_TRACK, "libMikMod loader registered"); /* initialize the library */ md_device = nth_driver; md_mode |= DMODE_SOFT_MUSIC | DMODE_SOFT_SNDFX; if (mono) md_mode &= ~DMODE_STEREO; if (bits8) md_mode &= ~DMODE_16BITS; if (hqmix) md_mode |= DMODE_HQMIXER; dmsg (D_SOUND_TRACK, "Opening audio device #%d, with %dbits, %s%s", nth_driver, (md_mode & DMODE_16BITS)?16:8, (md_mode & DMODE_STEREO)?"stereo":"mono", (md_mode & DMODE_HQMIXER)?"":", high quality mixer"); if (driver_options) dmsg (D_SOUND_TRACK, "MikMod user options: %s", driver_options); if (MikMod_Init (driver_options ? driver_options : const_cast_string (""))) { wmsg (_("Could not initialize sound, reason: %s\n" "Disabling sound output (use -S to suppress this message)."), MikMod_strerror (MikMod_errno)); nosfx = nosound = 1; MikMod_Exit (); return 0; } dmsg (D_SOUND_TRACK,"initialize MikMod thread"); if (MikMod_InitThreads () != 1) { wmsg (_("Could not initialize sound, reason: " "LibMikMod is not thread safe.\n" "Disabling sound output (use -S to suppress this message).")); nosfx = nosound = 1; MikMod_Exit (); return 0; } sound_initialized = 1; pthread_mutex_init (&playing, 0); adjust_volume (); return 0; }
int mod_decode(OutputBuffer * cb, DecoderControl * dc, char * path) { mod_Data * data; float time = 0.0; int ret; float secPerByte; if(mod_initMikMod() < 0) return -1; if(!(data = mod_open(path))) { ERROR("failed to open mod: %s\n", path); MikMod_Exit(); return -1; } dc->audioFormat.bits = 16; dc->audioFormat.sampleRate = 44100; dc->audioFormat.channels = 2; getOutputAudioFormat(&(dc->audioFormat),&(cb->audioFormat)); secPerByte = 1.0/((dc->audioFormat.bits*dc->audioFormat.channels/8.0)* (float)dc->audioFormat.sampleRate); dc->state = DECODE_STATE_DECODE; while(1) { if(dc->seek) { dc->seekError = 1; dc->seek = 0; } if(dc->stop) break; if(!Player_Active()) break; ret = VC_WriteBytes(data->audio_buffer, MIKMOD_FRAME_SIZE); time += ret*secPerByte; sendDataToOutputBuffer(cb, NULL, dc, 0, (char *)data->audio_buffer, ret, time, 0, NULL); } flushOutputBuffer(cb); mod_close(data); MikMod_Exit(); if(dc->stop) { dc->state = DECODE_STATE_STOP; dc->stop = 0; } else dc->state = DECODE_STATE_STOP; return 0; }
void UOpenALAudioSubsystem::Destroy() { guard(UOpenALAudioSubsystem::Destroy); if( Initialized ) { // Unhook. USound::Audio = NULL; UMusic::Audio = NULL; // Shut down viewport. SetViewport( NULL ); // Cleanup. MikMod_Exit(); alDeleteSources( 1, &MusicSource ); for( INT i=0; i<NumSources; i++ ) alDeleteSources( 1, &Sources[i].Id ); alureShutdownDevice(); } Super::Destroy(); unguard; }
void Mix_CloseAudio(void) { if (loaded == 1){ MikMod_DisableOutput(); MikMod_Exit(); loaded = 0; } }
static void S_MIKMOD_CodecShutdown (void) { if (mikmod_codec.initialized) { mikmod_codec.initialized = false; MikMod_Exit(); } }
void uninit_sound_engine (void) { if (sound_initialized) { unload_soundtrack (); MikMod_Exit (); dmsg (D_SOUND_TRACK, "libMikMod exited"); sound_initialized = 0; } }
void SgShutdown() { SgStopMod(); MikMod_DisableOutput(); sg_thread_termination_requested = true; pthread_join(mikmod_update_thread, NULL); MikMod_Exit(); }
BOOL MikMod_Init(void) { UWORD t; _mm_critical = 1; /* if md_device==0, try to find a device number */ if(md_device==0) { for(t=1,md_driver=firstdriver; md_driver!=NULL; md_driver=md_driver->next, t++) { if(md_driver->IsPresent()) break; } if(md_driver==NULL) { _mm_errno = MMERR_DETECTING_DEVICE; if(_mm_errorhandler!=NULL) _mm_errorhandler(); md_driver = &drv_nos; return 1; } md_device = t; } else { /* if n>0 use that driver */ for(t=1,md_driver=firstdriver; (md_driver!=NULL) && (t!=md_device); md_driver=md_driver->next, t++); if(md_driver==NULL) { _mm_errno = MMERR_INVALID_DEVICE; if(_mm_errorhandler!=NULL) _mm_errorhandler(); md_driver = &drv_nos; return 1; } if(!md_driver->IsPresent()) { _mm_errno = MMERR_DETECTING_DEVICE; if(_mm_errorhandler!=NULL) _mm_errorhandler(); md_driver = &drv_nos; return 1; } } if(md_driver->Init()) { MikMod_Exit(); if(_mm_errorhandler!=NULL) _mm_errorhandler(); return 1; } idevice = md_device; imode = md_mode; imixfreq = md_mixfreq; idmabufsize = md_dmabufsize; initialized = 1; _mm_critical = 0; return 0; }
/** ** Type member function to free sample */ CSampleMikModStream::~CSampleMikModStream() { CurrentFile = this->Data.MikModFile; Player_Stop(); Player_Free(this->Data.MikModModule); MikMod_Exit(); this->Data.MikModFile->close(); delete this->Data.MikModFile; delete[] this->Buffer; }
int main(int argc, char *argv[]) { (void)argc; (void)argv; MikMod_RegisterAllDrivers(); MikMod_Init(""); MikMod_Exit(); return 0; }
int main() { int i=0, x, y, t; const int COLOURS_LEN = sizeof(COLOURS) / sizeof(int); const int FLAG_LEN = sizeof(FLAG) / sizeof(char) - 1; // Extract module song payload char fname[] = "/tmp/file-XXXXXX"; int fd = mkstemp(fname); if (write(fd, src_music_xm, src_music_xm_len) < 0) return -1; lseek(fd, 0, SEEK_SET); FILE *pFile = fdopen(fd, "rb"); // Load and play the module song MODULE *module; MikMod_RegisterAllDrivers(); MikMod_RegisterAllLoaders(); md_mode |= DMODE_SOFT_MUSIC; MikMod_Init(""); module = Player_LoadFP(pFile, 64, 0); module->wrap = 1; Player_Start(module); // Animation while (1) { MikMod_Update(); for (y = 0; y < COLOURS_LEN; y++) { // line loop printf("\x1b[1;%dm", COLOURS[y]); // set rainbow line colour for (x = 0; x < WIDTH - ANGLE*(COLOURS_LEN-y); x++) // rainbow line putchar(FLAG[(x + (FLAG_LEN-y)+i) % FLAG_LEN]); // print rainbow character printf("\x1b[0m"); // clear colour for (t = ANGLE; t < ANGLE * (COLOURS_LEN-y); t++) // print distance holder putchar(' '); printf("\x1b[1m"); // set bright color for cat puts(CAT[y%COLOURS_LEN + (i%10<COLOURS_LEN ? 0 : COLOURS_LEN)]); // cat } if (_kbhit()) // key pressed? break; i++; usleep(DELAY); // wait x ms printf("\x1b[%dA", COLOURS_LEN); // move up before loop } puts("\x1b[0m"); // reset colours Player_Stop(); Player_Free(module); MikMod_Exit(); return 0; }
int main(int argc, char **argv) { MODULE *module; if (argc<2) { fprintf(stderr, "Usage: ./splay1 file\n"); return 1; } /* register all the drivers */ MikMod_RegisterAllDrivers(); /* register all the module loaders */ MikMod_RegisterAllLoaders(); /* init the library */ md_mode |= DMODE_SOFT_MUSIC | DMODE_NOISEREDUCTION; if (MikMod_Init("")) { fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return 2; } /* load module */ module = Player_Load(argv[1], 64, 0); if (module) { /* */ printf("Playing %s (%d chn) - SIMD: %s\n", module->songname, module->numchn, md_mode & DMODE_SIMDMIXER ? "yes" : "no"); /* start module */ Player_Start(module); while (Player_Active()) { MikMod_Sleep(10000); MikMod_Update(); } Player_Stop(); Player_Free(module); } else fprintf(stderr, "Could not load module, reason: %s\n", MikMod_strerror(MikMod_errno)); MikMod_Exit(); return 0; }
int main(int argc, char** argv) { MODULE *module; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* register all the module loaders */ MikMod_RegisterAllLoaders(); /* initialize the library */ md_mode |= DMODE_SOFT_MUSIC; if (MikMod_Init("")) { fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return -1; } /* load module */ module = Player_Load("music.xm", 64, 0); printf ("module loaded\n"); if (module) { /* start module */ Player_Start(module); while (Player_Active()) { /* we're playing */ gsKit_vsync_wait(); } Player_Stop(); Player_Free(module); } else fprintf(stderr, "Could not load module, reason: %s\n", MikMod_strerror(MikMod_errno)); /* give up */ MikMod_Exit(); return 0; }
static GstStateChangeReturn gst_mikmod_change_state (GstElement * element, GstStateChange transition) { GstMikMod *mikmod; g_return_val_if_fail (GST_IS_MIKMOD (element), GST_STATE_CHANGE_FAILURE); mikmod = GST_MIKMOD (element); GST_DEBUG ("state pending %d", GST_STATE_PENDING (element)); if (GST_STATE_PENDING (element) == GST_STATE_READY) { gst_mikmod_setup (mikmod); if (Player_Active ()) { Player_TogglePause (); Player_SetPosition (0); } mikmod->initialized = FALSE; } if (GST_STATE_PENDING (element) == GST_STATE_PLAYING) { if (Player_Active () && Player_Paused ()) Player_TogglePause (); else if (!Player_Active ()) Player_Start (module); } if (GST_STATE_PENDING (element) == GST_STATE_PAUSED) if (Player_Active () && !Player_Paused ()) Player_TogglePause (); if (GST_STATE_PENDING (element) == GST_STATE_NULL) MikMod_Exit (); if (GST_ELEMENT_CLASS (parent_class)->change_state) return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); return GST_STATE_CHANGE_SUCCESS; }
void UOpenALAudioSubsystem::ShutdownAfterError() { guard(UOpenALAudioSubsystem::ShutdownAfterError); // Unhook. USound::Audio = NULL; UMusic::Audio = NULL; debugf( NAME_Exit, TEXT("UOpenALAudioSubsystem::ShutdownAfterError") ); if( Initialized ) { MikMod_Exit(); alureShutdownDevice(); } Super::ShutdownAfterError(); unguard; }
int main(int p_argc, char * p_argv[]) { MikMod_RegisterAllLoaders(); // MikMod_RegisterAllDrivers(); MikMod_RegisterDriver(&drv_nos); if(p_argc < 2) { usage(p_argv[0]); return 1; } if(MikMod_Init("")) { printf("MikMod_Init: %s\n", MikMod_strerror(MikMod_errno)); return 2; } extract(p_argv[1]); MikMod_Exit(); return 0; }
MpdTag * modTagDup(char * file) { MpdTag * ret = NULL; MODULE * moduleHandle; char * title; if(mod_initMikMod() < 0) return NULL; if(!(moduleHandle = Player_Load(file, 128, 0))) goto fail; Player_Free(moduleHandle); ret = newMpdTag(); ret->time = 0; title = strdup(Player_LoadTitle(file)); if(title) addItemToMpdTag(ret, TAG_ITEM_TITLE, title); fail: MikMod_Exit(); return ret; }
void mod_finishMikMod() { MikMod_Exit(); }
static void moda_TermModule (void) { MikMod_Exit (); }
BOOL MikMod_SetNumVoices(int music, int sfx) /* If either parameter is -1, the current set value will be retained. */ { BOOL resume = 0; int t, oldchn = 0; if((music==0) && (sfx==0)) return 0; _mm_critical = 1; if(isplaying) { MikMod_DisableOutput(); oldchn = md_numchn; resume = 1; } if(sfxinfo!=NULL) free(sfxinfo); if(md_sample!=NULL) free(md_sample); md_sample = NULL; sfxinfo = NULL; /*md_softchn = md_hardchn = 0; if(md_mode & DMODE_SOFT_SNDFX) md_softchn = sfx; else md_hardchn = sfx; if(md_mode & DMODE_SOFT_MUSIC) md_softchn += music; else md_hardchn += music; */ if(music != -1) md_sngchn = music; if(sfx != -1) md_sfxchn = sfx; md_numchn = md_sngchn + md_sfxchn; LimitHardVoices(md_driver->HardVoiceLimit); LimitSoftVoices(md_driver->SoftVoiceLimit); if(md_driver->SetNumVoices()) { MikMod_Exit(); md_numchn = md_softchn = md_hardchn = md_sfxchn = md_sngchn = 0; if(_mm_errorhandler!=NULL) _mm_errorhandler(); return 1; } if(md_sngchn || md_sfxchn) md_sample = (SAMPLE **)_mm_calloc(md_sngchn+md_sfxchn, sizeof(SAMPLE *)); if(md_sfxchn) sfxinfo = (UBYTE *)_mm_calloc(md_sfxchn, sizeof(UBYTE)); /* make sure the player doesn't start with garbage */ for(t=oldchn; t<md_numchn; t++) Voice_Stop(t); sfxpool = 0; if(resume) MikMod_EnableOutput(); _mm_critical = 0; return 0; }
void MikModClass_Done() { NodeUnRegisterClass(MIKMOD_ID); MikMod_Exit(); }
int main(void) { SceCtrlData pad, lastpad; int maxchan = 128; BOOL outputEnabled; MODULE *mf = NULL; SAMPLE *sf = NULL; int voice = 0; int pan = 127; int vol = 127; int freq = 22000; pspDebugScreenInit(); SetupCallbacks(); sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(1); if (!MikMod_InitThreads()) { printf("MikMod thread init failed\n"); } MikMod_RegisterErrorHandler(my_error_handler); /* register all the drivers */ MikMod_RegisterAllDrivers(); /* register all the module loaders */ MikMod_RegisterAllLoaders(); /* initialize the library */ md_mode = DMODE_16BITS|DMODE_STEREO|DMODE_SOFT_SNDFX|DMODE_SOFT_MUSIC; md_reverb = 0; md_pansep = 128; if (MikMod_Init("")) { printf("Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); sceKernelExitGame(); return 0; } MikMod_SetNumVoices(-1, 8); /* get ready to play */ sf = Sample_Load("ms0:/sound.wav"); printf("Starting.\n"); MikMod_EnableOutput(); outputEnabled = 1; if ((mikModThreadID = sceKernelCreateThread("MikMod" ,(void*)&AudioChannelThread,0x12,0x10000,0,NULL)) > 0) { sceKernelStartThread(mikModThreadID, 0 , NULL); } else { printf("Play thread create failed!\n"); } sceCtrlReadBufferPositive(&lastpad, 1); do { sceCtrlReadBufferPositive(&pad, 1); if(pad.Buttons != lastpad.Buttons) { if(pad.Buttons & PSP_CTRL_CROSS) { voice = Sample_Play(sf,0,0); Voice_SetPanning(voice, pan); } if(pad.Buttons & PSP_CTRL_SQUARE) { outputEnabled = !outputEnabled; if(outputEnabled) MikMod_EnableOutput(); else MikMod_DisableOutput(); } if(pad.Buttons & PSP_CTRL_CIRCLE) { mf = Player_Load("ms0:/MUSIC.XM", maxchan, 0); if (NULL != mf) { mf->wrap = 1; Player_Start(mf); } } if(pad.Buttons & PSP_CTRL_TRIANGLE) { if (NULL != mf) { Player_Stop(); Player_Free(mf); /* To stop the song for real, it needs to be freed. I know, weird... */ mf = NULL; } } if(pad.Buttons & PSP_CTRL_SELECT) printf("Player is %s\n", Player_Active()?"On":"Off"); lastpad = pad; } if(pad.Buttons & PSP_CTRL_LTRIGGER) { Voice_SetPanning(voice, (pan<2)?pan:--pan); printf("pan is %d\n", pan); } if(pad.Buttons & PSP_CTRL_RTRIGGER) { Voice_SetPanning(voice, (pan>254)?pan:++pan); printf("pan is %d\n", pan); } if(pad.Buttons & PSP_CTRL_UP) { Voice_SetVolume(voice, (vol>254)?vol:++vol); printf("vol is %d\n", vol); } if(pad.Buttons & PSP_CTRL_DOWN) { Voice_SetVolume(voice, (vol<2)?vol:--vol); printf("vol is %d\n", vol); } if(pad.Buttons & PSP_CTRL_LEFT) { Voice_SetFrequency(voice, (freq<1001)?freq:(freq -=1000)); printf("freq is %d\n", freq); } if(pad.Buttons & PSP_CTRL_RIGHT) { Voice_SetFrequency(voice, (freq>44000)?freq:(freq +=1000)); printf("freq is %d\n", freq); } sceDisplayWaitVblankStart(); } while(!((pad.Buttons & PSP_CTRL_START) || done)); printf("Stopping.\n"); /* allow audio thread to terminate cleanly */ done = 1; if (mikModThreadID > 0) { SceUInt timeout = 100000; sceKernelWaitThreadEnd(mikModThreadID, &timeout); /* not 100% sure if this is necessary after a clean exit, * but just to make sure any resources are freed: */ sceKernelDeleteThread(mikModThreadID); } Player_Stop(); Player_Free(mf); MikMod_Exit(); sceKernelExitGame(); return 0; }
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // ¥ ShutDown // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ void CMikModDriver::ShutDown() { MikMod_Exit(); }
/** ** Load MikMod. ** ** @param name Filename of the module. ** @param flags Unused. ** ** @return Returns the loaded sample. */ CSample *LoadMikMod(const char *name, int flags) { CSample *sample; MikModData *data; MODULE *module; CFile *f; char s[256]; static int registered = 0; md_mode |= DMODE_STEREO | DMODE_INTERP | DMODE_SURROUND | DMODE_HQMIXER; MikMod_RegisterDriver(&drv_nos); if (!registered) { MikMod_RegisterAllLoaders(); registered = 1; } strcpy_s(s, sizeof(s), name); f = new CFile; if (f->open(name, CL_OPEN_READ) == -1) { delete f; return NULL; } CurrentFile = f; MikMod_Init(""); module = Player_LoadGeneric(&MReader, 64, 0); if (!module) { MikMod_Exit(); f->close(); delete f; return NULL; } if (flags & PlayAudioStream) { sample = new CSampleMikModStream; data = &((CSampleMikModStream *)sample)->Data; } else { sample = new CSampleMikMod; data = &((CSampleMikMod *)sample)->Data; } data->MikModFile = f; data->MikModModule = module; sample->Channels = 2; sample->SampleSize = 16; sample->Frequency = 44100; sample->Pos = 0; if (flags & PlayAudioStream) { sample->Len = 0; sample->Buffer = new unsigned char[SOUND_BUFFER_SIZE]; Player_Start(data->MikModModule); } else { int read; int pos; // FIXME: need to find the correct length sample->Len = 55000000; sample->Buffer = new unsigned char[sample->Len]; pos = 0; Player_Start(data->MikModModule); while (Player_Active()) { read = VC_WriteBytes((SBYTE *)sample->Buffer + pos, sample->Len - pos); pos += read; } Player_Stop(); Player_Free(data->MikModModule); MikMod_Exit(); data->MikModFile->close(); delete data->MikModFile; } return sample; }
int main(void) { /* sound effects */ SAMPLE *sfx1, *sfx2; /* voices */ int v1, v2; int i; /* register all the drivers */ MikMod_RegisterAllDrivers(); /* initialize the library */ md_mode |= DMODE_SOFT_SNDFX; if (MikMod_Init("")) { fprintf(stderr, "Could not initialize sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return 1; } /* load samples */ sfx1 = Load("first.wav"); if (!sfx1) { MikMod_Exit(); fprintf(stderr, "Could not load the first sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return 1; } sfx2 = Load("second.wav"); if (!sfx2) { Sample_Free(sfx1); MikMod_Exit(); fprintf(stderr, "Could not load the second sound, reason: %s\n", MikMod_strerror(MikMod_errno)); return 1; } /* reserve 2 voices for sound effects */ MikMod_SetNumVoices(-1, 2); /* get ready to play */ MikMod_EnableOutput(); /* play first sample */ v1 = Sample_Play(sfx1, 0, 0); do { MikMod_Update(); MikMod_Sleep(100000); } while (!Voice_Stopped(v1)); for (i = 0; i < 10; i++) { MikMod_Update(); MikMod_Sleep(100000); } /* half a second later, play second sample */ v2 = Sample_Play(sfx2, 0, 0); do { MikMod_Update(); MikMod_Sleep(100000); } while (!Voice_Stopped(v2)); for (i = 0; i < 10; i++) { MikMod_Update(); MikMod_Sleep(100000); } MikMod_DisableOutput(); Sample_Free(sfx2); Sample_Free(sfx1); MikMod_Exit(); return 0; }