]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Cleanups, always reset when config changes
authorToni Wilen <twilen@winuae.net>
Mon, 4 Aug 2025 16:28:29 +0000 (19:28 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 4 Aug 2025 16:28:29 +0000 (19:28 +0300)
audio.cpp

index 72eae356f94562b9c65ae402ec5be0c04176bb5a..02441f1f9e6d9df4d5ae284c64922e1c35b27439 100644 (file)
--- 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;