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;
}
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 */
#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];
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)
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
#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
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;
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) {
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++) {
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
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;