From 7f0777545039606840b7bce89a6d2c29f310ead3 Mon Sep 17 00:00:00 2001 From: eukos Date: Tue, 1 Sep 2015 10:59:13 +0200 Subject: [PATCH] Tapping into OpenAL (WIP) --- tracker/tracker_linux.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/tracker/tracker_linux.c b/tracker/tracker_linux.c index 841b837..73de561 100644 --- a/tracker/tracker_linux.c +++ b/tracker/tracker_linux.c @@ -22,23 +22,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifdef DUMB #include "globaldef.h" #include "dumb.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include // eukara - added in tracker playback using DUMB - UNIX ONLY! char name[256]; DUH *trackmod; // The music file ~eukara DUH_SIGRENDERER *sr; // The DUMB renderer -int oss_device; // output device (by default /dev/dsp for OSS) +ALCdevice *oss_device; +ALuint oss_source; +ALuint oss_buffer; static qboolean bTracker_Initialized = false; // Set up the renderer options @@ -63,6 +56,14 @@ void Tracker_Play(byte track, qboolean looping) if(bTracker_Initialized == false) return; + alGenSources((ALuint)1, &oss_source); + alSourcef(oss_source, AL_PITCH, 1); + alSourcef(oss_source, AL_GAIN, 1); + alSource3f(oss_source, AL_POSITION, 0, 0, 0); + alSource3f(oss_source, AL_VELOCITY, 0, 0, 0); + alSourcei(oss_source, AL_LOOPING, AL_FALSE); + alGenBuffers((ALuint)1, &oss_buffer); + dumb_register_stdfiles(); // Initialize loading files // Attempt to load every format imaginable, TODO: better method? @@ -200,8 +201,9 @@ void Tracker_Update(void) } } - // TODO: Write this into the engine's soundbuffer instead for speed! - write (oss_device, &tracker_buffer, 4096); + alBufferData(oss_buffer, AL_FORMAT_STEREO16, &tracker_buffer.s8, 4096, freq); + alSourceQueueBuffers(oss_source, 1, &oss_buffer); + alSourcePlay(oss_source); } int Tracker_Init(void) @@ -209,7 +211,9 @@ int Tracker_Init(void) if (COM_CheckParm("-notracker")) return -1; - if((oss_device = open ("/dev/dsp", O_RDWR)) == -1){ // /dev/dsp is the standard OSS output + oss_device = alcOpenDevice(NULL); + if (!oss_device) + { perror("/dev/dsp"); return 0; // just get out if there's none } @@ -224,6 +228,6 @@ void Tracker_Shutdown(void) { Tracker_Stop(); // First stop the track dumb_exit(); // Kill DUMB - close(oss_device); // Close the device + alcCloseDevice(oss_device); } #endif