--- uae/src/od-pOS/sound.c 2018/04/24 16:40:30 1.1 +++ uae/src/od-pOS/sound.c 2018/04/24 17:15:11 1.1.1.4 @@ -1,8 +1,8 @@ - /* + /* * UAE - The Un*x Amiga Emulator - * + * * Support for Amiga audio.device sound - * + * * Copyright 1996, 1997 Samuel Devulder */ @@ -12,11 +12,11 @@ #include "config.h" #include "options.h" #include "memory.h" +#include "events.h" #include "custom.h" #include "audio.h" #include "gensound.h" #include "sounddep/sound.h" -#include "events.h" #include #include @@ -49,8 +49,8 @@ static FILE *TST_AUDIO_FILE(char *buff, sprintf(buff,name,rate,bsize); lock = pOS_LockObject(NULL, buff, FILELKACC_Exclusive|FILELKACC_NoReq); if(lock) { - pOS_UnlockObject(lock); - return fopen(buff,"wb"); + pOS_UnlockObject(lock); + return fopen(buff,"wb"); } return NULL; } @@ -61,7 +61,7 @@ int setup_sound(void) return 1; } -int init_sound (void) +int init_sound (void) { int rate; char buff[256],*devname = NULL; @@ -77,44 +77,44 @@ int init_sound (void) /* check for $AUDIONAME or AUD: or AUDIO: device */ devname = buff; AUDIO_FILE = TST_AUDIO_FILE(buff, getenv("AUDIONAME"), - rate, sndbufsize); + rate, sndbufsize); if(!AUDIO_FILE) /* AHI */ AUDIO_FILE = TST_AUDIO_FILE(buff, "AUDIO:FREQUENCY=%d/BUFFER=%d", - rate, sndbufsize); + rate, sndbufsize); if(!AUDIO_FILE) /* AUD: */ AUDIO_FILE = TST_AUDIO_FILE(buff, "AUDIO:FREQUENCY%d/BUFFER%d", - rate, sndbufsize); + rate, sndbufsize); if(!AUDIO_FILE) AUDIO_FILE = TST_AUDIO_FILE(buff, "AUD:FREQUENCY%d/BUFFER%d", - rate, sndbufsize); + rate, sndbufsize); /* else use audio.device */ if(!AUDIO_FILE) { - if(!pOS_ConstructMsgPort(&AudioMP)) goto fail; - port_created = 1; - AudioIO = (void*)pOS_CreateIORequest(&AudioMP, - sizeof(struct pOS_AudioIO)); - if(!AudioIO) goto fail; - - if(pOS_OpenDevice(devname = "pAudio.device", 0, (void*)AudioIO, 0,0)) - goto fail; - devopen = 1; - - AudioIO->aio_Command = AUDIOCMD_AllocChannel; - AudioIO->aio_U.aio_AllocCh.alio_Tags = NULL; - if(pOS_DoIO((struct pOS_IORequest*)AudioIO)) goto fail; - channel_allocated = 1; + if(!pOS_ConstructMsgPort(&AudioMP)) goto fail; + port_created = 1; + AudioIO = (void*)pOS_CreateIORequest(&AudioMP, + sizeof(struct pOS_AudioIO)); + if(!AudioIO) goto fail; + + if(pOS_OpenDevice(devname = "pAudio.device", 0, (void*)AudioIO, 0,0)) + goto fail; + devopen = 1; + + AudioIO->aio_Command = AUDIOCMD_AllocChannel; + AudioIO->aio_U.aio_AllocCh.alio_Tags = NULL; + if(pOS_DoIO((struct pOS_IORequest*)AudioIO)) goto fail; + channel_allocated = 1; } /* get the buffers */ if(AUDIO_FILE) { - buffers[0] = malloc(sndbufsize); - buffers[1] = NULL; - if(!buffers[0]) goto fail; + buffers[0] = malloc(sndbufsize); + buffers[1] = NULL; + if(!buffers[0]) goto fail; } else { - buffers[0] = malloc(sndbufsize); - buffers[1] = malloc(sndbufsize); - if(!buffers[0] || !buffers[1]) goto fail; + buffers[0] = malloc(sndbufsize); + buffers[1] = malloc(sndbufsize); + if(!buffers[0] || !buffers[1]) goto fail; } bufidx = 0; sndbuffer = sndbufpt = (uae_u16*)buffers[bufidx]; @@ -125,13 +125,15 @@ int init_sound (void) AudioMap.bam_Length = sndbufsize; AudioMap.bam_Sample = (void*)sndbuffer; - sample_evtime = (long)maxhpos * maxvpos * 50 / rate; + scaled_sample_evtime = (unsigned long)maxhpos * maxvpos * vblank_hz * CYCLE_UNIT / rate; + scaled_sample_evtime_ok = 1; + init_sound_table8 (); - eventtab[ev_sample].handler = sample8_handler; + sample_handler = sample8_handler; fprintf(stderr, "Sound driver found and configured for %d bits " - "at %d Hz, buffer is %d bytes (%s)\n", - 8, rate, sndbufsize,devname); + "at %d Hz, buffer is %d bytes (%s)\n", + 8, rate, sndbufsize,devname); sound_available = 1; return 1; @@ -143,25 +145,25 @@ fail: void close_sound(void) { if(AUDIO_FILE) { - fclose(AUDIO_FILE); - AUDIO_FILE = NULL; + fclose(AUDIO_FILE); + AUDIO_FILE = NULL; } if(channel_allocated) { - AudioIO->aio_Command = AUDIOCMD_FreeChannel; - pOS_DoIO((struct pOS_IORequest*)AudioIO); - channel_allocated = 0; + AudioIO->aio_Command = AUDIOCMD_FreeChannel; + pOS_DoIO((struct pOS_IORequest*)AudioIO); + channel_allocated = 0; } if(devopen) { - pOS_CloseDevice((void*)AudioIO); - devopen = 0; + pOS_CloseDevice((void*)AudioIO); + devopen = 0; } if(AudioIO) { - pOS_DeleteIORequest((void*)AudioIO); - AudioIO = NULL; + pOS_DeleteIORequest((void*)AudioIO); + AudioIO = NULL; } if(port_created) { - pOS_DestructMsgPort(&AudioMP); - port_created = 0; + pOS_DestructMsgPort(&AudioMP); + port_created = 0; } if(buffers[0]) {free(buffers[0]);buffers[0] = 0;} if(buffers[1]) {free(buffers[1]);buffers[1] = 0;}