Annotation of doom/readme.sound, revision 1.1

1.1     ! root        1: 
        !             2: README: sound in DOOM
        !             3: 
        !             4: 
        !             5: 1) DOS/Win32 sound
        !             6: 
        !             7: id licensed a third party sound library called
        !             8: DMX for DOS DOOM. The situation exhibited
        !             9: many symptons of serious NIH "Not Invented Here"),
        !            10: and one of the consequences is that the original
        !            11: DOOM sound code does not work without DMX. As
        !            12: DMX is not publicly available, the original DOOM
        !            13: sound support is removed.
        !            14: 
        !            15: Win32 was not supported in the source dump I got.
        !            16: I have no knowledge how the WinDOOM port did the
        !            17: sound handling. A Win32 port should probaly rely on
        !            18: DirectSound. So far, the Win32 glDOOM port Jim Dose
        !            19: is working on has no sound support.
        !            20: 
        !            21: In consequence, the only target with a working sound
        !            22: code is UNIX, which I could only verify with Linux
        !            23: on Intel586.
        !            24: 
        !            25: 2) Linux sound
        !            26: 
        !            27: DOOM for Linux used a separate process, sndserver.
        !            28: 
        !            29: Quoting Dave Taylor:
        !            30: 
        !            31: "Sound drivers should be an asychronous model, either
        !            32: a seperate thread or a seperate process.  This is
        !            33: because sound should always be fed to the card without
        !            34: interruption or else you get pops and with low latency
        !            35: or else you get angry players.
        !            36: 
        !            37: Now it turns out that this kind of code isn't too fun
        !            38: to write. In the days of Linux Doom, threads were not a
        !            39: happnin thing in Linux. In fact, they still largely
        !            40: aren't. You can use them these days if you have gnu's
        !            41: libc installed, but you still can't debug them because
        !            42: gdb doesn't support them properly yet. I believe the
        !            43: original seperate process had a bad latency delay
        !            44: because of the time it took for commands to be flushed
        !            45: through the pipe used to communicate with the seperate
        !            46: process.  I should have looked into this more thoroughly.
        !            47: 
        !            48: In Quake, I discovered that I could feed multiple
        !            49: acknowledgements to a SoundBlaster or compatible without
        !            50: any side-effects such as pops or other malfunctions. 
        !            51: This discovery led me to switch to a completely synchronous
        !            52: model, much much easier to debug and understand, so I
        !            53: think this was fairly intelligent.  Although we had to
        !            54: populate the game with calls in the right places to keep
        !            55: the sound buffers fed, and although it wasn't gauranteed to
        !            56: be always fed, well over 99% of the time, it was fed, and
        !            57: your the latency was never worse than the frequency of your
        !            58: refills (several times per frame) plus a small lead time
        !            59: (40th of a second?)."
        !            60: 
        !            61: The separate sndserver code base introduced some redundancy
        !            62: (WAD access for sound lumps) for each UNIX target (Sun, SGI,
        !            63: Linux) and more differences between DOS and UNIX version.
        !            64: However, I kept the IPC based parts in the source, and
        !            65: separated the sndserver target in another directory to avoid
        !            66: further redundancy. There seem to be a few bug-like things
        !            67: going on in the sndserver that do not receive penalty as
        !            68: the program has to do only a simple task. One example would
        !            69: be a libc realloc mixed with zone memory allocation. 
        !            70: 
        !            71: Ungraceful and untimely demise of Linuxdoom (core instead
        !            72: of I_Error) will leave idle sndserver processes in your
        !            73: system, blocking /dev/bsp. Kill them manually.
        !            74: 
        !            75: I put the non-redundant parts of the sndserver program
        !            76: into the i_sound module of doom, and with the SND_SERV
        !            77: compiler switch you can choose to use the internal sound
        !            78: support. However, there is a problem with e.g. the
        !            79: double shotgun and the plasma gun - walk up to a wall,
        !            80: face it straight, and fire. The sound output is crappy.
        !            81: This vanishes with decreasing screen size. A similar
        !            82: problem occurs with trimer driven asynchronous output
        !            83: enabled by SNDINTR.
        !            84: 
        !            85: I agree with Dave that threads would be preferable.
        !            86: With respect to Linux ports of John Carmack's next
        !            87: Trinity engine, this one will rely on Win32
        !            88: multithreading e.g. for input sampling. So the Linux
        !            89: community will have to sort out threads anyway :-).
        !            90: 
        !            91: To improve the current sound server, other means of
        !            92: IPC should take care of the latency. The mixing
        !            93: buffer/command buffer as shared memory comes to mind.
        !            94: 
        !            95: 
        !            96: 
        !            97: 3) Music support
        !            98: 
        !            99: There is, and was, no music support in Linuxdoom. Fine with
        !           100: me - I wouldn't give a bat's tail feathers for DOOM music.
        !           101: Your mileage may vary. There are a few leftovers of the DOS
        !           102: music support also interfacing DMX, so there is a place
        !           103: to start. However, in the age of CDROM based music, I
        !           104: recommend getting e.g. Workman to cooperate with DOOM
        !           105: (currently, DOOM accessing the soundcard SpekerOut
        !           106: interferes with Workman controlling the CD drives
        !           107: SpeakerOut), so musci could be chosen and run completely
        !           108: independend of the game. You could try Linuxdoom with
        !           109: Q2 music that way.
        !           110: 

unix.superglobalmegacorp.com

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