Annotation of uae/src/sd-file/sound.c, revision 1.1

1.1     ! root        1:  /* 
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   * 
        !             4:   * Support for Linux/USS sound
        !             5:   * 
        !             6:   * Copyright 1997 Bernd Schmidt
        !             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: #include <sys/ioctl.h>
        !            22: #include <sys/soundcard.h>
        !            23: 
        !            24: int sound_fd;
        !            25: static int have_sound;
        !            26: static unsigned long formats;
        !            27: 
        !            28: unsigned long sndbuf_written;
        !            29: 
        !            30: uae_u16 sndbuffer[44100];
        !            31: uae_u16 *sndbufpt;
        !            32: int sndbufsize;
        !            33: 
        !            34: static int exact_log2(int v)
        !            35: {
        !            36:     int l = 0;
        !            37:     while ((v >>= 1) != 0)
        !            38:        l++;
        !            39:     return l;
        !            40: }
        !            41: 
        !            42: void close_sound(void)
        !            43: {
        !            44:     int t;
        !            45:     uae_u32 v;
        !            46:     char buf[4];
        !            47:     
        !            48:     if (!have_sound)
        !            49:        return;
        !            50:     
        !            51:     t = 0;
        !            52:     v = sndbuf_written;
        !            53:     buf[t] = v & 255;
        !            54:     buf[t+1] = (v>>8) & 255;
        !            55:     buf[t+2] = (v>>16) & 255;
        !            56:     buf[t+3] = (v>>24) & 255;
        !            57:     lseek (sound_fd, 40, SEEK_SET);
        !            58:     write (sound_fd, buf, 4);
        !            59: 
        !            60:     v += 36;
        !            61:     buf[t] = v & 255;
        !            62:     buf[t+1] = (v>>8) & 255;
        !            63:     buf[t+2] = (v>>16) & 255;
        !            64:     buf[t+3] = (v>>24) & 255;
        !            65:     lseek (sound_fd, 4, SEEK_SET);
        !            66:     write (sound_fd, buf, 4);
        !            67: 
        !            68:     close(sound_fd);
        !            69: }
        !            70: 
        !            71: int setup_sound(void)
        !            72: {
        !            73:     sound_fd = open ("sound.output", O_CREAT|O_TRUNC|O_WRONLY, 0666);
        !            74:     have_sound = !(sound_fd < 0);
        !            75:     if (!have_sound)
        !            76:        return 0;
        !            77: 
        !            78:     sound_available = 1;
        !            79:     return 1;
        !            80: }
        !            81: 
        !            82: int init_sound (void)
        !            83: {
        !            84:     int t;
        !            85:     uae_u32 v;
        !            86:     int tmp;
        !            87: 
        !            88:     char buf[200] = "RIFF    WAVEfmt                     data    ";
        !            89: 
        !            90:     /* Prepare a .WAV header */
        !            91:     sndbuf_written = 44;
        !            92:     t = 16; v = 16;
        !            93:     buf[t] = v & 255;
        !            94:     buf[t+1] = (v>>8) & 255;
        !            95:     buf[t+2] = (v>>16) & 255;
        !            96:     buf[t+3] = (v>>24) & 255;
        !            97: 
        !            98:     t = 20; v = 0x00010001 + (currprefs.stereo ? 0x10000 : 0);
        !            99:     buf[t] = v & 255;
        !           100:     buf[t+1] = (v>>8) & 255;
        !           101:     buf[t+2] = (v>>16) & 255;
        !           102:     buf[t+3] = (v>>24) & 255;
        !           103: 
        !           104:     t = 24; v = currprefs.sound_freq;
        !           105:     buf[t] = v & 255;
        !           106:     buf[t+1] = (v>>8) & 255;
        !           107:     buf[t+2] = (v>>16) & 255;
        !           108:     buf[t+3] = (v>>24) & 255;
        !           109:     t = 32; v = ((currprefs.sound_bits == 8 ? 1 : 2)
        !           110:                 * (currprefs.stereo ? 2 : 1)) + 65536*currprefs.sound_bits;
        !           111:     buf[t] = v & 255;
        !           112:     buf[t+1] = (v>>8) & 255;
        !           113:     buf[t+2] = (v>>16) & 255;
        !           114:     buf[t+3] = (v>>24) & 255;
        !           115:     t = 28; v = (currprefs.sound_freq * (currprefs.sound_bits == 8 ? 1 : 2)
        !           116:                 * (currprefs.stereo ? 2 : 1));
        !           117:     buf[t] = v & 255;
        !           118:     buf[t+1] = (v>>8) & 255;
        !           119:     buf[t+2] = (v>>16) & 255;
        !           120:     buf[t+3] = (v>>24) & 255;
        !           121:     write (sound_fd, buf, 44);
        !           122: 
        !           123:     sample_evtime = (long)maxhpos * maxvpos * 50 / currprefs.sound_freq;
        !           124: 
        !           125:     if (currprefs.sound_bits == 16) {
        !           126:        init_sound_table16 ();
        !           127:        eventtab[ev_sample].handler = currprefs.stereo ? sample16s_handler : sample16_handler;
        !           128:     } else {
        !           129:        init_sound_table8 ();
        !           130:        eventtab[ev_sample].handler = currprefs.stereo ? sample8s_handler : sample8_handler;
        !           131:     }
        !           132:     sound_available = 1;
        !           133:     sndbufsize = 44100;
        !           134:     printf ("Writing sound into \"sound.output\"; %d bits at %d Hz\n",
        !           135:            currprefs.sound_bits, currprefs.sound_freq, sndbufsize);
        !           136:     sndbufpt = sndbuffer;
        !           137:     return 1;
        !           138: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.