From: Toni Wilen Date: Mon, 4 Aug 2025 16:28:29 +0000 (+0300) Subject: Cleanups, always reset when config changes X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=116f0d88dd407d74ffd5165e9da15e5ae8c8188d;p=francis%2Fwinuae.git Cleanups, always reset when config changes --- diff --git a/audio.cpp b/audio.cpp index 72eae356..02441f1f 100644 --- a/audio.cpp +++ b/audio.cpp @@ -589,13 +589,11 @@ static void put_sound_word_left2 (uae_u32 w) static void anti_prehandler (unsigned long best_evtime) { - int i, output; - struct audio_channel_data2 *acd; - - /* Handle accumulator antialiasiation */ - for (i = 0; audio_data[i]; i++) { - acd = audio_data[i]; - output = (acd->current_sample * acd->mixvol) & acd->adk_mask; + /* Handle accumulator antialiasing */ + for (int i = 0; audio_data[i]; i++) { + struct audio_channel_data2 *acd = audio_data[i]; + int vol = acd->mixvol; + int output = (acd->current_sample *vol) & acd->adk_mask; acd->sample_accum += output * best_evtime; acd->sample_accum_time += best_evtime; } @@ -603,24 +601,25 @@ static void anti_prehandler (unsigned long best_evtime) static void samplexx_anti_handler (int *datasp, int ch_start, int ch_num) { - int i, j; - for (i = ch_start, j = 0; j < ch_num; i++, j++) { + for (int i = ch_start, j = 0; j < ch_num; i++, j++) { struct audio_channel_data2 *acd = audio_data[i]; - datasp[j] = acd->sample_accum_time ? (acd->sample_accum / acd->sample_accum_time) : 0; + int v = acd->sample_accum_time ? (acd->sample_accum / acd->sample_accum_time) : 0; acd->sample_accum = 0; acd->sample_accum_time = 0; + if (v > 32767) + v = 32767; + else if (v < -32768) + v = -32768; + datasp[j] = v; } } static void sinc_prehandler_paula (unsigned long best_evtime) { - int i, output; - struct audio_channel_data2 *acd; - - for (i = 0; i < AUDIO_CHANNELS_PAULA; i++) { - acd = audio_data[i]; + for (int i = 0; i < AUDIO_CHANNELS_PAULA; i++) { + struct audio_channel_data2 *acd = audio_data[i]; int vol = acd->mixvol; - output = (acd->current_sample * vol) & acd->adk_mask; + int output = (acd->current_sample * vol) & acd->adk_mask; /* if output state changes, record the state change and also * write data into sinc queue for mixing in the BLEP */ @@ -783,20 +782,20 @@ static void check_sound_buffers(void) #endif if (active_sound_stereo == SND_4CH_CLONEDSTEREO) { - ((uae_u16 *)paula_sndbufpt)[0] = ((uae_u16 *)paula_sndbufpt)[-2]; - ((uae_u16 *)paula_sndbufpt)[1] = ((uae_u16 *)paula_sndbufpt)[-1]; - paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 2 * 2); + ((uae_u16*)paula_sndbufpt)[0] = ((uae_u16*)paula_sndbufpt)[-2]; + ((uae_u16*)paula_sndbufpt)[1] = ((uae_u16*)paula_sndbufpt)[-1]; + paula_sndbufpt = (uae_u16*)(((uae_u8*)paula_sndbufpt) + 2 * 2); } else if (active_sound_stereo == SND_6CH_CLONEDSTEREO) { - uae_s16 *p = ((uae_s16 *)paula_sndbufpt); + uae_s16 *p = ((uae_s16*)paula_sndbufpt); uae_s32 sum; p[2] = p[-2]; p[3] = p[-1]; sum = (uae_s32)(p[-2]) + (uae_s32)(p[-1]) + (uae_s32)(p[2]) + (uae_s32)(p[3]); p[0] = sum / 8; p[1] = sum / 8; - paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 4 * 2); + paula_sndbufpt = (uae_u16*)(((uae_u8*)paula_sndbufpt) + 4 * 2); } else if (active_sound_stereo == SND_8CH_CLONEDSTEREO) { - uae_s16 *p = ((uae_s16 *)paula_sndbufpt); + uae_s16 *p = ((uae_s16*)paula_sndbufpt); uae_s32 sum; p[2] = p[-2]; p[3] = p[-1]; @@ -805,7 +804,7 @@ static void check_sound_buffers(void) sum = (uae_s32)(p[-2]) + (uae_s32)(p[-1]) + (uae_s32)(p[2]) + (uae_s32)(p[3]); p[0] = sum / 8; p[1] = sum / 8; - paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 6 * 2); + paula_sndbufpt = (uae_u16*)(((uae_u8*)paula_sndbufpt) + 6 * 2); } #if SOUNDSTUFF > 1 if (outputsample == 0) @@ -821,7 +820,7 @@ static void check_sound_buffers(void) paula_sndbufpt = paula_sndbufpt_start; } #endif - if ((uae_u8 *)paula_sndbufpt - (uae_u8 *)paula_sndbuffer >= paula_sndbufsize) { + if ((uae_u8*)paula_sndbufpt - (uae_u8*)paula_sndbuffer >= paula_sndbufsize) { finish_sound_buffer(); } #if SOUNDSTUFF > 1 @@ -1600,7 +1599,7 @@ static void setdr(int nr, bool startup) #endif if (dmaen(DMA_MASTER)) { -#if DEBUG_AUDIO > 0 +#if DEBUG_AUDIO > 1 if (debugchannel(nr) && cdp->wlen <= 2) write_log(_T("DR%d=%d LEN=%d/%d PT=%08X PC=%08X\n"), nr, cdp->dr, cdp->wlen, cdp->len, cdp->pt, M68K_GETPC); #endif @@ -2168,8 +2167,9 @@ void set_audio (void) int ch; ch = sound_prefs_changed (); - if (ch >= 0) + if (1) { // always reset if (1 || ch >= 0) { close_sound (); + } currprefs.produce_sound = changed_prefs.produce_sound; currprefs.win32_soundcard = changed_prefs.win32_soundcard; @@ -2199,7 +2199,7 @@ void set_audio (void) sndboard_ext_volume(); #endif - if (ch >= 0) { + if (1) { // always reset if (1 || ch >= 0) { if (currprefs.produce_sound >= 2) { if (!init_audio ()) { if (! sound_available) { @@ -2412,9 +2412,9 @@ void update_audio (void) if (currprefs.produce_sound > 1) { if (sample_prehandler) - sample_prehandler (best_evtime / CYCLE_UNIT); + sample_prehandler (best_evtime); if (extra_sample_prehandler) - extra_sample_prehandler(best_evtime / CYCLE_UNIT); + extra_sample_prehandler(best_evtime); } for (i = 0; i < AUDIO_CHANNELS_PAULA; i++) { @@ -2516,7 +2516,7 @@ void event_audxdat_func(uae_u32 v) struct audio_channel_data *cdp = audio_channel + nr; if ((cdp->state & 15) == 2 || (cdp->state & 15) == 3) { if (chan_ena) { -#if DEBUG_AUDIO > 0 +#if DEBUG_AUDIO > 1 if (debugchannel(nr) && (cdp->wlen >= cdp->len - 1 || cdp->wlen <= 2)) write_log(_T("AUD%d near loop, IRQ=%d, LC=%08X LEN=%d/%d DSR=%d\n"), nr, isirq(nr) ? 1 : 0, cdp->pt, cdp->wlen, cdp->len, cdp->dsr); #endif @@ -2529,8 +2529,8 @@ void event_audxdat_func(uae_u32 v) if (sampleripper_enabled) do_samplerip(cdp); #if DEBUG_AUDIO > 0 - if (debugchannel(nr) && cdp->wlen > 1) - write_log(_T("AUD%d looped, IRQ=%d, LC=%08X LEN=%d DSR=%d\n"), nr, isirq(nr) ? 1 : 0, cdp->pt, cdp->wlen, cdp->dsr); + if (debugchannel(nr)) + write_log(_T("AUD%d looped, IRQ=%d, LC=%08X LEN=%d DSR=%d IRQ2=%d\n"), nr, isirq(nr) ? 1 : 0, cdp->pt, cdp->wlen, cdp->dsr, cdp->intreq2); #endif } else { cdp->wlen = (cdp->wlen - 1) & 0xffff;