void saDestroySound( int remove_all_resources ) { int i; #ifdef RAINE_DEBUG print_debug("saDestroySound: Removing SEAL\n"); #endif //pause_raine_ym3812(); if(remove_all_resources){ saStopSoundEmulators(); } for( i = 0; i < NUMVOICES; i++ ){ saDestroyChannel(i); #ifdef DUMP_CHANNELS fclose(stream_out[i]); #endif } remove_sound(); #ifdef USE_COMPENS reset_streams(); #endif #ifdef RAINE_DEBUG print_debug("saDestroySound: OK\n"); #endif }
// Initialize Sound Engine ---------------------------------------------------- // FIXME: This is mostly legacy stuff :( static int Sound_Init_Engine (int buffer_mode) { // Stream Buffer Mode //STREAM_BUFFER_MAXA = DEF_STREAM_BUFFER_MAXA; MODEB_FRAME_SIZE = DEF_MODEB_FRAME_SIZE; MODEB_UPDATE_COUNT = DEF_MODEB_UPDATE_COUNT; MODEB_ERROR_MAX = DEF_STREAM_UPDATE_ERROR_MAX; STREAM_BUFFER_MAXB = MODEB_FRAME_SIZE; MODEB_MASK = MODEB_FRAME_SIZE / MODEB_UPDATE_COUNT; sound_stream_mode = buffer_mode; /* SOUND_STREAM_WAIT in MEKA */ //stream_buffer_max = (sound_stream_mode == SOUND_STREAM_NORMAL) ? STREAM_BUFFER_MAXA : STREAM_BUFFER_MAXB; #ifdef INSTALL_SOUND_TIMER buffered_stream_max = stream_buffer_max = 3; // audio_buffer_max_size MODEB_UPDATE_COUNT = 1; #else stream_buffer_max = ((stream_buffer_max / 6) / MODEB_UPDATE_COUNT) * MODEB_UPDATE_COUNT; // buffered_stream_max = stream_buffer_max; // audio_buffer_max_size buffered_stream_max = MODEB_UPDATE_COUNT * 2; // audio_buffer_max_size #endif /**** timer work init ****/ sound_freerun_count = 0; sound_slice = 0; if (change_sample_rate) { // Sample rate has changed, so all emulators must be restarted! change_sample_rate = FALSE; saStopSoundEmulators(); } ConsolePrint (" - SEAL: Ok\n"); // FIXME: should be a message ? #ifdef INSTALL_SOUND_TIMER saInitSoundTimer(); #endif if (SndMachine != NULL) { if (!SndMachine->first) { int i; SndMachine->first = 1; /* first flag clear */ streams_sh_start(); /* streaming system initialize & start */ pause_sound = 0; /* pause flag off */ vbover_err = vbunder_err = 0; /* error initial */ for (i = 0; i < SndMachine->control_max; i++) { if (SndMachine->f_init[i]) { if (SndMachine->f_init[i] (SndMachine->userdata[i]) != MEKA_ERR_OK) { SndMachine = NULL; return (MEKA_ERR_FAIL); } } } } } return (MEKA_ERR_OK); }
void init_sound(void) { const SOUND_INFO *sound_src; // games/games.h int ta; sound_src = current_game->sound; if(sound_src){ saStopSoundEmulators(); for( ta = 0; ta < SND_CONTROL_MAX; ta++ ){ SndMachine->init[ta] = SOUND_NONE; SndMachine->intf[ta] = NULL; } SndMachine->first = 0; SndMachine->control_max = 0; ta = 0; while(sound_src[ta].interface){ SndMachine->init[ta] = sound_src[ta].type; SndMachine->intf[ta] = sound_src[ta].interface; ta++; } SndMachine->control_max = ta; GameSound = 1; } }
int init_sound_emulators(void) { int i,j; if(change_sample_rate) saStopSoundEmulators(); if (emulators_active) return 0; change_sample_rate = 0; if( SndMachine ){ if( !SndMachine->first ){ saInitVolPan(); /* moved. (hiro-shi) */ SndMachine->first = 1; /* first flag clear */ streams_sh_start(); /* streaming system initialize & start */ for( j = 0; j < SndMachine->control_max; j++ ){ switch( SndMachine->init[j] ){ #if HAS_YM2203 case SOUND_YM2203: i = YM2203_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM2151 case SOUND_YM2151S: i = YM2151_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM2413 case SOUND_YM2413: i = YM2413_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM2151_ALT case SOUND_YM2151J: i = YM2151_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM2610 case SOUND_YM2610: i = YM2610_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM2610B case SOUND_YM2610B: i = YM2610B_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_MSM5205_BUFF case SOUND_MSM5205_BUFF: i = MSM5205buffer_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_ADPCM case SOUND_M6295: i = OKIM6295_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_AY8910 case SOUND_AY8910: i = AY8910_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YM3812 case SOUND_YM3812: i = YM3812_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_SMP16 case SOUND_SMP16: i = SMP16buffer_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_M6585 case SOUND_M6585: i = M6585buffer_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YMZ280B case SOUND_YMZ280B: i = YMZ280B_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_ES5505 case SOUND_ES5505: i = ES5505_sh_start( SndMachine->intf[j] ); break; case SOUND_ES5506: i = ES5506_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_QSOUND case SOUND_QSOUND: i = qsound_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_YMF278B case SOUND_YMF278B: i = YMF278B_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_NAMCO case SOUND_NAMCO: i = namco_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_X1_010 case SOUND_X1_010: i = seta_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_DAC case SOUND_DAC: i = DAC_sh_start( SndMachine->intf[j] ); break; #endif #if HAS_DXSMP case SOUND_DXSMP: i = dxsmp_sh_start( SndMachine->intf[j] ); break; #endif default: i = 1; break; } if( i ){ audio_sample_rate = 0; SndMachine = NULL; printf("emulator init failed\n"); return 1; } } } } emulators_active = 1; return 0; }