|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * Support for Solaris sound ! 5: * ! 6: * Copyright 1996, 1997 Manfred Thole ! 7: */ ! 8: ! 9: #include "sysconfig.h" ! 10: #include "sysdeps.h" ! 11: ! 12: #include "config.h" ! 13: #include "options.h" ! 14: #include "memory.h" ! 15: #include "custom.h" ! 16: #include "audio.h" ! 17: #include "gensound.h" ! 18: #include "sounddep/sound.h" ! 19: #include "events.h" ! 20: ! 21: #if !defined HAVE_SYS_AUDIOIO_H ! 22: ! 23: /* SunOS 4.1.x */ ! 24: #include <sys/ioctl.h> ! 25: #include <sun/audioio.h> ! 26: #ifndef AUDIO_ENCODING_LINEAR ! 27: #define AUDIO_ENCODING_LINEAR (3) ! 28: #endif ! 29: ! 30: #else ! 31: ! 32: /* SunOS 5.x/NetBSD */ ! 33: #include <sys/audioio.h> ! 34: #ifdef HAVE_SYS_IOCTL_H ! 35: #include <sys/ioctl.h> ! 36: #endif ! 37: #endif ! 38: ! 39: int sndbufsize; ! 40: int sound_fd; ! 41: static int have_sound; ! 42: uae_u16 sndbuffer[44100]; ! 43: uae_u16 *sndbufpt; ! 44: ! 45: void close_sound(void) ! 46: { ! 47: if (have_sound) ! 48: close(sound_fd); ! 49: } ! 50: ! 51: int setup_sound(void) ! 52: { ! 53: sound_fd = open ("/dev/audio", O_WRONLY); ! 54: have_sound = !(sound_fd < 0); ! 55: if (!have_sound) ! 56: return 0; ! 57: ! 58: sound_available = 1; ! 59: return 1; ! 60: } ! 61: ! 62: int init_sound (void) ! 63: { ! 64: int rate, dspbits; ! 65: ! 66: struct audio_info sfd_info; ! 67: ! 68: if (currprefs.sound_maxbsiz < 128 || currprefs.sound_maxbsiz > 44100) { ! 69: fprintf(stderr, "Sound buffer size %d out of range.\n", currprefs.sound_maxbsiz); ! 70: currprefs.sound_maxbsiz = 8192; ! 71: } ! 72: ! 73: rate = currprefs.sound_freq; ! 74: dspbits = currprefs.sound_bits; ! 75: AUDIO_INITINFO(&sfd_info); ! 76: sfd_info.play.sample_rate = rate; ! 77: sfd_info.play.channels = 1; ! 78: sfd_info.play.precision = dspbits; ! 79: sfd_info.play.encoding = (dspbits == 8 ) ? AUDIO_ENCODING_ULAW : AUDIO_ENCODING_LINEAR; ! 80: if (ioctl(sound_fd, AUDIO_SETINFO, &sfd_info)) { ! 81: fprintf(stderr, "Can't use sample rate %d with %d bits, %s!\n", rate, dspbits, (dspbits ==8) ? "ulaw" : "linear"); ! 82: return 0; ! 83: } ! 84: sample_evtime = (long)maxhpos * maxvpos * 50 / rate; ! 85: ! 86: init_sound_table16 (); ! 87: ! 88: if (dspbits == 8) { ! 89: eventtab[ev_sample].handler = sample_ulaw_handler; ! 90: } else { ! 91: eventtab[ev_sample].handler = sample16_handler; ! 92: } ! 93: ! 94: sndbufpt = sndbuffer; ! 95: sound_available = 1; ! 96: sndbufsize = currprefs.sound_maxbsiz; ! 97: printf ("Sound driver found and configured for %d bits, %s at %d Hz, buffer is %d bytes\n", dspbits, (dspbits ==8) ? "ulaw" : "linear", rate, sndbufsize); ! 98: return 1; ! 99: } ! 100:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.