int mixer_sh_start(void) { struct mixer_channel_data *channel; int i; /* reset all channels to their defaults */ memset(&mixer_channel, 0, sizeof(mixer_channel)); for (i = 0, channel = mixer_channel; i < MIXER_MAX_CHANNELS; i++, channel++) { channel->mixing_level = 0xff; channel->default_mixing_level = 0xff; channel->config_mixing_level = config_mixing_level[i]; channel->config_default_mixing_level = config_default_mixing_level[i]; } /* determine if we're playing in stereo or not */ first_free_channel = 0; is_stereo = ((Machine->drv->sound_attributes & SOUND_SUPPORTS_STEREO) != 0); /* clear the accumulators */ accum_base = 0; memset(left_accum, 0, ACCUMULATOR_SAMPLES * sizeof(INT32)); memset(right_accum, 0, ACCUMULATOR_SAMPLES * sizeof(INT32)); samples_this_frame = osd_start_audio_stream(is_stereo); mixer_sound_enabled = 1; return 0; }
int sound_init(running_machine *machine) { /* handle -nosound */ nosound_mode = (Machine->sample_rate == 0); if (nosound_mode) Machine->sample_rate = 11025; /* count the speakers */ for (totalspeakers = 0; Machine->drv->speaker[totalspeakers].tag; totalspeakers++) ; VPRINTF(("total speakers = %d\n", totalspeakers)); /* initialize the OSD layer */ VPRINTF(("osd_start_audio_stream\n")); samples_this_frame = osd_start_audio_stream(1); if (!samples_this_frame) return 1; /* allocate memory for mix buffers */ leftmix = auto_malloc(Machine->sample_rate * sizeof(*leftmix)); rightmix = auto_malloc(Machine->sample_rate * sizeof(*rightmix)); finalmix = auto_malloc(Machine->sample_rate * sizeof(*finalmix)); /* allocate a global timer for sound timing */ sound_update_timer = mame_timer_alloc(NULL); /* initialize the streams engine */ VPRINTF(("streams_init\n")); streams_init(); /* now start up the sound chips and tag their streams */ VPRINTF(("start_sound_chips\n")); if (start_sound_chips()) return 1; /* then create all the speakers */ VPRINTF(("start_speakers\n")); if (start_speakers()) return 1; /* finally, do all the routing */ VPRINTF(("route_sound\n")); if (route_sound()) return 1; if (MAKE_WAVS) wavfile = wav_open("finalmix.wav", Machine->sample_rate, 2); /* enable sound by default */ global_sound_enabled = TRUE; /* register callbacks */ config_register("mixer", sound_load, sound_save); add_pause_callback(machine, sound_pause); add_reset_callback(machine, sound_reset); add_exit_callback(machine, sound_exit); return 0; }