aboutsummaryrefslogtreecommitdiffstats
path: root/src/jake2/sound
diff options
context:
space:
mode:
Diffstat (limited to 'src/jake2/sound')
-rw-r--r--src/jake2/sound/DummyDriver.java111
-rw-r--r--src/jake2/sound/S.java187
-rw-r--r--src/jake2/sound/Sound.java105
-rw-r--r--src/jake2/sound/WaveLoader.java302
-rw-r--r--src/jake2/sound/joal/Channel.java84
-rw-r--r--src/jake2/sound/joal/JOALSoundImpl.java793
-rw-r--r--src/jake2/sound/sfx_t.java49
-rw-r--r--src/jake2/sound/sfxcache_t.java37
-rw-r--r--src/jake2/sound/soundinfo_t.java19
-rw-r--r--src/jake2/sound/wavinfo_t.java19
10 files changed, 0 insertions, 1706 deletions
diff --git a/src/jake2/sound/DummyDriver.java b/src/jake2/sound/DummyDriver.java
deleted file mode 100644
index e663d09..0000000
--- a/src/jake2/sound/DummyDriver.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Created on Apr 25, 2004
- *
- * Copyright (C) 2003
- *
- * $Id: DummyDriver.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.sound;
-
-/**
- * DummyDriver
- *
- * @author cwei
- */
-public final class DummyDriver implements Sound {
-
- static {
- S.register(new DummyDriver());
- };
-
- private DummyDriver() {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#Init()
- */
- public boolean Init() {
- return true;
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#Shutdown()
- */
- public void Shutdown() {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#BeginRegistration()
- */
- public void BeginRegistration() {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#RegisterSound(java.lang.String)
- */
- public sfx_t RegisterSound(String sample) {
- return null;
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#EndRegistration()
- */
- public void EndRegistration() {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#StartLocalSound(java.lang.String)
- */
- public void StartLocalSound(String sound) {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#StartSound(float[], int, int, jake2.sound.sfx_t, float, float, float)
- */
- public void StartSound(float[] origin, int entnum, int entchannel, sfx_t sfx, float fvol, float attenuation, float timeofs) {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#Update(float[], float[], float[], float[])
- */
- public void Update(float[] origin, float[] forward, float[] right, float[] up) {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#RawSamples(int, int, int, int, byte[])
- */
- public void RawSamples(int samples, int rate, int width, int channels, byte[] data) {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#StopAllSounds()
- */
- public void StopAllSounds() {
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#getName()
- */
- public String getName() {
- return "dummy";
- }
-}
diff --git a/src/jake2/sound/S.java b/src/jake2/sound/S.java
deleted file mode 100644
index c696501..0000000
--- a/src/jake2/sound/S.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * S.java
- * Copyright (C) 2003
- *
- * $Id: S.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.sound;
-
-import jake2.Defines;
-import jake2.game.cvar_t;
-import jake2.qcommon.Com;
-import jake2.qcommon.Cvar;
-
-import java.util.Vector;
-
-/**
- * S
- */
-public class S {
-
- static Sound impl;
- static cvar_t s_impl;
-
- static Vector drivers = new Vector(3);
-
- static {
- try {
- Class.forName("jake2.sound.DummyDriver");
- Class.forName("jake2.sound.joal.JOALSoundImpl");
- Class.forName("jake2.sound.jsound.JSoundImpl");
- }
- catch (ClassNotFoundException e) {
- }
- };
-
- public static void register(Sound driver) {
- if (driver == null) {
- throw new IllegalArgumentException("Sound implementation can't be null");
- }
- if (!drivers.contains(driver)) {
- drivers.add(driver);
- }
- }
-
- public static void useDriver(String driverName) {
- Sound driver = null;
- int count = drivers.size();
- for (int i = 0; i < count; i++) {
- driver = (Sound) drivers.get(i);
- if (driver.getName().equals(driverName)) {
- impl = driver;
- return;
- }
- }
- // if driver not found use dummy
- impl = (Sound)drivers.get(0);
- }
-
- public static void Init() {
-
- Com.Printf("\n------- sound initialization -------\n");
-
- cvar_t cv = Cvar.Get("s_initsound", "1", 0);
- if (cv.value == 0.0f) {
- Com.Printf("not initializing.\n");
- useDriver("dummy");
- return;
- }
-
- s_impl = Cvar.Get("s_impl", "joal", Defines.CVAR_ARCHIVE);
- useDriver(s_impl.string);
-
- if (impl.Init()) {
- // driver ok
- Cvar.Set("s_impl", impl.getName());
- } else {
- // fallback
- useDriver("dummy");
- }
-
- Com.Printf("\n------- use sound driver \"" + impl.getName() + "\" -------\n");
- StopAllSounds();
- }
-
- public static void Shutdown() {
- impl.Shutdown();
- }
-
- /*
- =====================
- S_BeginRegistration
- =====================
- */
- public static void BeginRegistration() {
- impl.BeginRegistration();
- }
-
- /*
- =====================
- S_RegisterSound
- =====================
- */
- public static sfx_t RegisterSound(String sample) {
- return impl.RegisterSound(sample);
- }
-
- /*
- =====================
- S_EndRegistration
- =====================
- */
- public static void EndRegistration() {
- impl.EndRegistration();
- }
-
- /*
- ==================
- S_StartLocalSound
- ==================
- */
- public static void StartLocalSound(String sound) {
- impl.StartLocalSound(sound);
- }
-
- /*
- ====================
- S_StartSound
-
- Validates the parms and ques the sound up
- if pos is NULL, the sound will be dynamically sourced from the entity
- Entchannel 0 will never override a playing sound
- ====================
- */
- public static void StartSound(float[] origin, int entnum, int entchannel, sfx_t sfx, float fvol, float attenuation, float timeofs) {
- impl.StartSound(origin, entnum, entchannel, sfx, fvol, attenuation, timeofs);
- }
-
- /*
- ============
- S_Update
-
- Called once each time through the main loop
- ============
- */
- public static void Update(float[] origin, float[] forward, float[] right, float[] up) {
- impl.Update(origin, forward, right, up);
- }
-
- /*
- ============
- S_RawSamples
-
- Cinematic streaming and voice over network
- ============
- */
- public static void RawSamples(int samples, int rate, int width, int channels, byte[] data) {
- impl.RawSamples(samples, rate, width, channels, data);
- }
-
- /*
- ==================
- S_StopAllSounds
- ==================
- */
- public static void StopAllSounds() {
- impl.StopAllSounds();
- }
-}
diff --git a/src/jake2/sound/Sound.java b/src/jake2/sound/Sound.java
deleted file mode 100644
index 30bd8c6..0000000
--- a/src/jake2/sound/Sound.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Created on Apr 25, 2004
- *
- * Copyright (C) 2003
- *
- * $Id: Sound.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.sound;
-
-/**
- * Sound
- *
- * @author cwei
- */
-public interface Sound {
-
-
- String getName();
-
- boolean Init();
- void Shutdown();
-
- /*
- =====================
- S_BeginRegistration
- =====================
- */
- void BeginRegistration();
-
- /*
- =====================
- S_RegisterSound
- =====================
- */
- sfx_t RegisterSound(String sample);
-
- /*
- =====================
- S_EndRegistration
- =====================
- */
- void EndRegistration();
-
- /*
- ==================
- S_StartLocalSound
- ==================
- */
- void StartLocalSound(String sound);
-
- /*
- ====================
- S_StartSound
-
- Validates the parms and ques the sound up
- if pos is NULL, the sound will be dynamically sourced from the entity
- Entchannel 0 will never override a playing sound
- ====================
- */
- void StartSound(float[] origin, int entnum, int entchannel, sfx_t sfx, float fvol, float attenuation, float timeofs);
-
- /*
- ============
- S_Update
-
- Called once each time through the main loop
- ============
- */
- void Update(float[] origin, float[] forward, float[] right, float[] up);
- /*
- ============
- S_RawSamples
-
- Cinematic streaming and voice over network
- ============
- */
- void RawSamples(int samples, int rate, int width, int channels, byte[] data);
-
- /*
- ==================
- S_StopAllSounds
- ==================
- */
- void StopAllSounds();
-
-}
diff --git a/src/jake2/sound/WaveLoader.java b/src/jake2/sound/WaveLoader.java
deleted file mode 100644
index 020ab52..0000000
--- a/src/jake2/sound/WaveLoader.java
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * SND_MEM.java
- * Copyright (C) 2004
- *
- * $Id: WaveLoader.java,v 1.1 2004-07-09 06:50:48 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.sound;
-
-import jake2.Defines;
-import jake2.qcommon.Com;
-import jake2.qcommon.FS;
-import jake2.sys.Sys;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import javax.sound.sampled.*;
-
-/**
- * SND_MEM
- */
-public class WaveLoader {
-
- private static final AudioFormat sampleFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 22050, 16, 1, 2, 22050, false);
-
- /*
- ==============
- S_LoadSound
- ==============
- */
- public static sfxcache_t LoadSound(sfx_t s) {
- String namebuffer;
- byte[] data;
- wavinfo_t info;
- int len;
- float stepscale;
- sfxcache_t sc = null;
- int size;
- String name;
-
- if (s.name.charAt(0) == '*')
- return null;
-
- // see if still in memory
- sc = s.cache;
- if (sc != null)
- return sc;
-
- // load it in
- if (s.truename != null)
- name = s.truename;
- else
- name = s.name;
-
- if (name.charAt(0) == '#')
- namebuffer = name.substring(1);
-
- else
- namebuffer = "sound/" + name;
-
- data = FS.LoadFile(namebuffer);
-
- if (data == null) {
- Com.DPrintf("Couldn't load " + namebuffer + "\n");
- return null;
- }
- size = data.length;
-
- info = GetWavinfo(s.name, data, size);
-
- AudioInputStream in = null;
- AudioInputStream out = null;
- try {
- in = AudioSystem.getAudioInputStream(new ByteArrayInputStream(data));
- if (in.getFormat().getSampleSizeInBits() == 8) {
- in = convertTo16bit(in);
- }
- out = AudioSystem.getAudioInputStream(sampleFormat, in);
- int l = (int)out.getFrameLength();
- sc = s.cache = new sfxcache_t(l*2);
- sc.length = l;
- int c = out.read(sc.data, 0, l * 2);
- out.close();
- in.close();
- } catch (Exception e) {
- Com.Printf("Couldn't load " + namebuffer + "\n");
- return null;
- }
-
- sc.loopstart = info.loopstart * ((int)sampleFormat.getSampleRate() / info.rate);
- sc.speed = (int)sampleFormat.getSampleRate();
- sc.width = sampleFormat.getSampleSizeInBits() / 8;
- sc.stereo = 0;
-
- data = null;
-
- return sc;
- }
-
- static AudioInputStream convertTo16bit(AudioInputStream in) throws IOException {
- AudioFormat format = in.getFormat();
- int length = (int)in.getFrameLength();
- byte[] samples = new byte[2*length];
-
- for (int i = 0; i < length; i++) {
- in.read(samples, 2*i+1, 1);
- samples[2*i+1] -= 128;
- }
- in.close();
-
- AudioFormat newformat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), 16, format.getChannels(), 2, format.getFrameRate(), false);
- return new AudioInputStream(new ByteArrayInputStream(samples), newformat, length);
- }
-
- /*
- ===============================================================================
-
- WAV loading
-
- ===============================================================================
- */
-
- static byte[] data_b;
- static int data_p;
- static int iff_end;
- static int last_chunk;
- static int iff_data;
- static int iff_chunk_len;
-
-
- static short GetLittleShort() {
- int val = 0;
- val = data_b[data_p] & 0xFF;
- data_p++;
- val |= ((data_b[data_p] & 0xFF) << 8);
- data_p++;
- return (short)val;
- }
-
- static int GetLittleLong() {
- int val = 0;
- val = data_b[data_p] & 0xFF;
- data_p++;
- val |= ((data_b[data_p] & 0xFF) << 8);
- data_p++;
- val |= ((data_b[data_p] & 0xFF) << 16);
- data_p++;
- val |= ((data_b[data_p] & 0xFF) << 24);
- data_p++;
- return val;
- }
-
- static void FindNextChunk(String name) {
- while (true) {
- data_p = last_chunk;
-
- if (data_p >= iff_end) { // didn't find the chunk
- data_p = 0;
- return;
- }
-
- data_p += 4;
-
- iff_chunk_len = GetLittleLong();
-
- if (iff_chunk_len < 0) {
- data_p = 0;
- return;
- }
- if (iff_chunk_len > 1024*1024)
- Sys.Error("FindNextChunk: length is past the 1 meg sanity limit");
-
- data_p -= 8;
- last_chunk = data_p + 8 + ((iff_chunk_len + 1) & ~1);
- String s = new String(data_b, data_p, 4);
- if (s.equals(name))
- return;
- }
- }
-
- static void FindChunk(String name) {
- last_chunk = iff_data;
- FindNextChunk(name);
- }
-
- /*
- ============
- GetWavinfo
- ============
- */
- static wavinfo_t GetWavinfo(String name, byte[] wav, int wavlength) {
- wavinfo_t info = new wavinfo_t();
- int i;
- int format;
- int samples;
-
- if (wav == null)
- return info;
-
- iff_data = 0;
- iff_end = wavlength;
- data_b = wav;
-
- // find "RIFF" chunk
- FindChunk("RIFF");
- String s = new String(data_b, data_p + 8, 4);
- if (!s.equals("WAVE")) {
- Com.Printf("Missing RIFF/WAVE chunks\n");
- return info;
- }
-
- // get "fmt " chunk
- iff_data = data_p + 12;
- // DumpChunks ();
-
- FindChunk("fmt ");
- if (data_p == 0) {
- Com.Printf("Missing fmt chunk\n");
- return info;
- }
- data_p += 8;
- format = GetLittleShort();
- if (format != 1) {
- Com.Printf("Microsoft PCM format only\n");
- return info;
- }
-
- info.channels = GetLittleShort();
- info.rate = GetLittleLong();
- data_p += 4 + 2;
- info.width = GetLittleShort() / 8;
-
- // get cue chunk
- FindChunk("cue ");
- if (data_p != 0) {
- data_p += 32;
- info.loopstart = GetLittleLong();
- // Com_Printf("loopstart=%d\n", sfx->loopstart);
-
- // if the next chunk is a LIST chunk, look for a cue length marker
- FindNextChunk("LIST");
- if (data_p != 0) {
- s = new String(data_b, data_p + 28, 4);
- if (s.equals("MARK")) { // this is not a proper parse, but it works with cooledit...
- data_p += 24;
- i = GetLittleLong(); // samples in loop
- info.samples = info.loopstart + i;
- // Com_Printf("looped length: %i\n", i);
- }
- }
- } else
- info.loopstart = -1;
-
- // find data chunk
- FindChunk("data");
- if (data_p == 0) {
- Com.Printf("Missing data chunk\n");
- return info;
- }
-
- data_p += 4;
- samples = GetLittleLong() / info.width;
-
- if (info.samples != 0) {
- if (samples < info.samples)
- Com.Error(Defines.ERR_DROP, "Sound " + name + " has a bad loop length");
- } else
- info.samples = samples;
-
- info.dataofs = data_p;
-
- return info;
- }
-
- static class wavinfo_t {
- int rate;
- int width;
- int channels;
- int loopstart;
- int samples;
- int dataofs; // chunk starts this many bytes from file start
- }
-}
diff --git a/src/jake2/sound/joal/Channel.java b/src/jake2/sound/joal/Channel.java
deleted file mode 100644
index ced496f..0000000
--- a/src/jake2/sound/joal/Channel.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Created on Jun 19, 2004
- *
- * Copyright (C) 2003
- *
- * $Id: Channel.java,v 1.1 2004-07-09 06:50:52 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-package jake2.sound.joal;
-
-/**
- * Channel
- *
- * @author cwei
- */
-public class Channel {
-
- final static int LISTENER = 0;
- final static int FIXED = 1;
- final static int DYNAMIC = 2;
-
- int entnum;
- int entchannel;
- int bufferId;
- float rolloff;
- boolean autosound = false;
- int sourceId;
- boolean active = false;
- boolean modified = false;
- boolean bufferChanged = false;
-
- // sound attributes
- int type;
- int entity;
- float[] origin = {0, 0, 0};
-
- Channel(int sourceId) {
- this.sourceId = sourceId;
- clear();
- }
-
- void addListener() {
- type = LISTENER;
- }
-
- void addFixed(float[] origin) {
- type = FIXED;
- this.origin = origin;
- }
-
- void addDynamic(int entity) {
- type = DYNAMIC;
- this.entity = entity;
- }
-
- void clear() {
- entnum = -1;
- entchannel = -1;
- bufferId = -1;
- bufferChanged = false;
- rolloff = 0;
- autosound = false;
- active = false;
- modified = false;
- }
-}
diff --git a/src/jake2/sound/joal/JOALSoundImpl.java b/src/jake2/sound/joal/JOALSoundImpl.java
deleted file mode 100644
index 8a005ce..0000000
--- a/src/jake2/sound/joal/JOALSoundImpl.java
+++ /dev/null
@@ -1,793 +0,0 @@
-/*
- * JOALSoundImpl.java
- * Copyright (C) 2004
- *
- * $Id: JOALSoundImpl.java,v 1.1 2004-07-09 06:50:52 hzi Exp $
- */
-package jake2.sound.joal;
-
-
-import jake2.Defines;
-import jake2.Globals;
-import jake2.client.CL;
-import jake2.game.*;
-import jake2.qcommon.*;
-import jake2.sound.*;
-import jake2.util.Math3D;
-import jake2.util.Vargs;
-
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.*;
-
-import net.java.games.joal.*;
-
-/**
- * JOALSoundImpl
- */
-public final class JOALSoundImpl implements Sound {
-
- static {
- S.register(new JOALSoundImpl());
- };
-
- static AL al;
- static ALC alc;
-
- cvar_t s_volume;
-
- private static final int MAX_SFX = Defines.MAX_SOUNDS * 2;
- private static final int MAX_CHANNELS = 32;
-
- private int[] buffers = new int[MAX_SFX];
- private int[] sources = new int[MAX_CHANNELS];
- private Channel[] channels = null;
-
- private JOALSoundImpl() {
- }
-
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#Init()
- */
- public boolean Init() {
-
- try {
- initOpenAL();
- al = ALFactory.getAL();
- checkError();
- } catch (OpenALException e) {
- Com.Printf(e.getMessage() + '\n');
- return false;
- }
-
- checkError();
- al.alGenBuffers(MAX_SFX, buffers);
- al.alGenSources(MAX_CHANNELS, sources);
- checkError();
- s_volume = Cvar.Get("s_volume", "0.7", Defines.CVAR_ARCHIVE);
- initChannels();
- al.alDistanceModel(AL.AL_INVERSE_DISTANCE_CLAMPED);
-// al.alDistanceModel(AL.AL_INVERSE_DISTANCE);
- Cmd.AddCommand("play", new xcommand_t() {
- public void execute() {
- Play();
- }
- });
- Cmd.AddCommand("stopsound", new xcommand_t() {
- public void execute() {
- StopAllSounds();
- }
- });
- Cmd.AddCommand("soundlist", new xcommand_t() {
- public void execute() {
- SoundList();
- }
- });
- Cmd.AddCommand("soundinfo", new xcommand_t() {
- public void execute() {
- SoundInfo_f();
- }
- });
-
- num_sfx = 0;
-
-
- Com.Printf("sound sampling rate: 44100Hz\n");
-
- StopAllSounds();
- Com.Printf("------------------------------------\n");
- return true;
- }
-
-
- private void initOpenAL() throws OpenALException {
- ALFactory.initialize();
- alc = ALFactory.getALC();
- String deviceName = null;
-
- String os = System.getProperty("os.name");
- if (os.startsWith("Windows")) {
- deviceName = "DirectSound3D";
- }
- ALC.Device device = alc.alcOpenDevice(deviceName);
- String deviceSpecifier = alc.alcGetString(device, ALC.ALC_DEVICE_SPECIFIER);
- String defaultSpecifier = alc.alcGetString(device, ALC.ALC_DEFAULT_DEVICE_SPECIFIER);
-
- Com.Printf(os + " using " + ((deviceName == null) ? defaultSpecifier : deviceName) + '\n');
-
- ALC.Context context = alc.alcCreateContext(device, new int[] {0});
- alc.alcMakeContextCurrent(context);
- // Check for an error.
- if (alc.alcGetError(device) != ALC.ALC_NO_ERROR) {
- Com.DPrintf("Error with SoundDevice");
- }
- }
-
- void exitOpenAL() {
- // Get the current context.
- ALC.Context curContext = alc.alcGetCurrentContext();
- // Get the device used by that context.
- ALC.Device curDevice = alc.alcGetContextsDevice(curContext);
- // Reset the current context to NULL.
- alc.alcMakeContextCurrent(null);
- // Release the context and the device.
- alc.alcDestroyContext(curContext);
- alc.alcCloseDevice(curDevice);
- }
-
- private void initChannels() {
-
- // create channels
- channels = new Channel[MAX_CHANNELS];
-
- int sourceId;
- for (int i = 0; i < MAX_CHANNELS; i++) {
- sourceId = sources[i];
- channels[i] = new Channel(sourceId);
-
- // set default values for AL sources
- al.alSourcef (sourceId, AL.AL_GAIN, s_volume.value);
- al.alSourcef (sourceId, AL.AL_PITCH, 1.0f);
- al.alSourcei (sourceId, AL.AL_SOURCE_ABSOLUTE, AL.AL_TRUE);
- al.alSourcefv(sourceId, AL.AL_VELOCITY, NULLVECTOR);
- al.alSourcei (sourceId, AL.AL_LOOPING, AL.AL_FALSE);
- al.alSourcef (sourceId, AL.AL_REFERENCE_DISTANCE, 300.0f);
- al.alSourcef (sourceId, AL.AL_MIN_GAIN, 0.0005f);
- al.alSourcef (sourceId, AL.AL_MAX_GAIN, 1.0f);
- }
- }
-
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#RegisterSound(jake2.sound.sfx_t)
- */
- private void initBuffer(sfx_t sfx)
- {
- if (sfx.cache == null ) {
- //System.out.println(sfx.name + " " + sfx.cache.length+ " " + sfx.cache.loopstart + " " + sfx.cache.speed + " " + sfx.cache.stereo + " " + sfx.cache.width);
- return;
- }
-
- int format = AL.AL_FORMAT_MONO16;
- byte[] data = sfx.cache.data;
- int freq = sfx.cache.speed;
- int size = data.length;
-
-// if (buffers[sfx.id] != 0)
-// al.alDeleteBuffers(1, new int[] {buffers[sfx.id] });
-//
-// int[] bid = new int[1];
-// al.alBufferData( bid[0], format, data, size, freq);
-// buffers[sfx.id] = bid[0];
-// al.alBufferData( bid[0], format, data, size, freq);
-
- al.alBufferData( buffers[sfx.id], format, data, size, freq);
-// int error;
-// if ((error = al.alGetError()) != AL.AL_NO_ERROR) {
-// String message;
-// switch(error) {
-// case AL.AL_INVALID_OPERATION: message = "invalid operation"; break;
-// case AL.AL_INVALID_VALUE: message = "invalid value"; break;
-// case AL.AL_INVALID_ENUM: message = "invalid enum"; break;
-// case AL.AL_INVALID_NAME: message = "invalid name"; break;
-// default: message = "" + error;
-// }
-// Com.DPrintf("Error Buffer " + sfx.id + ": " + sfx.name + " (" + size + ") --> " + message + '\n');
-// }
- }
-
- private void checkError() {
- int error;
- if ((error = al.alGetError()) != AL.AL_NO_ERROR) {
- String message;
- switch(error) {
- case AL.AL_INVALID_OPERATION: message = "invalid operation"; break;
- case AL.AL_INVALID_VALUE: message = "invalid value"; break;
- case AL.AL_INVALID_ENUM: message = "invalid enum"; break;
- case AL.AL_INVALID_NAME: message = "invalid name"; break;
- default: message = "" + error;
- }
- Com.DPrintf("AL Error: " + message +'\n');
- }
- }
-
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#Shutdown()
- */
- public void Shutdown() {
- StopAllSounds();
- al.alDeleteSources(sources.length, sources);
- al.alDeleteBuffers(buffers.length, buffers);
- exitOpenAL();
- //ALut.alutExit();
- Cmd.RemoveCommand("play");
- Cmd.RemoveCommand("stopsound");
- Cmd.RemoveCommand("soundlist");
- Cmd.RemoveCommand("soundinfo");
-
- // free all sounds
- for (int i = 0; i < num_sfx; i++) {
- if (known_sfx[i].name == null)
- continue;
- known_sfx[i].clear();
- }
- num_sfx = 0;
- }
-
- private final static float[] NULLVECTOR = {0, 0, 0};
- private float[] entityOrigin = {0, 0, 0};
- private float[] sourceOrigin = {0, 0, 0};
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#StartSound(float[], int, int, jake2.sound.sfx_t, float, float, float)
- */
- public void StartSound(float[] origin, int entnum, int entchannel, sfx_t sfx, float fvol, float attenuation, float timeofs) {
-
- if (sfx == null)
- return;
-
- if (sfx.name.charAt(0) == '*')
- sfx = RegisterSexedSound(Globals.cl_entities[entnum].current, sfx.name);
-
- if (LoadSound(sfx) == null)
- return; // can't load sound
-
- if (attenuation != Defines.ATTN_STATIC)
- attenuation *= 0.5f;
-
- Channel ch = pickChannel(entnum, entchannel, buffers[sfx.id], attenuation);
-
- if (ch == null) return;
-
- if (entnum == Globals.cl.playernum + 1) {
- ch.addListener();
- } else if (origin != null) {
- ch.addFixed(origin);
- } else {
- ch.addDynamic(entnum);
- }
- }
-
- Channel pickChannel(int entnum, int entchannel, int bufferId, float rolloff) {
-
- Channel ch = null;
- int state;
- int i;
-
- for (i = 0; i < MAX_CHANNELS; i++) {
- ch = channels[i];
-
- if (entchannel != 0 && ch.entnum == entnum && ch.entchannel == entchannel) {
- // always override sound from same entity
- break;
- }
-
- // don't let monster sounds override player sounds
- if ((ch.entnum == Globals.cl.playernum+1) && (entnum != Globals.cl.playernum+1) && ch.bufferId != -1)
- continue;
-
- // looking for a free AL source
- if (!ch.active) {
- break;
- }
- }
-
- if (i == MAX_CHANNELS)
- return null;
-
- ch.entnum = entnum;
- ch.entchannel = entchannel;
- if (ch.bufferId != bufferId) {
- ch.bufferId = bufferId;
- ch.bufferChanged = true;
- }
- ch.rolloff = rolloff * 2;
- ch.active = true;
- ch.modified = true;
-
- return ch;
- }
-
- private float[] listenerOrigin = {0, 0, 0};
- private float[] listenerOrientation = {0, 0, 0, 0, 0, 0};
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#Update(float[], float[], float[], float[])
- */
- public void Update(float[] origin, float[] forward, float[] right, float[] up) {
-
- convertVector(origin, listenerOrigin);
- al.alListenerfv(AL.AL_POSITION, listenerOrigin);
-
- convertOrientation(forward, up, listenerOrientation);
- al.alListenerfv(AL.AL_ORIENTATION, listenerOrientation);
-
- AddLoopSounds(origin);
- playChannels(listenerOrigin);
- }
-
- Map looptable = new Hashtable(2 * MAX_CHANNELS);
-
- /*
- ==================
- S_AddLoopSounds
-
- Entities with a ->sound field will generated looped sounds
- that are automatically started, stopped, and merged together
- as the entities are sent to the client
- ==================
- */
- void AddLoopSounds(float[] listener) {
-
- if (Globals.cl_paused.value != 0.0f) {
- removeUnusedLoopSounds();
- return;
- }
-
- if (Globals.cls.state != Globals.ca_active) {
- removeUnusedLoopSounds();
- return;
- }
-
- if (!Globals.cl.sound_prepped) {
- removeUnusedLoopSounds();
- return;
- }
-
- Channel ch;
- sfx_t sfx;
- sfxcache_t sc;
- int num;
- entity_state_t ent;
- Object key;
- int sound = 0;
-
- for (int i=0 ; i<Globals.cl.frame.num_entities ; i++) {
- num = (Globals.cl.frame.parse_entities + i)&(Defines.MAX_PARSE_ENTITIES-1);
- ent = Globals.cl_parse_entities[num];
- sound = ent.sound;
-
- if (sound == 0) continue;
-
- key = new Integer(ent.number);
- ch = (Channel)looptable.get(key);
-
- if (ch != null) {
- // keep on looping
- ch.autosound = true;
- ch.origin = ent.origin;
- continue;
- }
-
- sfx = Globals.cl.sound_precache[sound];
- if (sfx == null)
- continue; // bad sound effect
-
- sc = sfx.cache;
- if (sc == null)
- continue;
-
- // allocate a channel
- ch = pickChannel(0, 0, buffers[sfx.id], 6);
- if (ch == null)
- break;
-
- ch.addFixed(ent.origin);
- ch.autosound = true;
-
- looptable.put(key, ch);
- al.alSourcei(ch.sourceId, AL.AL_LOOPING, AL.AL_TRUE);
- }
-
- removeUnusedLoopSounds();
-
- }
-
- void removeUnusedLoopSounds() {
- Channel ch;
- // stop unused loopsounds
- for (Iterator iter = looptable.values().iterator(); iter.hasNext();) {
- ch = (Channel)iter.next();
- if (!ch.autosound) {
- al.alSourceStop(ch.sourceId);
- al.alSourcei(ch.sourceId, AL.AL_LOOPING, AL.AL_FALSE);
- iter.remove();
- ch.clear();
- }
- }
- }
-
- void playChannels(float[] listenerOrigin) {
-
- float[] sourceOrigin = {0, 0, 0};
- float[] entityOrigin = {0, 0, 0};
- Channel ch;
- int sourceId;
- int state;
-
- for (int i = 0; i < MAX_CHANNELS; i++) {
- ch = channels[i];
- if (ch.active) {
- sourceId = ch.sourceId;
-
- switch (ch.type) {
- case Channel.LISTENER:
- Math3D.VectorCopy(listenerOrigin, sourceOrigin);
- break;
- case Channel.DYNAMIC:
- CL.GetEntitySoundOrigin(ch.entity, entityOrigin);
- convertVector(entityOrigin, sourceOrigin);
- break;
- case Channel.FIXED:
- convertVector(ch.origin, sourceOrigin);
- break;
- }
-
- if (ch.modified) {
- if (ch.bufferChanged)
- al.alSourcei (sourceId, AL.AL_BUFFER, ch.bufferId);
-
- al.alSourcef (sourceId, AL.AL_GAIN, s_volume.value);
- al.alSourcef (sourceId, AL.AL_ROLLOFF_FACTOR, ch.rolloff);
- al.alSourcefv(sourceId, AL.AL_POSITION, sourceOrigin);
- al.alSourcePlay(sourceId);
- ch.modified = false;
- } else {
- state = al.alGetSourcei(ch.sourceId, AL.AL_SOURCE_STATE);
- if (state == AL.AL_PLAYING) {
- al.alSourcefv(sourceId, AL.AL_POSITION, sourceOrigin);
- } else {
- ch.clear();
- }
- }
- ch.autosound = false;
- }
- }
- }
-
-
- /* (non-Javadoc)
- * @see jake2.sound.SoundImpl#StopAllSounds()
- */
- public void StopAllSounds() {
- for (int i = 0; i < MAX_CHANNELS; i++) {
- al.alSourceStop(sources[i]);
- al.alSourcei(sources[i], AL.AL_BUFFER, 0);
- channels[i].clear();
- }
- }
-
- static void convertVector(float[] from, float[] to) {
- to[0] = from[0];
- to[1] = from[2];
- to[2] = -from[1];
- }
-
- static void convertOrientation(float[] forward, float[] up, float[] orientation) {
- orientation[0] = forward[0];
- orientation[1] = forward[2];
- orientation[2] = -forward[1];
- orientation[3] = up[0];
- orientation[4] = up[2];
- orientation[5] = -up[1];
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#getName()
- */
- public String getName() {
- return "joal";
- }
-
-
- int s_registration_sequence;
- boolean s_registering;
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#BeginRegistration()
- */
- public void BeginRegistration() {
- s_registration_sequence++;
- s_registering = true;
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#RegisterSound(java.lang.String)
- */
- public sfx_t RegisterSound(String name) {
- sfx_t sfx = FindName(name, true);
- sfx.registration_sequence = s_registration_sequence;
-
- if (!s_registering)
- LoadSound(sfx);
-
- return sfx;
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#EndRegistration()
- */
- public void EndRegistration() {
- int i;
- sfx_t sfx;
- int size;
-
- // free any sounds not from this registration sequence
- for (i = 0; i < num_sfx; i++) {
- sfx = known_sfx[i];
- if (sfx.name == null)
- continue;
- if (sfx.registration_sequence != s_registration_sequence) {
- // don't need this sound
- sfx.clear();
- }
- }
-
- // load everything in
- for (i = 0; i < num_sfx; i++) {
- sfx = known_sfx[i];
- if (sfx.name == null)
- continue;
- LoadSound(sfx);
- }
-
- s_registering = false;
- }
-
- sfx_t RegisterSexedSound(entity_state_t ent, String base) {
-
- sfx_t sfx = null;
-
- // determine what model the client is using
- String model = "male";
- int n = Globals.CS_PLAYERSKINS + ent.number - 1;
- if (Globals.cl.configstrings[n] != null) {
- int p = Globals.cl.configstrings[n].indexOf('\\');
- if (p >= 0) {
- p++;
- model = Globals.cl.configstrings[n].substring(p);
- //strcpy(model, p);
- p = model.indexOf('/');
- if (p > 0)
- model = model.substring(0, p);
- }
- }
- // if we can't figure it out, they're male
- if (model == null || model.length() == 0)
- model = "male";
-
- // see if we already know of the model specific sound
- String sexedFilename = "#players/" + model + "/" + base.substring(1);
- //Com_sprintf (sexedFilename, sizeof(sexedFilename), "#players/%s/%s", model, base+1);
- sfx = FindName(sexedFilename, false);
-
- if (sfx == null) {
- // no, so see if it exists
- RandomAccessFile f = null;
- try {
- f = FS.FOpenFile(sexedFilename.substring(1));
- } catch (IOException e) {}
- if (f != null) {
- // yes, close the file and register it
- try {
- FS.FCloseFile(f);
- } catch (IOException e1) {}
- sfx = RegisterSound(sexedFilename);
- } else {
- // no, revert to the male sound in the pak0.pak
- //Com_sprintf (maleFilename, sizeof(maleFilename), "player/%s/%s", "male", base+1);
- String maleFilename = "player/male/" + base.substring(1);
- sfx = AliasName(sexedFilename, maleFilename);
- }
- }
-
- //System.out.println(sfx.name);
- return sfx;
- }
-
-
- static sfx_t[] known_sfx = new sfx_t[MAX_SFX];
- static {
- for (int i = 0; i< known_sfx.length; i++)
- known_sfx[i] = new sfx_t();
- }
- static int num_sfx;
-
- sfx_t FindName(String name, boolean create) {
- int i;
- sfx_t sfx = null;
-
- if (name == null)
- Com.Error(Defines.ERR_FATAL, "S_FindName: NULL\n");
- if (name.length() == 0)
- Com.Error(Defines.ERR_FATAL, "S_FindName: empty name\n");
-
- if (name.length() >= Defines.MAX_QPATH)
- Com.Error(Defines.ERR_FATAL, "Sound name too long: " + name);
-
- // see if already loaded
- for (i = 0; i < num_sfx; i++)
- if (name.equals(known_sfx[i].name)) {
- return known_sfx[i];
- }
-
- if (!create)
- return null;
-
- // find a free sfx
- for (i = 0; i < num_sfx; i++)
- if (known_sfx[i].name == null)
- // registration_sequence < s_registration_sequence)
- break;
-
- if (i == num_sfx) {
- if (num_sfx == MAX_SFX)
- Com.Error(Defines.ERR_FATAL, "S_FindName: out of sfx_t");
- num_sfx++;
- }
-
- sfx = known_sfx[i];
- sfx.clear();
- sfx.name = name;
- sfx.registration_sequence = s_registration_sequence;
- // cwei
- sfx.id = i;
-
- return sfx;
- }
-
- /*
- ==================
- S_AliasName
-
- ==================
- */
- sfx_t AliasName(String aliasname, String truename)
- {
- sfx_t sfx = null;
- String s;
- int i;
-
- s = new String(truename);
-
- // find a free sfx
- for (i=0 ; i < num_sfx ; i++)
- if (known_sfx[i].name == null)
- break;
-
- if (i == num_sfx)
- {
- if (num_sfx == MAX_SFX)
- Com.Error(Defines.ERR_FATAL, "S_FindName: out of sfx_t");
- num_sfx++;
- }
-
- sfx = known_sfx[i];
- sfx.clear();
- sfx.name = new String(aliasname);
- sfx.registration_sequence = s_registration_sequence;
- sfx.truename = s;
- // cwei
- sfx.id = i;
-
- return sfx;
- }
-
- /*
- ==============
- S_LoadSound
- ==============
- */
- public sfxcache_t LoadSound(sfx_t s) {
- sfxcache_t sc = WaveLoader.LoadSound(s);
- initBuffer(s);
- return sc;
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#StartLocalSound(java.lang.String)
- */
- public void StartLocalSound(String sound) {
- sfx_t sfx;
-
- sfx = RegisterSound(sound);
- if (sfx == null) {
- Com.Printf("S_StartLocalSound: can't cache " + sound + "\n");
- return;
- }
- StartSound(null, Globals.cl.playernum + 1, 0, sfx, 1, 1, 0);
- }
-
- /* (non-Javadoc)
- * @see jake2.sound.Sound#RawSamples(int, int, int, int, byte[])
- */
- public void RawSamples(int samples, int rate, int width, int channels, byte[] data) {
- // TODO implement RawSamples
- }
-
- /*
- ===============================================================================
-
- console functions
-
- ===============================================================================
- */
-
- void Play() {
- int i;
- String name;
- sfx_t sfx;
-
- i = 1;
- while (i < Cmd.Argc()) {
- name = new String(Cmd.Argv(i));
- if (name.indexOf('.') == -1)
- name += ".wav";
-
- sfx = RegisterSound(name);
- StartSound(null, Globals.cl.playernum + 1, 0, sfx, 1.0f, 1.0f, 0.0f);
- i++;
- }
- }
-
- void SoundList() {
- int i;
- sfx_t sfx;
- sfxcache_t sc;
- int size, total;
-
- total = 0;
- for (i = 0; i < num_sfx; i++) {
- sfx = known_sfx[i];
- if (sfx.registration_sequence == 0)
- continue;
- sc = sfx.cache;
- if (sc != null) {
- size = sc.length * sc.width * (sc.stereo + 1);
- total += size;
- if (sc.loopstart >= 0)
- Com.Printf("L");
- else
- Com.Printf(" ");
- Com.Printf("(%2db) %6i : %s\n", new Vargs(3).add(sc.width * 8).add(size).add(sfx.name));
- } else {
- if (sfx.name.charAt(0) == '*')
- Com.Printf(" placeholder : " + sfx.name + "\n");
- else
- Com.Printf(" not loaded : " + sfx.name + "\n");
- }
- }
- Com.Printf("Total resident: " + total + "\n");
- }
-
- void SoundInfo_f() {
-
- Com.Printf("%5d stereo\n", new Vargs(1).add(1));
- Com.Printf("%5d samples\n", new Vargs(1).add(22050));
- Com.Printf("%5d samplebits\n", new Vargs(1).add(16));
- Com.Printf("%5d speed\n", new Vargs(1).add(44100));
- }
-
-}
diff --git a/src/jake2/sound/sfx_t.java b/src/jake2/sound/sfx_t.java
deleted file mode 100644
index 992c0e7..0000000
--- a/src/jake2/sound/sfx_t.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * sfx_t.java
- * Copyright (C) 2004
- *
- * $Id: sfx_t.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 28.11.2003 by RST.
-
-package jake2.sound;
-
-
-public class sfx_t {
- public String name; //mem
- public int registration_sequence;
- public sfxcache_t cache; //ptr
- public String truename; //ptr
-
- // cwei
- public int id = -1;
-
- public void clear() {
- name = truename = null;
- cache = null;
- registration_sequence = 0;
-
- // cwei
- id = -1;
- }
-}
diff --git a/src/jake2/sound/sfxcache_t.java b/src/jake2/sound/sfxcache_t.java
deleted file mode 100644
index 7f4428a..0000000
--- a/src/jake2/sound/sfxcache_t.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright (C) 1997-2001 Id Software, Inc.
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-// Created on 28.11.2003 by RST.
-// $Id: sfxcache_t.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
-
-package jake2.sound;
-
-public class sfxcache_t {
- public int length;
- public int loopstart;
- public int speed; // not needed, because converted on load?
- public int width;
- public int stereo;
- public byte data[]; // variable sized
-
- public sfxcache_t(int size) {
- data = new byte[size];
- }
-}
diff --git a/src/jake2/sound/soundinfo_t.java b/src/jake2/sound/soundinfo_t.java
deleted file mode 100644
index 2c9e6c6..0000000
--- a/src/jake2/sound/soundinfo_t.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * soundinfo_t.java
- * Copyright (C) 2004
- *
- * $Id: soundinfo_t.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-package jake2.sound;
-
-/**
- * soundinfo_t
- */
-public class soundinfo_t {
- int channels;
- int samples; // mono samples in buffer
- int submission_chunk; // don't mix less than this #
- int samplepos; // in mono samples
- int samplebits;
- int speed;
-}
diff --git a/src/jake2/sound/wavinfo_t.java b/src/jake2/sound/wavinfo_t.java
deleted file mode 100644
index 76a28fc..0000000
--- a/src/jake2/sound/wavinfo_t.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * wavinfo_t.java
- * Copyright (C) 2004
- *
- * $Id: wavinfo_t.java,v 1.1 2004-07-08 20:56:49 hzi Exp $
- */
-package jake2.sound;
-
-/**
- * wavinfo_t
- */
-public class wavinfo_t {
- public int rate;
- public int width;
- public int channels;
- public int loopstart;
- public int samples;
- public int dataofs; // chunk starts this many bytes from file start
-}