|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.