diff --git a/.gitignore b/.gitignore index 8c48780..792cb1d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ gradle/ .gradle/ -desktopRuntime/ +desktopRuntime/filesystem build/ \ No newline at end of file diff --git a/desktopRuntime/eclipseProject/.classpath b/desktopRuntime/eclipseProject/.classpath index 160ff44..3dcae69 100644 --- a/desktopRuntime/eclipseProject/.classpath +++ b/desktopRuntime/eclipseProject/.classpath @@ -15,5 +15,8 @@ + + + diff --git a/desktopRuntime/eclipseProject/.gitignore b/desktopRuntime/eclipseProject/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/desktopRuntime/eclipseProject/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar b/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar new file mode 100644 index 0000000..8fb33ad Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/Java-WebSocket-1.5.1-with-dependencies.jar differ diff --git a/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar b/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar new file mode 100644 index 0000000..e7e1f4a Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/codecjorbis-20101023.jar differ diff --git a/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar b/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar new file mode 100644 index 0000000..7b6b1bd Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/codecwav-20101023.jar differ diff --git a/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar b/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar new file mode 100644 index 0000000..52b6468 Binary files /dev/null and b/desktopRuntime/eclipseProject/jars/soundsystem-20120107.jar differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3 deleted file mode 100644 index b9d43cd..0000000 Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg new file mode 100644 index 0000000..4f41bb7 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave1.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg new file mode 100644 index 0000000..3e68563 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave10.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg new file mode 100644 index 0000000..7e60f4e Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave11.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg new file mode 100644 index 0000000..4fe0b33 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave12.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg new file mode 100644 index 0000000..1490515 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave13.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3 deleted file mode 100644 index 47e22ee..0000000 Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg new file mode 100644 index 0000000..3c5619f Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave2.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3 deleted file mode 100644 index a2bc1e0..0000000 Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg new file mode 100644 index 0000000..2030ccb Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave3.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3 b/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3 deleted file mode 100644 index 3220da5..0000000 Binary files a/desktopRuntime/resources/sounds/ambient/cave/cave4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg new file mode 100644 index 0000000..8d4ecdd Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave4.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg new file mode 100644 index 0000000..19cc275 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave5.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg new file mode 100644 index 0000000..dd118c8 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave6.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg new file mode 100644 index 0000000..2657084 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave7.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg new file mode 100644 index 0000000..55b3dde Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave8.ogg differ diff --git a/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg b/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg new file mode 100644 index 0000000..8238e75 Binary files /dev/null and b/desktopRuntime/resources/sounds/ambient/cave/cave9.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/fallbig1.mp3 b/desktopRuntime/resources/sounds/damage/fallbig1.mp3 deleted file mode 100644 index 305f6cc..0000000 Binary files a/desktopRuntime/resources/sounds/damage/fallbig1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/fallbig1.ogg b/desktopRuntime/resources/sounds/damage/fallbig1.ogg new file mode 100644 index 0000000..ae71b94 Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallbig1.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/fallbig2.mp3 b/desktopRuntime/resources/sounds/damage/fallbig2.mp3 deleted file mode 100644 index e9c17ac..0000000 Binary files a/desktopRuntime/resources/sounds/damage/fallbig2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/fallbig2.ogg b/desktopRuntime/resources/sounds/damage/fallbig2.ogg new file mode 100644 index 0000000..74707c0 Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallbig2.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/fallsmall.mp3 b/desktopRuntime/resources/sounds/damage/fallsmall.mp3 deleted file mode 100644 index 853a806..0000000 Binary files a/desktopRuntime/resources/sounds/damage/fallsmall.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/fallsmall.ogg b/desktopRuntime/resources/sounds/damage/fallsmall.ogg new file mode 100644 index 0000000..fc3009b Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/fallsmall.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3 deleted file mode 100644 index 658c553..0000000 Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg new file mode 100644 index 0000000..3655599 Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh1.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3 deleted file mode 100644 index 4e3fbe0..0000000 Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg new file mode 100644 index 0000000..aaff612 Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh2.ogg differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3 b/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3 deleted file mode 100644 index 8f3459a..0000000 Binary files a/desktopRuntime/resources/sounds/damage/hurtflesh3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg b/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg new file mode 100644 index 0000000..b6ea95e Binary files /dev/null and b/desktopRuntime/resources/sounds/damage/hurtflesh3.ogg differ diff --git a/desktopRuntime/resources/sounds/fire/fire.ogg b/desktopRuntime/resources/sounds/fire/fire.ogg new file mode 100644 index 0000000..42758b9 Binary files /dev/null and b/desktopRuntime/resources/sounds/fire/fire.ogg differ diff --git a/desktopRuntime/resources/sounds/fire/ignite.ogg b/desktopRuntime/resources/sounds/fire/ignite.ogg new file mode 100644 index 0000000..9063eeb Binary files /dev/null and b/desktopRuntime/resources/sounds/fire/ignite.ogg differ diff --git a/desktopRuntime/resources/sounds/liquid/lava.mp3 b/desktopRuntime/resources/sounds/liquid/lava.mp3 deleted file mode 100644 index 48d62a5..0000000 Binary files a/desktopRuntime/resources/sounds/liquid/lava.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/liquid/lava.ogg b/desktopRuntime/resources/sounds/liquid/lava.ogg new file mode 100644 index 0000000..a03b491 Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/lava.ogg differ diff --git a/desktopRuntime/resources/sounds/liquid/lavapop.mp3 b/desktopRuntime/resources/sounds/liquid/lavapop.mp3 deleted file mode 100644 index 4200144..0000000 Binary files a/desktopRuntime/resources/sounds/liquid/lavapop.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/liquid/lavapop.ogg b/desktopRuntime/resources/sounds/liquid/lavapop.ogg new file mode 100644 index 0000000..0173bf9 Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/lavapop.ogg differ diff --git a/desktopRuntime/resources/sounds/liquid/splash.mp3 b/desktopRuntime/resources/sounds/liquid/splash.mp3 deleted file mode 100644 index b9a5ef3..0000000 Binary files a/desktopRuntime/resources/sounds/liquid/splash.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/liquid/splash.ogg b/desktopRuntime/resources/sounds/liquid/splash.ogg new file mode 100644 index 0000000..8d91a23 Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/splash.ogg differ diff --git a/desktopRuntime/resources/sounds/liquid/water.mp3 b/desktopRuntime/resources/sounds/liquid/water.mp3 deleted file mode 100644 index c9c7908..0000000 Binary files a/desktopRuntime/resources/sounds/liquid/water.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/liquid/water.ogg b/desktopRuntime/resources/sounds/liquid/water.ogg new file mode 100644 index 0000000..157491b Binary files /dev/null and b/desktopRuntime/resources/sounds/liquid/water.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg new file mode 100644 index 0000000..7c91486 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg new file mode 100644 index 0000000..a296c87 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg new file mode 100644 index 0000000..a374f1f Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg b/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg new file mode 100644 index 0000000..bd8cb3e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/breathe4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/death.ogg b/desktopRuntime/resources/sounds/mob/blaze/death.ogg new file mode 100644 index 0000000..6a882c5 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/death.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg new file mode 100644 index 0000000..7847586 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg new file mode 100644 index 0000000..c741e7c Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg new file mode 100644 index 0000000..fdec114 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg b/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg new file mode 100644 index 0000000..ff31cd4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/blaze/hit4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg new file mode 100644 index 0000000..7083c00 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg new file mode 100644 index 0000000..6ea6a36 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg b/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg new file mode 100644 index 0000000..0b75a43 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hiss3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg new file mode 100644 index 0000000..2fd3fa9 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg new file mode 100644 index 0000000..879761e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg b/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg new file mode 100644 index 0000000..025942d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/hitt3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/meow1.ogg b/desktopRuntime/resources/sounds/mob/cat/meow1.ogg new file mode 100644 index 0000000..40864f9 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/meow2.ogg b/desktopRuntime/resources/sounds/mob/cat/meow2.ogg new file mode 100644 index 0000000..7b0b264 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/meow3.ogg b/desktopRuntime/resources/sounds/mob/cat/meow3.ogg new file mode 100644 index 0000000..e886244 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/meow4.ogg b/desktopRuntime/resources/sounds/mob/cat/meow4.ogg new file mode 100644 index 0000000..47830e3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/meow4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/purr1.ogg b/desktopRuntime/resources/sounds/mob/cat/purr1.ogg new file mode 100644 index 0000000..99b86b3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/purr2.ogg b/desktopRuntime/resources/sounds/mob/cat/purr2.ogg new file mode 100644 index 0000000..b7d19d3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/purr3.ogg b/desktopRuntime/resources/sounds/mob/cat/purr3.ogg new file mode 100644 index 0000000..e1cc6bd Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purr3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg b/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg new file mode 100644 index 0000000..d2445c2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purreow1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg b/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg new file mode 100644 index 0000000..59a0b47 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cat/purreow2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chicken1.mp3 b/desktopRuntime/resources/sounds/mob/chicken1.mp3 deleted file mode 100644 index 9cb13c0..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chicken1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chicken1.ogg b/desktopRuntime/resources/sounds/mob/chicken1.ogg new file mode 100644 index 0000000..05f7aa8 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chicken2.mp3 b/desktopRuntime/resources/sounds/mob/chicken2.mp3 deleted file mode 100644 index 744cbfa..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chicken2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chicken2.ogg b/desktopRuntime/resources/sounds/mob/chicken2.ogg new file mode 100644 index 0000000..b181d8f Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chicken3.mp3 b/desktopRuntime/resources/sounds/mob/chicken3.mp3 deleted file mode 100644 index eb5f8cb..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chicken3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chicken3.ogg b/desktopRuntime/resources/sounds/mob/chicken3.ogg new file mode 100644 index 0000000..e217510 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chicken3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3 b/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3 deleted file mode 100644 index de1b789..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chickenhurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg b/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg new file mode 100644 index 0000000..a56a08d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenhurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3 b/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3 deleted file mode 100644 index 81cb41a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chickenhurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg b/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg new file mode 100644 index 0000000..06e65d2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenhurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/chickenplop.mp3 b/desktopRuntime/resources/sounds/mob/chickenplop.mp3 deleted file mode 100644 index ee727ad..0000000 Binary files a/desktopRuntime/resources/sounds/mob/chickenplop.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/chickenplop.ogg b/desktopRuntime/resources/sounds/mob/chickenplop.ogg new file mode 100644 index 0000000..b609080 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/chickenplop.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cow1.mp3 b/desktopRuntime/resources/sounds/mob/cow1.mp3 deleted file mode 100644 index 77daa7c..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cow1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cow1.ogg b/desktopRuntime/resources/sounds/mob/cow1.ogg new file mode 100644 index 0000000..5208de7 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cow2.mp3 b/desktopRuntime/resources/sounds/mob/cow2.mp3 deleted file mode 100644 index ee90091..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cow2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cow2.ogg b/desktopRuntime/resources/sounds/mob/cow2.ogg new file mode 100644 index 0000000..a252e75 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cow3.mp3 b/desktopRuntime/resources/sounds/mob/cow3.mp3 deleted file mode 100644 index 7ebedd3..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cow3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cow3.ogg b/desktopRuntime/resources/sounds/mob/cow3.ogg new file mode 100644 index 0000000..7345ab2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cow4.mp3 b/desktopRuntime/resources/sounds/mob/cow4.mp3 deleted file mode 100644 index 4278b7a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cow4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cow4.ogg b/desktopRuntime/resources/sounds/mob/cow4.ogg new file mode 100644 index 0000000..80d5063 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cow4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt1.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt1.mp3 deleted file mode 100644 index 856a8e9..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cowhurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt1.ogg b/desktopRuntime/resources/sounds/mob/cowhurt1.ogg new file mode 100644 index 0000000..c579de2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt2.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt2.mp3 deleted file mode 100644 index 3233b35..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cowhurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt2.ogg b/desktopRuntime/resources/sounds/mob/cowhurt2.ogg new file mode 100644 index 0000000..5e487a8 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt3.mp3 b/desktopRuntime/resources/sounds/mob/cowhurt3.mp3 deleted file mode 100644 index 2c85fa0..0000000 Binary files a/desktopRuntime/resources/sounds/mob/cowhurt3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/cowhurt3.ogg b/desktopRuntime/resources/sounds/mob/cowhurt3.ogg new file mode 100644 index 0000000..8341bfa Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/cowhurt3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/creeper1.mp3 b/desktopRuntime/resources/sounds/mob/creeper1.mp3 deleted file mode 100644 index b85c274..0000000 Binary files a/desktopRuntime/resources/sounds/mob/creeper1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/creeper1.ogg b/desktopRuntime/resources/sounds/mob/creeper1.ogg new file mode 100644 index 0000000..ceec866 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/creeper2.mp3 b/desktopRuntime/resources/sounds/mob/creeper2.mp3 deleted file mode 100644 index 51e89e8..0000000 Binary files a/desktopRuntime/resources/sounds/mob/creeper2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/creeper2.ogg b/desktopRuntime/resources/sounds/mob/creeper2.ogg new file mode 100644 index 0000000..6a84ac5 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/creeper3.mp3 b/desktopRuntime/resources/sounds/mob/creeper3.mp3 deleted file mode 100644 index e77564d..0000000 Binary files a/desktopRuntime/resources/sounds/mob/creeper3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/creeper3.ogg b/desktopRuntime/resources/sounds/mob/creeper3.ogg new file mode 100644 index 0000000..c284dcc Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/creeper4.mp3 b/desktopRuntime/resources/sounds/mob/creeper4.mp3 deleted file mode 100644 index 00957c6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/creeper4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/creeper4.ogg b/desktopRuntime/resources/sounds/mob/creeper4.ogg new file mode 100644 index 0000000..c115443 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeper4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/creeperdeath.mp3 b/desktopRuntime/resources/sounds/mob/creeperdeath.mp3 deleted file mode 100644 index 6d9d6f6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/creeperdeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/creeperdeath.ogg b/desktopRuntime/resources/sounds/mob/creeperdeath.ogg new file mode 100644 index 0000000..9a14fc4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/creeperdeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/death.ogg b/desktopRuntime/resources/sounds/mob/endermen/death.ogg new file mode 100644 index 0000000..322ac0d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/death.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg new file mode 100644 index 0000000..d1b88ee Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg new file mode 100644 index 0000000..85d3f01 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg new file mode 100644 index 0000000..8451b0a Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg b/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg new file mode 100644 index 0000000..0a47fd8 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/hit4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg new file mode 100644 index 0000000..6f41121 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg new file mode 100644 index 0000000..6094b49 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg new file mode 100644 index 0000000..8748bf8 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg new file mode 100644 index 0000000..a241930 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg b/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg new file mode 100644 index 0000000..7dc0ca3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/idle5.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/portal.ogg b/desktopRuntime/resources/sounds/mob/endermen/portal.ogg new file mode 100644 index 0000000..aa0eb71 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/portal.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg b/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg new file mode 100644 index 0000000..b6057b0 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/portal2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg new file mode 100644 index 0000000..995ea33 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg new file mode 100644 index 0000000..eb97f7f Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg new file mode 100644 index 0000000..1bafb0d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg b/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg new file mode 100644 index 0000000..81f0bb1 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/scream4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/endermen/stare.ogg b/desktopRuntime/resources/sounds/mob/endermen/stare.ogg new file mode 100644 index 0000000..f7551c9 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/endermen/stare.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3 b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3 deleted file mode 100644 index 424946f..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg new file mode 100644 index 0000000..2a773d6 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/affectionate scream.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/charge.mp3 b/desktopRuntime/resources/sounds/mob/ghast/charge.mp3 deleted file mode 100644 index c082b74..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/charge.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/charge.ogg b/desktopRuntime/resources/sounds/mob/ghast/charge.ogg new file mode 100644 index 0000000..a1f7faa Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/charge.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/death.mp3 b/desktopRuntime/resources/sounds/mob/ghast/death.mp3 deleted file mode 100644 index 2bd1075..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/death.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/death.ogg b/desktopRuntime/resources/sounds/mob/ghast/death.ogg new file mode 100644 index 0000000..39eb418 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/death.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3 deleted file mode 100644 index 4dce2bd..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/fireball4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg b/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg new file mode 100644 index 0000000..a7c6ded Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/fireball4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3 deleted file mode 100644 index 301c24b..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg new file mode 100644 index 0000000..2faa7d5 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3 deleted file mode 100644 index cd0a105..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg new file mode 100644 index 0000000..c881055 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3 deleted file mode 100644 index a5d09c6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg new file mode 100644 index 0000000..54dc592 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3 deleted file mode 100644 index 608062c..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg new file mode 100644 index 0000000..da3a6cf Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3 deleted file mode 100644 index 03bf612..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan5.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg new file mode 100644 index 0000000..a1dba01 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan5.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3 deleted file mode 100644 index 16b3654..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan6.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg new file mode 100644 index 0000000..43522e8 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan6.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3 b/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3 deleted file mode 100644 index 03fec8a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/moan7.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg b/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg new file mode 100644 index 0000000..867ba35 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/moan7.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3 deleted file mode 100644 index d29c38e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg new file mode 100644 index 0000000..57addd3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3 deleted file mode 100644 index 9c9be59..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg new file mode 100644 index 0000000..a037e90 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3 deleted file mode 100644 index d6e77d2..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg new file mode 100644 index 0000000..2eb69f5 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3 deleted file mode 100644 index b0840dd..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg new file mode 100644 index 0000000..684a418 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3 b/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3 deleted file mode 100644 index f493863..0000000 Binary files a/desktopRuntime/resources/sounds/mob/ghast/scream5.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg b/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg new file mode 100644 index 0000000..9246cdd Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/ghast/scream5.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/death.ogg b/desktopRuntime/resources/sounds/mob/irongolem/death.ogg new file mode 100644 index 0000000..7bff573 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/death.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg new file mode 100644 index 0000000..e158a0b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg new file mode 100644 index 0000000..474ce5e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg new file mode 100644 index 0000000..6fd337a Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg b/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg new file mode 100644 index 0000000..2fc372f Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/hit4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg b/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg new file mode 100644 index 0000000..aa504d6 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/throw.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg new file mode 100644 index 0000000..2e819f4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg new file mode 100644 index 0000000..1f73101 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg new file mode 100644 index 0000000..4de58b4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg b/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg new file mode 100644 index 0000000..4ee9378 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/irongolem/walk4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg new file mode 100644 index 0000000..47cb7ea Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg new file mode 100644 index 0000000..0030737 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg new file mode 100644 index 0000000..e68f01b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg new file mode 100644 index 0000000..37a27ae Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/big4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg new file mode 100644 index 0000000..019ed19 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg new file mode 100644 index 0000000..901921a Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg new file mode 100644 index 0000000..d62a21d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg new file mode 100644 index 0000000..5b62c4c Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/jump4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg new file mode 100644 index 0000000..2a2b685 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg new file mode 100644 index 0000000..a4f4f14 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg new file mode 100644 index 0000000..ccad91c Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg new file mode 100644 index 0000000..3bf28d0 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg b/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg new file mode 100644 index 0000000..26d55f7 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/magmacube/small5.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/pig1.mp3 b/desktopRuntime/resources/sounds/mob/pig1.mp3 deleted file mode 100644 index bd91f6c..0000000 Binary files a/desktopRuntime/resources/sounds/mob/pig1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/pig1.ogg b/desktopRuntime/resources/sounds/mob/pig1.ogg new file mode 100644 index 0000000..8516b37 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/pig2.mp3 b/desktopRuntime/resources/sounds/mob/pig2.mp3 deleted file mode 100644 index cbf540c..0000000 Binary files a/desktopRuntime/resources/sounds/mob/pig2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/pig2.ogg b/desktopRuntime/resources/sounds/mob/pig2.ogg new file mode 100644 index 0000000..bf67406 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/pig3.mp3 b/desktopRuntime/resources/sounds/mob/pig3.mp3 deleted file mode 100644 index caefa6f..0000000 Binary files a/desktopRuntime/resources/sounds/mob/pig3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/pig3.ogg b/desktopRuntime/resources/sounds/mob/pig3.ogg new file mode 100644 index 0000000..3f45533 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pig3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/pigdeath.mp3 b/desktopRuntime/resources/sounds/mob/pigdeath.mp3 deleted file mode 100644 index b98c11f..0000000 Binary files a/desktopRuntime/resources/sounds/mob/pigdeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/pigdeath.ogg b/desktopRuntime/resources/sounds/mob/pigdeath.ogg new file mode 100644 index 0000000..959e98b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/pigdeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/sheep1.mp3 b/desktopRuntime/resources/sounds/mob/sheep1.mp3 deleted file mode 100644 index 51eee55..0000000 Binary files a/desktopRuntime/resources/sounds/mob/sheep1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/sheep1.ogg b/desktopRuntime/resources/sounds/mob/sheep1.ogg new file mode 100644 index 0000000..dbc3b4b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/sheep2.mp3 b/desktopRuntime/resources/sounds/mob/sheep2.mp3 deleted file mode 100644 index 13d643e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/sheep2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/sheep2.ogg b/desktopRuntime/resources/sounds/mob/sheep2.ogg new file mode 100644 index 0000000..d592dd2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/sheep3.mp3 b/desktopRuntime/resources/sounds/mob/sheep3.mp3 deleted file mode 100644 index 3a9cd4b..0000000 Binary files a/desktopRuntime/resources/sounds/mob/sheep3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/sheep3.ogg b/desktopRuntime/resources/sounds/mob/sheep3.ogg new file mode 100644 index 0000000..2d333f3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/sheep3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg new file mode 100644 index 0000000..4dd65ca Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg new file mode 100644 index 0000000..5b56161 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg new file mode 100644 index 0000000..68cf0ab Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/hit3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg b/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg new file mode 100644 index 0000000..d471fde Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/kill.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg new file mode 100644 index 0000000..7891a05 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg new file mode 100644 index 0000000..4aa77fb Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg new file mode 100644 index 0000000..3ed6d7a Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg b/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg new file mode 100644 index 0000000..6c0e053 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/say4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg new file mode 100644 index 0000000..193e08d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg new file mode 100644 index 0000000..5bdda89 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg new file mode 100644 index 0000000..5554468 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg b/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg new file mode 100644 index 0000000..02e1b66 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/silverfish/step4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton1.mp3 b/desktopRuntime/resources/sounds/mob/skeleton1.mp3 deleted file mode 100644 index f0277e1..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeleton1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton1.ogg b/desktopRuntime/resources/sounds/mob/skeleton1.ogg new file mode 100644 index 0000000..e62217d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton2.mp3 b/desktopRuntime/resources/sounds/mob/skeleton2.mp3 deleted file mode 100644 index 7b62953..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeleton2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton2.ogg b/desktopRuntime/resources/sounds/mob/skeleton2.ogg new file mode 100644 index 0000000..c2e609e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton3.mp3 b/desktopRuntime/resources/sounds/mob/skeleton3.mp3 deleted file mode 100644 index bca5f36..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeleton3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeleton3.ogg b/desktopRuntime/resources/sounds/mob/skeleton3.ogg new file mode 100644 index 0000000..eb926fc Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeleton3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeletondeath.mp3 b/desktopRuntime/resources/sounds/mob/skeletondeath.mp3 deleted file mode 100644 index 88a889b..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeletondeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeletondeath.ogg b/desktopRuntime/resources/sounds/mob/skeletondeath.ogg new file mode 100644 index 0000000..82e9ef3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletondeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3 deleted file mode 100644 index 6b002ec..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg new file mode 100644 index 0000000..533b35c Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3 deleted file mode 100644 index b71d197..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg new file mode 100644 index 0000000..5abba30 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3 deleted file mode 100644 index d303697..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg new file mode 100644 index 0000000..ed5f268 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3 b/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3 deleted file mode 100644 index 2414506..0000000 Binary files a/desktopRuntime/resources/sounds/mob/skeletonhurt4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg b/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg new file mode 100644 index 0000000..9307534 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/skeletonhurt4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slime1.mp3 b/desktopRuntime/resources/sounds/mob/slime1.mp3 deleted file mode 100644 index ee8cba6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slime1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slime1.ogg b/desktopRuntime/resources/sounds/mob/slime1.ogg new file mode 100644 index 0000000..4236ac1 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slime2.mp3 b/desktopRuntime/resources/sounds/mob/slime2.mp3 deleted file mode 100644 index 64b35c6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slime2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slime2.ogg b/desktopRuntime/resources/sounds/mob/slime2.ogg new file mode 100644 index 0000000..6810b8d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slime3.mp3 b/desktopRuntime/resources/sounds/mob/slime3.mp3 deleted file mode 100644 index 7999312..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slime3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slime3.ogg b/desktopRuntime/resources/sounds/mob/slime3.ogg new file mode 100644 index 0000000..aa31fdc Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slime4.mp3 b/desktopRuntime/resources/sounds/mob/slime4.mp3 deleted file mode 100644 index dccd6d6..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slime4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slime4.ogg b/desktopRuntime/resources/sounds/mob/slime4.ogg new file mode 100644 index 0000000..914e349 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slime5.mp3 b/desktopRuntime/resources/sounds/mob/slime5.mp3 deleted file mode 100644 index fa7ce01..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slime5.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slime5.ogg b/desktopRuntime/resources/sounds/mob/slime5.ogg new file mode 100644 index 0000000..eb5c74e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slime5.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slimeattack1.mp3 b/desktopRuntime/resources/sounds/mob/slimeattack1.mp3 deleted file mode 100644 index 628f7de..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slimeattack1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slimeattack1.ogg b/desktopRuntime/resources/sounds/mob/slimeattack1.ogg new file mode 100644 index 0000000..070c7f2 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slimeattack1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/slimeattack2.mp3 b/desktopRuntime/resources/sounds/mob/slimeattack2.mp3 deleted file mode 100644 index 393a08e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/slimeattack2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/slimeattack2.ogg b/desktopRuntime/resources/sounds/mob/slimeattack2.ogg new file mode 100644 index 0000000..760c16b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/slimeattack2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/spider1.mp3 b/desktopRuntime/resources/sounds/mob/spider1.mp3 deleted file mode 100644 index 5974091..0000000 Binary files a/desktopRuntime/resources/sounds/mob/spider1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/spider1.ogg b/desktopRuntime/resources/sounds/mob/spider1.ogg new file mode 100644 index 0000000..a22d2a3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/spider2.mp3 b/desktopRuntime/resources/sounds/mob/spider2.mp3 deleted file mode 100644 index 77a0431..0000000 Binary files a/desktopRuntime/resources/sounds/mob/spider2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/spider2.ogg b/desktopRuntime/resources/sounds/mob/spider2.ogg new file mode 100644 index 0000000..0d8d4d3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/spider3.mp3 b/desktopRuntime/resources/sounds/mob/spider3.mp3 deleted file mode 100644 index d5328ee..0000000 Binary files a/desktopRuntime/resources/sounds/mob/spider3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/spider3.ogg b/desktopRuntime/resources/sounds/mob/spider3.ogg new file mode 100644 index 0000000..a208e1e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/spider4.mp3 b/desktopRuntime/resources/sounds/mob/spider4.mp3 deleted file mode 100644 index 37bf2dd..0000000 Binary files a/desktopRuntime/resources/sounds/mob/spider4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/spider4.ogg b/desktopRuntime/resources/sounds/mob/spider4.ogg new file mode 100644 index 0000000..4c09e8d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spider4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/spiderdeath.mp3 b/desktopRuntime/resources/sounds/mob/spiderdeath.mp3 deleted file mode 100644 index 715fe4e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/spiderdeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/spiderdeath.ogg b/desktopRuntime/resources/sounds/mob/spiderdeath.ogg new file mode 100644 index 0000000..220663e Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/spiderdeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3 deleted file mode 100644 index 2727638..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg new file mode 100644 index 0000000..f6784b1 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3 deleted file mode 100644 index 6054414..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg new file mode 100644 index 0000000..5265e81 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3 deleted file mode 100644 index c69f614..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/bark3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg b/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg new file mode 100644 index 0000000..b283aa4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/bark3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/death.mp3 b/desktopRuntime/resources/sounds/mob/wolf/death.mp3 deleted file mode 100644 index 14e7487..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/death.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/death.ogg b/desktopRuntime/resources/sounds/mob/wolf/death.ogg new file mode 100644 index 0000000..a65af15 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/death.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3 deleted file mode 100644 index 605a1ac..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg new file mode 100644 index 0000000..94266f3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3 deleted file mode 100644 index d810b07..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg new file mode 100644 index 0000000..424b3bf Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3 deleted file mode 100644 index 046f276..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/growl3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg b/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg new file mode 100644 index 0000000..41dd0c3 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/growl3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3 deleted file mode 100644 index 1fd43ea..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/howl1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg b/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg new file mode 100644 index 0000000..6ddae3b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/howl1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3 deleted file mode 100644 index 3916f56..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/howl2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg b/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg new file mode 100644 index 0000000..4f1b2c4 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/howl2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3 deleted file mode 100644 index c49cd84..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg new file mode 100644 index 0000000..0e1adcd Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3 deleted file mode 100644 index 7f9d4f1..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg new file mode 100644 index 0000000..0af6c6b Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3 b/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3 deleted file mode 100644 index c74ca2a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/hurt3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg b/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg new file mode 100644 index 0000000..4faf16a Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/hurt3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/panting.mp3 b/desktopRuntime/resources/sounds/mob/wolf/panting.mp3 deleted file mode 100644 index 19dacdb..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/panting.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/panting.ogg b/desktopRuntime/resources/sounds/mob/wolf/panting.ogg new file mode 100644 index 0000000..5176147 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/panting.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/shake.mp3 b/desktopRuntime/resources/sounds/mob/wolf/shake.mp3 deleted file mode 100644 index 44fb74a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/shake.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/shake.ogg b/desktopRuntime/resources/sounds/mob/wolf/shake.ogg new file mode 100644 index 0000000..519b4cb Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/shake.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/whine.mp3 b/desktopRuntime/resources/sounds/mob/wolf/whine.mp3 deleted file mode 100644 index f017364..0000000 Binary files a/desktopRuntime/resources/sounds/mob/wolf/whine.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/wolf/whine.ogg b/desktopRuntime/resources/sounds/mob/wolf/whine.ogg new file mode 100644 index 0000000..2d2f825 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/wolf/whine.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg new file mode 100644 index 0000000..7afc804 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg new file mode 100644 index 0000000..b8a25a7 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg b/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg new file mode 100644 index 0000000..a532df6 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/metal3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg new file mode 100644 index 0000000..3ef9a67 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg new file mode 100644 index 0000000..ee6c96c Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg new file mode 100644 index 0000000..1e961d7 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg b/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg new file mode 100644 index 0000000..abb8e87 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/wood4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg b/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg new file mode 100644 index 0000000..bd05daf Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie/woodbreak.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie1.mp3 b/desktopRuntime/resources/sounds/mob/zombie1.mp3 deleted file mode 100644 index 257cbb3..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombie1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombie1.ogg b/desktopRuntime/resources/sounds/mob/zombie1.ogg new file mode 100644 index 0000000..6c57de1 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie2.mp3 b/desktopRuntime/resources/sounds/mob/zombie2.mp3 deleted file mode 100644 index 676f2ba..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombie2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombie2.ogg b/desktopRuntime/resources/sounds/mob/zombie2.ogg new file mode 100644 index 0000000..80e1918 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombie3.mp3 b/desktopRuntime/resources/sounds/mob/zombie3.mp3 deleted file mode 100644 index 1ac7b0f..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombie3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombie3.ogg b/desktopRuntime/resources/sounds/mob/zombie3.ogg new file mode 100644 index 0000000..c5d2f41 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombie3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiedeath.mp3 b/desktopRuntime/resources/sounds/mob/zombiedeath.mp3 deleted file mode 100644 index c004584..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiedeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiedeath.ogg b/desktopRuntime/resources/sounds/mob/zombiedeath.ogg new file mode 100644 index 0000000..7c010fd Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiedeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3 b/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3 deleted file mode 100644 index 9cb67a8..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiehurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg b/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg new file mode 100644 index 0000000..ce3cbde Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiehurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3 b/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3 deleted file mode 100644 index aee3841..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiehurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg b/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg new file mode 100644 index 0000000..122ff24 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiehurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3 deleted file mode 100644 index aee5a2b..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg new file mode 100644 index 0000000..49f18ed Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3 deleted file mode 100644 index 3ab619a..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg new file mode 100644 index 0000000..60a2739 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3 deleted file mode 100644 index 5f1e46c..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg new file mode 100644 index 0000000..6d37984 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3 deleted file mode 100644 index 64a51de..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg new file mode 100644 index 0000000..4f11239 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpig4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3 deleted file mode 100644 index 85de17e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg new file mode 100644 index 0000000..a398129 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3 deleted file mode 100644 index 8d8ad88..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg new file mode 100644 index 0000000..79003db Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry2.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3 deleted file mode 100644 index cea462e..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg new file mode 100644 index 0000000..23c530f Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry3.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3 deleted file mode 100644 index 10e0e95..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg new file mode 100644 index 0000000..3ea06c5 Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigangry4.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3 deleted file mode 100644 index 0354366..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg new file mode 100644 index 0000000..00d3f8d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpigdeath.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3 deleted file mode 100644 index ddca274..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg new file mode 100644 index 0000000..0fa041d Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt1.ogg differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3 b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3 deleted file mode 100644 index 5b910b2..0000000 Binary files a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg new file mode 100644 index 0000000..fb740aa Binary files /dev/null and b/desktopRuntime/resources/sounds/mob/zombiepig/zpighurt2.ogg differ diff --git a/desktopRuntime/resources/sounds/note/bass.mp3 b/desktopRuntime/resources/sounds/note/bass.mp3 deleted file mode 100644 index e0daff5..0000000 Binary files a/desktopRuntime/resources/sounds/note/bass.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/bass.ogg b/desktopRuntime/resources/sounds/note/bass.ogg new file mode 100644 index 0000000..984341f Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bass.ogg differ diff --git a/desktopRuntime/resources/sounds/note/bassattack.mp3 b/desktopRuntime/resources/sounds/note/bassattack.mp3 deleted file mode 100644 index 292a863..0000000 Binary files a/desktopRuntime/resources/sounds/note/bassattack.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/bassattack.ogg b/desktopRuntime/resources/sounds/note/bassattack.ogg new file mode 100644 index 0000000..58acddf Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bassattack.ogg differ diff --git a/desktopRuntime/resources/sounds/note/bd.mp3 b/desktopRuntime/resources/sounds/note/bd.mp3 deleted file mode 100644 index 42defa3..0000000 Binary files a/desktopRuntime/resources/sounds/note/bd.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/bd.ogg b/desktopRuntime/resources/sounds/note/bd.ogg new file mode 100644 index 0000000..c258277 Binary files /dev/null and b/desktopRuntime/resources/sounds/note/bd.ogg differ diff --git a/desktopRuntime/resources/sounds/note/harp.mp3 b/desktopRuntime/resources/sounds/note/harp.mp3 deleted file mode 100644 index f1badf8..0000000 Binary files a/desktopRuntime/resources/sounds/note/harp.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/harp.ogg b/desktopRuntime/resources/sounds/note/harp.ogg new file mode 100644 index 0000000..fcfbc02 Binary files /dev/null and b/desktopRuntime/resources/sounds/note/harp.ogg differ diff --git a/desktopRuntime/resources/sounds/note/hat.mp3 b/desktopRuntime/resources/sounds/note/hat.mp3 deleted file mode 100644 index dd2eb7c..0000000 Binary files a/desktopRuntime/resources/sounds/note/hat.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/hat.ogg b/desktopRuntime/resources/sounds/note/hat.ogg new file mode 100644 index 0000000..9b3ca5b Binary files /dev/null and b/desktopRuntime/resources/sounds/note/hat.ogg differ diff --git a/desktopRuntime/resources/sounds/note/pling.mp3 b/desktopRuntime/resources/sounds/note/pling.mp3 deleted file mode 100644 index 42497ba..0000000 Binary files a/desktopRuntime/resources/sounds/note/pling.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/pling.ogg b/desktopRuntime/resources/sounds/note/pling.ogg new file mode 100644 index 0000000..3013846 Binary files /dev/null and b/desktopRuntime/resources/sounds/note/pling.ogg differ diff --git a/desktopRuntime/resources/sounds/note/snare.mp3 b/desktopRuntime/resources/sounds/note/snare.mp3 deleted file mode 100644 index 85e4af1..0000000 Binary files a/desktopRuntime/resources/sounds/note/snare.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/note/snare.ogg b/desktopRuntime/resources/sounds/note/snare.ogg new file mode 100644 index 0000000..4972ed5 Binary files /dev/null and b/desktopRuntime/resources/sounds/note/snare.ogg differ diff --git a/desktopRuntime/resources/sounds/portal/portal.mp3 b/desktopRuntime/resources/sounds/portal/portal.mp3 deleted file mode 100644 index 7b8cd9e..0000000 Binary files a/desktopRuntime/resources/sounds/portal/portal.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/portal/portal.ogg b/desktopRuntime/resources/sounds/portal/portal.ogg new file mode 100644 index 0000000..2c02f55 Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/portal.ogg differ diff --git a/desktopRuntime/resources/sounds/portal/travel.mp3 b/desktopRuntime/resources/sounds/portal/travel.mp3 deleted file mode 100644 index 8042bff..0000000 Binary files a/desktopRuntime/resources/sounds/portal/travel.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/portal/travel.ogg b/desktopRuntime/resources/sounds/portal/travel.ogg new file mode 100644 index 0000000..3e61de2 Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/travel.ogg differ diff --git a/desktopRuntime/resources/sounds/portal/trigger.mp3 b/desktopRuntime/resources/sounds/portal/trigger.mp3 deleted file mode 100644 index ec00975..0000000 Binary files a/desktopRuntime/resources/sounds/portal/trigger.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/portal/trigger.ogg b/desktopRuntime/resources/sounds/portal/trigger.ogg new file mode 100644 index 0000000..8a4ca4b Binary files /dev/null and b/desktopRuntime/resources/sounds/portal/trigger.ogg differ diff --git a/desktopRuntime/resources/sounds/random/bow.mp3 b/desktopRuntime/resources/sounds/random/bow.mp3 deleted file mode 100644 index 647f01a..0000000 Binary files a/desktopRuntime/resources/sounds/random/bow.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/bow.ogg b/desktopRuntime/resources/sounds/random/bow.ogg new file mode 100644 index 0000000..5e83f60 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bow.ogg differ diff --git a/desktopRuntime/resources/sounds/random/bowhit1.ogg b/desktopRuntime/resources/sounds/random/bowhit1.ogg new file mode 100644 index 0000000..3b0d6a2 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit1.ogg differ diff --git a/desktopRuntime/resources/sounds/random/bowhit2.ogg b/desktopRuntime/resources/sounds/random/bowhit2.ogg new file mode 100644 index 0000000..0ece9e9 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit2.ogg differ diff --git a/desktopRuntime/resources/sounds/random/bowhit3.ogg b/desktopRuntime/resources/sounds/random/bowhit3.ogg new file mode 100644 index 0000000..3ff8234 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit3.ogg differ diff --git a/desktopRuntime/resources/sounds/random/bowhit4.ogg b/desktopRuntime/resources/sounds/random/bowhit4.ogg new file mode 100644 index 0000000..82aa26f Binary files /dev/null and b/desktopRuntime/resources/sounds/random/bowhit4.ogg differ diff --git a/desktopRuntime/resources/sounds/random/break.ogg b/desktopRuntime/resources/sounds/random/break.ogg new file mode 100644 index 0000000..8e565af Binary files /dev/null and b/desktopRuntime/resources/sounds/random/break.ogg differ diff --git a/desktopRuntime/resources/sounds/random/breath.mp3 b/desktopRuntime/resources/sounds/random/breath.mp3 deleted file mode 100644 index d6bf2ed..0000000 Binary files a/desktopRuntime/resources/sounds/random/breath.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/breath.ogg b/desktopRuntime/resources/sounds/random/breath.ogg new file mode 100644 index 0000000..a28fb4b Binary files /dev/null and b/desktopRuntime/resources/sounds/random/breath.ogg differ diff --git a/desktopRuntime/resources/sounds/random/burp.ogg b/desktopRuntime/resources/sounds/random/burp.ogg new file mode 100644 index 0000000..5ad3f57 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/burp.ogg differ diff --git a/desktopRuntime/resources/sounds/random/chestclosed.ogg b/desktopRuntime/resources/sounds/random/chestclosed.ogg new file mode 100644 index 0000000..bab0652 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/chestclosed.ogg differ diff --git a/desktopRuntime/resources/sounds/random/chestopen.ogg b/desktopRuntime/resources/sounds/random/chestopen.ogg new file mode 100644 index 0000000..ee5c91c Binary files /dev/null and b/desktopRuntime/resources/sounds/random/chestopen.ogg differ diff --git a/desktopRuntime/resources/sounds/random/click.mp3 b/desktopRuntime/resources/sounds/random/click.mp3 deleted file mode 100644 index 8fe1791..0000000 Binary files a/desktopRuntime/resources/sounds/random/click.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/click.ogg b/desktopRuntime/resources/sounds/random/click.ogg new file mode 100644 index 0000000..b4889da Binary files /dev/null and b/desktopRuntime/resources/sounds/random/click.ogg differ diff --git a/desktopRuntime/resources/sounds/random/door_close.mp3 b/desktopRuntime/resources/sounds/random/door_close.mp3 deleted file mode 100644 index 09bc3dc..0000000 Binary files a/desktopRuntime/resources/sounds/random/door_close.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/door_close.ogg b/desktopRuntime/resources/sounds/random/door_close.ogg new file mode 100644 index 0000000..cee8d23 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/door_close.ogg differ diff --git a/desktopRuntime/resources/sounds/random/door_open.mp3 b/desktopRuntime/resources/sounds/random/door_open.mp3 deleted file mode 100644 index 6e151cb..0000000 Binary files a/desktopRuntime/resources/sounds/random/door_open.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/door_open.ogg b/desktopRuntime/resources/sounds/random/door_open.ogg new file mode 100644 index 0000000..590fc69 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/door_open.ogg differ diff --git a/desktopRuntime/resources/sounds/random/drink.ogg b/desktopRuntime/resources/sounds/random/drink.ogg new file mode 100644 index 0000000..069589a Binary files /dev/null and b/desktopRuntime/resources/sounds/random/drink.ogg differ diff --git a/desktopRuntime/resources/sounds/random/drr.mp3 b/desktopRuntime/resources/sounds/random/drr.mp3 deleted file mode 100644 index 3f7c679..0000000 Binary files a/desktopRuntime/resources/sounds/random/drr.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/drr.ogg b/desktopRuntime/resources/sounds/random/drr.ogg new file mode 100644 index 0000000..10923d9 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/drr.ogg differ diff --git a/desktopRuntime/resources/sounds/random/eat1.ogg b/desktopRuntime/resources/sounds/random/eat1.ogg new file mode 100644 index 0000000..1a568fa Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat1.ogg differ diff --git a/desktopRuntime/resources/sounds/random/eat2.ogg b/desktopRuntime/resources/sounds/random/eat2.ogg new file mode 100644 index 0000000..ccff5d9 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat2.ogg differ diff --git a/desktopRuntime/resources/sounds/random/eat3.ogg b/desktopRuntime/resources/sounds/random/eat3.ogg new file mode 100644 index 0000000..0aa6afc Binary files /dev/null and b/desktopRuntime/resources/sounds/random/eat3.ogg differ diff --git a/desktopRuntime/resources/sounds/random/explode.mp3 b/desktopRuntime/resources/sounds/random/explode.mp3 deleted file mode 100644 index 00bd150..0000000 Binary files a/desktopRuntime/resources/sounds/random/explode.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/explode.ogg b/desktopRuntime/resources/sounds/random/explode.ogg new file mode 100644 index 0000000..a414ea0 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode.ogg differ diff --git a/desktopRuntime/resources/sounds/random/explode1.ogg b/desktopRuntime/resources/sounds/random/explode1.ogg new file mode 100644 index 0000000..f2bd815 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode1.ogg differ diff --git a/desktopRuntime/resources/sounds/random/explode2.ogg b/desktopRuntime/resources/sounds/random/explode2.ogg new file mode 100644 index 0000000..99e7079 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode2.ogg differ diff --git a/desktopRuntime/resources/sounds/random/explode3.ogg b/desktopRuntime/resources/sounds/random/explode3.ogg new file mode 100644 index 0000000..c14c9ee Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode3.ogg differ diff --git a/desktopRuntime/resources/sounds/random/explode4.ogg b/desktopRuntime/resources/sounds/random/explode4.ogg new file mode 100644 index 0000000..ac2de2b Binary files /dev/null and b/desktopRuntime/resources/sounds/random/explode4.ogg differ diff --git a/desktopRuntime/resources/sounds/random/fizz.mp3 b/desktopRuntime/resources/sounds/random/fizz.mp3 deleted file mode 100644 index ee120fd..0000000 Binary files a/desktopRuntime/resources/sounds/random/fizz.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/fizz.ogg b/desktopRuntime/resources/sounds/random/fizz.ogg new file mode 100644 index 0000000..4beea2e Binary files /dev/null and b/desktopRuntime/resources/sounds/random/fizz.ogg differ diff --git a/desktopRuntime/resources/sounds/random/fuse.mp3 b/desktopRuntime/resources/sounds/random/fuse.mp3 deleted file mode 100644 index f098c6c..0000000 Binary files a/desktopRuntime/resources/sounds/random/fuse.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/fuse.ogg b/desktopRuntime/resources/sounds/random/fuse.ogg new file mode 100644 index 0000000..199f206 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/fuse.ogg differ diff --git a/desktopRuntime/resources/sounds/random/glass1.mp3 b/desktopRuntime/resources/sounds/random/glass1.mp3 deleted file mode 100644 index 18680d6..0000000 Binary files a/desktopRuntime/resources/sounds/random/glass1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/glass1.ogg b/desktopRuntime/resources/sounds/random/glass1.ogg new file mode 100644 index 0000000..a8dab85 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass1.ogg differ diff --git a/desktopRuntime/resources/sounds/random/glass2.mp3 b/desktopRuntime/resources/sounds/random/glass2.mp3 deleted file mode 100644 index fb08b8b..0000000 Binary files a/desktopRuntime/resources/sounds/random/glass2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/glass2.ogg b/desktopRuntime/resources/sounds/random/glass2.ogg new file mode 100644 index 0000000..3bd462d Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass2.ogg differ diff --git a/desktopRuntime/resources/sounds/random/glass3.mp3 b/desktopRuntime/resources/sounds/random/glass3.mp3 deleted file mode 100644 index 3e34621..0000000 Binary files a/desktopRuntime/resources/sounds/random/glass3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/glass3.ogg b/desktopRuntime/resources/sounds/random/glass3.ogg new file mode 100644 index 0000000..2577f40 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/glass3.ogg differ diff --git a/desktopRuntime/resources/sounds/random/hurt.mp3 b/desktopRuntime/resources/sounds/random/hurt.mp3 deleted file mode 100644 index 4fa55de..0000000 Binary files a/desktopRuntime/resources/sounds/random/hurt.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/hurt.ogg b/desktopRuntime/resources/sounds/random/hurt.ogg new file mode 100644 index 0000000..b4cbc12 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/hurt.ogg differ diff --git a/desktopRuntime/resources/sounds/random/levelup.ogg b/desktopRuntime/resources/sounds/random/levelup.ogg new file mode 100644 index 0000000..f18c203 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/levelup.ogg differ diff --git a/desktopRuntime/resources/sounds/random/old_explode.ogg b/desktopRuntime/resources/sounds/random/old_explode.ogg new file mode 100644 index 0000000..a414ea0 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/old_explode.ogg differ diff --git a/desktopRuntime/resources/sounds/random/orb.ogg b/desktopRuntime/resources/sounds/random/orb.ogg new file mode 100644 index 0000000..a38b2cc Binary files /dev/null and b/desktopRuntime/resources/sounds/random/orb.ogg differ diff --git a/desktopRuntime/resources/sounds/random/pop.mp3 b/desktopRuntime/resources/sounds/random/pop.mp3 deleted file mode 100644 index aaec450..0000000 Binary files a/desktopRuntime/resources/sounds/random/pop.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/pop.ogg b/desktopRuntime/resources/sounds/random/pop.ogg new file mode 100644 index 0000000..2890baf Binary files /dev/null and b/desktopRuntime/resources/sounds/random/pop.ogg differ diff --git a/desktopRuntime/resources/sounds/random/splash.mp3 b/desktopRuntime/resources/sounds/random/splash.mp3 deleted file mode 100644 index b9a5ef3..0000000 Binary files a/desktopRuntime/resources/sounds/random/splash.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/splash.ogg b/desktopRuntime/resources/sounds/random/splash.ogg new file mode 100644 index 0000000..8d91a23 Binary files /dev/null and b/desktopRuntime/resources/sounds/random/splash.ogg differ diff --git a/desktopRuntime/resources/sounds/random/wood click.mp3 b/desktopRuntime/resources/sounds/random/wood click.mp3 deleted file mode 100644 index 9185a51..0000000 Binary files a/desktopRuntime/resources/sounds/random/wood click.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/random/wood click.ogg b/desktopRuntime/resources/sounds/random/wood click.ogg new file mode 100644 index 0000000..2944f4c Binary files /dev/null and b/desktopRuntime/resources/sounds/random/wood click.ogg differ diff --git a/desktopRuntime/resources/sounds/step/cloth1.mp3 b/desktopRuntime/resources/sounds/step/cloth1.mp3 deleted file mode 100644 index 002c1ef..0000000 Binary files a/desktopRuntime/resources/sounds/step/cloth1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/cloth1.ogg b/desktopRuntime/resources/sounds/step/cloth1.ogg new file mode 100644 index 0000000..0ea73f8 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/cloth2.mp3 b/desktopRuntime/resources/sounds/step/cloth2.mp3 deleted file mode 100644 index 2dbab59..0000000 Binary files a/desktopRuntime/resources/sounds/step/cloth2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/cloth2.ogg b/desktopRuntime/resources/sounds/step/cloth2.ogg new file mode 100644 index 0000000..a607a9e Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/cloth3.mp3 b/desktopRuntime/resources/sounds/step/cloth3.mp3 deleted file mode 100644 index 89ab9ef..0000000 Binary files a/desktopRuntime/resources/sounds/step/cloth3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/cloth3.ogg b/desktopRuntime/resources/sounds/step/cloth3.ogg new file mode 100644 index 0000000..64b5ef9 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/cloth4.mp3 b/desktopRuntime/resources/sounds/step/cloth4.mp3 deleted file mode 100644 index dc9d828..0000000 Binary files a/desktopRuntime/resources/sounds/step/cloth4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/cloth4.ogg b/desktopRuntime/resources/sounds/step/cloth4.ogg new file mode 100644 index 0000000..b65ed79 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/cloth4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/grass1.mp3 b/desktopRuntime/resources/sounds/step/grass1.mp3 deleted file mode 100644 index ed6c94e..0000000 Binary files a/desktopRuntime/resources/sounds/step/grass1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/grass1.ogg b/desktopRuntime/resources/sounds/step/grass1.ogg new file mode 100644 index 0000000..12f5751 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/grass2.mp3 b/desktopRuntime/resources/sounds/step/grass2.mp3 deleted file mode 100644 index f8590e5..0000000 Binary files a/desktopRuntime/resources/sounds/step/grass2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/grass2.ogg b/desktopRuntime/resources/sounds/step/grass2.ogg new file mode 100644 index 0000000..05dff55 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/grass3.mp3 b/desktopRuntime/resources/sounds/step/grass3.mp3 deleted file mode 100644 index 18087db..0000000 Binary files a/desktopRuntime/resources/sounds/step/grass3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/grass3.ogg b/desktopRuntime/resources/sounds/step/grass3.ogg new file mode 100644 index 0000000..e792b34 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/grass4.mp3 b/desktopRuntime/resources/sounds/step/grass4.mp3 deleted file mode 100644 index 5cd8d8a..0000000 Binary files a/desktopRuntime/resources/sounds/step/grass4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/grass4.ogg b/desktopRuntime/resources/sounds/step/grass4.ogg new file mode 100644 index 0000000..8421e6a Binary files /dev/null and b/desktopRuntime/resources/sounds/step/grass4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/gravel1.mp3 b/desktopRuntime/resources/sounds/step/gravel1.mp3 deleted file mode 100644 index c50dcc2..0000000 Binary files a/desktopRuntime/resources/sounds/step/gravel1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/gravel1.ogg b/desktopRuntime/resources/sounds/step/gravel1.ogg new file mode 100644 index 0000000..97ae71e Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/gravel2.mp3 b/desktopRuntime/resources/sounds/step/gravel2.mp3 deleted file mode 100644 index 33d1818..0000000 Binary files a/desktopRuntime/resources/sounds/step/gravel2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/gravel2.ogg b/desktopRuntime/resources/sounds/step/gravel2.ogg new file mode 100644 index 0000000..5133141 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/gravel3.mp3 b/desktopRuntime/resources/sounds/step/gravel3.mp3 deleted file mode 100644 index b4633d6..0000000 Binary files a/desktopRuntime/resources/sounds/step/gravel3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/gravel3.ogg b/desktopRuntime/resources/sounds/step/gravel3.ogg new file mode 100644 index 0000000..1b8debd Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/gravel4.mp3 b/desktopRuntime/resources/sounds/step/gravel4.mp3 deleted file mode 100644 index dab12d7..0000000 Binary files a/desktopRuntime/resources/sounds/step/gravel4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/gravel4.ogg b/desktopRuntime/resources/sounds/step/gravel4.ogg new file mode 100644 index 0000000..94a0c1c Binary files /dev/null and b/desktopRuntime/resources/sounds/step/gravel4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/sand1.mp3 b/desktopRuntime/resources/sounds/step/sand1.mp3 deleted file mode 100644 index 0f6da6f..0000000 Binary files a/desktopRuntime/resources/sounds/step/sand1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/sand1.ogg b/desktopRuntime/resources/sounds/step/sand1.ogg new file mode 100644 index 0000000..e9cb62d Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/sand2.mp3 b/desktopRuntime/resources/sounds/step/sand2.mp3 deleted file mode 100644 index aa3bc6c..0000000 Binary files a/desktopRuntime/resources/sounds/step/sand2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/sand2.ogg b/desktopRuntime/resources/sounds/step/sand2.ogg new file mode 100644 index 0000000..ce2eeb0 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/sand3.mp3 b/desktopRuntime/resources/sounds/step/sand3.mp3 deleted file mode 100644 index daa955e..0000000 Binary files a/desktopRuntime/resources/sounds/step/sand3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/sand3.ogg b/desktopRuntime/resources/sounds/step/sand3.ogg new file mode 100644 index 0000000..c94fc1b Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/sand4.mp3 b/desktopRuntime/resources/sounds/step/sand4.mp3 deleted file mode 100644 index 6bfedfc..0000000 Binary files a/desktopRuntime/resources/sounds/step/sand4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/sand4.ogg b/desktopRuntime/resources/sounds/step/sand4.ogg new file mode 100644 index 0000000..ae2d818 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/sand4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/snow1.mp3 b/desktopRuntime/resources/sounds/step/snow1.mp3 deleted file mode 100644 index 5134ec2..0000000 Binary files a/desktopRuntime/resources/sounds/step/snow1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/snow1.ogg b/desktopRuntime/resources/sounds/step/snow1.ogg new file mode 100644 index 0000000..f8d92e9 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/snow2.mp3 b/desktopRuntime/resources/sounds/step/snow2.mp3 deleted file mode 100644 index f092071..0000000 Binary files a/desktopRuntime/resources/sounds/step/snow2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/snow2.ogg b/desktopRuntime/resources/sounds/step/snow2.ogg new file mode 100644 index 0000000..b75843d Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/snow3.mp3 b/desktopRuntime/resources/sounds/step/snow3.mp3 deleted file mode 100644 index 23fa8ef..0000000 Binary files a/desktopRuntime/resources/sounds/step/snow3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/snow3.ogg b/desktopRuntime/resources/sounds/step/snow3.ogg new file mode 100644 index 0000000..b739c4d Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/snow4.mp3 b/desktopRuntime/resources/sounds/step/snow4.mp3 deleted file mode 100644 index dce2cbd..0000000 Binary files a/desktopRuntime/resources/sounds/step/snow4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/snow4.ogg b/desktopRuntime/resources/sounds/step/snow4.ogg new file mode 100644 index 0000000..6290af2 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/snow4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/stone1.mp3 b/desktopRuntime/resources/sounds/step/stone1.mp3 deleted file mode 100644 index 007494f..0000000 Binary files a/desktopRuntime/resources/sounds/step/stone1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/stone1.ogg b/desktopRuntime/resources/sounds/step/stone1.ogg new file mode 100644 index 0000000..746d282 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/stone2.mp3 b/desktopRuntime/resources/sounds/step/stone2.mp3 deleted file mode 100644 index af36ebc..0000000 Binary files a/desktopRuntime/resources/sounds/step/stone2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/stone2.ogg b/desktopRuntime/resources/sounds/step/stone2.ogg new file mode 100644 index 0000000..333c970 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/stone3.mp3 b/desktopRuntime/resources/sounds/step/stone3.mp3 deleted file mode 100644 index ecb1eb9..0000000 Binary files a/desktopRuntime/resources/sounds/step/stone3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/stone3.ogg b/desktopRuntime/resources/sounds/step/stone3.ogg new file mode 100644 index 0000000..f8b629f Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/stone4.mp3 b/desktopRuntime/resources/sounds/step/stone4.mp3 deleted file mode 100644 index 9450f00..0000000 Binary files a/desktopRuntime/resources/sounds/step/stone4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/stone4.ogg b/desktopRuntime/resources/sounds/step/stone4.ogg new file mode 100644 index 0000000..d705cf3 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/stone4.ogg differ diff --git a/desktopRuntime/resources/sounds/step/wood1.mp3 b/desktopRuntime/resources/sounds/step/wood1.mp3 deleted file mode 100644 index 32c134d..0000000 Binary files a/desktopRuntime/resources/sounds/step/wood1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/wood1.ogg b/desktopRuntime/resources/sounds/step/wood1.ogg new file mode 100644 index 0000000..f9a474a Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood1.ogg differ diff --git a/desktopRuntime/resources/sounds/step/wood2.mp3 b/desktopRuntime/resources/sounds/step/wood2.mp3 deleted file mode 100644 index e99c496..0000000 Binary files a/desktopRuntime/resources/sounds/step/wood2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/wood2.ogg b/desktopRuntime/resources/sounds/step/wood2.ogg new file mode 100644 index 0000000..b55d49b Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood2.ogg differ diff --git a/desktopRuntime/resources/sounds/step/wood3.mp3 b/desktopRuntime/resources/sounds/step/wood3.mp3 deleted file mode 100644 index 67a0487..0000000 Binary files a/desktopRuntime/resources/sounds/step/wood3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/wood3.ogg b/desktopRuntime/resources/sounds/step/wood3.ogg new file mode 100644 index 0000000..61922ae Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood3.ogg differ diff --git a/desktopRuntime/resources/sounds/step/wood4.mp3 b/desktopRuntime/resources/sounds/step/wood4.mp3 deleted file mode 100644 index 481516a..0000000 Binary files a/desktopRuntime/resources/sounds/step/wood4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/step/wood4.ogg b/desktopRuntime/resources/sounds/step/wood4.ogg new file mode 100644 index 0000000..f5a02c5 Binary files /dev/null and b/desktopRuntime/resources/sounds/step/wood4.ogg differ diff --git a/desktopRuntime/resources/sounds/tile/piston/in.mp3 b/desktopRuntime/resources/sounds/tile/piston/in.mp3 deleted file mode 100644 index a3d69ca..0000000 Binary files a/desktopRuntime/resources/sounds/tile/piston/in.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/tile/piston/in.ogg b/desktopRuntime/resources/sounds/tile/piston/in.ogg new file mode 100644 index 0000000..9657848 Binary files /dev/null and b/desktopRuntime/resources/sounds/tile/piston/in.ogg differ diff --git a/desktopRuntime/resources/sounds/tile/piston/out.mp3 b/desktopRuntime/resources/sounds/tile/piston/out.mp3 deleted file mode 100644 index 0a84b38..0000000 Binary files a/desktopRuntime/resources/sounds/tile/piston/out.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/tile/piston/out.ogg b/desktopRuntime/resources/sounds/tile/piston/out.ogg new file mode 100644 index 0000000..b07587f Binary files /dev/null and b/desktopRuntime/resources/sounds/tile/piston/out.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart1.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart1.mp3 deleted file mode 100644 index fbf50f6..0000000 Binary files a/desktopRuntime/resources/sounds/vehicle/minecart1.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart1.ogg b/desktopRuntime/resources/sounds/vehicle/minecart1.ogg new file mode 100644 index 0000000..68fc1e9 Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart1.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart2.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart2.mp3 deleted file mode 100644 index c86cf01..0000000 Binary files a/desktopRuntime/resources/sounds/vehicle/minecart2.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart2.ogg b/desktopRuntime/resources/sounds/vehicle/minecart2.ogg new file mode 100644 index 0000000..2611c2e Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart2.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart3.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart3.mp3 deleted file mode 100644 index e8e046d..0000000 Binary files a/desktopRuntime/resources/sounds/vehicle/minecart3.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart3.ogg b/desktopRuntime/resources/sounds/vehicle/minecart3.ogg new file mode 100644 index 0000000..6857838 Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart3.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart4.mp3 b/desktopRuntime/resources/sounds/vehicle/minecart4.mp3 deleted file mode 100644 index 28e6e76..0000000 Binary files a/desktopRuntime/resources/sounds/vehicle/minecart4.mp3 and /dev/null differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart4.ogg b/desktopRuntime/resources/sounds/vehicle/minecart4.ogg new file mode 100644 index 0000000..3e8bf8d Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart4.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart5.ogg b/desktopRuntime/resources/sounds/vehicle/minecart5.ogg new file mode 100644 index 0000000..d78644a Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart5.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart6.ogg b/desktopRuntime/resources/sounds/vehicle/minecart6.ogg new file mode 100644 index 0000000..b439e73 Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart6.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart7.ogg b/desktopRuntime/resources/sounds/vehicle/minecart7.ogg new file mode 100644 index 0000000..07f7d4f Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart7.ogg differ diff --git a/desktopRuntime/resources/sounds/vehicle/minecart8.ogg b/desktopRuntime/resources/sounds/vehicle/minecart8.ogg new file mode 100644 index 0000000..2a09ef5 Binary files /dev/null and b/desktopRuntime/resources/sounds/vehicle/minecart8.ogg differ diff --git a/resources/META-INF/MANIFEST.MF b/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 1f9b8a7..0000000 --- a/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,1776 +0,0 @@ -Manifest-Version: 1.0 -Created-By: 1.6.0_22 (Sun Microsystems Inc.) - -Name: dc.class -SHA1-Digest: 9jARFlIKfuEGFFoYDOEjrqZSh9s= - -Name: ns.class -SHA1-Digest: KbBWKRobkEjzdfUWAMBAsS9zJrE= - -Name: r.class -SHA1-Digest: nGB38BM/SHo5bxihP3PGuAWQAUA= - -Name: gu.class -SHA1-Digest: 0MS6moR4cN+BPeLO3Mob6BWzAAA= - -Name: gl.class -SHA1-Digest: r8Ooc+NDq7+v49dKObUqNOV3Pp4= - -Name: ki.class -SHA1-Digest: VIqs5mjhbKD33w9oTNgSHUH18JE= - -Name: s.class -SHA1-Digest: cvLRVQmfhCRFVjQMtdq4LYf5aJw= - -Name: mob/spider.png -SHA1-Digest: VfPrCa+PWJ8sbbk6togxQiGTDZo= - -Name: jp.class -SHA1-Digest: oTJ5yErH+M853RUFd6xs4P1SxL8= - -Name: hn.class -SHA1-Digest: UZhVS2yWT3Nqwyp71VXGY9P81mo= - -Name: mb.class -SHA1-Digest: yc/UAwfT3p3ohEfeIhsK9KXglhE= - -Name: hw.class -SHA1-Digest: ePaBc1xDxf5JzCrCkkYFKOXRaJQ= - -Name: com/jcraft/jorbis/Residue0$LookResidue0.class -SHA1-Digest: 5IOKkvXQZ7zdNtGxP2uDFrdQ/vo= - -Name: hu.class -SHA1-Digest: 4fhJOVg5/wJkfgf95Ym2EmY0ij0= - -Name: lm.class -SHA1-Digest: hyi0mBcB6qmcaT/UUNRj1n3udos= - -Name: ex.class -SHA1-Digest: hhmcDsHdbrUsBEZZBjuV4qmzEaM= - -Name: bu.class -SHA1-Digest: 3r6xXEfTtT6bcObMnuZLGFsEpOE= - -Name: jh.class -SHA1-Digest: kfxD1xQvrhk1xTAU7cPG39EpmSw= - -Name: gq.class -SHA1-Digest: hC+ng2uzcIHWBROJI2tAwBLC5os= - -Name: paulscode/sound/MidiChannel$1.class -SHA1-Digest: AFyBcx7tO6R2hJHWykXlp8xfkQU= - -Name: fc.class -SHA1-Digest: a2pUZ+5lwJxgx8tbAY1M3D3Ggt0= - -Name: a.class -SHA1-Digest: G6DTc8Q+41/EgIUi7xfgzP6DgEM= - -Name: item/arrows.png -SHA1-Digest: moAHRC2YmEi5jR+688Gvp1bSdS8= - -Name: fi.class -SHA1-Digest: ocYq4hVgtysWHVVsLNuYCrOUSzU= - -Name: iv.class -SHA1-Digest: X6uoprrgLM+/bMJ8ghHG9AeqLsQ= - -Name: bx.class -SHA1-Digest: 7RjsQtUSnRVTzv2rAGRm7Y0QFO0= - -Name: kl.class -SHA1-Digest: PBGq/M8VTWJqC3BLToxFz8Wcs/k= - -Name: il.class -SHA1-Digest: E9Ry/etrSbkQt/NzQ7vY/2YAJ70= - -Name: paulscode/sound/FilenameURL.class -SHA1-Digest: PBsVGXVZH25gu5nFIpXZ3TafZW4= - -Name: dh.class -SHA1-Digest: hKfoSvx5KctfYTkOYFmFRFoUD4A= - -Name: mob/pigzombie.png -SHA1-Digest: LETxHfZ185sIlXS1g8v0H9Q5RUs= - -Name: pw.class -SHA1-Digest: NHJTr6KewW9tl/Ys/uxkN0blqMs= - -Name: bn.class -SHA1-Digest: LCpLp/Vcgm+z8+oRyH28uNBbKXI= - -Name: cc.class -SHA1-Digest: 4WHt+vAJbiEWXsuBKmZ3hEPN8+c= - -Name: hj.class -SHA1-Digest: 8qIGrtW1OwYr3bhDMs68Z5MWjMM= - -Name: gn.class -SHA1-Digest: wy+B7zoTT7rtI/dyXEzEK++RP7A= - -Name: mp.class -SHA1-Digest: CXiEPAJSqny+ENlKbpWox9foIaY= - -Name: ol.class -SHA1-Digest: R4yzDSgfAq0HUi6xloe+Oj5SZiw= - -Name: d.class -SHA1-Digest: mhdlF8vyhzTCtBTfjWEvoU15+c8= - -Name: gx.class -SHA1-Digest: BbONQrLDCU8jqpf68H8wLLG3AR0= - -Name: dt.class -SHA1-Digest: xJLCttDUOTsVlmt1IRlKPJvYQ0Y= - -Name: com/jcraft/jorbis/Comment.class -SHA1-Digest: Wfvped19gCPvvbAOl+htBhiVTC8= - -Name: ky.class -SHA1-Digest: Pk6LVblBzISCC3yHoFJdszARsHk= - -Name: fo.class -SHA1-Digest: 7iWnZZliCIoX84k6nzxe+Neq5ho= - -Name: paulscode/sound/ICodec.class -SHA1-Digest: 5z7i/EpC49Y8jyNH1jVWKxZB3gU= - -Name: iu.class -SHA1-Digest: 57DZl2QKGrAjXkbd9oHJO3WjY5w= - -Name: l.class -SHA1-Digest: IgPgA20CsJPKwurrQJRtMiL3Sjk= - -Name: lc.class -SHA1-Digest: Nn9NQxMHFpiQw2lHbCUXFQu7OUw= - -Name: gui/inventory.png -SHA1-Digest: bEfElGShH3Lyjm3xUIj8f+wYnzE= - -Name: bh.class -SHA1-Digest: 9E/C+o8ufv+ux7WrDE/a4h/FDkM= - -Name: kd.class -SHA1-Digest: qP4oNgDytI8OZgx3cLMKwhr+Ydc= - -Name: title/black.png -SHA1-Digest: F5YD+u+qUoA84jX206CpsgHfRYE= - -Name: et.class -SHA1-Digest: hk+cl9c/bMCc82X9uK12pWF+xyE= - -Name: qf.class -SHA1-Digest: 92Y6mJNkIJrk+q5jcBBVUF9Q/Qw= - -Name: pp.class -SHA1-Digest: IigujosXPQLyelYCfarZ48hYieg= - -Name: ql.class -SHA1-Digest: 1nfa5pnTT75n/1Y5LbfgV3duWFQ= - -Name: jw.class -SHA1-Digest: u7WMM/8wYriRtsVa9bHb9pTsfAk= - -Name: com/jcraft/jorbis/FuncResidue.class -SHA1-Digest: HfLTxLt7UphuCCMzin89wWEsKQk= - -Name: dr.class -SHA1-Digest: RERX6j0/HuVtyjxHJZDuqSuLJq4= - -Name: cs.class -SHA1-Digest: i2kEUgFHNWmRa3fLTQJsWCX29k8= - -Name: hc.class -SHA1-Digest: YO3DVw6gdpEmIVpYRAC7tiNGESM= - -Name: ny.class -SHA1-Digest: ryZpNQA+TbbYl8DFz4b9UoJ+aEg= - -Name: com/jcraft/jorbis/Residue1.class -SHA1-Digest: wYDh+AMEiy4MRZecDH2pA0z0ql0= - -Name: pn.class -SHA1-Digest: JC6Wo0I5sKoSpIZ34CrnmFJT3aE= - -Name: aa.class -SHA1-Digest: 7KyJF5hf6xOWF9DNoS3uQsfV/74= - -Name: n.class -SHA1-Digest: DztEtgKAFQnTRxP3lYU7Npkn/50= - -Name: ef.class -SHA1-Digest: PHs2ya+ljkPhihFF+xuZInKpH7w= - -Name: be.class -SHA1-Digest: 881xARCjlLAO2s0j9lG2XcKJ8dw= - -Name: bc.class -SHA1-Digest: iPaICuUUTJunY5CXP3kr/SkgD94= - -Name: kr.class -SHA1-Digest: c98Dy8S5yBto3oTX7w2yS3JQC0Y= - -Name: paulscode/sound/Library.class -SHA1-Digest: 75v1Kn3G5krkUHGGZtFojyNS7oc= - -Name: ir.class -SHA1-Digest: 6EU+QBbrDQczJidqwqx0AyW6QdU= - -Name: ft.class -SHA1-Digest: NRzI4L0h3QyJh6sbjcsNBl/Pu1U= - -Name: jl.class -SHA1-Digest: /OK0o7HaIonKqiz+204dWJWuJzo= - -Name: jv.class -SHA1-Digest: YyzrFwd0ShTPdhU/6PlakJY+XCI= - -Name: com/jcraft/jorbis/Mapping0.class -SHA1-Digest: TuGkQ0GDJ7wG1KzHtmMbsYaKjhY= - -Name: mob/slime.png -SHA1-Digest: NIyCL1+Xs0nDxfNk1ukuaoWtHcc= - -Name: ml.class -SHA1-Digest: ehWOC0mGKqOuPa/zLxlY00f9GzU= - -Name: art/kz.png -SHA1-Digest: Kk1yUIBdNZfGhhdOWU4eLfL2ngU= - -Name: bb.class -SHA1-Digest: NUf3UCaAXMcapNaI5MPQFtajQw4= - -Name: nl.class -SHA1-Digest: C570LmPyc855U4cFTNjzTJJqnto= - -Name: ly.class -SHA1-Digest: Xcm5jvUYJKkzJoH3pzRnAnqJ7so= - -Name: com/jcraft/jorbis/CodeBook.class -SHA1-Digest: biNcF7BEkvBtcuSuN46jdwlp4eg= - -Name: paulscode/sound/ListenerData.class -SHA1-Digest: 7y3vFDVaL9kK6onlkUtt/85OofU= - -Name: mm.class -SHA1-Digest: 49YSvK2sQQ0NcIGSjNeupAWG8ks= - -Name: go.class -SHA1-Digest: 964u1IBngLJwubW7sKcUe9FfAmI= - -Name: pa.class -SHA1-Digest: SFn13E4TyYNJ4OUZJji1AqcdHzA= - -Name: gb.class -SHA1-Digest: cFAfuQM8WIcuGheveDYS7SU949Q= - -Name: de.class -SHA1-Digest: mljzFBORahDWzGwiXLQaujo1g6E= - -Name: gj.class -SHA1-Digest: pTpZR0+Yh+MfZPgjNIF7owfuabk= - -Name: dn.class -SHA1-Digest: k3+HQv3ZCd4/Xc+Q0sXje1v6nXQ= - -Name: fk.class -SHA1-Digest: ypML7ZMYo4oXzdBBdGSjdKTzUT0= - -Name: com/jcraft/jorbis/Residue2.class -SHA1-Digest: n6FIaoI1nwZOhlpCXFCtwxij0ZE= - -Name: terrain/moon.png -SHA1-Digest: SDIpawrYTACa3ShpzcTIQtnsck4= - -Name: ew.class -SHA1-Digest: sXOWwo87KBMck4REc6yffHRtL3Q= - -Name: pi.class -SHA1-Digest: CzY4vlcTFuSIXL5hBDg4TzcT93g= - -Name: ma.class -SHA1-Digest: 4QPjeOVmK3riNBpHW48nwY7DKaQ= - -Name: nc.class -SHA1-Digest: LIXzLMLgKIkq/MJWrGhZWeiC+eg= - -Name: misc/dial.png -SHA1-Digest: WteKszpkoUNHlxdSxnt89gJ4twU= - -Name: at.class -SHA1-Digest: FHM0RY15tXijxMSBZ3L2sJrDdU8= - -Name: na.class -SHA1-Digest: GANG0nYm5KvhKjhleY8IBDwdmv8= - -Name: ba.class -SHA1-Digest: lU5VkHv+C+f13JZpkXlzzxVWVYg= - -Name: jk.class -SHA1-Digest: nKxbVL+e9cnZH8cxq5PUV6CsbfQ= - -Name: environment/clouds.png -SHA1-Digest: HtJx4+gThjxj54jGeXnNmxmW7o0= - -Name: ay.class -SHA1-Digest: Sxn+3Fxz1QDTY3kqb+KH3T6TW9Q= - -Name: m.class -SHA1-Digest: OFKC77IQOMORf/5xLtEKkeKXsOc= - -Name: com/jcraft/jorbis/Floor1$Lsfit_acc.class -SHA1-Digest: MfhxP8jDTRdkiI7KOQXY+wsLePc= - -Name: mob/spider_eyes.png -SHA1-Digest: 30MeaE6D/w4aOZw2BHxe98tnq1E= - -Name: ls.class -SHA1-Digest: 6D4pjbJIsUOeGVuYLc8XAqFH30k= - -Name: lg.class -SHA1-Digest: 3VOtw2rhKSZH2UtSZ/VhK00230w= - -Name: mf.class -SHA1-Digest: wZewuYn40aIBBC+pz0RRJ70OgX8= - -Name: paulscode/sound/SoundSystem.class -SHA1-Digest: RlfS3Nx0lIROKyao7rOUiRUS8pQ= - -Name: fb.class -SHA1-Digest: m6mHVw60PKkmHiZptj1BASJJboU= - -Name: em.class -SHA1-Digest: P7YECU9ufYeXimILLok/uRq//SE= - -Name: lv.class -SHA1-Digest: HPz5NcPxqvwucEGC+BmJRZBbDiw= - -Name: hy.class -SHA1-Digest: UChTrdX/KSP7Ekac/nhsG5XV8js= - -Name: ga.class -SHA1-Digest: 9BULWTJ4HPyZUv1OM1eyQeLBl9M= - -Name: paulscode/sound/CommandObject.class -SHA1-Digest: Tg7G5tIkUYmfcdUASCx63GFfHpY= - -Name: lh.class -SHA1-Digest: D0XbuCs2e2m9WHJzJQhZ0iVbgDs= - -Name: aj.class -SHA1-Digest: ip2F00ED7QZSF/XZxHGYeZT5tLU= - -Name: ff.class -SHA1-Digest: L2Qy93U0hD1iAg4sVsM1t73zmgY= - -Name: pm.class -SHA1-Digest: /qbl9bSahT2EOMnwidc/p/gmrj8= - -Name: oc.class -SHA1-Digest: InCYdgQXfAQdgH1/wabL5lDYGiw= - -Name: di.class -SHA1-Digest: SZxyzeau7dDPP5W2DTAyQU8ODSE= - -Name: ip.class -SHA1-Digest: rremLa2Xj+D32P34Vwzj73Iy/m8= - -Name: pg.class -SHA1-Digest: TKVbLYBTvZDuzGZTw1TNQos4QXc= - -Name: hs.class -SHA1-Digest: h1X3GgTMpDTv7Y5KJFPretzo5nM= - -Name: ig.class -SHA1-Digest: PRzmpPBY0vdlUsmR095Heya3G/M= - -Name: net/minecraft/client/MinecraftApplet.class -SHA1-Digest: xE2AvIE4AOvcLBAMoUkkLFCaPxI= - -Name: cb.class -SHA1-Digest: 1nuKNKG2aN4OdOn8U2L3cTPfAoE= - -Name: armor/cloth_2.png -SHA1-Digest: rLjWgIiUGP7Y6od62FZqqeB/vaA= - -Name: lr.class -SHA1-Digest: g8e9bgMUoueuvM2CXokng2NaO7E= - -Name: mob/zombie.png -SHA1-Digest: FcMQrfVTy+3DLbWmNt19tcrs//w= - -Name: misc/pumpkinblur.png -SHA1-Digest: MN/YugY2yNxZbaRlgAFJ2/Q9/wU= - -Name: cr.class -SHA1-Digest: cIt2DNuQt+XtAYO+yzHAN+wvWVo= - -Name: kx.class -SHA1-Digest: hy5iI1WkH9F5nxXzZ29UXpQEng8= - -Name: com/jcraft/jorbis/Floor1.class -SHA1-Digest: +XTuHoau6RfMD57HMP44Vd6vr3A= - -Name: v.class -SHA1-Digest: Xo83t+HERuU2FZRNHdKXbWOU9NQ= - -Name: pq.class -SHA1-Digest: Welv9fBezm2lIzq/jqoNWVfOPlI= - -Name: pj.class -SHA1-Digest: j7Cm/sPjj7zJSz18fiLt/4tk3zM= - -Name: en.class -SHA1-Digest: iszdpfp3D6p5Hb6nLQ46guTbZoQ= - -Name: mob/saddle.png -SHA1-Digest: R/XNcO9SOQbvm/296+y3c+himyA= - -Name: ot.class -SHA1-Digest: VIgcUvfAQ4/KK+glAvhiFFy3KG8= - -Name: ce.class -SHA1-Digest: I99qbB4cgFHHyfiwsFUHmvoEhyE= - -Name: net/minecraft/client/Minecraft.class -SHA1-Digest: xU9ySlcxTxlu8AkK23Wwfsm9T7A= - -Name: paulscode/sound/Source.class -SHA1-Digest: 3hDMd2Mdtws03ApSlZznmN4M+8I= - -Name: paulscode/sound/SoundSystemLogger.class -SHA1-Digest: 2kJAKCH6nEaKavwctc3MV3ihYis= - -Name: gui/container.png -SHA1-Digest: s4IxEeI0il8FV4xtSwRXr1emQ/Q= - -Name: misc/vignette.png -SHA1-Digest: SD5wUOuOOQHDtGxOcBaMOUt4ELI= - -Name: gz.class -SHA1-Digest: +F6o2+qmI9VmBusV7tUuR4mtzdI= - -Name: oh.class -SHA1-Digest: ZxoTeW5DHT6s14c+qUKw5991LAQ= - -Name: ds.class -SHA1-Digest: Ph/rKAh1gaPc7jJJsWeWygrLJ5A= - -Name: qe.class -SHA1-Digest: vrKio/Bx+hUmVLhveyTokwj45u0= - -Name: er.class -SHA1-Digest: OqymEyESlied4u0WqN5nE2FfJW0= - -Name: db.class -SHA1-Digest: N3PMNX7/rvYO8ioLzSxRrltvJLA= - -Name: com/jcraft/jorbis/Floor0$LookFloor0.class -SHA1-Digest: aV3r97cSwTWpWrVYTgHMKg+31wA= - -Name: oe.class -SHA1-Digest: 2B2Thlc6Yu5p8DwONPx4ep/IzFg= - -Name: gui/icons.png -SHA1-Digest: 3d7hw+UskcGywysCm8Pe0kd9chg= - -Name: hb.class -SHA1-Digest: fstaXhgEOoHTS6su6R8S8yM+nus= - -Name: bg.class -SHA1-Digest: qu+FUyEHUMo3evzYdEcb4/88TC8= - -Name: hr.class -SHA1-Digest: yUjquv+fv2+yzzQdYuSEqt3kdgU= - -Name: bd.class -SHA1-Digest: Zi1SukkK0Kg2s3/KD8h/VqKw/CE= - -Name: ai.class -SHA1-Digest: Yao7gQg5MYnmayACYhzBnypvdFU= - -Name: com/jcraft/jorbis/Floor0$InfoFloor0.class -SHA1-Digest: gqAA/0+xC3QXgZcXmSUlsXnZeBI= - -Name: jq.class -SHA1-Digest: SswGh0/ymsfwagWJk0plfjJ4Gtg= - -Name: mq.class -SHA1-Digest: TSTuokyAeodKQg8mJET/H4/3/BE= - -Name: bm.class -SHA1-Digest: 69mSniAr6PwTNBUR6k4nt3A52b8= - -Name: ao.class -SHA1-Digest: iaRXgiDlodZdphBI8HkwdCYmp3Q= - -Name: jg.class -SHA1-Digest: jWnrfVf8G+ORK5agNT98lDf5Whk= - -Name: fs.class -SHA1-Digest: alN9Zbz1W9vIi4Np8t4uc6x48MQ= - -Name: lj.class -SHA1-Digest: 6VIvA1v/bMsEML+78LMMBx7i+L4= - -Name: particles.png -SHA1-Digest: Cq1yeQc9fhsz9QSLcnZRQUNyPTU= - -Name: oq.class -SHA1-Digest: JHb5Tskog8YjrvolABTJFvx0uVQ= - -Name: dv.class -SHA1-Digest: qpSemy8fqKdPNOaKaOcdyo8tJU8= - -Name: mob/creeper.png -SHA1-Digest: 3HtuKTBjFiOMuk8NXG6vQCQtMVA= - -Name: mob/chicken.png -SHA1-Digest: xxH+S0xuPfLFkqetSCvlhMz7pec= - -Name: bt.class -SHA1-Digest: qbMKEPTcVGo6ZQXFY5GW6G93kzI= - -Name: gui/gui.png -SHA1-Digest: gRdhQou4Hz7VsKfsMQAzIyCdFg0= - -Name: ko.class -SHA1-Digest: E1JvIg8QhRXA4chiAHtLl3oVZ2k= - -Name: cu.class -SHA1-Digest: 5koTXjXnwussIQ/2JZpoBbw74Hk= - -Name: j.class -SHA1-Digest: G29xO68GWijsc9JXEiAg5QTbVBU= - -Name: nm.class -SHA1-Digest: pFZm59dhydczQGAfoX17KzOkyq8= - -Name: cn.class -SHA1-Digest: FzyXxZ5RmzEjsbets3nnHgzBvPY= - -Name: com/jcraft/jorbis/Util.class -SHA1-Digest: pGkpiZgMWfooqa8ikJxOkW5vmuU= - -Name: paulscode/sound/SimpleThread.class -SHA1-Digest: vEDVQJEXlMk76GMcPsfkLkz1BgE= - -Name: nn.class -SHA1-Digest: z1O4ivnKnLfCbVQT3kqVXq63t8k= - -Name: ep.class -SHA1-Digest: dfCB76O7kYMFa90dRX8BHaZe8vM= - -Name: od.class -SHA1-Digest: 3tZSTmdYjFb8x+ie6lDLgKlJFbA= - -Name: pack.txt -SHA1-Digest: 3EKjInVcfn3Wn8KG5d7Igu/jBfM= - -Name: nz.class -SHA1-Digest: mw0D/pkcd2Yj17wPU0vAqH2JkyY= - -Name: g.class -SHA1-Digest: 234YXHNBdGztccPPc8SiZMwrPiQ= - -Name: gui/logo.png -SHA1-Digest: VrsKWcrukW60B8Oi5N7vsINm2bU= - -Name: com/jcraft/jorbis/PsyInfo.class -SHA1-Digest: Ez9EQLkyxPhvJb2WM0m0w4eWPG0= - -Name: q.class -SHA1-Digest: RKoVP+NNghgzKlbBieL+ZxAv4cA= - -Name: hm.class -SHA1-Digest: vyBofCAHzhWRa1Cn8f0UZzUadCk= - -Name: br.class -SHA1-Digest: trc+ZlyhRBXyYMTvgaaQKUz8cTY= - -Name: qk.class -SHA1-Digest: Xnin30qln6a3fiW0cKZDOj5YaRE= - -Name: ib.class -SHA1-Digest: SJje74t7Vm7LUcoX4UQKAiAP34c= - -Name: in.class -SHA1-Digest: K5IqnCbQaIzYJ9iq25HuaamTaMM= - -Name: b.class -SHA1-Digest: qpT+3JiqbpUmqryfOt17icT73aQ= - -Name: fr.class -SHA1-Digest: ojzj+pe5Flfugsi+EJJyIFs6jnE= - -Name: paulscode/sound/Vector3D.class -SHA1-Digest: wPOifqaxmnFE/smMjXY0xnzv/0A= - -Name: jy.class -SHA1-Digest: X8X410JDAlG/dPnHFgotFgSni0g= - -Name: po.class -SHA1-Digest: AjQDzfSgasrZ8nVGXsDcNCQPquo= - -Name: t.class -SHA1-Digest: tJY3+FQbLdPJCYOj5tJRoD7kIOM= - -Name: dd.class -SHA1-Digest: 1XKdNhG6pxdaak0mIQBVC4offeY= - -Name: gui/background.png -SHA1-Digest: Tj5g6xm/Asnn8FmrzIyNN26+r8w= - -Name: null -SHA1-Digest: 2jmj7l5rSw0yVb/vlWAYkK/YBwk= - -Name: ge.class -SHA1-Digest: +EqUZ9u83ANb35eZGbhiIwsBnN8= - -Name: armor/chain_1.png -SHA1-Digest: kjVR+O9K/uHjjos6pVmhxzKWvHI= - -Name: ei.class -SHA1-Digest: B+y7o7dLB801cT9No5adIjv4xO0= - -Name: dl.class -SHA1-Digest: O2/ZL058ceIUbIC/dSnLOt34nsI= - -Name: mob/char.png -SHA1-Digest: 9fkV0U8Uc0ecQ5YqOnJUqbGgNGA= - -Name: fl.class -SHA1-Digest: cBzH+9XGaNEeq+B/m6QhnBadxm4= - -Name: kf.class -SHA1-Digest: iasgOdyQce3J8fQCuoORFiFU95o= - -Name: mu.class -SHA1-Digest: 7unOUEJ6rfiBuDTpXDVFZjl9Lo0= - -Name: fx.class -SHA1-Digest: 0tGSOJZ7Ku2lGJpFPi0JLELgkbw= - -Name: as.class -SHA1-Digest: bLxVkDOvzdgkn3C1/vNgCdVTDl4= - -Name: dj.class -SHA1-Digest: SKbR/E8FwPNjauaWE3RCx+wD598= - -Name: ho.class -SHA1-Digest: NOCn8GdEV1ACg237Eg+sFchlDcA= - -Name: com/jcraft/jorbis/Residue0.class -SHA1-Digest: KCXaUE40/+IVAKaPPwxhuEgXlt8= - -Name: paulscode/sound/libraries/ChannelLWJGLOpenAL.class -SHA1-Digest: edgakTTdK5oAnJdf235WoUok1Z4= - -Name: qb.class -SHA1-Digest: mNE1eDZunaM1r4IziRp8BtuIclg= - -Name: cp.class -SHA1-Digest: kaJ943Yd20RaYIRbQNMowQkCpww= - -Name: kb.class -SHA1-Digest: VPAFtv0p4NrtaEDncm4gu0jT1fk= - -Name: mz.class -SHA1-Digest: 6KaQLoMqNw5GaAkNfVQ5AEw2pvM= - -Name: az.class -SHA1-Digest: Tk7yvvvPBuU3y2hZB879p7aWiZ0= - -Name: oz.class -SHA1-Digest: yKJ0iXiP/eQPJW+UNRMhuGpmBtw= - -Name: lb.class -SHA1-Digest: w9bVOQBzTH5aeYndXZx/BJcVuos= - -Name: com/jcraft/jogg/Buffer.class -SHA1-Digest: CtzmcFa96rWKr/IaMDr9F0rlGig= - -Name: com/jcraft/jorbis/Lookup.class -SHA1-Digest: x9lEkazzxRVeh0p5a3JDXvvpT7w= - -Name: f.class -SHA1-Digest: qUmDLElXyU3vv0jYNha5sdTUO+k= - -Name: bj.class -SHA1-Digest: fdCIcjNNYziRCZoXxtV9QmxxHxM= - -Name: ld.class -SHA1-Digest: 306B8TeF4ifiJk+LcYZK+iToCQM= - -Name: lw.class -SHA1-Digest: BD5K3pVK9nxs+RGyNlmGIATln7k= - -Name: ph.class -SHA1-Digest: sxbb3F9us5AxaLRaHzHb34HL3es= - -Name: ow.class -SHA1-Digest: eJZexVmg/eZsFLT9hSAt7zX78Y4= - -Name: ja.class -SHA1-Digest: FroGGb/855hh+LHjVuoS7tEyRoE= - -Name: fd.class -SHA1-Digest: F+8rJFn0Pb2P3j7DYNFLX8wagIY= - -Name: gt.class -SHA1-Digest: UTeNt6LFJrFVZNIID+fuhcy6x6s= - -Name: ih.class -SHA1-Digest: U9fX57QRWm3g6lcGJRT4yMRqPpM= - -Name: ee.class -SHA1-Digest: SLVe1YxhuaxwgyKTue1dZH/+Vtc= - -Name: kp.class -SHA1-Digest: LVRXFcz48N0JbQgXXTehSxZ+eOQ= - -Name: eu.class -SHA1-Digest: nAvB8Wjf9OwANjuQp/9tqrvWSm4= - -Name: gp.class -SHA1-Digest: QIlaMQRJvis2SBXRK+OUYcHD/34= - -Name: fy.class -SHA1-Digest: 6KDM9l/iuL2WPNl3huVZBzciol0= - -Name: hp.class -SHA1-Digest: PgYuOhV0sNJymU/FEjR5O9CupF4= - -Name: li.class -SHA1-Digest: bIFr0uSVAjWRfOmszQ6fp4k4FIg= - -Name: qh.class -SHA1-Digest: h8zyecLHU2xiwVH20pm87uVCY6Q= - -Name: paulscode/sound/MidiChannel.class -SHA1-Digest: EH60vtJqndyBuulzBsJ8RzfmYD0= - -Name: ad.class -SHA1-Digest: XAxAbII5mwZaatxqLGfeoXiu/jQ= - -Name: com/jcraft/jorbis/StaticCodeBook.class -SHA1-Digest: EG2h2khXpK3TXUVqN5Xu7kDbSQg= - -Name: cl.class -SHA1-Digest: h/mOURy7o7giXxQDWwUgCy55Dws= - -Name: bq.class -SHA1-Digest: zIiBiQMlyJDfMBXdcCZfDzlB1SA= - -Name: gw.class -SHA1-Digest: lwqUoD+TLAwcg8abI12dYQ39C9A= - -Name: kq.class -SHA1-Digest: KQ7fhRE+N8R3XyN89In4wvCb28E= - -Name: pack.png -SHA1-Digest: 0whdfgR8SNywEpiN+JrMJ9wtI+8= - -Name: mc.class -SHA1-Digest: soZCILmdC4kLbXl9NuMN47ufKek= - -Name: mob/ghast_fire.png -SHA1-Digest: +6jL2E1+HQDIsxnSY88TJ0se7F8= - -Name: pc.class -SHA1-Digest: WWa5sgJyH4rfN7HQ8anfyT2kWiE= - -Name: dz.class -SHA1-Digest: MApXitIkPu6n8yFbGVj5LTcYiKs= - -Name: im.class -SHA1-Digest: mB7+vNR0qWAGj9uF90bCKgSp8Yc= - -Name: c.class -SHA1-Digest: Y/dF2tsDWQyqHy6McfwUQWLlUKI= - -Name: w.class -SHA1-Digest: DPzgcy58eDBHem+NIKoOuzUKALc= - -Name: gv.class -SHA1-Digest: +zmHLmjzU9zGdf7R5nOB3lt4Bcc= - -Name: cy.class -SHA1-Digest: T1cJ9PuHGiT+zGilSuT/VOM7V4E= - -Name: ae.class -SHA1-Digest: MGgPoX1lCQjzVM6Gp8Or83BND8o= - -Name: he.class -SHA1-Digest: Y4gREnSBfGR2FEJGIcHwjsUecow= - -Name: bw.class -SHA1-Digest: fAKICSXrL3ZwUs87xaYGEE1UyBM= - -Name: iz.class -SHA1-Digest: VzpxDxhXekcepNZF1zxBEcc8Uys= - -Name: fv.class -SHA1-Digest: DNlfCczCCG0ZE80+cS4fp5SvMq4= - -Name: gh.class -SHA1-Digest: nf8SMT8Dr1Z8/VKxBQ4psptOrQ8= - -Name: ci.class -SHA1-Digest: qzsRwuVdZM3AuIItiD43ull2yvc= - -Name: np.class -SHA1-Digest: h5MnXjj8b8PT6xglXKhBiRSE4OI= - -Name: com/jcraft/jorbis/Drft.class -SHA1-Digest: Nvwe0AqduR6CTfH9JO4TagcpWgg= - -Name: iw.class -SHA1-Digest: 5GmeBWRjougaVTzKcDFsbi6kF8g= - -Name: la.class -SHA1-Digest: 2hOCPNhMQnMKAjdXff6jSDEe6MU= - -Name: dp.class -SHA1-Digest: qyWKtOIBqBXD53aamELlUvoUh8Q= - -Name: com/jcraft/jorbis/Time0.class -SHA1-Digest: f8JMtjf+feYef8a42HLAfWaqIyU= - -Name: ck.class -SHA1-Digest: RLzaK9VZjLrY04NoQZrDxvWOSyE= - -Name: le.class -SHA1-Digest: GFU6PMR+jSxSR9LIYjIjy/m6eTo= - -Name: bv.class -SHA1-Digest: WFN/wbS0osa2WnGUEo+nsRSjwGo= - -Name: ch.class -SHA1-Digest: 6/I96ZpqQYZjovKnjiM05UmXkZA= - -Name: ln.class -SHA1-Digest: F0vJyLLnKUKXXYq0YwmraP/Gqj0= - -Name: gk.class -SHA1-Digest: Fz0ShuoKMqvzxFPaQ6t4H56gD4E= - -Name: com/jcraft/jorbis/Mapping0$InfoMapping0.class -SHA1-Digest: 12e+QLA0mTJT5vsA52t7l4Pr8SA= - -Name: ix.class -SHA1-Digest: 39qZwFJIWI2eFTsVk4b5xHqUPlM= - -Name: fg.class -SHA1-Digest: kVjB1bGMa4tbpoC0OHyeu8rOmjk= - -Name: ik.class -SHA1-Digest: ZDzxZ7GRSJLVtGqFgia01J8vMBo= - -Name: misc/shadow.png -SHA1-Digest: AYFQ3xpHp3kTFkRPiWGj3TvGWxc= - -Name: ov.class -SHA1-Digest: m4ETXOz26KTW0bCmwrL7sRaTh70= - -Name: qd.class -SHA1-Digest: HI36Upr4L8N28dslYwh2yPhT5kI= - -Name: cj.class -SHA1-Digest: d1LLA2gKZz+bFgNNKo5Qzd7urxI= - -Name: on.class -SHA1-Digest: c5qlwLxWyCS3ZRGlKQ/Bcm7vQaw= - -Name: com/jcraft/jorbis/Info.class -SHA1-Digest: EvZjP7iC5LR3zNN7JTstyBMbzeA= - -Name: ji.class -SHA1-Digest: 32AV8DH/ybt1xEd1N0kWyIW2iRw= - -Name: ju.class -SHA1-Digest: fsTehKoIFM65L2jX5xbpFAvrbxk= - -Name: lz.class -SHA1-Digest: RSNqkTXQmk5wkr88xyTRa0xsdvQ= - -Name: nf.class -SHA1-Digest: DSa5xNoSTlstzXYnnIZAaTs5tJ4= - -Name: com/jcraft/jorbis/Block.class -SHA1-Digest: v3gl95ngl2tsYQpDqY/4AyZzyg8= - -Name: com/jcraft/jorbis/InfoMode.class -SHA1-Digest: /iiglLw31fjCsNFremOCILcGvGQ= - -Name: misc/water.png -SHA1-Digest: Vhq7UdiyZLnQqLLJ4yxoNYXxRGA= - -Name: og.class -SHA1-Digest: 0tPjUvYnvHEIy/7vSHMX0y0+QW4= - -Name: gg.class -SHA1-Digest: CL1SoHbEA12XIDzsQFIr2UPEKNY= - -Name: cv.class -SHA1-Digest: imbsRG6CVa7LyoOA8vJ9wprqXmU= - -Name: com/jcraft/jorbis/Floor1$InfoFloor1.class -SHA1-Digest: 8ufluA3sDP2tObC4x8cVs1deLfg= - -Name: armor/diamond_1.png -SHA1-Digest: Rsd1MWYxhXeKfeWKvHhl3FmsdbM= - -Name: gm.class -SHA1-Digest: H9CAdNPOMp3jnlTe/vNQpkXAWY8= - -Name: k.class -SHA1-Digest: /Y8ZaZ7mrLCfWBOnTDwYXWsSYZI= - -Name: pz.class -SHA1-Digest: JUm4LlAL642C0gXkiM3LURAas9g= - -Name: font/default.png -SHA1-Digest: 2CMCEKYrWPY9ZVNsqUlfnaBNBHA= - -Name: iq.class -SHA1-Digest: UzBdjrWEOkjxnCMYnEuRTCv8pGo= - -Name: kg.class -SHA1-Digest: /qDigFO3JDNi8pWaIDvXQwPfyuc= - -Name: paulscode/sound/libraries/LibraryLWJGLOpenAL.class -SHA1-Digest: BLsD2CCBx3bxr753vJ/s6piDPq0= - -Name: com/jcraft/jorbis/Residue0$InfoResidue0.class -SHA1-Digest: sB/wymFIRS/TNNAbsQVIhWum8lY= - -Name: e.class -SHA1-Digest: iZVHOz+QObH7p/CHjFYUC1h11Bw= - -Name: bz.class -SHA1-Digest: MCYCu2uhaSTNV1H/CDtLHDpglao= - -Name: oi.class -SHA1-Digest: j9dGJ7boneJfkq0oRo8MubyWank= - -Name: ax.class -SHA1-Digest: 69UzKFhgLaGCL28795NFOeYzsO0= - -Name: ha.class -SHA1-Digest: vJeaqEDWTjFbA6s+MtgRq3UveqE= - -Name: mj.class -SHA1-Digest: 8XJgLD3jsiWfGn1IBKvZadDsXGE= - -Name: hk.class -SHA1-Digest: Vl61cALLGQwY827LQgG6SgGdhtQ= - -Name: kj.class -SHA1-Digest: FkaUvZEjS0R3bt/gokx8E4Ii1u8= - -Name: qg.class -SHA1-Digest: N5q8WulAaaxYovwr6YfiFaVXfEI= - -Name: com/jcraft/jorbis/Floor1$LookFloor1.class -SHA1-Digest: tg329fQ7pw53wmvehOpBrGxcets= - -Name: nt.class -SHA1-Digest: vgyUOKIvI63IXn6ppES2mpPvdH4= - -Name: mob/ghast.png -SHA1-Digest: Kg/wZUMXUxGCJnkXChRHVFNnm7A= - -Name: eg.class -SHA1-Digest: /UCwJP/aEvYtYKTn5RoD20cN5aI= - -Name: ar.class -SHA1-Digest: vbbaIox7PRzQNX/mQsCFZ5MyMPY= - -Name: kn.class -SHA1-Digest: 1MP7abmJZfpAIOx5cQuEq5RYQ4w= - -Name: bo.class -SHA1-Digest: fnD7v9YxI9V5mK7ORs9maQ31KBU= - -Name: af.class -SHA1-Digest: gHdAW+gY1l0vg/OBY3mCiTJk2eI= - -Name: title/mojang.png -SHA1-Digest: pQbQDV01FaK9+imk92OcVF9Q3dk= - -Name: gy.class -SHA1-Digest: o8W9dCcTAcgEnxpWys+refo4LOg= - -Name: terrain.png -SHA1-Digest: Eq67zq1TZx5lGzrE/TuU5sYdQAs= - -Name: py.class -SHA1-Digest: qmyVFGFAlBpTtpeaE1zZ27mw1yg= - -Name: of.class -SHA1-Digest: uB3Pq7fjEIO4jd3CmtEKwDRtLdk= - -Name: ok.class -SHA1-Digest: /mwnCGSHO6dqQREC0VWCXKJA6ec= - -Name: fh.class -SHA1-Digest: YpK2sZMplC9dr68oJ8ydnVpiblw= - -Name: misc/foliagecolor.png -SHA1-Digest: ZfWbubPYgiXLBObLUQJyyEjyKfI= - -Name: an.class -SHA1-Digest: pYmNLQtKKGOoBdfIeONarZr4R6I= - -Name: aq.class -SHA1-Digest: +Fb4mcLgz2V5ZI3BfEqvvlI2i0s= - -Name: hf.class -SHA1-Digest: KwL2dbMhxkayY9wotEgCddDMvoE= - -Name: kt.class -SHA1-Digest: 0RMQhk4UlVYXfd71/d4Fp1V0viQ= - -Name: ke.class -SHA1-Digest: 5P/yj4C97xhBLN3dEXlkkuwRgZg= - -Name: armor/chain_2.png -SHA1-Digest: o82RYls52TnsQgTA0mgK+e6bfCo= - -Name: gd.class -SHA1-Digest: pmuZETX49qF7dAY4V5cFeCmzsvo= - -Name: bp.class -SHA1-Digest: p+rlsz7OKeP2wuIG+8OmpZ6Fjt4= - -Name: kz.class -SHA1-Digest: E7Hr7ZBCtUH9daE/mB5amHuX2iY= - -Name: mob/pigman.png -SHA1-Digest: yj4LOL0vmF89g1ekVJFYZUqdI74= - -Name: hq.class -SHA1-Digest: ifD9QsViVtAHB10V2N7f3YWaFHU= - -Name: ne.class -SHA1-Digest: m9jfBr2F6zqbZIjjNBycxIxr8AY= - -Name: nx.class -SHA1-Digest: wer3E9nc2I9EfW4JH6gmen3o4u4= - -Name: mv.class -SHA1-Digest: K6OH71WtBlqhlFS75D12nG5GrBA= - -Name: ll.class -SHA1-Digest: VpJOPK+E/WsOyAWF/v9DTbNrqP8= - -Name: dy.class -SHA1-Digest: 7WSv8haFIC9yneUJICD/pKcH4/4= - -Name: paulscode/sound/CommandThread.class -SHA1-Digest: WFt18YYMAx9GmubKllCx9oz39fE= - -Name: ed.class -SHA1-Digest: RY+85AJ4ZFvijb971N9N+a6wdBk= - -Name: bf.class -SHA1-Digest: Cv9mTbbY+hxGCU0WR3D0y6dWulU= - -Name: pu.class -SHA1-Digest: evQNgDtb5g4VnGupbphMu3QEBLM= - -Name: gs.class -SHA1-Digest: YHPoYIZoxJCX82UXh3W+bLY2SyI= - -Name: jt.class -SHA1-Digest: 1HXVmPEBhIjUd3aKg6+44IIvcZg= - -Name: lo.class -SHA1-Digest: Jh2UM/Ib9SYAAsAtXiJHsZ9/GUs= - -Name: bl.class -SHA1-Digest: ibNrF8lDx/IhF0xSu99Vtrcgj5w= - -Name: nd.class -SHA1-Digest: FD/FrXXLMMJkn+FLoq4i4/yKZqE= - -Name: armor/diamond_2.png -SHA1-Digest: kT7xzmEkk35t40yRefv8ZLtnrwM= - -Name: armor/cloth_1.png -SHA1-Digest: qPyk7hlFpOIH4G+JjuhBwvgXLjw= - -Name: px.class -SHA1-Digest: AAHofaQWRBoRphe4BsFszXwv+q8= - -Name: lq.class -SHA1-Digest: nSsp+AdN8NjcPf8wMpuDyL/Ngsg= - -Name: kw.class -SHA1-Digest: miFf4yci9GLnJvGheMTUT1MCNrI= - -Name: kk.class -SHA1-Digest: MffNel02qfvg+Ma4zK/0kWHPGM4= - -Name: armor/iron_1.png -SHA1-Digest: cTTpRCYFt3TCDAyDWDcuKuOCdF8= - -Name: pe.class -SHA1-Digest: 4v+0+aZSDPhx6trVWAM7LISTZaI= - -Name: ec.class -SHA1-Digest: DZ2tqJKpg0d7IX1NPjET1xCePwA= - -Name: dq.class -SHA1-Digest: EVp8Uli+6w7B3xLkh1mM9qRr+0I= - -Name: je.class -SHA1-Digest: JIHWnH3KvpAiuy71Nw/4P9K4zJc= - -Name: com/jcraft/jogg/SyncState.class -SHA1-Digest: AxsHUctwS9JLZDkRt2oXCimBOF4= - -Name: ct.class -SHA1-Digest: X0qCXGnLq9TMtk7NMKOVmLzLHOg= - -Name: lu.class -SHA1-Digest: jBazNYkED+r8c/Z7EKhgnWV69vA= - -Name: com/jcraft/jorbis/PsyLook.class -SHA1-Digest: PscVougKbZfr1UJGQGGAeJ0LvUs= - -Name: fm.class -SHA1-Digest: G5SAFMiczb6zJyNSUruTnhDd+pU= - -Name: eo.class -SHA1-Digest: HE7dnZ/7Jt7bvXUwNlHbC/Cnp0M= - -Name: cz.class -SHA1-Digest: BlgONN6l3Xvg9O8DmBLUUzzW+RU= - -Name: mob/sheep_fur.png -SHA1-Digest: 6cwQ8RybUwyf2yHSclgK9ArVk30= - -Name: paulscode/sound/SimpleThread$1.class -SHA1-Digest: pskahvwFMPVcF6G9bO2PzYKuQ5U= - -Name: fu.class -SHA1-Digest: 4hmqebO9PmS7I6Z5a9iK0H04QFw= - -Name: ca.class -SHA1-Digest: TBXWIWyiyn9WtU3BW60jegHdQnA= - -Name: paulscode/sound/libraries/SourceLWJGLOpenAL.class -SHA1-Digest: MKZNgDpivpKA0q+w/S81TiuO/6s= - -Name: ah.class -SHA1-Digest: Mf+PDnWFwumOhIQbkHZwuPbakuc= - -Name: ej.class -SHA1-Digest: BobzXy320iKinraUe2P4VMQqTEc= - -Name: nq.class -SHA1-Digest: iXQ2JDe0Pr/suhIe0uyGnh6Wb7g= - -Name: os.class -SHA1-Digest: ueWXFX/PtZP+C9HvmROA/UHpOAU= - -Name: item/cart.png -SHA1-Digest: NlDQYnDYCaLWzQCUXpgY9vohGtY= - -Name: com/jcraft/jorbis/Floor1$EchstateFloor1.class -SHA1-Digest: 5gOOxYIlBzQJ3IyeYOoB0StH2RM= - -Name: pr.class -SHA1-Digest: WoIJZC+TbIxDGLUCDedH1vB4vew= - -Name: ni.class -SHA1-Digest: wWe6v9i0zWpfDkfsye7GL2129UE= - -Name: jz.class -SHA1-Digest: TuMAdR1MiY1JzuMthR17VJA8aCA= - -Name: cq.class -SHA1-Digest: gpPg5FcAiiEatX2KznRAOCZUcQk= - -Name: misc/grasscolor.png -SHA1-Digest: mmHb507u61NUcRHOvjkoDfMGhS8= - -Name: com/jcraft/jorbis/Lsp.class -SHA1-Digest: CGlCmZ+qcvi52aq4ClrwSUJrOXA= - -Name: cf.class -SHA1-Digest: n4h0kmejR+mTbSplIHN4cHLd0aI= - -Name: p.class -SHA1-Digest: XAJDIFQEaI7Mhtj5St4yN5KjtLI= - -Name: ii.class -SHA1-Digest: wpOy5DvFW2WNMn5wjNe9msi58G4= - -Name: fn.class -SHA1-Digest: QNzyBdRcKEVRoTum/uFwPGfKFO0= - -Name: mi.class -SHA1-Digest: juzn3Jdx9fbApU77odk9Sx/gEW8= - -Name: qc.class -SHA1-Digest: yGXYXzB+oHzhTkc+Gr5XZvwRUUY= - -Name: gi.class -SHA1-Digest: P/9cJ6NjNdGnDj+tYS8gUzYAdxQ= - -Name: ic.class -SHA1-Digest: TsoThnHGY1FE+cdQCwy5XHiVSKA= - -Name: cg.class -SHA1-Digest: kET3+OJKSwhM0u7HopgLpezoBds= - -Name: paulscode/sound/MidiChannel$FadeThread.class -SHA1-Digest: G1uGye5YYZKEehRpY2GKPb9DBHo= - -Name: km.class -SHA1-Digest: Se1QgnBlqsgwxWD2Yp3tYSze94o= - -Name: it.class -SHA1-Digest: NRlmYJUHNROIpg5HkfUe1Z8RyGM= - -Name: bk.class -SHA1-Digest: LHT4trDD39zo1aBazxnOD8NNoRc= - -Name: jc.class -SHA1-Digest: mkzuzFlTTUlDwm1KBFJXTrzJvdA= - -Name: paulscode/sound/codecs/CodecWav.class -SHA1-Digest: r2jOKPe9080Ax2dlHeXJjoLy1pI= - -Name: mob/cow.png -SHA1-Digest: UOA8ELNnAcU4iQiDpuSj8rVv7PU= - -Name: z.class -SHA1-Digest: tFjSLD2RCPFWxbVXr5XtykhCd6U= - -Name: ek.class -SHA1-Digest: QM20vOLlaqZkMlRTM4Fh4yxjcdE= - -Name: gui/crafting.png -SHA1-Digest: 8TJ2Be84ftY/6oE+S5aRfa6Z7CY= - -Name: fz.class -SHA1-Digest: KCcJhPLVDOkNIJQSCRcQShlxhmw= - -Name: x.class -SHA1-Digest: Ej0MiCLaKirVy8kMLMbdunbM1+0= - -Name: ey.class -SHA1-Digest: XzJp0tBUDXAe1CSiow6M/I6zmkA= - -Name: jm.class -SHA1-Digest: yqaoJdTM7xkOkTM5OG2z00JKQss= - -Name: hd.class -SHA1-Digest: UCPmgmr1ZeNdw4eGLZFO4sJf6/A= - -Name: bs.class -SHA1-Digest: RRI8862DFi6PpT4t0HK1JahaLpw= - -Name: is.class -SHA1-Digest: 57muyulOW8t1SsdI447Io7TTjVc= - -Name: jf.class -SHA1-Digest: J4TTu3uQmvibhbfuRMShqLr5rWc= - -Name: com/jcraft/jorbis/FuncMapping.class -SHA1-Digest: Q/qr+R8FGnng+CCoMZ9or3w7iXU= - -Name: mob/pig.png -SHA1-Digest: V48hcqRI4LD2yLy6gi9TWuKCOB8= - -Name: fp.class -SHA1-Digest: GerTzBzR+bjKZIETGpGNNXAQssQ= - -Name: dg.class -SHA1-Digest: fPA40zqxf5v9r8vEbDOFXs+xBdM= - -Name: ap.class -SHA1-Digest: zZ4478JJiAhgytigjaKpkOijhEA= - -Name: com/jcraft/jogg/Page.class -SHA1-Digest: DYR4aAmVxcRqLZmrAyvj6tVDG8Y= - -Name: pl.class -SHA1-Digest: lZQS97lITHDOTc1du4JF5EIHxiU= - -Name: jn.class -SHA1-Digest: HraWLViKmgxjeYZCHInoKGns/0w= - -Name: eb.class -SHA1-Digest: 2MUnTvFngr03mmszP4x5Eh8TleE= - -Name: nv.class -SHA1-Digest: IugxRaHQd/j2m50OXsogp9d4KL8= - -Name: op.class -SHA1-Digest: 09WIexHTnzJBUCeTX/mbNpP4aHA= - -Name: cm.class -SHA1-Digest: 8fcDlyhXTt/MEOtvkK1nBMkMv8M= - -Name: lt.class -SHA1-Digest: xwgLNQOz/f3fxwGEtRfo4N2qFIc= - -Name: lp.class -SHA1-Digest: CkQeErue4N3Kx6PGEU//OAiyviA= - -Name: lx.class -SHA1-Digest: 9sZLII78WogMceeSc0eGYYMTe4U= - -Name: jj.class -SHA1-Digest: /4k6PzC4F585xio4dFDZyc4zoXY= - -Name: lk.class -SHA1-Digest: c37z3TBUM597IfOhOIZv8prZClY= - -Name: ng.class -SHA1-Digest: /wP18YHHGO03maRBS9vge7GX3u0= - -Name: oj.class -SHA1-Digest: C2V/4y1LVjFdY2920TkEinxFKCE= - -Name: kc.class -SHA1-Digest: YRsLE/DAy2Ze3oGewC5UC0hkuOs= - -Name: oa.class -SHA1-Digest: E8mGlwEg2bmX/qzh8XVXny+fvck= - -Name: title/splashes.txt -SHA1-Digest: h3rdj/D9BTxdWuvD45hcOStwzq8= - -Name: oy.class -SHA1-Digest: sQACbPnEAaQAyWw8nnWwNxP7sC4= - -Name: mob/skeleton.png -SHA1-Digest: 3pt7XEpvzlc2/peM8zcFO0VKYT4= - -Name: pb.class -SHA1-Digest: c1pLl12yvMPdtQt5Q0wAC7eHRQU= - -Name: gui/items.png -SHA1-Digest: 2Ox6LiRZYazTCflHh5qm3hqLlRI= - -Name: qi.class -SHA1-Digest: vflIEBx2xNFGrqg9WlKmc+8lCCw= - -Name: ms.class -SHA1-Digest: gH88G6YZvpJ2u/csTIbineP9o84= - -Name: qm.class -SHA1-Digest: Ye1xE8kHsQ+vL4MmBYx+5GD+K48= - -Name: com/jcraft/jorbis/DspState.class -SHA1-Digest: to2Q/1ovPDLrL8ySvYcALE7l8Bo= - -Name: armor/gold_1.png -SHA1-Digest: l+li03RiLjA7BP6eKgq0nSRvEi8= - -Name: nk.class -SHA1-Digest: wz40iOPloWdSQEE6n2EkUZ56rYA= - -Name: pd.class -SHA1-Digest: 8SbtX0L6KkTHN0Jemkw9iwtG8HE= - -Name: dw.class -SHA1-Digest: NiyVVaBeMCXTDxedyh1cYcchF1Q= - -Name: mob/sheep.png -SHA1-Digest: rqiKnjtsXva+IZaNQdjryUJkaKk= - -Name: if.class -SHA1-Digest: X0U+Qd9hLqEVnr8V/VZerD4SRzw= - -Name: com/jcraft/jogg/Packet.class -SHA1-Digest: SLKnVPKqIBFZYDtuQNHkVpVHAaY= - -Name: gui/furnace.png -SHA1-Digest: VtRb3N+F8S29VcKuKlIWzmV2Wso= - -Name: eh.class -SHA1-Digest: usSwSub1MlrIoLNGdFOPO/tTQhE= - -Name: jr.class -SHA1-Digest: Y6JVlhhPPIFPVmXKaJTROuYAGI8= - -Name: nj.class -SHA1-Digest: UAM0U5UFQ6lIBStd0M9NExGBpe4= - -Name: ps.class -SHA1-Digest: 3CT3QINHUrg0lfipNbSGkRmnlhg= - -Name: com/jcraft/jogg/StreamState.class -SHA1-Digest: STsET1zEbmb+DjYz5Tvlr5u1BG8= - -Name: com/jcraft/jorbis/Mdct.class -SHA1-Digest: IFLAsiW2LwC8VUWK3nqdxBhsZ4w= - -Name: item/door.png -SHA1-Digest: lrKBtBuckAXWFbCkE6q5cR4vgVk= - -Name: ev.class -SHA1-Digest: 2M88aVlg2ll4a7DUc0aQMuTW6Gc= - -Name: id.class -SHA1-Digest: wtWESMMR1K6CMn3oZc33QTH5Peg= - -Name: jo.class -SHA1-Digest: e1pgrYOjmYx9nAvnPd6/kEWjpjo= - -Name: h.class -SHA1-Digest: y126wUrIIQ8wv0IiHG5AvdSgaeg= - -Name: au.class -SHA1-Digest: XiAmempnIHlgwTAuBKI7MgkOsJM= - -Name: qa.class -SHA1-Digest: TLwmAlruGssZ6iO9wVX26fx8M0g= - -Name: el.class -SHA1-Digest: a6MFvpTv4lnCQHaliCT/QK0KmPs= - -Name: du.class -SHA1-Digest: lEXi2Y1t5zqLjbqaOqSNSYFeWaw= - -Name: mk.class -SHA1-Digest: v1tFuh4aZreBrzDEUSeIiYfuZNA= - -Name: paulscode/sound/SoundSystemConfig.class -SHA1-Digest: bD3jatiQAnDJsRdzxDw5tyeRHOs= - -Name: es.class -SHA1-Digest: 8RHMVu2LXknCC+bJZaFerucLOLs= - -Name: mg.class -SHA1-Digest: JMs81J2Oq663aw+uPUneNEHFGBY= - -Name: com/jcraft/jorbis/FuncFloor.class -SHA1-Digest: TeBUuafMrZacZ7y5wt40vyQeFnw= - -Name: com/jcraft/jorbis/Floor0$EchstateFloor0.class -SHA1-Digest: QU3wHS5rfWuoJBHBTPQScITWLmI= - -Name: gr.class -SHA1-Digest: tbmsIOGqmIfJR1DJfUkuYDNdlRk= - -Name: com/jcraft/jorbis/Mapping0$LookMapping0.class -SHA1-Digest: NreTdvhmIk/YJ6zlpsq9il6sy58= - -Name: df.class -SHA1-Digest: xSgfuz1nyGIT7eN3UhEBZTAVBl0= - -Name: al.class -SHA1-Digest: fCwr18w6Z5G3kldaFuEXrx279TU= - -Name: hh.class -SHA1-Digest: GPyjzwqoYHzZ3t3xlPS1HHm77ww= - -Name: nb.class -SHA1-Digest: uWCdU1RD5DIN9ofCPQmdN0LeZsw= - -Name: ab.class -SHA1-Digest: M0osY+ABzql8wlsbZNCERI097JM= - -Name: i.class -SHA1-Digest: lvSnSiXjulDlMLRXD89qKbualEs= - -Name: nu.class -SHA1-Digest: VClOD/ZIUtcN8+fF46K7EfdFp6k= - -Name: do.class -SHA1-Digest: PLtNrfYeRVWTFeTsl7+lt5GNf/c= - -Name: gui/unknown_pack.png -SHA1-Digest: 7QMKZuoM9jhqqAwzjj2biS6BvAo= - -Name: dk.class -SHA1-Digest: 4YR1O7t6siWqVIq3m/w51cbaE+U= - -Name: environment/snow.png -SHA1-Digest: OGPUn5hch8shOOLZbcIJLBQgSNA= - -Name: dx.class -SHA1-Digest: 2eaHJV1atvQCzrNNAbQhuflwBgg= - -Name: paulscode/sound/SoundSystemException.class -SHA1-Digest: i0ZNXaiCtT8s3vBF12iHUMrwCN8= - -Name: ks.class -SHA1-Digest: 7/Zz2eS03KQMqBwjgIG6tWQyHow= - -Name: ou.class -SHA1-Digest: BQvLgTntUvyHqZXlbhEJPZvMJiI= - -Name: cw.class -SHA1-Digest: d4AtmYLovDK1AiEYjn0Fh46Gdj0= - -Name: da.class -SHA1-Digest: zy59T17F3zmuWa0WxGUEu9QcK40= - -Name: u.class -SHA1-Digest: Fkclj+heaB1VnjunQwWv506IhHw= - -Name: pf.class -SHA1-Digest: snrf7G8t+uVcGcePnW8cuGsbxig= - -Name: fj.class -SHA1-Digest: gEHMjpd9IgP7Edj98ubSMqKBwYA= - -Name: com/jcraft/jorbis/FuncTime.class -SHA1-Digest: XKMaUXCuEq3DSN45X5NEkxD/WNI= - -Name: kv.class -SHA1-Digest: kneDIbInn7h7lZ8a1/MnSwyP6WI= - -Name: ez.class -SHA1-Digest: OKti0EoATyjylU0WQSTH7Pc8teI= - -Name: oo.class -SHA1-Digest: Bw9eQesGY+3pee11r1TQMbKoyM8= - -Name: dm.class -SHA1-Digest: X50nyHAX7any+KcNbdmtCqT7uIw= - -Name: ka.class -SHA1-Digest: cU+HBThlrMsczapLOi+IDUO/2SI= - -Name: eq.class -SHA1-Digest: qn0qKIoM+es0qTnmb613aZZF89w= - -Name: av.class -SHA1-Digest: jfcez+liebtWDgrEVev9B1mMFSc= - -Name: hg.class -SHA1-Digest: bxykQaot1Vj2q+z/q0EeGudiOcQ= - -Name: hx.class -SHA1-Digest: feQDuv7V04+hbQnBy1VC/c1te+k= - -Name: js.class -SHA1-Digest: bJrZnJC5GsyaA+0FvOzZ5ivxHnM= - -Name: ht.class -SHA1-Digest: ERwLDj3wLa+p5YU0RXiPO5ijolo= - -Name: ag.class -SHA1-Digest: IOP1nBqJjMcyhutp/3/Hd2zJItU= - -Name: paulscode/sound/StreamThread.class -SHA1-Digest: s0GUIztnX/+stmopMLajWSWzQ2M= - -Name: y.class -SHA1-Digest: 2QA7jIBzgH9TblYlJnOc0M4U3QQ= - -Name: ie.class -SHA1-Digest: 8oUNOVGJcKR4adTm3OzdCsmUuc4= - -Name: no.class -SHA1-Digest: ESnTDfWgf9+YqKITDuZ3nGGPnoU= - -Name: item/sign.png -SHA1-Digest: DpIepeRBc7gFPtk3qQw3Rl4u1JE= - -Name: nr.class -SHA1-Digest: gZMAVDIheE6GaBIIZeTzJSDHwhU= - -Name: ak.class -SHA1-Digest: jkBaRRvVRduS22C5uhYP4omhOlU= - -Name: fw.class -SHA1-Digest: pg1xCx7wwzmKIIOZY7HTdql3Hog= - -Name: paulscode/sound/codecs/CodecJOrbis.class -SHA1-Digest: Tuclsdt0ea2KXJX1FDy6je9lhRs= - -Name: terrain/sun.png -SHA1-Digest: wLz+S2x4Wr6XIHIdyo5Jv4dTPIw= - -Name: environment/rain.png -SHA1-Digest: jyvAPez7AFeHH3PDyIxGeoE9PGk= - -Name: armor/gold_2.png -SHA1-Digest: vMsNeaaeai8J3wVArlXiGci7rIc= - -Name: net/minecraft/isom/IsomPreviewApplet.class -SHA1-Digest: SFiqLNwgT8igHa1fwaoQrpeDn4s= - -Name: hi.class -SHA1-Digest: J5KMBNd3cOeKwwzTbSpJab0ssiM= - -Name: armor/iron_2.png -SHA1-Digest: C4f8PZXXCONaefuQifGBJDzX5DU= - -Name: item/boat.png -SHA1-Digest: mXMEqjLKM4Y9c/Tt6xHUyVDQzD8= - -Name: iy.class -SHA1-Digest: /wyOgw86afvboOm/ztskpIYSNnk= - -Name: co.class -SHA1-Digest: El+vtNOkPbYiXcndH2YnA5bUbKo= - -Name: qj.class -SHA1-Digest: Ppqu2IfEHjqqavE5h4A6Xz3Itq0= - -Name: bi.class -SHA1-Digest: mr7WQ35whZPKr9j7bhYEtDzlkog= - -Name: lf.class -SHA1-Digest: 4rc4NZbUylwClAvzliJP80WK1/Q= - -Name: nh.class -SHA1-Digest: NfFXwzLXHs80t3JkxqN9w6z5Up8= - -Name: mw.class -SHA1-Digest: RW6dcN3ajuvsNVb9MZyvb3kFL24= - -Name: gf.class -SHA1-Digest: DHS/PEHPTS35tYzydU3YCbYQxQg= - -Name: hz.class -SHA1-Digest: 461jcu45pbhuGg8zXo1fdDsILbs= - -Name: ia.class -SHA1-Digest: 7orf133xIoAKdTwhxkoNP76/Y+A= - -Name: om.class -SHA1-Digest: W5nSf4kVpMPVwxJt4HiQWypgesg= - -Name: hl.class -SHA1-Digest: y7PFRW1r7+CD+9oUNZTx5uC10VQ= - -Name: o.class -SHA1-Digest: kiXslvFTsUzC+/77oLAz+gjYsY0= - -Name: io.class -SHA1-Digest: WtiDDLIpNi8Algi4L9Eol88WooM= - -Name: paulscode/sound/Channel.class -SHA1-Digest: Ac+AsXLmbEEHh/UF23mxwYK75oQ= - -Name: or.class -SHA1-Digest: RmmdbM0Q6lG84A30o3W+V9aKqcg= - -Name: cd.class -SHA1-Digest: a2lUAcgjBFWwnZRy5HIUdIcitqU= - -Name: mr.class -SHA1-Digest: VtsCKnBcR18hOR59clqI5rucsts= - -Name: mx.class -SHA1-Digest: G8MyPVPlwnWIOMLUkGIaFhtcPIU= - -Name: ob.class -SHA1-Digest: 7ir5p2pJ+1eFFxsizlYAq8lVRUk= - -Name: am.class -SHA1-Digest: WkZslsrC1PObMBOyUR/Lzgcq+iw= - -Name: mh.class -SHA1-Digest: aEfuBSioWu+yfeuUY21pqz1h5Lw= - -Name: fe.class -SHA1-Digest: DsWXAPixqxnWg1leeqX3rveMenM= - -Name: md.class -SHA1-Digest: nWcJZGKS2wfLtCrmUkKOxq9iEn4= - -Name: jd.class -SHA1-Digest: 638IeQJJziH5NKjy2Et6IiEUlm0= - -Name: jx.class -SHA1-Digest: uzW+yiW8aiRP0efImBdnJrRbmlY= - -Name: ea.class -SHA1-Digest: psOgqzd9svtoPUOEZ5Gko5dpcXA= - -Name: pk.class -SHA1-Digest: xul3SOo5YCsxbt0gHweYj699fb8= - -Name: ox.class -SHA1-Digest: 8z5zcC0EBTPcCd2k4t4dVnTs4to= - -Name: mo.class -SHA1-Digest: Hgg3wsfO2MnGaHvpo6zs5ZoeIXM= - -Name: hv.class -SHA1-Digest: oYNwYEvhd/Hc4O4UkZdyWGjo2e4= - -Name: cx.class -SHA1-Digest: 6Wm0+Ury5FMZA8lQGoOO+QEuwqk= - -Name: jb.class -SHA1-Digest: yisHr8mBTE2+9ZTrvV0338dYkN8= - -Name: com/jcraft/jorbis/Lpc.class -SHA1-Digest: +uIfEExaxyDONJE2rdtMOWhLCEU= - -Name: paulscode/sound/SoundBuffer.class -SHA1-Digest: INNMzgvNlJJFwECDa06b0YVJeGM= - -Name: my.class -SHA1-Digest: O+zvdc7TQ8dAdBIKDVjWcnwvncU= - -Name: gc.class -SHA1-Digest: AND18hawrZbKdUzFD8XasDy02kI= - -Name: fq.class -SHA1-Digest: 1adtpVWY8+AWLBSuo466EPTqHy0= - -Name: pv.class -SHA1-Digest: 7pZE5T7Y4iIO94x8BAVykidOt9Q= - -Name: by.class -SHA1-Digest: 2RY22xcjPeEMuk4ml4/o+BzvAg0= - -Name: mt.class -SHA1-Digest: zDEzePiP/aHjdI7BCfNoRQ95O/4= - -Name: com/jcraft/jorbis/CodeBook$DecodeAux.class -SHA1-Digest: hkIxJ/lcOJPzQxya7qdsMdPR/Eo= - -Name: ij.class -SHA1-Digest: 6JyxeCHXzKZO7ROdjxqnTGvwaHk= - -Name: me.class -SHA1-Digest: j7kpwKdKuzHLLCihhfFKXm/EkP4= - -Name: com/jcraft/jorbis/Floor0.class -SHA1-Digest: 4NiZKvKvRzraYxJu1beNdHlpewE= - -Name: fa.class -SHA1-Digest: xBpq0VrkDOBMax5/gJGEVbGxjeE= - -Name: ku.class -SHA1-Digest: 4Xp2Oky8GA1FWv6kpc8EqTN7BIQ= - -Name: kh.class -SHA1-Digest: Q2Ubyu7URu5i/MtdwoHEzLGRZyA= - -Name: pt.class -SHA1-Digest: ttmVJydIwjHEnfAUk4CqNL3EWs4= - -Name: nw.class -SHA1-Digest: jT4Zgm5hD3AifTNGlxb/wwUBf9I= - -Name: aw.class -SHA1-Digest: G11SEYEBc80Q4m/X7dapcu4oiKg= - -Name: paulscode/sound/SoundSystemConfig$Codec.class -SHA1-Digest: vmoR+oaRfGOf5wccrYGYmz/mBxU= - -Name: ac.class -SHA1-Digest: cm6BIzL58V/aJSTliJ1yQJUnsxU= - -Name: mn.class -SHA1-Digest: M87+N7+2StSvtHJ/97/tnNZD/f0= - diff --git a/resources/META-INF/MOJANG_C.DSA b/resources/META-INF/MOJANG_C.DSA deleted file mode 100644 index e921bfa..0000000 Binary files a/resources/META-INF/MOJANG_C.DSA and /dev/null differ diff --git a/resources/META-INF/MOJANG_C.SF b/resources/META-INF/MOJANG_C.SF deleted file mode 100644 index 01261ec..0000000 --- a/resources/META-INF/MOJANG_C.SF +++ /dev/null @@ -1,1778 +0,0 @@ -Signature-Version: 1.0 -SHA1-Digest-Manifest-Main-Attributes: zasvPbp2Pj22IZ986L4058c4i8Y= -Created-By: 1.6.0_22 (Sun Microsystems Inc.) -SHA1-Digest-Manifest: 8WGDngNoFK49s5T9cXm26xuEC/I= - -Name: ns.class -SHA1-Digest: I6bFOipO6uLivTO4WpEOwMJFZHg= - -Name: dc.class -SHA1-Digest: Hulh6X2EeBL9MilMKmT0ZPdF4rk= - -Name: gu.class -SHA1-Digest: l0y9K9TT9v8sE0xq5SO7/q4QFg4= - -Name: r.class -SHA1-Digest: okVa3D57gfh0LRu0FBLhBF0gnWU= - -Name: ki.class -SHA1-Digest: 1VnsIEQop5T/PpptSX+FFq2YTNM= - -Name: gl.class -SHA1-Digest: Z/iE6GXFJSausPSpMZsYjBGFvMA= - -Name: s.class -SHA1-Digest: AeHe81TM1XfD++hpVx7PgXZfc7k= - -Name: jp.class -SHA1-Digest: ICwK48oRfFhlGH3g5sONFiaVEaI= - -Name: mob/spider.png -SHA1-Digest: mC94GimRFKImw0+2LYdBXDiet8g= - -Name: mb.class -SHA1-Digest: 7qT0NZr3LnBr68uJ8ITe5kiRudc= - -Name: hn.class -SHA1-Digest: jOb1Q2rF3gxZErIqHiX1OepYDE0= - -Name: hw.class -SHA1-Digest: Rs4StiWWq4cA9MVyivlQ5tu+7c4= - -Name: com/jcraft/jorbis/Residue0$LookResidue0.class -SHA1-Digest: k9My2VLu4QE7WH/7uaIlOE6UcpE= - -Name: hu.class -SHA1-Digest: 8cBNWMYk58lln6sifNmWLL1NGDU= - -Name: lm.class -SHA1-Digest: YW/vCJuqnBWCvolkp6agXo2iSGM= - -Name: ex.class -SHA1-Digest: 1z0a97ONHsgeUza28TvyMxqe7hg= - -Name: bu.class -SHA1-Digest: 5f4aRe49ApkrPSiRYyZGp8ZzDqw= - -Name: jh.class -SHA1-Digest: nA235JMyPX6mV10nENrsAOJD4mE= - -Name: gq.class -SHA1-Digest: 8FCrQDpT9awmYDW4OaJF7RPET04= - -Name: paulscode/sound/MidiChannel$1.class -SHA1-Digest: gwJh5z1P3Mcbrh+cyN7iqVOXTEY= - -Name: fc.class -SHA1-Digest: iM9+oFUm3K9onEjTJh3yuRZ33Ww= - -Name: a.class -SHA1-Digest: iQpgZsM16K0W6r4TazKtjYbwvok= - -Name: item/arrows.png -SHA1-Digest: lq8TgQgyCWrYxveInFzSOyNKHss= - -Name: fi.class -SHA1-Digest: JLXz36w9EWfIbG2f1qFey8hsuLk= - -Name: iv.class -SHA1-Digest: tcM5DSZWeFKTwGz75zz43rZZ7Qc= - -Name: kl.class -SHA1-Digest: ceLz5nnwYYsuWCPvjqo41WPujgY= - -Name: bx.class -SHA1-Digest: fT0Sq8jpYEfNN9CrV+8YFFbHj58= - -Name: il.class -SHA1-Digest: 51Rxeu8d0TGZbf6zHqoLQKa2l1o= - -Name: paulscode/sound/FilenameURL.class -SHA1-Digest: 8YYxpqAqzF3YkKqJrnPx1mOZe8I= - -Name: dh.class -SHA1-Digest: hy0rAyXbfuMwT8zL1wqSw2QtOso= - -Name: pw.class -SHA1-Digest: YZFrSmYbQ5IoAyuWSIInTEyZeUE= - -Name: mob/pigzombie.png -SHA1-Digest: aXvAjMVmpWjzavxg5uoTFP8rzdc= - -Name: bn.class -SHA1-Digest: jKvERPBaQwQ1LpiE4me1Wt3EdCI= - -Name: hj.class -SHA1-Digest: AfZXNCuH0tnkE2P1Ksrd7zPdjN4= - -Name: cc.class -SHA1-Digest: kpg4MDniJtc4IN99nmhX69SRnCM= - -Name: gn.class -SHA1-Digest: ATyKhl+pMzfE+230/wg5jsC9JOc= - -Name: mp.class -SHA1-Digest: mvyL0cw8aDwDln54qI7LDvFeSC8= - -Name: ol.class -SHA1-Digest: /In1veKHHrj258uAvVKbGpozSr0= - -Name: d.class -SHA1-Digest: HuTLE5IK0a9He4+7/tigyD6TidA= - -Name: dt.class -SHA1-Digest: l0xhwSmsCareNCPADRgzEXj711g= - -Name: gx.class -SHA1-Digest: okV5rPmygdjovv82VpymSSyStHQ= - -Name: ky.class -SHA1-Digest: W9h62QmMNfUOMvEtvdLNk/e2YPA= - -Name: com/jcraft/jorbis/Comment.class -SHA1-Digest: 4iWDZhAwsxAXtw6RLlWVcr8pNt4= - -Name: fo.class -SHA1-Digest: OiVlAT3/Eg985i1+4AsDEdLPNrg= - -Name: paulscode/sound/ICodec.class -SHA1-Digest: 4OFffQA94WhoWdCiAzbp0pU95Bg= - -Name: l.class -SHA1-Digest: R4rOfQuHNaeZtrS/XX5RtfX0IKc= - -Name: iu.class -SHA1-Digest: fMeB0oGQTaZU+qi9fr/UglYyock= - -Name: lc.class -SHA1-Digest: CymSy/GyRG32rScJ2xxCdQ1vQxI= - -Name: gui/inventory.png -SHA1-Digest: 4ujwowDhHNZ9mCDMEGuNdfz0BJE= - -Name: bh.class -SHA1-Digest: T5+zFBvamZRuoe/B4IcJCmyP0R0= - -Name: kd.class -SHA1-Digest: POTZXeP7u6jcPU8n22pnzTfgXNo= - -Name: title/black.png -SHA1-Digest: S4mcMVy3kS+DRaaSYDNzjhA6cxs= - -Name: et.class -SHA1-Digest: BBLEAX5+719nLQzHMntoma9SwFE= - -Name: qf.class -SHA1-Digest: NTjpn/KO5n7AwYHp0+RDTOr+8vQ= - -Name: pp.class -SHA1-Digest: 9hNuDY3X+X0cWobShrD0/+CWWhA= - -Name: ql.class -SHA1-Digest: 0PD5Qw4LbmgvdPPcdbT6+4YhULA= - -Name: jw.class -SHA1-Digest: yjHFtFg2f5qciXc3VmQnd9u1zqc= - -Name: com/jcraft/jorbis/FuncResidue.class -SHA1-Digest: uMcbLH0JDlMAtKhsuehFU+QV33A= - -Name: dr.class -SHA1-Digest: QC03zDo+eeooVQLxr69qcrAaCUQ= - -Name: cs.class -SHA1-Digest: Om20RVFK1iUCV+ElsTabnpAaPcg= - -Name: hc.class -SHA1-Digest: qH9VVU2S8jKTgujo09WXFKDkP3I= - -Name: ny.class -SHA1-Digest: rMqJ5xSNbbQktxr1KKcFMqAOO+g= - -Name: com/jcraft/jorbis/Residue1.class -SHA1-Digest: nX3+R3ZpqfUM1VvVJNXl/25J3/E= - -Name: pn.class -SHA1-Digest: kmVs6vaYWZpiRZpDIi4a/CwmgxA= - -Name: aa.class -SHA1-Digest: IvtXkD7CiwQbnCbaLuj+vbR9WSc= - -Name: n.class -SHA1-Digest: EnDlxLqDX/+632Siu1XzfCtV6xs= - -Name: ef.class -SHA1-Digest: SVy8siPNF809inRLXvSjE3HAdSU= - -Name: be.class -SHA1-Digest: vRqFNULEME7NKuvmDFKiW9FRbro= - -Name: bc.class -SHA1-Digest: iXhPHNlcdQgO88EW4flf4OTPnMY= - -Name: kr.class -SHA1-Digest: aPGVQKj7Ynr6jLRl6BBY+EgfOeY= - -Name: paulscode/sound/Library.class -SHA1-Digest: CV8zgv3MzNIyY0LSEykzbqbyhlQ= - -Name: ir.class -SHA1-Digest: GBF9BH4iFZkJs2PhqiYw4Ah8WOo= - -Name: ft.class -SHA1-Digest: eQZqbltIKVx4SQA3A9DEyY+dWRo= - -Name: jl.class -SHA1-Digest: xnqM7rDK7SdTBJsWjNjPED3j6mc= - -Name: jv.class -SHA1-Digest: A5VsNY57l8zPVby6/6N3YxohgMw= - -Name: com/jcraft/jorbis/Mapping0.class -SHA1-Digest: wRgv5DwDZv8LyOyR2k+N/7H50e8= - -Name: mob/slime.png -SHA1-Digest: qg1vPUWWA40Rhw6g+xFT7wp9VaE= - -Name: ml.class -SHA1-Digest: qlR+RmBIB807Hv0YgJq54XYBjWk= - -Name: art/kz.png -SHA1-Digest: OQP7OT3VfH/izhIQVaLBEoGbCuc= - -Name: bb.class -SHA1-Digest: 7M0OVI2IuEoPN2SMealb35RE3RQ= - -Name: nl.class -SHA1-Digest: ZxMgZBLjs/4vSa9wRoAYSWoGF20= - -Name: ly.class -SHA1-Digest: 7OfEt5VLSyc49G0m9sqvyNue9ng= - -Name: com/jcraft/jorbis/CodeBook.class -SHA1-Digest: zAdXZiF7IqsDMqIEf2n9q89IMrU= - -Name: paulscode/sound/ListenerData.class -SHA1-Digest: 7yVCLvmhyTiGWSAGeaap+keUojE= - -Name: mm.class -SHA1-Digest: vhkSzOnCI4N/Df967eIYm1AyfKQ= - -Name: go.class -SHA1-Digest: yzhBxZ884mbEKZKhwzizsMHBlP0= - -Name: pa.class -SHA1-Digest: HSC9fJXAK7bprnqhq9h6Qnmtkaw= - -Name: gb.class -SHA1-Digest: ma3Z3d0xQd189NUN4O5IQssK54Y= - -Name: de.class -SHA1-Digest: B0Y2wY7UkPIg8ewiCKSLTnFTHFE= - -Name: gj.class -SHA1-Digest: nd73+66BuFhZAfdwFjGkx7Y/St4= - -Name: dn.class -SHA1-Digest: /+HywWmit5RbMW1Bxjxx/FVBHz0= - -Name: fk.class -SHA1-Digest: yn15AyiIC5US31AT7keGmyDCdfc= - -Name: com/jcraft/jorbis/Residue2.class -SHA1-Digest: u7lYgdIPQZQMpBhnrdfKjeH+weU= - -Name: terrain/moon.png -SHA1-Digest: w88tAfv+1q+B+3K/1cPJYlQJrKE= - -Name: ew.class -SHA1-Digest: /thn9XUTHqTUhw/uOuNMrmcQUvI= - -Name: pi.class -SHA1-Digest: oaFNQ1DL8dWfvVM0LK2Dh4SqyJI= - -Name: nc.class -SHA1-Digest: Gyi7xtge1Ss1YIhpKxctk3syhiw= - -Name: ma.class -SHA1-Digest: xFjsSA9kdYwMxOtN21Rtl4Ss0oE= - -Name: at.class -SHA1-Digest: EuWJfb0Priqt0zXYSgglJpTn2Q8= - -Name: misc/dial.png -SHA1-Digest: 2b/rlkr7CKqcqqINpcIQRSmYBqQ= - -Name: na.class -SHA1-Digest: O0z6RrPtVbuCKsLpnvwzacBHK6w= - -Name: jk.class -SHA1-Digest: yARk9uXBmL4AEBkcQLXiX+QWuiw= - -Name: ba.class -SHA1-Digest: Hdj4j68cx9U4m8mKZVIYJ3KOtB4= - -Name: m.class -SHA1-Digest: 2HqAZOe0XT4gO7DdcKQjPjpnb8w= - -Name: ay.class -SHA1-Digest: QsmRb8DvuoNpjEN2U94Lw8wkFBA= - -Name: environment/clouds.png -SHA1-Digest: uW2vAKuM2Qz0Ma6a2d3dlPxY9ws= - -Name: ls.class -SHA1-Digest: ZcfEOAUW7+LNk1sk1LOiviboIaM= - -Name: mob/spider_eyes.png -SHA1-Digest: zUS+vyf2FHrEFq5Kq+UTasT3riQ= - -Name: com/jcraft/jorbis/Floor1$Lsfit_acc.class -SHA1-Digest: r4Cozh1xEtVC/S5MS+N2/Mj+Tzk= - -Name: lg.class -SHA1-Digest: V2qy/vYJ73LokKkncLQiVS+HPks= - -Name: mf.class -SHA1-Digest: l7bOb49wdGu8dnfUm8KgNEBsLeU= - -Name: fb.class -SHA1-Digest: BHiN2rtFA95pakgvPDhK38Cmrn8= - -Name: paulscode/sound/SoundSystem.class -SHA1-Digest: RkXUVqdapJqf/Jo8qzEfo2zJI+Q= - -Name: lv.class -SHA1-Digest: 3fMJjQpm25iCcAP2C+Ae3iHxgP4= - -Name: em.class -SHA1-Digest: 3vWcdhpF4x6ImL7HUX26ruX0/l0= - -Name: hy.class -SHA1-Digest: +Cpd3SqVWUTehQC5S1ND7lSCst4= - -Name: ga.class -SHA1-Digest: DFKjle1Ckoxp7mufoB0soF6tHds= - -Name: paulscode/sound/CommandObject.class -SHA1-Digest: UFhpnhwsOPJGEiaqWbCXZ8DUYoQ= - -Name: lh.class -SHA1-Digest: TVeyS5IJuh1X7blLB8n+49e1+II= - -Name: aj.class -SHA1-Digest: D6ZunfUjkf7dVtPVwz+8BUnCa7w= - -Name: ff.class -SHA1-Digest: 9D6hhdejogZNBvTQh5NTmdy/4Tc= - -Name: pm.class -SHA1-Digest: EaVJ1BVUs/vmkl8OxI3jG3e20ss= - -Name: oc.class -SHA1-Digest: Dw4qhx5UUioTTyRdneAw1D6RF0s= - -Name: ip.class -SHA1-Digest: RNZGtqZq7Qkp8Gd7SFT1Kkdb6B4= - -Name: di.class -SHA1-Digest: 85zDbZZNFrHSv5g3GK/aQn6IwLk= - -Name: pg.class -SHA1-Digest: mtAokQ3+JG0tLH3tOi/ygG8wB/4= - -Name: hs.class -SHA1-Digest: oijEz7FgbKocC3xOmgOuKyGEZlI= - -Name: ig.class -SHA1-Digest: GxsKMfJnx4WqZGCMMI0GKU88TVo= - -Name: cb.class -SHA1-Digest: C9BKiUaoB0JDXQ41+Zcu6vlj+2g= - -Name: net/minecraft/client/MinecraftApplet.class -SHA1-Digest: tTsXjabIwZp6HCeYYOOnV7fmXeA= - -Name: armor/cloth_2.png -SHA1-Digest: 4ptw/RkyIML9oOQs+fcNJNGnsDo= - -Name: lr.class -SHA1-Digest: 1CoeAWNFNjiZ//jX/6/obfQCLSQ= - -Name: kx.class -SHA1-Digest: QRkNgW881zY1NeCwa2BhtPaW8Q8= - -Name: cr.class -SHA1-Digest: m+tyTo6NclHx/NKBpJ/bP2OgMDc= - -Name: misc/pumpkinblur.png -SHA1-Digest: Aarb6+DRvpE7JS/GikJMPQZ3daE= - -Name: mob/zombie.png -SHA1-Digest: UyVepTsQlC384VFXTTdxQzL9SWQ= - -Name: v.class -SHA1-Digest: 5Dc1WPmYdiP/+SfnjefKq4TOyCw= - -Name: com/jcraft/jorbis/Floor1.class -SHA1-Digest: zvIyc59370P5ieG+riYQg+pvXvw= - -Name: pj.class -SHA1-Digest: i9nbRigNemvITNQKxJDmcUl0JnQ= - -Name: pq.class -SHA1-Digest: iaaZWiL1fMMDGdb0TjEeoxdmMEk= - -Name: en.class -SHA1-Digest: D8goMjObeNOhy607FI+9wKiFCW8= - -Name: mob/saddle.png -SHA1-Digest: Ug3tZCOt3+6ltx1Hd7BmG0q9InY= - -Name: ce.class -SHA1-Digest: 4htHgWUKxvSd60Z9HO5zu9+Wahw= - -Name: ot.class -SHA1-Digest: evtiP4AnnsXkByiMfXc978HLpMc= - -Name: net/minecraft/client/Minecraft.class -SHA1-Digest: V7cD0oyqqJbicbsOAgKaF4MfeS0= - -Name: paulscode/sound/Source.class -SHA1-Digest: XdJ4sBu0NVNllusz42EKnu68npM= - -Name: gui/container.png -SHA1-Digest: 2O+ltn9L22RpkRZpqhTfkcGIfLE= - -Name: paulscode/sound/SoundSystemLogger.class -SHA1-Digest: m1C6P6WvHi81UFPVlpovfFVEGrE= - -Name: misc/vignette.png -SHA1-Digest: tAIXPzrSY1pqb5u6mD9j27/4ltY= - -Name: gz.class -SHA1-Digest: X2IiPiXb7/zNVdBRN5mjyVHYR9w= - -Name: oh.class -SHA1-Digest: BmA+UFMmuuZ3HONs1cpnEr+zS8c= - -Name: ds.class -SHA1-Digest: 8jIJ/HjaHX7GTkDIeMOwiGGkiQs= - -Name: qe.class -SHA1-Digest: +UqfGkWhTWwZEht6xBHMwmKTaNA= - -Name: er.class -SHA1-Digest: Kw96UO3Q1NaS5ZOEbR4+Fd1zGNA= - -Name: db.class -SHA1-Digest: Vg73aT43QlGxmyTrtgdYmUorXwQ= - -Name: oe.class -SHA1-Digest: 2sPmGWo5FXkv8Q5/IQ9ZMVCveJ8= - -Name: com/jcraft/jorbis/Floor0$LookFloor0.class -SHA1-Digest: AEhYctNt+Qom5uchZzItWfyGQEQ= - -Name: gui/icons.png -SHA1-Digest: 4U3GAd5e9ULibnW9Sj9YIYs5pJg= - -Name: hr.class -SHA1-Digest: ciTtDe4gURxKco4RuVxig0jvwwA= - -Name: bg.class -SHA1-Digest: VCVVrX0hO8n+phjx9TZX/qk6vdA= - -Name: hb.class -SHA1-Digest: e+mtPr9AEUjnRlYQXlWNmbrFzkU= - -Name: ai.class -SHA1-Digest: FnZi/JtetrbFYlcYavRKS7y7j+E= - -Name: bd.class -SHA1-Digest: CTx88jmmSKycy25SByJyc/r7RHs= - -Name: com/jcraft/jorbis/Floor0$InfoFloor0.class -SHA1-Digest: Unx5gAoJ/Ws4ZUr4lSGY7kO9F4c= - -Name: mq.class -SHA1-Digest: ik0rXdBiO5QhAnNOOdYaahM0IjA= - -Name: jq.class -SHA1-Digest: 0AcM5lK/3lBcHloCtvausxggJuw= - -Name: bm.class -SHA1-Digest: puDRzwitsws49ItFOBqvYZBj6qM= - -Name: jg.class -SHA1-Digest: kpXJO8USAxBdqZpY+qvVGGV4PqY= - -Name: ao.class -SHA1-Digest: /mq+pK5LZ+kgjhSm0le21CVZKiI= - -Name: lj.class -SHA1-Digest: uBVAbQ9X4N93AG8jHCX0MPoaJAw= - -Name: fs.class -SHA1-Digest: kFEGMOXTwsSIb30eBxZ2dO50utE= - -Name: particles.png -SHA1-Digest: gkvCfcuYtCJ3lxofgHRhLgLPNIs= - -Name: dv.class -SHA1-Digest: NtcmkVWfOS/VUrxX9zgo61/+v3c= - -Name: oq.class -SHA1-Digest: b3kCreld6C/ki/9DhU5HX3WvScw= - -Name: mob/creeper.png -SHA1-Digest: UF6ieoABPsS6jsN2hBuK944pVyg= - -Name: bt.class -SHA1-Digest: XOejkgh9sg6YSy7ycpZbcz+Il+A= - -Name: mob/chicken.png -SHA1-Digest: fTMNRkd6OQvndwfqWObQjtxB4j0= - -Name: ko.class -SHA1-Digest: 8YJlFqD8EHURC3zMcb5ZsHN62y0= - -Name: gui/gui.png -SHA1-Digest: otlJseF6+levJs04i50YQwPB10A= - -Name: cu.class -SHA1-Digest: 7R23csMLN07v/k2aq7U6OnX+cDE= - -Name: j.class -SHA1-Digest: HMKc/olDTGwH+NkZpjBD2BT3v6g= - -Name: nm.class -SHA1-Digest: nlW/5M+LLS9JP5wq3UD14dCNohE= - -Name: cn.class -SHA1-Digest: 7o8d7eVnqu3w6RyBgb6zhQsCYn8= - -Name: com/jcraft/jorbis/Util.class -SHA1-Digest: hSnjnJSHVLq3DhhsKsYujZXiyl8= - -Name: nn.class -SHA1-Digest: 2qdRCsWWrW4VJf9SCDxTQNJws4E= - -Name: paulscode/sound/SimpleThread.class -SHA1-Digest: 23ecv4oVNhfQxUPeKPD/Aq9zpRQ= - -Name: od.class -SHA1-Digest: 5JgqYOJEblsU9XNh64TJq2Dfp+I= - -Name: ep.class -SHA1-Digest: U6kObiQk4d+HcHW+8zRaRoxDz7U= - -Name: pack.txt -SHA1-Digest: f7qFwuzjGEqP9y0Tsnc8gTq3bzg= - -Name: nz.class -SHA1-Digest: fri7NNbC8MXS9w+EdpgYImh8Gi4= - -Name: g.class -SHA1-Digest: p9QpXb3FxX9N3hOE7LBrdmY/Bfw= - -Name: gui/logo.png -SHA1-Digest: mxwCX1YNKYAFOee4ng6lRCOEUPM= - -Name: com/jcraft/jorbis/PsyInfo.class -SHA1-Digest: 5/aGhVGFShutmXoznQfRPV7UcpE= - -Name: q.class -SHA1-Digest: jRQH+ms1Geqn3Vj8g3+s3vZ35ds= - -Name: hm.class -SHA1-Digest: 5Q43TPvXp+IE/af9vO8VspCHE+w= - -Name: br.class -SHA1-Digest: PNVgGwWnUx9iJOCQGt3a1NLVWoE= - -Name: qk.class -SHA1-Digest: cLhKaAagRR/NVQXJ7bxceTWb4Y0= - -Name: ib.class -SHA1-Digest: LbvWRDfStZmqgCOpVn8iTM53Amk= - -Name: in.class -SHA1-Digest: /a1tEC9XJenjKwOzFZOEHIHG4mQ= - -Name: b.class -SHA1-Digest: TdVW/yAz/OiWmAeGJFBvoPll1Sw= - -Name: fr.class -SHA1-Digest: DH+aQvHjQUlnUnmlFWXti4cnnrA= - -Name: paulscode/sound/Vector3D.class -SHA1-Digest: J5d1r5W5WFO8w11MhenGQ1qTlqo= - -Name: jy.class -SHA1-Digest: mXOwUcef7BGUp3pH6UKJdzCrQGM= - -Name: po.class -SHA1-Digest: 9txSXvbPbYEmi1JTa0O6se3t0Wg= - -Name: t.class -SHA1-Digest: pse6IoNaCZCFYDjlxH7+9Z58OCo= - -Name: dd.class -SHA1-Digest: n3b/atjmaw+1XvG6nsXV88RVuIU= - -Name: gui/background.png -SHA1-Digest: M5z1tF4Bjk/CcT/MVJxZ40GC7tI= - -Name: null -SHA1-Digest: CyfXOAdJJYSq4MsUiezDsqrVruI= - -Name: ge.class -SHA1-Digest: pf1KaJbmQtdDFJjFUSrqNlO+uS4= - -Name: armor/chain_1.png -SHA1-Digest: tBEMf7LTnjQ/3bl6winH12DCNEE= - -Name: ei.class -SHA1-Digest: kGofq/joeFuhdRQlfAi/0wKWUXw= - -Name: dl.class -SHA1-Digest: 9lUV1EcHK+fAzpb+R6U/Qj9AKqo= - -Name: mob/char.png -SHA1-Digest: PKLLiMzvOsDbslW6pq8JNQO9lgY= - -Name: fl.class -SHA1-Digest: 3jVFseFj2qFVunc1RXaJaNH1obo= - -Name: kf.class -SHA1-Digest: iDzNRnAO1LE8BlmiF4Gp4zaISqI= - -Name: mu.class -SHA1-Digest: VNHxh+6qhZ00WmEuebR1qXMIGdM= - -Name: fx.class -SHA1-Digest: 9HxcAsmarJ6Pytz+AGecocU3554= - -Name: as.class -SHA1-Digest: 7Dfv1kCD2YMNuqjq/Bz6fXbmods= - -Name: dj.class -SHA1-Digest: XUTkwZCzNBzT99Cf5VH6bURMMvE= - -Name: ho.class -SHA1-Digest: L2w9KR1ySj8eAtYsOG57OehRqoM= - -Name: com/jcraft/jorbis/Residue0.class -SHA1-Digest: dqxMlBWjhSHpnOPy9sQ81p9uPVI= - -Name: paulscode/sound/libraries/ChannelLWJGLOpenAL.class -SHA1-Digest: 5iJq1znSpdgfWAAzR3cUsfx5fcM= - -Name: qb.class -SHA1-Digest: t1GlnkqahZsIC2WqOwOGhATMmTo= - -Name: cp.class -SHA1-Digest: qhjk8iY0fYTNoc7u1zUVzWeVxak= - -Name: kb.class -SHA1-Digest: ungs8dQ6nDHCyHqFGsI1Q7xLyYs= - -Name: mz.class -SHA1-Digest: 6w7BMRlh3IgmUtq5X9vPuoGv0xA= - -Name: az.class -SHA1-Digest: vUg8Lg2/nwH6b0NESp7fROtuI4g= - -Name: oz.class -SHA1-Digest: KPVxLOkhXycvue0xYO+wnlr4EWo= - -Name: lb.class -SHA1-Digest: IcanDUyGlY419jGtEazxvMzhES4= - -Name: com/jcraft/jogg/Buffer.class -SHA1-Digest: v2xYZUdfGn5/zBLovdbuQoQulqI= - -Name: com/jcraft/jorbis/Lookup.class -SHA1-Digest: nEjcf8At2GB0XntUkgTGMn4Oqak= - -Name: f.class -SHA1-Digest: kta06mQ6cflhpze/vAgrDjbK1YA= - -Name: bj.class -SHA1-Digest: ZHPrM81+9q9IYbOvfZQPsAJyBBs= - -Name: ld.class -SHA1-Digest: UZcoRGC7euhS1AvmEcJVHykC98E= - -Name: lw.class -SHA1-Digest: N85jEmF6IoSGbsGNopNaxoxkNvs= - -Name: ph.class -SHA1-Digest: PfTFYEBR4GYbEZeqkAq1Qg/AhSA= - -Name: ow.class -SHA1-Digest: 2BiUFAu/x0TIc6N+0FJ66YGrzOQ= - -Name: ja.class -SHA1-Digest: CMbTORMlsJC8IqBFEFHMLKZwUIc= - -Name: fd.class -SHA1-Digest: p5LeGQ8X0bvwFqmuBAXW45ZfR6Q= - -Name: gt.class -SHA1-Digest: 79H2W7ssc43Apck/6c9yJgAPqqw= - -Name: ih.class -SHA1-Digest: I/61vRq/OnK1UNOjjD8LX4zkoVQ= - -Name: ee.class -SHA1-Digest: q9dbtpoW1yUXENl51LcBhXYMsVs= - -Name: kp.class -SHA1-Digest: 2jOsWpU+KnbtqaIYl6GUBzbPjbo= - -Name: eu.class -SHA1-Digest: QKSJg8ArNvihzJ03X+lukfttOYc= - -Name: gp.class -SHA1-Digest: y0xOcGiovcB6D8BRW0OwEiScFQc= - -Name: fy.class -SHA1-Digest: Dh4DFzkqJeBA6zY8cM482+W03I8= - -Name: hp.class -SHA1-Digest: qBL6b0XR+KavgNk72WmlBKUvftw= - -Name: li.class -SHA1-Digest: pM5kTGzXlrErHQADnHabXn3vywU= - -Name: qh.class -SHA1-Digest: E1zywxljspO1Ttb7iq9hfviLtWA= - -Name: paulscode/sound/MidiChannel.class -SHA1-Digest: bWqfUBHJTei7fpt+eUYIdNyGH2A= - -Name: ad.class -SHA1-Digest: eDIkPr1ftS5kJRlu5v3x7y6r298= - -Name: com/jcraft/jorbis/StaticCodeBook.class -SHA1-Digest: Ed0qsLvEksdCC9YqR+PG1hYf+OM= - -Name: cl.class -SHA1-Digest: ytWp+K0QWOmd6DYfYi+dpRI7M6A= - -Name: bq.class -SHA1-Digest: BaJOiPVzM5Kd/AmJgoEkdd3qPv0= - -Name: gw.class -SHA1-Digest: gsHGg4wMZnYE8Tiyexrgxqrspg4= - -Name: kq.class -SHA1-Digest: XHnBAV9fpdxArS9bB5k3sCbepyU= - -Name: pack.png -SHA1-Digest: m6MPMzcDpoJ4l1/j500wDJve448= - -Name: mc.class -SHA1-Digest: CoiRjTq1C3T0u6Usdutg4JM5Inc= - -Name: mob/ghast_fire.png -SHA1-Digest: kKX2AbAM4yHRasEieDmwjth+4J4= - -Name: pc.class -SHA1-Digest: W/dGhY8KsviR8248A9HV7V/kuKE= - -Name: dz.class -SHA1-Digest: vVNqrcjVIrrl0C/N/aFf/1SZQzM= - -Name: im.class -SHA1-Digest: nKH1MaZ3j68iHS6neLbORdkls6s= - -Name: c.class -SHA1-Digest: e2ssRo/ENqvtwQPv46zZghr7VNM= - -Name: w.class -SHA1-Digest: 0ZkavJBxIuya06xkhglhGUVzqdM= - -Name: gv.class -SHA1-Digest: RYiHNLR+3kBjYijRGXPs0SQWpGw= - -Name: cy.class -SHA1-Digest: vJbgfKWjuWiK06jcKcQEUpIBqaw= - -Name: ae.class -SHA1-Digest: bUZq2xYa0PRXpPoQJU7AFBv52wk= - -Name: he.class -SHA1-Digest: QBWVezTJlkwVBncLdqz4uySyrzc= - -Name: bw.class -SHA1-Digest: yFkC3wU1r1PKdBuKeDuFrgLeAL0= - -Name: iz.class -SHA1-Digest: X/2XedERjbetDYd/dCjOZPxIo9c= - -Name: fv.class -SHA1-Digest: SsUggOE4rmxQRebSBAzlyhnpyrI= - -Name: gh.class -SHA1-Digest: rnTEBW60OkohcaacbuDzHwOjBuM= - -Name: ci.class -SHA1-Digest: SS9S21VWSOnNW8WhqagoMSQqWn8= - -Name: np.class -SHA1-Digest: mHaWJOT4ZjL707afC0PvxHK68gQ= - -Name: com/jcraft/jorbis/Drft.class -SHA1-Digest: 12d3yaC8+h6iFqqHMTq6h1dsSGI= - -Name: iw.class -SHA1-Digest: bWrPEp9f6UTkfohL3tdNDS8JpFY= - -Name: la.class -SHA1-Digest: 8FDXdJOXrSbe3NZwxac9qmLznew= - -Name: dp.class -SHA1-Digest: AeuytFCnR7dw9D/xR0ocdKk//zI= - -Name: com/jcraft/jorbis/Time0.class -SHA1-Digest: botkjjjrLBvyr19jYwHXgwDMhjQ= - -Name: ck.class -SHA1-Digest: t3joUsUyC96E3A+8JBooB139LnQ= - -Name: le.class -SHA1-Digest: zf6NtmGS2A5KrcgLwFEaZlfvlDM= - -Name: bv.class -SHA1-Digest: NvDJn9lcOgncXeM2sh2PHSDqPvs= - -Name: ch.class -SHA1-Digest: 4Fe9DYSGR8OhNY/gwL6B4elbFY8= - -Name: ln.class -SHA1-Digest: TqJ09XrbaOybYFmC4JI7qPInCw4= - -Name: gk.class -SHA1-Digest: rX7j7vg7z+ji/ZrVEWlh4ktL3nA= - -Name: com/jcraft/jorbis/Mapping0$InfoMapping0.class -SHA1-Digest: WFcy1yVna7zOxHIz2H7VRvfwlmg= - -Name: ix.class -SHA1-Digest: r/jrKJSLfTJTOxWnzvimWOcWtpg= - -Name: fg.class -SHA1-Digest: knSEA2/n6+xXZqb+aVZvIlkbQoU= - -Name: ik.class -SHA1-Digest: hNhEWvpdyg76NYHDH5bjowPGau8= - -Name: misc/shadow.png -SHA1-Digest: p9c/V0Zj89BYHB3blNNKk1CYe94= - -Name: ov.class -SHA1-Digest: U6UmdVeoOtGDO2f3Y4Cg66m/YCE= - -Name: qd.class -SHA1-Digest: 61y1MP826QugNKP7bWsfrdjSQ5s= - -Name: cj.class -SHA1-Digest: OphrNLh+RK04E8oaYTEiGeFVWTc= - -Name: on.class -SHA1-Digest: Roh4cJx148QR4Py0IC0mgKWdKSI= - -Name: com/jcraft/jorbis/Info.class -SHA1-Digest: ZAUVNUqWAo1SyHmFMk38/9X35nY= - -Name: ji.class -SHA1-Digest: pfyyCkS8rWy17WPyqyQLZd1mpbc= - -Name: ju.class -SHA1-Digest: hM2PDhh0rGvdKK5cnD0h5Yo0CJI= - -Name: lz.class -SHA1-Digest: zzWu22Ky83+8UZbMeheG+YWRY4I= - -Name: nf.class -SHA1-Digest: IoRlvZb7SFb97piGjobixOLInQE= - -Name: com/jcraft/jorbis/Block.class -SHA1-Digest: uGE76EiUfrn2Ci8svKULo2o4+s0= - -Name: com/jcraft/jorbis/InfoMode.class -SHA1-Digest: s9YbOSF4DP0SNqYYnT2qOI4nSug= - -Name: misc/water.png -SHA1-Digest: FwX5byX6u8nMwoX1GctTeqDYqaU= - -Name: og.class -SHA1-Digest: U3o/ivGQK8lWYhOipu8dgw3GHno= - -Name: gg.class -SHA1-Digest: ChEVKz9zZm08yybMxnKACJmv9wo= - -Name: cv.class -SHA1-Digest: xWtU3qoubDji+ogJqx1hmRIk9rc= - -Name: com/jcraft/jorbis/Floor1$InfoFloor1.class -SHA1-Digest: EiDTSJPpMTsdgUioKH2+WeX6Cz4= - -Name: armor/diamond_1.png -SHA1-Digest: L5SqojOjnA0xvFc6xMHBluEuLLM= - -Name: gm.class -SHA1-Digest: FRJ8wJ9yfHUDU+mwEXlc/svQ3Kw= - -Name: k.class -SHA1-Digest: dQlEauwKjTVMlNvMaBLqw5H4DpI= - -Name: pz.class -SHA1-Digest: mUC4W7NBtam9ZCIgytrG6EHj6to= - -Name: font/default.png -SHA1-Digest: 358OWaSEnJuhOl7cgXV0UlpA5DU= - -Name: iq.class -SHA1-Digest: IPNgh/E6nsSAe/ZvMHhMrAU3ltE= - -Name: kg.class -SHA1-Digest: ya2Gb3sY2EfIym4BD9+fOl4AELY= - -Name: paulscode/sound/libraries/LibraryLWJGLOpenAL.class -SHA1-Digest: 7KM/hvuwDUaMSyZ+HQR4HTpfrGc= - -Name: com/jcraft/jorbis/Residue0$InfoResidue0.class -SHA1-Digest: Bbu+s9KHKZSY4NExdiE/ebq5cLs= - -Name: e.class -SHA1-Digest: IfsjDCEODb8je+SQ0mSG0UTInl0= - -Name: bz.class -SHA1-Digest: PQ7IpZCLK/dSYcEXe3Fi/p8cvUI= - -Name: oi.class -SHA1-Digest: qqlgizVRT2CjzCMJyKgMyYFhL6c= - -Name: ax.class -SHA1-Digest: +abaXrOC2izYkqx3O7BXO++yWjI= - -Name: ha.class -SHA1-Digest: WGJiwjnH4kpeOJY2cnKlkHO9ltM= - -Name: mj.class -SHA1-Digest: 1jUzYc2bb2xE8rGTKPr4DTSbdG8= - -Name: hk.class -SHA1-Digest: 5OI4uA/Eq0E1RkJrB76h5DcdhiU= - -Name: kj.class -SHA1-Digest: /s8wEj8M2trYcQidKUjaias+vJE= - -Name: qg.class -SHA1-Digest: t4bCDlcRrATtoJyY7YJD2RIC6c0= - -Name: com/jcraft/jorbis/Floor1$LookFloor1.class -SHA1-Digest: kHBYGWzAjZfTS3tkLH71q/KgYAM= - -Name: nt.class -SHA1-Digest: WoiIndpzmpewIarAh5FFO+o759Y= - -Name: mob/ghast.png -SHA1-Digest: uBMy1e+eXbf8+s3re+jjvCCuxAE= - -Name: eg.class -SHA1-Digest: G6aWFyl6GJv9pOoEphYdy1jpRkE= - -Name: ar.class -SHA1-Digest: EHu/uHmxb+vWMX/BMXUKEpFWHG4= - -Name: kn.class -SHA1-Digest: 0/63/UJDy853+IctBbEVsIKfMNs= - -Name: bo.class -SHA1-Digest: NpTVVVpjefhphTJCmzdwdcgk2Mw= - -Name: af.class -SHA1-Digest: v0kGtfysOKvrwN0xi+hqvFNiCGE= - -Name: title/mojang.png -SHA1-Digest: eEMeSzfy6TLcVnAnLjw8jPidCgI= - -Name: gy.class -SHA1-Digest: vA2Oujx88GvAzJMHULpDMfoEI/c= - -Name: terrain.png -SHA1-Digest: mNZUcZ71vlPJ5gAFYwA/gPOJI/0= - -Name: py.class -SHA1-Digest: 0C8kvUoKO70aHihmQBe0ZT6EMGA= - -Name: of.class -SHA1-Digest: 0BhEatv45N2NUTQGnh8iGLmWZlE= - -Name: ok.class -SHA1-Digest: kI2QxB25uPLfvbSSeMdx1CYTo/0= - -Name: fh.class -SHA1-Digest: s2tldh7268+CUQx+IoJR7IU+yME= - -Name: misc/foliagecolor.png -SHA1-Digest: LaKC+OcbYY4Hsoiqg091TQ4iBys= - -Name: an.class -SHA1-Digest: g8qiCMCMX8RHE8o+BO+ZLtwN+Vg= - -Name: aq.class -SHA1-Digest: W4Sw+HyUG8vmU02WuaR1WnwTzBU= - -Name: hf.class -SHA1-Digest: t/8U6FvqIb8qyIdUHNHcVbtYMHM= - -Name: kt.class -SHA1-Digest: SNF8Z4Whi5lGYOGko8uwOFDEbUY= - -Name: ke.class -SHA1-Digest: cb94f3OOAPyt9Otjw5GHS67+O8s= - -Name: armor/chain_2.png -SHA1-Digest: GDUY6ASty73Gvh3Cq4ckUEGO92s= - -Name: gd.class -SHA1-Digest: Thx17Vb2wiA6dzLb1OXOtfCdjyQ= - -Name: bp.class -SHA1-Digest: EHoXEbwI1uvmesmpeoOYg0hF2ZU= - -Name: kz.class -SHA1-Digest: JXMwneKxDlCe640W2e0WvfUIekA= - -Name: mob/pigman.png -SHA1-Digest: yFg+hHcoAE6vOQpehEJHLcxsQsA= - -Name: hq.class -SHA1-Digest: E/tumSMi1Xb2o9jMa45LD1B2+Eg= - -Name: ne.class -SHA1-Digest: d14Fal+UtnT/TDIOv8ornGgYXso= - -Name: nx.class -SHA1-Digest: BKRK2F9zH5yJNr1m3szreXDHXJQ= - -Name: mv.class -SHA1-Digest: Ynd1AZt9284YFH1m8P5K/ujnc4g= - -Name: ll.class -SHA1-Digest: djUxJxYlROKAbEBjtOSfjplo98A= - -Name: dy.class -SHA1-Digest: mcpj81ZNqdMAw7XrOrwm8ufxNZM= - -Name: paulscode/sound/CommandThread.class -SHA1-Digest: 4rWCd1hOxmeznznlRwQ1VxTXPbs= - -Name: ed.class -SHA1-Digest: KiwyU9T0Icm7DnwqprKKnppNa1Q= - -Name: bf.class -SHA1-Digest: 6EE1QPzFH0RQpFQeG8DN8Ux1+k0= - -Name: pu.class -SHA1-Digest: af2n2tM7TOtvFA1kCisr2r70yPY= - -Name: gs.class -SHA1-Digest: oCqBm5/Gshi7EjQWVOP4OwPensQ= - -Name: jt.class -SHA1-Digest: 0d2l7+aZuHsCYGpI2tG+9SRaqHY= - -Name: lo.class -SHA1-Digest: 6pbNXF7XjmvSN2maVdt1n2zMuqo= - -Name: bl.class -SHA1-Digest: TxJgPRg+AYDM+TP/Aj/Q5/tmcKI= - -Name: nd.class -SHA1-Digest: Va5oU8V3HR3J4sto+eloWkeA2f0= - -Name: armor/diamond_2.png -SHA1-Digest: zDF6Lmh3LCkvuplelANAFdIv3wU= - -Name: armor/cloth_1.png -SHA1-Digest: PmYk7pkZIfjG9ONzgOPUW8YSDLc= - -Name: px.class -SHA1-Digest: 30ZUlulmtEEITVrUmzZqbM+h9w0= - -Name: lq.class -SHA1-Digest: fZ5qKHNd1EK8YpR2zUnLxeoRv8w= - -Name: kw.class -SHA1-Digest: E+50nnF1h8CryMYNfTknMQJzGIk= - -Name: kk.class -SHA1-Digest: vWjRIwc7uZAQr3rR/GxKICz4OTs= - -Name: armor/iron_1.png -SHA1-Digest: peIb5JP1Bk7Vq+0nLtCA0hI9xko= - -Name: pe.class -SHA1-Digest: QgDE/vdCNI5mAh/vJ4AJ879xUIg= - -Name: ec.class -SHA1-Digest: FueNV5Q9UDWEDfLcpEqUHi10VPc= - -Name: dq.class -SHA1-Digest: gp/jidNu4QPD33ODKmnqX5ZmVB0= - -Name: je.class -SHA1-Digest: YR9KrnfGqU1EaFX0pqSq/W5nNOQ= - -Name: com/jcraft/jogg/SyncState.class -SHA1-Digest: uDr4GZdNxoEyehk8wk/wxNuegus= - -Name: ct.class -SHA1-Digest: cB0W/V08gHyzk6W/WdTQB0gwn2A= - -Name: lu.class -SHA1-Digest: /GSH/mTfd07iLd3IlmNjcbfNZ0k= - -Name: com/jcraft/jorbis/PsyLook.class -SHA1-Digest: cB4xCWY+KBAofyMXtEHMbA9BeLY= - -Name: fm.class -SHA1-Digest: tr0MhzYT0KTpL9iggVwkb3HulHs= - -Name: eo.class -SHA1-Digest: V/WCZFIxRc3auRr4wr5LUG+rmjU= - -Name: cz.class -SHA1-Digest: Vw5LsM9QUrErLTEJ5t3jpiHQ3BI= - -Name: mob/sheep_fur.png -SHA1-Digest: 0hxIrQykC9FHG45VjF3Sn8t5HdI= - -Name: fu.class -SHA1-Digest: +qSr6VlTEg3cIgPXKgBU/GPK2vo= - -Name: paulscode/sound/SimpleThread$1.class -SHA1-Digest: /+PanQG6BsqL7x9LCDSUOqSessM= - -Name: ca.class -SHA1-Digest: xK7ihXqUvPfDXQEUwOv4BP3uamw= - -Name: paulscode/sound/libraries/SourceLWJGLOpenAL.class -SHA1-Digest: 7Xkqmd4w6i+EwoGwr6tGnanBDus= - -Name: ah.class -SHA1-Digest: 55x4F7O4ka3m4e1Od11lGY987MY= - -Name: nq.class -SHA1-Digest: 0FSf5PN6zUO0b/7t3zDvnUXhOg4= - -Name: ej.class -SHA1-Digest: B47uUztqs43JOpmnwUgJa/yvhvI= - -Name: os.class -SHA1-Digest: 9WVT0njB/wbEvWVPb78WYNsjdXo= - -Name: item/cart.png -SHA1-Digest: 4ustDFtfnvImUi1JA9hLTov/ZfQ= - -Name: com/jcraft/jorbis/Floor1$EchstateFloor1.class -SHA1-Digest: Pd7znkKb2945RpoirzjkFhDMLys= - -Name: pr.class -SHA1-Digest: Y4bVuxN9n9KKX8xSwUhpWQGmcw4= - -Name: ni.class -SHA1-Digest: HVeSJqrQA5HXqK9TCldftA9OktQ= - -Name: jz.class -SHA1-Digest: GMwFCbvFZPYOsXI/mwLbqk0aGcg= - -Name: cq.class -SHA1-Digest: I0KwdIRtYGjiRxhu6q9A7PDPLUM= - -Name: misc/grasscolor.png -SHA1-Digest: rnNhx7HK50I7G9J3cSRNHBmV+DA= - -Name: com/jcraft/jorbis/Lsp.class -SHA1-Digest: N82tIuz3QbdueW56lc8H6oTNtIM= - -Name: cf.class -SHA1-Digest: 1O7y+Ko4eGmmqNgH/XC1HfYa2fI= - -Name: p.class -SHA1-Digest: zkFzeKL1IgHYGmT8a6qzukqtsa4= - -Name: ii.class -SHA1-Digest: GS0g3eAcLTKpMjgsLG3cYAMmsZs= - -Name: fn.class -SHA1-Digest: hkrLIWxkDdcujIfw8C3UcejVJaI= - -Name: mi.class -SHA1-Digest: Re3PIN6nmF+O75YT79kBkL7e+As= - -Name: qc.class -SHA1-Digest: jzKtXwC8y31IpVLThYGlpR7LpIE= - -Name: gi.class -SHA1-Digest: 2WXX8rKJ/+OnxCnyw+5N3W+0qJ8= - -Name: ic.class -SHA1-Digest: PZ6QmInP7NUMa3Zz6una03Kye/0= - -Name: cg.class -SHA1-Digest: OYebEKdFmogzUSHisfIwjgytyrU= - -Name: paulscode/sound/MidiChannel$FadeThread.class -SHA1-Digest: XN4OON524HHHIugH5OW3rJS+BFA= - -Name: km.class -SHA1-Digest: A5Nw2FDIEtAuVebkuE2WIBmAJ6E= - -Name: it.class -SHA1-Digest: bDkrfWlEOjPRvGtdLEOo4k3jNe0= - -Name: bk.class -SHA1-Digest: EIN3v9RSz5W0E5PPyDE6cES2qmg= - -Name: jc.class -SHA1-Digest: 23VVwbPn3xGZNN+3kWSeRjaQ2QE= - -Name: paulscode/sound/codecs/CodecWav.class -SHA1-Digest: VG68FfqhkArBwnRM+JaWnIhwcrY= - -Name: ek.class -SHA1-Digest: H3xZrm+NyxkDGRlZ1FEv/ZgLAX4= - -Name: z.class -SHA1-Digest: 9rAmxNmrO3JXQFLx+RUfNo7a+6w= - -Name: mob/cow.png -SHA1-Digest: MAl8fVbz3qULSId2jriuXDvYDEI= - -Name: gui/crafting.png -SHA1-Digest: 6oQ6loTGzZKw0NtAEMbTyN3moAA= - -Name: fz.class -SHA1-Digest: jG1RQ7RWUiNmuUMtV8RvUQYMmE8= - -Name: x.class -SHA1-Digest: fiU+uPoRYJ/9YyfriqKbFSEWb68= - -Name: jm.class -SHA1-Digest: kiTSq3dfrfzoOKJVveRutVgO5ig= - -Name: ey.class -SHA1-Digest: iyWR2h3RCakHCpiZrWq0oAVD8+0= - -Name: hd.class -SHA1-Digest: /vWftxTqEMAoyVr317mubrYEOSw= - -Name: bs.class -SHA1-Digest: GXNm3XDY2LeapGNUnlX50gxppCw= - -Name: jf.class -SHA1-Digest: dEqp6Gqvy/3ElzkOhr0KZd6rgDg= - -Name: is.class -SHA1-Digest: sMJssscjkEuqt9DUNAT4PLfeHMo= - -Name: fp.class -SHA1-Digest: sjEUw1xE6nyU6EXD6wRO7tRSr5g= - -Name: mob/pig.png -SHA1-Digest: poWWhKMOkkwBcgnP77dsGOoNQIU= - -Name: com/jcraft/jorbis/FuncMapping.class -SHA1-Digest: TeDwwjonZNBbgD3vFgQG6Wtycjk= - -Name: dg.class -SHA1-Digest: a+Gql8VAAe/pqL3yG/dYoWNyosI= - -Name: ap.class -SHA1-Digest: LjwbDczz1jM0w9j16SMeFDDQ1k4= - -Name: pl.class -SHA1-Digest: nJxdy2JuxiKE+b8LbCNa3WGox90= - -Name: com/jcraft/jogg/Page.class -SHA1-Digest: iDyfCZ4x5IUBzDmjk0k55MNuvR4= - -Name: jn.class -SHA1-Digest: MsIc41bqxRzZnlYQYqcPsQpRM2c= - -Name: eb.class -SHA1-Digest: Fb3ScTTWG/MtJrkov8QD05Xh8D4= - -Name: nv.class -SHA1-Digest: 2xyt4jxAcmQPjyWBM8UI+UD4aXM= - -Name: op.class -SHA1-Digest: 38PHbrdFFwSpMYPxmjpZOvUF63s= - -Name: lt.class -SHA1-Digest: p0RhHm7mQh7am0YuJk9vl/UuySk= - -Name: cm.class -SHA1-Digest: 0b7y0M0bpkqxqHQF18xy9/dx2uE= - -Name: lp.class -SHA1-Digest: jmjrCm0u34OMl4PkGJ9jrRPM+vs= - -Name: lx.class -SHA1-Digest: Jq3ttuXRcGi2aHCK+VkRVbBMRdI= - -Name: lk.class -SHA1-Digest: Hwy/YW61ZAgzogVR+Sb4o1sbfGg= - -Name: jj.class -SHA1-Digest: 4O/c33sBN8rq86R4tPJ5TzdoUtM= - -Name: ng.class -SHA1-Digest: yl0WiC1kMfESxVGe7EXu6MJNOUo= - -Name: oa.class -SHA1-Digest: qYm8RyZWffIVLHtfH06Z+cVyKCc= - -Name: kc.class -SHA1-Digest: Q7Wew/Jz2Ghq2pdxvCetesWJ8xs= - -Name: oj.class -SHA1-Digest: s/NUy5vHXke9vPikjEj//YEcp9I= - -Name: oy.class -SHA1-Digest: HzJzl8ibkL0RBkCxWfgSxb9nxs0= - -Name: title/splashes.txt -SHA1-Digest: mTUHUhKmveRGkO3x1DWFoppRK20= - -Name: mob/skeleton.png -SHA1-Digest: BZISu5+MOba+0+fs0puOIhbxsW0= - -Name: pb.class -SHA1-Digest: fRxvnkjGsFiWuXibZW78xctU+yc= - -Name: gui/items.png -SHA1-Digest: W8NLXDn7r2p0DItmL6jPZGJuxGo= - -Name: qi.class -SHA1-Digest: ZMOFeEvd3TTPVhSxTJFwGAU60BI= - -Name: ms.class -SHA1-Digest: keey9VtUYYMgJMQH6m35xH4v/sE= - -Name: qm.class -SHA1-Digest: Fzd+Nlh/4XpGdOSKotOFZRfOPR8= - -Name: com/jcraft/jorbis/DspState.class -SHA1-Digest: K6AWoe2wm2Dmfijpg7/XNsJowzs= - -Name: armor/gold_1.png -SHA1-Digest: S9K6i5/rhI3ymFbdKOssP0NcV6I= - -Name: nk.class -SHA1-Digest: +zAxyb8VHIvzJz58XzPdF/AZTzc= - -Name: dw.class -SHA1-Digest: hesWIikIPXI2i0I0P2og/m3znAM= - -Name: pd.class -SHA1-Digest: Dhkfrrn3DLP5ekPoIHUYxMQ2pKc= - -Name: if.class -SHA1-Digest: 2s12O80sc71bc7awR+zR9wVzqeo= - -Name: mob/sheep.png -SHA1-Digest: 1bEEzD9yzD9xHJ0krm/HbNz9220= - -Name: gui/furnace.png -SHA1-Digest: jNksPrGHasTvy/PuhUjuc12uwL4= - -Name: com/jcraft/jogg/Packet.class -SHA1-Digest: eFmKa3f5bt7e7OtaYxhcCBNFupU= - -Name: jr.class -SHA1-Digest: 80dAvPFJmWowd/GDdWPbWxHGBO0= - -Name: eh.class -SHA1-Digest: vLg3hG5C4duhFNrh50qBOi0VO9s= - -Name: nj.class -SHA1-Digest: w//scQhIyd7za8OPFnG81w+c50w= - -Name: ps.class -SHA1-Digest: bms6ETC/qhOODaI+g20l9yDZ9p8= - -Name: com/jcraft/jogg/StreamState.class -SHA1-Digest: EcewTOdOrfLUalY1MKLqvpKLnto= - -Name: com/jcraft/jorbis/Mdct.class -SHA1-Digest: i01FbGtrTyDdK/R+EJyI+wLbTj8= - -Name: id.class -SHA1-Digest: Mfqr1Z1eiPXi6Q3Pu0KYCa/3yuA= - -Name: ev.class -SHA1-Digest: 8dkv3bYPaU5rl1ycWqf+zgDuKms= - -Name: item/door.png -SHA1-Digest: dexEaxuUqFi2jZc+eJhHj8YS0F8= - -Name: jo.class -SHA1-Digest: EcdrGqT8MTc1cYMHus8JK4WbhVY= - -Name: au.class -SHA1-Digest: kO/UmhaaBpl+UPTZqH8XRfabqdI= - -Name: h.class -SHA1-Digest: r5j2o1AhNkHVj6m8rwFxfdcVvHE= - -Name: qa.class -SHA1-Digest: WgKD1WxPumuhcjGBUATrz4cg0o0= - -Name: el.class -SHA1-Digest: 8R224OE71LORLIVdXXDfswAiJxc= - -Name: du.class -SHA1-Digest: +2ILD9nv1rFDFjOj/dfI0/2ZRTA= - -Name: mk.class -SHA1-Digest: cjjl2GcKE859Q7Jue9HyXpl4UNM= - -Name: paulscode/sound/SoundSystemConfig.class -SHA1-Digest: n62ZP7zwSmNzrLpXdmkib5CW3a4= - -Name: es.class -SHA1-Digest: r69oK5X5DGYxizsuJ3dv9h/fALo= - -Name: mg.class -SHA1-Digest: 7kNPRMUVcimzsSOijLHlp3+7jqI= - -Name: com/jcraft/jorbis/FuncFloor.class -SHA1-Digest: M12xq16JrjqQORSO5RS7yUZd2qE= - -Name: com/jcraft/jorbis/Floor0$EchstateFloor0.class -SHA1-Digest: QntLuK+4Kvha0MI4ju+dgKp/MNU= - -Name: gr.class -SHA1-Digest: GiEUHk5MQdisj41b8piMnngJhCQ= - -Name: com/jcraft/jorbis/Mapping0$LookMapping0.class -SHA1-Digest: w4Fw8KeIFTGIeUhOmpsnvvGYg+o= - -Name: df.class -SHA1-Digest: /G/doOJj6aXICl9+thwk6xpCG4E= - -Name: al.class -SHA1-Digest: Sgz73juotoR0UOddGm4EvGYON9g= - -Name: hh.class -SHA1-Digest: dvPutxeEEO/6lBrPJKqbm29HnU0= - -Name: nb.class -SHA1-Digest: oo+0KoHgTEVs81K3eO6DnoihBdM= - -Name: nu.class -SHA1-Digest: dmNyfPRbYfm2S6J04ZlmWNVyo14= - -Name: i.class -SHA1-Digest: 9Qj0n29ATcYg2x4tndaTBSBlMz0= - -Name: ab.class -SHA1-Digest: +T5hQdpcpYFCwPIr90A2/9asc74= - -Name: do.class -SHA1-Digest: t7nxdNJSFgCZrmoEuWhmu6iqCWA= - -Name: dk.class -SHA1-Digest: iv3X7oq4wPR2a9A3SOdyQIC5tSM= - -Name: gui/unknown_pack.png -SHA1-Digest: VaC0z78yWNZwMSbzn/sTznLiO4c= - -Name: environment/snow.png -SHA1-Digest: encK6dCSWJE5GahHWXQsqP2lhSs= - -Name: dx.class -SHA1-Digest: 7f0mv2PiyEidv5LA7i9VaQX/NnI= - -Name: paulscode/sound/SoundSystemException.class -SHA1-Digest: VN6UAiwpKeD5ZLqTLovDqk04vmY= - -Name: ks.class -SHA1-Digest: fuZ5asNKuCVbnlAqpOW2p6kVatQ= - -Name: ou.class -SHA1-Digest: Qlf/d/irDDIU9v9bFjWr0HGnjeg= - -Name: da.class -SHA1-Digest: xIN9pwplhY2lmOCjASI50LOJiws= - -Name: cw.class -SHA1-Digest: yp2/GCKLkfIMTrSrFdAERRIRQ2s= - -Name: u.class -SHA1-Digest: hViZBKIAk9HIrnvRnlChOB7SH9g= - -Name: pf.class -SHA1-Digest: R2cROYNyaOmTX3VvOaxxwRbfVkk= - -Name: fj.class -SHA1-Digest: CsLyoWG1DodkhlOv3EIhsvZEhDw= - -Name: kv.class -SHA1-Digest: WtTZN4dLBT+eIZHSAAlvAdgnMz4= - -Name: com/jcraft/jorbis/FuncTime.class -SHA1-Digest: h6MEG4T5k9koW54dkMVQ2Q+PYG0= - -Name: ez.class -SHA1-Digest: eW7NTie9NlD0MPBDYLuu9rrZF1M= - -Name: oo.class -SHA1-Digest: pMSlpXrkdHESN/fpt+yw9SQ4bRI= - -Name: dm.class -SHA1-Digest: 1zyDLPHKjMVGICJ/9GI511TcRYc= - -Name: ka.class -SHA1-Digest: E7qR3+kMfObrBhHrcQlKHcfxniY= - -Name: av.class -SHA1-Digest: Z5mzwq0CEBz0zonfQzs+pooQYK0= - -Name: eq.class -SHA1-Digest: tReHHff6/TIzXp4F2SeIzO/viao= - -Name: js.class -SHA1-Digest: aWiAepKdfU1HpyURGXJK7cQGSzg= - -Name: hx.class -SHA1-Digest: vbHEAx7VB3yFPhfkL4xN1UrefLk= - -Name: hg.class -SHA1-Digest: xYTZBn78Jkrfwse0o5atP7wy9oQ= - -Name: ht.class -SHA1-Digest: b8L6aR7w78jL0FBBwfRWbGD3cok= - -Name: ag.class -SHA1-Digest: mgeRypGz/yuleeS05zP5kZBOjkA= - -Name: paulscode/sound/StreamThread.class -SHA1-Digest: 8vqesEOj6LaK4NlEP2L9+dDtrSw= - -Name: ie.class -SHA1-Digest: iOuFMNQaaXxmak0XikeackNyR14= - -Name: y.class -SHA1-Digest: WMrBPSX07vVDCtfk950+QpNYEE8= - -Name: no.class -SHA1-Digest: lYWzdkbXZbJdKjRm1nBhhQbs9S4= - -Name: item/sign.png -SHA1-Digest: iJrTBIheTr2xSk2adBLc2pWhWwY= - -Name: nr.class -SHA1-Digest: 90PR7T2JVWs0oTn04onYas+TMlU= - -Name: ak.class -SHA1-Digest: WepwcANTfwR8AymCghOWvwbqRtI= - -Name: fw.class -SHA1-Digest: buVGf4oHsgaXcY6PIG3m1CajKho= - -Name: paulscode/sound/codecs/CodecJOrbis.class -SHA1-Digest: zcqd8ulmDiUgL0ukIMoO5MreLn8= - -Name: terrain/sun.png -SHA1-Digest: SFEIBZ7TQXcQA2K+UWDpwNq4tBY= - -Name: environment/rain.png -SHA1-Digest: WWDBOIhcsdFffYqsXVFzf71YY8k= - -Name: armor/gold_2.png -SHA1-Digest: l6gONukjfJqIUBf+F1JpqtQ+B14= - -Name: net/minecraft/isom/IsomPreviewApplet.class -SHA1-Digest: 34vCjl8mbLNoDr8oGdXNlx+7cQA= - -Name: hi.class -SHA1-Digest: hwyTh1fDxik/bqmNnPJKtr7OfNU= - -Name: armor/iron_2.png -SHA1-Digest: ysALX9siRw4eb2Da4IAq0XO8bj8= - -Name: iy.class -SHA1-Digest: 4/W6Mu/Zrkw0BWPx1VHT/BBYWes= - -Name: item/boat.png -SHA1-Digest: Jqo2ngeHwoEv6FftizHURBE9upE= - -Name: co.class -SHA1-Digest: F5Bb9QvdqJWXr5dAiocNMKmkTHE= - -Name: qj.class -SHA1-Digest: NiPzgJtuIuw5Ir/nO08Cp5ErIYk= - -Name: lf.class -SHA1-Digest: uQkIQS7lLYcA3q1tHQLf37csugc= - -Name: bi.class -SHA1-Digest: F4Hw+Fn+Gix+KOjVW8Bak0ajGCQ= - -Name: nh.class -SHA1-Digest: k0QT9iKGN79TdIyOIEwbJhVYuGA= - -Name: mw.class -SHA1-Digest: tQ3iO7Hl20htjbxUP4uIY/3AX1k= - -Name: gf.class -SHA1-Digest: URlPHCIvxM1YPWVW7SgJlthPeAg= - -Name: hz.class -SHA1-Digest: ZkZppevo3o7bvifFW82rd9MHJMQ= - -Name: ia.class -SHA1-Digest: GGd6/IZVr8tcT5l66YJDRgu9JVI= - -Name: o.class -SHA1-Digest: o/cCaxpkhsQMcq6nEhsnf58bNvs= - -Name: hl.class -SHA1-Digest: nyNLAU6FAuQrk+fAJbB9JAFdKx4= - -Name: om.class -SHA1-Digest: ytPDwqL+2hDzgH0tcJTH7774p48= - -Name: io.class -SHA1-Digest: PxKgj4TWPBYkni3vzp+cHvJ+49I= - -Name: or.class -SHA1-Digest: BDAM1bSJ/N3PyBt/eLGGSy0+oeM= - -Name: paulscode/sound/Channel.class -SHA1-Digest: JODeIPAjSA9X5kE7npwrjfox4JQ= - -Name: ob.class -SHA1-Digest: /AKOjKhzumsSgV0suvByzK6kBfw= - -Name: mx.class -SHA1-Digest: PsCbq7B85bkpv/ZYNV0jjfVqxNI= - -Name: mr.class -SHA1-Digest: GUISBEO8Jv5dPtwO1JmgpDBEopQ= - -Name: cd.class -SHA1-Digest: o1ZJiiFoHWRYKnmII1CkeqVJv58= - -Name: am.class -SHA1-Digest: MQ2AP7V6k6xBdtQInvAFrr1VINE= - -Name: mh.class -SHA1-Digest: WqTTq+TZQop4LM0dz83MgapBR8s= - -Name: md.class -SHA1-Digest: R9UHwLiv0iENOh+GADeUm+ix1mg= - -Name: fe.class -SHA1-Digest: nFKE1nMa4PJxptVWNLb1II/UE3o= - -Name: jx.class -SHA1-Digest: O8lrDK4h6IFZ1uSGe/mcrp3hedk= - -Name: jd.class -SHA1-Digest: UJD8cYaqjD1nW/1WJm29dDEBXWc= - -Name: ea.class -SHA1-Digest: 1LeX5OnTqvnlrhfoyQI+OYyHZgw= - -Name: ox.class -SHA1-Digest: x92MfhhfPWvu7eL+/yClnIhU1ME= - -Name: pk.class -SHA1-Digest: rgS9n1FscetCy11u0lBbKP9xUI0= - -Name: mo.class -SHA1-Digest: mja/afQNr/smYemRIg0Yhi3lphc= - -Name: hv.class -SHA1-Digest: F4IkQV3HnR+J1J6VCIJg45b38aw= - -Name: cx.class -SHA1-Digest: QeD4vHon+rjpPlFOJlYVNvJ7IJA= - -Name: jb.class -SHA1-Digest: f3dji6yKBOBbv48UCJxdCTxkYgo= - -Name: paulscode/sound/SoundBuffer.class -SHA1-Digest: M7gcO17vNINPkbN00TFOSCfSlrA= - -Name: com/jcraft/jorbis/Lpc.class -SHA1-Digest: YXcyS4Y3Pf5jN5d/mFH5D94q3oA= - -Name: my.class -SHA1-Digest: vttZ+evdIXUFdxraMVVSBzDULuA= - -Name: fq.class -SHA1-Digest: G0r78xA/zB/i1hXQ9q1dtvOz6nY= - -Name: gc.class -SHA1-Digest: 2/QQWT7WJr3fD+QR5QLRblfkqB8= - -Name: pv.class -SHA1-Digest: 17KH19tJMsYamJ6CEI4XR3qxjCo= - -Name: by.class -SHA1-Digest: R8gmXRawgX0g2rKdplQ9LR6hM/o= - -Name: mt.class -SHA1-Digest: CzBo5dGslshaRtwYNVS9cUP6EWM= - -Name: me.class -SHA1-Digest: /Dx7+nq/BLfn2csvrFdp0O7pF/g= - -Name: ij.class -SHA1-Digest: SAzM9ooVj/9nZEh3E/VG53RZ334= - -Name: com/jcraft/jorbis/CodeBook$DecodeAux.class -SHA1-Digest: 1cUuI6ciXo0b2C9AdaZ5qd4J/vo= - -Name: fa.class -SHA1-Digest: excB+C5UBHtUWJWBwyUdTTSlTCA= - -Name: com/jcraft/jorbis/Floor0.class -SHA1-Digest: KAjuFAFXvvcUyjpOMoUdDgk0OOU= - -Name: ku.class -SHA1-Digest: Jp61mVla0tQnFB3UVF6QkwZi9XI= - -Name: kh.class -SHA1-Digest: Akth3h25BA5h2LLugiR/bVZF54w= - -Name: pt.class -SHA1-Digest: N9OMF7504rDoPRsInoq6VedHXx8= - -Name: nw.class -SHA1-Digest: C2499b9DLIRJhTpnT514ZGDvT3Y= - -Name: aw.class -SHA1-Digest: gEJbQyr9OBi5NH83R/FLIR5KLwQ= - -Name: paulscode/sound/SoundSystemConfig$Codec.class -SHA1-Digest: fU91ZZ0gIEEDo0952AU9BnjtAac= - -Name: mn.class -SHA1-Digest: wuByrAwnFwVp7f6tb6LSzZtQeAY= - -Name: ac.class -SHA1-Digest: 3gO/Ia+n7VrRi4iwSIIZJ6Io9eU= - diff --git a/resources/armor/chain_1.png b/resources/armor/chain_1.png deleted file mode 100644 index 3632af5..0000000 Binary files a/resources/armor/chain_1.png and /dev/null differ diff --git a/resources/armor/chain_2.png b/resources/armor/chain_2.png deleted file mode 100644 index 330425b..0000000 Binary files a/resources/armor/chain_2.png and /dev/null differ diff --git a/resources/armor/cloth_1.png b/resources/armor/cloth_1.png deleted file mode 100644 index f3cf4aa..0000000 Binary files a/resources/armor/cloth_1.png and /dev/null differ diff --git a/resources/armor/cloth_2.png b/resources/armor/cloth_2.png deleted file mode 100644 index 15fb908..0000000 Binary files a/resources/armor/cloth_2.png and /dev/null differ diff --git a/resources/armor/diamond_1.png b/resources/armor/diamond_1.png deleted file mode 100644 index 339da65..0000000 Binary files a/resources/armor/diamond_1.png and /dev/null differ diff --git a/resources/armor/diamond_2.png b/resources/armor/diamond_2.png deleted file mode 100644 index c220c12..0000000 Binary files a/resources/armor/diamond_2.png and /dev/null differ diff --git a/resources/armor/gold_1.png b/resources/armor/gold_1.png deleted file mode 100644 index 885f309..0000000 Binary files a/resources/armor/gold_1.png and /dev/null differ diff --git a/resources/armor/gold_2.png b/resources/armor/gold_2.png deleted file mode 100644 index 9d1ea3b..0000000 Binary files a/resources/armor/gold_2.png and /dev/null differ diff --git a/resources/armor/iron_1.png b/resources/armor/iron_1.png deleted file mode 100644 index 374ab07..0000000 Binary files a/resources/armor/iron_1.png and /dev/null differ diff --git a/resources/armor/iron_2.png b/resources/armor/iron_2.png deleted file mode 100644 index 53af4f4..0000000 Binary files a/resources/armor/iron_2.png and /dev/null differ diff --git a/resources/art/kz.png b/resources/art/kz.png deleted file mode 100644 index dc6bd6b..0000000 Binary files a/resources/art/kz.png and /dev/null differ diff --git a/resources/environment/clouds.png b/resources/environment/clouds.png deleted file mode 100644 index b4a78c2..0000000 Binary files a/resources/environment/clouds.png and /dev/null differ diff --git a/resources/environment/rain.png b/resources/environment/rain.png deleted file mode 100644 index e9dc16c..0000000 Binary files a/resources/environment/rain.png and /dev/null differ diff --git a/resources/environment/snow.png b/resources/environment/snow.png deleted file mode 100644 index 84417c5..0000000 Binary files a/resources/environment/snow.png and /dev/null differ diff --git a/resources/font/default.png b/resources/font/default.png deleted file mode 100644 index fb7686e..0000000 Binary files a/resources/font/default.png and /dev/null differ diff --git a/resources/glsl/core.glsl b/resources/glsl/core.glsl deleted file mode 100644 index 9f11465..0000000 --- a/resources/glsl/core.glsl +++ /dev/null @@ -1,222 +0,0 @@ - -// copyright (c) 2020-2023 lax1dude - -#line 4 - -precision highp int; -precision highp sampler2D; -precision highp float; - -uniform mat4 matrix_m; -uniform mat4 matrix_p; -uniform mat4 matrix_t; - -#ifdef CC_VERT - -in vec3 a_position; -#ifdef CC_a_texture0 -in vec2 a_texture0; -#endif -#ifdef CC_a_color -in vec4 a_color; -#endif -#ifdef CC_a_normal -in vec4 a_normal; -#endif -#ifdef CC_a_texture1 -in vec2 a_texture1; -#endif - -#ifdef CC_TEX_GEN_STRQ -out vec4 v_object_pos; -#endif -out vec4 v_position; -#ifdef CC_a_color -out vec4 v_color; -#endif -#ifdef CC_a_normal -out vec4 v_normal; -#endif -#ifdef CC_a_texture0 -out vec2 v_texture0; -#endif -#ifdef CC_a_texture1 -out vec2 v_texture1; -#endif - -#endif - - -#ifdef CC_VERT - -void main(){ - vec4 pos = matrix_m * vec4(a_position, 1.0); - v_position = pos; -#ifdef CC_TEX_GEN_STRQ - v_object_pos = vec4(a_position, 1.0); -#endif -#ifdef CC_a_color - v_color = a_color; -#endif -#ifdef CC_a_normal - v_normal = a_normal; -#endif -#ifdef CC_a_texture0 - v_texture0 = a_texture0; -#endif -#ifdef CC_a_texture1 - v_texture1 = a_texture1; -#endif - gl_Position = matrix_p * pos; -} - -#endif - -#ifdef CC_FRAG - -uniform sampler2D tex0; -uniform sampler2D tex1; -uniform vec2 texCoordV0; -uniform vec2 texCoordV1; -#ifdef CC_lighting -uniform vec3 light0Pos; -uniform vec3 light1Pos; -uniform vec3 normalUniform; -#endif -#ifdef CC_fog -uniform vec4 fogColor; -//X = uniform float fogMode; -//Y = uniform float fogStart; -//Z = uniform float fogEnd - fogStart; -//W = uniform float fogDensity; -uniform vec4 fogParam; -#endif -uniform vec4 colorUniform; -#ifdef CC_alphatest -uniform float alphaTestF; -#endif -#ifdef CC_TEX_GEN_STRQ -//uniform int textureGenS_M; -//uniform int textureGenT_M; -//uniform int textureGenR_M; -//uniform int textureGenQ_M; -uniform ivec4 textureGen_M; -uniform vec4 textureGenS_V; -uniform vec4 textureGenT_V; -uniform vec4 textureGenR_V; -uniform vec4 textureGenQ_V; -#endif -#ifdef CC_patch_anisotropic -uniform vec2 anisotropic_fix; -#endif - -#ifdef CC_TEX_GEN_STRQ -in vec4 v_object_pos; -#endif -in vec4 v_position; -#ifdef CC_a_color -in vec4 v_color; -#endif -#ifdef CC_a_normal -in vec4 v_normal; -#endif -#ifdef CC_a_texture0 -in vec2 v_texture0; -#endif -#ifdef CC_a_texture1 -in vec2 v_texture1; -#endif - -out vec4 fragColor; - -#define TEX_MAT3x2(mat4In) mat3x2(mat4In[0].xy,mat4In[1].xy,mat4In[3].xy) -#define TEX_MAT4x3(mat4In) mat4x3(mat4In[0].xyw,mat4In[1].xyw,mat4In[2].xyw,mat4In[3].xyw) - -void main(){ -#ifdef CC_a_color - vec4 color = colorUniform * v_color; -#else - vec4 color = colorUniform; -#endif - -#ifdef CC_TEX_GEN_STRQ - vec4 texSrc[2]; - texSrc[0] = v_object_pos; - texSrc[1] = v_position; - - vec4 texPos; - texPos.x = dot(texSrc[textureGen_M.x], textureGenS_V); - texPos.y = dot(texSrc[textureGen_M.y], textureGenT_V); - texPos.z = dot(texSrc[textureGen_M.z], textureGenR_V); - texPos.w = dot(texSrc[textureGen_M.w], textureGenQ_V); - texPos.xyz = TEX_MAT4x3(matrix_t) * texPos; - color *= texture(tex0, texPos.xy / texPos.z).bgra; -#ifdef CC_alphatest - if(color.a < alphaTestF){ - discard; - } -#endif -#else -#ifdef CC_unit0 -#ifdef CC_a_texture0 - -#ifdef CC_patch_anisotropic - vec2 uv = TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0); - - /* https://bugs.chromium.org/p/angleproject/issues/detail?id=4994 */ - uv = ((uv * anisotropic_fix) - fract(uv * anisotropic_fix) + 0.5) / anisotropic_fix; - - vec4 texColor = texture(tex0, uv); -#else - vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(v_texture0, 1.0)); -#endif - -#else - vec4 texColor = texture(tex0, TEX_MAT3x2(matrix_t) * vec3(texCoordV0, 1.0)); -#endif - -#ifdef CC_swap_rb - color *= texColor.rgba; -#else - color *= texColor.bgra; -#endif - -#endif - -#ifdef CC_alphatest - if(color.a < alphaTestF){ - discard; - } -#endif - -#ifdef CC_unit1 -#ifdef CC_a_texture1 - color.rgb *= texture(tex1, (v_texture1 + 8.0) * 0.00390625).bgr; -#else - color.rgb *= texture(tex1, (texCoordV1 + 8.0) * 0.00390625).bgr; -#endif -#endif -#endif - -#ifdef CC_lighting -#ifdef CC_a_normal - vec3 normal = ((v_normal.xyz - 0.5) * 2.0); -#else - vec3 normal = normalUniform; -#endif - normal = normalize(mat3(matrix_m) * normal); - float ins = max(dot(normal, -light0Pos), 0.0) + max(dot(normal, -light1Pos), 0.0); - color.rgb *= min((0.4 + ins * 0.6), 1.0); -#endif - -#ifdef CC_fog - float dist = sqrt(dot(v_position, v_position)); - float i = fogParam.x == 1.0 ? (dist - fogParam.y) / fogParam.z : 1.0 - exp(-fogParam.w * dist); - color.rgb = mix(color.rgb, fogColor.xyz, clamp(i, 0.0, 1.0) * fogColor.a); -#endif - - fragColor = color; -} - -#endif - diff --git a/resources/gui/background.png b/resources/gui/background.png deleted file mode 100644 index b29e009..0000000 Binary files a/resources/gui/background.png and /dev/null differ diff --git a/resources/gui/container.png b/resources/gui/container.png deleted file mode 100644 index bd1d383..0000000 Binary files a/resources/gui/container.png and /dev/null differ diff --git a/resources/gui/crafting.png b/resources/gui/crafting.png deleted file mode 100644 index da83118..0000000 Binary files a/resources/gui/crafting.png and /dev/null differ diff --git a/resources/gui/furnace.png b/resources/gui/furnace.png deleted file mode 100644 index a5834e1..0000000 Binary files a/resources/gui/furnace.png and /dev/null differ diff --git a/resources/gui/gui.png b/resources/gui/gui.png deleted file mode 100644 index 81af329..0000000 Binary files a/resources/gui/gui.png and /dev/null differ diff --git a/resources/gui/icons.png b/resources/gui/icons.png deleted file mode 100644 index 73fe9bb..0000000 Binary files a/resources/gui/icons.png and /dev/null differ diff --git a/resources/gui/inventory.png b/resources/gui/inventory.png deleted file mode 100644 index 0b5f291..0000000 Binary files a/resources/gui/inventory.png and /dev/null differ diff --git a/resources/gui/items.png b/resources/gui/items.png deleted file mode 100644 index ea7d4f7..0000000 Binary files a/resources/gui/items.png and /dev/null differ diff --git a/resources/gui/logo.png b/resources/gui/logo.png deleted file mode 100644 index b7c2879..0000000 Binary files a/resources/gui/logo.png and /dev/null differ diff --git a/resources/gui/unknown_pack.png b/resources/gui/unknown_pack.png deleted file mode 100644 index 3a45a90..0000000 Binary files a/resources/gui/unknown_pack.png and /dev/null differ diff --git a/resources/item/arrows.png b/resources/item/arrows.png deleted file mode 100644 index 75c5828..0000000 Binary files a/resources/item/arrows.png and /dev/null differ diff --git a/resources/item/boat.png b/resources/item/boat.png deleted file mode 100644 index 132a0f7..0000000 Binary files a/resources/item/boat.png and /dev/null differ diff --git a/resources/item/cart.png b/resources/item/cart.png deleted file mode 100644 index 32af68e..0000000 Binary files a/resources/item/cart.png and /dev/null differ diff --git a/resources/item/door.png b/resources/item/door.png deleted file mode 100644 index 52df2d9..0000000 Binary files a/resources/item/door.png and /dev/null differ diff --git a/resources/item/sign.png b/resources/item/sign.png deleted file mode 100644 index e829472..0000000 Binary files a/resources/item/sign.png and /dev/null differ diff --git a/resources/misc/dial.png b/resources/misc/dial.png deleted file mode 100644 index 140e7e3..0000000 Binary files a/resources/misc/dial.png and /dev/null differ diff --git a/resources/misc/foliagecolor.png b/resources/misc/foliagecolor.png deleted file mode 100644 index a98e378..0000000 Binary files a/resources/misc/foliagecolor.png and /dev/null differ diff --git a/resources/misc/grasscolor.png b/resources/misc/grasscolor.png deleted file mode 100644 index a6d9c20..0000000 Binary files a/resources/misc/grasscolor.png and /dev/null differ diff --git a/resources/misc/pumpkinblur.png b/resources/misc/pumpkinblur.png deleted file mode 100644 index c6e2ffc..0000000 Binary files a/resources/misc/pumpkinblur.png and /dev/null differ diff --git a/resources/misc/shadow.png b/resources/misc/shadow.png deleted file mode 100644 index 06d999b..0000000 Binary files a/resources/misc/shadow.png and /dev/null differ diff --git a/resources/misc/vignette.png b/resources/misc/vignette.png deleted file mode 100644 index f236acb..0000000 Binary files a/resources/misc/vignette.png and /dev/null differ diff --git a/resources/misc/water.png b/resources/misc/water.png deleted file mode 100644 index 8b92f9b..0000000 Binary files a/resources/misc/water.png and /dev/null differ diff --git a/resources/mob/char.png b/resources/mob/char.png deleted file mode 100644 index 7cfa08a..0000000 Binary files a/resources/mob/char.png and /dev/null differ diff --git a/resources/mob/chicken.png b/resources/mob/chicken.png deleted file mode 100644 index d481293..0000000 Binary files a/resources/mob/chicken.png and /dev/null differ diff --git a/resources/mob/cow.png b/resources/mob/cow.png deleted file mode 100644 index 2080ebc..0000000 Binary files a/resources/mob/cow.png and /dev/null differ diff --git a/resources/mob/creeper.png b/resources/mob/creeper.png deleted file mode 100644 index e0a5e0a..0000000 Binary files a/resources/mob/creeper.png and /dev/null differ diff --git a/resources/mob/ghast.png b/resources/mob/ghast.png deleted file mode 100644 index e83a60d..0000000 Binary files a/resources/mob/ghast.png and /dev/null differ diff --git a/resources/mob/ghast_fire.png b/resources/mob/ghast_fire.png deleted file mode 100644 index fff9718..0000000 Binary files a/resources/mob/ghast_fire.png and /dev/null differ diff --git a/resources/mob/pig.png b/resources/mob/pig.png deleted file mode 100644 index 5c1efc2..0000000 Binary files a/resources/mob/pig.png and /dev/null differ diff --git a/resources/mob/pigman.png b/resources/mob/pigman.png deleted file mode 100644 index c900b36..0000000 Binary files a/resources/mob/pigman.png and /dev/null differ diff --git a/resources/mob/pigzombie.png b/resources/mob/pigzombie.png deleted file mode 100644 index 0a0a25a..0000000 Binary files a/resources/mob/pigzombie.png and /dev/null differ diff --git a/resources/mob/saddle.png b/resources/mob/saddle.png deleted file mode 100644 index aaea7a6..0000000 Binary files a/resources/mob/saddle.png and /dev/null differ diff --git a/resources/mob/sheep.png b/resources/mob/sheep.png deleted file mode 100644 index 98cfa9a..0000000 Binary files a/resources/mob/sheep.png and /dev/null differ diff --git a/resources/mob/sheep_fur.png b/resources/mob/sheep_fur.png deleted file mode 100644 index f1291a5..0000000 Binary files a/resources/mob/sheep_fur.png and /dev/null differ diff --git a/resources/mob/skeleton.png b/resources/mob/skeleton.png deleted file mode 100644 index 9d22339..0000000 Binary files a/resources/mob/skeleton.png and /dev/null differ diff --git a/resources/mob/slime.png b/resources/mob/slime.png deleted file mode 100644 index 42fc873..0000000 Binary files a/resources/mob/slime.png and /dev/null differ diff --git a/resources/mob/spider.png b/resources/mob/spider.png deleted file mode 100644 index 08344a8..0000000 Binary files a/resources/mob/spider.png and /dev/null differ diff --git a/resources/mob/spider_eyes.png b/resources/mob/spider_eyes.png deleted file mode 100644 index 2a7734f..0000000 Binary files a/resources/mob/spider_eyes.png and /dev/null differ diff --git a/resources/mob/zombie.png b/resources/mob/zombie.png deleted file mode 100644 index 0ab7089..0000000 Binary files a/resources/mob/zombie.png and /dev/null differ diff --git a/resources/music/calm1.mp3 b/resources/music/calm1.mp3 deleted file mode 100644 index f957283..0000000 Binary files a/resources/music/calm1.mp3 and /dev/null differ diff --git a/resources/music/calm2.mp3 b/resources/music/calm2.mp3 deleted file mode 100644 index 4595df3..0000000 Binary files a/resources/music/calm2.mp3 and /dev/null differ diff --git a/resources/music/calm3.mp3 b/resources/music/calm3.mp3 deleted file mode 100644 index d39f51b..0000000 Binary files a/resources/music/calm3.mp3 and /dev/null differ diff --git a/resources/newMusic/hal1.mp3 b/resources/newMusic/hal1.mp3 deleted file mode 100644 index f6132ca..0000000 Binary files a/resources/newMusic/hal1.mp3 and /dev/null differ diff --git a/resources/newMusic/hal2.mp3 b/resources/newMusic/hal2.mp3 deleted file mode 100644 index 732060c..0000000 Binary files a/resources/newMusic/hal2.mp3 and /dev/null differ diff --git a/resources/newMusic/hal3.mp3 b/resources/newMusic/hal3.mp3 deleted file mode 100644 index 931463d..0000000 Binary files a/resources/newMusic/hal3.mp3 and /dev/null differ diff --git a/resources/newMusic/hal4.mp3 b/resources/newMusic/hal4.mp3 deleted file mode 100644 index bb38011..0000000 Binary files a/resources/newMusic/hal4.mp3 and /dev/null differ diff --git a/resources/newMusic/nuance1.mp3 b/resources/newMusic/nuance1.mp3 deleted file mode 100644 index 66021e8..0000000 Binary files a/resources/newMusic/nuance1.mp3 and /dev/null differ diff --git a/resources/newMusic/nuance2.mp3 b/resources/newMusic/nuance2.mp3 deleted file mode 100644 index 53c7439..0000000 Binary files a/resources/newMusic/nuance2.mp3 and /dev/null differ diff --git a/resources/newMusic/piano1.mp3 b/resources/newMusic/piano1.mp3 deleted file mode 100644 index 9c28f80..0000000 Binary files a/resources/newMusic/piano1.mp3 and /dev/null differ diff --git a/resources/newMusic/piano2.mp3 b/resources/newMusic/piano2.mp3 deleted file mode 100644 index adde4f6..0000000 Binary files a/resources/newMusic/piano2.mp3 and /dev/null differ diff --git a/resources/newMusic/piano3.mp3 b/resources/newMusic/piano3.mp3 deleted file mode 100644 index d80d41e..0000000 Binary files a/resources/newMusic/piano3.mp3 and /dev/null differ diff --git a/resources/pack.png b/resources/pack.png deleted file mode 100644 index 973a7cf..0000000 Binary files a/resources/pack.png and /dev/null differ diff --git a/resources/pack.txt b/resources/pack.txt deleted file mode 100644 index c14bb3b..0000000 --- a/resources/pack.txt +++ /dev/null @@ -1,2 +0,0 @@ -The default look of Minecraft - diff --git a/resources/particles.png b/resources/particles.png deleted file mode 100644 index 892ca98..0000000 Binary files a/resources/particles.png and /dev/null differ diff --git a/resources/sounds/ambient/cave/cave1.mp3 b/resources/sounds/ambient/cave/cave1.mp3 deleted file mode 100644 index b9d43cd..0000000 Binary files a/resources/sounds/ambient/cave/cave1.mp3 and /dev/null differ diff --git a/resources/sounds/ambient/cave/cave2.mp3 b/resources/sounds/ambient/cave/cave2.mp3 deleted file mode 100644 index 47e22ee..0000000 Binary files a/resources/sounds/ambient/cave/cave2.mp3 and /dev/null differ diff --git a/resources/sounds/ambient/cave/cave3.mp3 b/resources/sounds/ambient/cave/cave3.mp3 deleted file mode 100644 index a2bc1e0..0000000 Binary files a/resources/sounds/ambient/cave/cave3.mp3 and /dev/null differ diff --git a/resources/sounds/ambient/cave/cave4.mp3 b/resources/sounds/ambient/cave/cave4.mp3 deleted file mode 100644 index 3220da5..0000000 Binary files a/resources/sounds/ambient/cave/cave4.mp3 and /dev/null differ diff --git a/resources/sounds/ambient/weather/rain1.ogg b/resources/sounds/ambient/weather/rain1.ogg deleted file mode 100644 index 6246c9c..0000000 Binary files a/resources/sounds/ambient/weather/rain1.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/rain2.ogg b/resources/sounds/ambient/weather/rain2.ogg deleted file mode 100644 index 598c30a..0000000 Binary files a/resources/sounds/ambient/weather/rain2.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/rain3.ogg b/resources/sounds/ambient/weather/rain3.ogg deleted file mode 100644 index 5057d6b..0000000 Binary files a/resources/sounds/ambient/weather/rain3.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/rain4.ogg b/resources/sounds/ambient/weather/rain4.ogg deleted file mode 100644 index 44ce41f..0000000 Binary files a/resources/sounds/ambient/weather/rain4.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/thunder1.ogg b/resources/sounds/ambient/weather/thunder1.ogg deleted file mode 100644 index 59af558..0000000 Binary files a/resources/sounds/ambient/weather/thunder1.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/thunder2.ogg b/resources/sounds/ambient/weather/thunder2.ogg deleted file mode 100644 index 2233dbf..0000000 Binary files a/resources/sounds/ambient/weather/thunder2.ogg and /dev/null differ diff --git a/resources/sounds/ambient/weather/thunder3.ogg b/resources/sounds/ambient/weather/thunder3.ogg deleted file mode 100644 index abd3208..0000000 Binary files a/resources/sounds/ambient/weather/thunder3.ogg and /dev/null differ diff --git a/resources/sounds/damage/fallbig1.mp3 b/resources/sounds/damage/fallbig1.mp3 deleted file mode 100644 index 305f6cc..0000000 Binary files a/resources/sounds/damage/fallbig1.mp3 and /dev/null differ diff --git a/resources/sounds/damage/fallbig2.mp3 b/resources/sounds/damage/fallbig2.mp3 deleted file mode 100644 index e9c17ac..0000000 Binary files a/resources/sounds/damage/fallbig2.mp3 and /dev/null differ diff --git a/resources/sounds/damage/fallsmall.mp3 b/resources/sounds/damage/fallsmall.mp3 deleted file mode 100644 index 853a806..0000000 Binary files a/resources/sounds/damage/fallsmall.mp3 and /dev/null differ diff --git a/resources/sounds/damage/hurtflesh1.mp3 b/resources/sounds/damage/hurtflesh1.mp3 deleted file mode 100644 index 658c553..0000000 Binary files a/resources/sounds/damage/hurtflesh1.mp3 and /dev/null differ diff --git a/resources/sounds/damage/hurtflesh2.mp3 b/resources/sounds/damage/hurtflesh2.mp3 deleted file mode 100644 index 4e3fbe0..0000000 Binary files a/resources/sounds/damage/hurtflesh2.mp3 and /dev/null differ diff --git a/resources/sounds/damage/hurtflesh3.mp3 b/resources/sounds/damage/hurtflesh3.mp3 deleted file mode 100644 index 8f3459a..0000000 Binary files a/resources/sounds/damage/hurtflesh3.mp3 and /dev/null differ diff --git a/resources/sounds/liquid/lava.mp3 b/resources/sounds/liquid/lava.mp3 deleted file mode 100644 index 48d62a5..0000000 Binary files a/resources/sounds/liquid/lava.mp3 and /dev/null differ diff --git a/resources/sounds/liquid/lavapop.mp3 b/resources/sounds/liquid/lavapop.mp3 deleted file mode 100644 index 4200144..0000000 Binary files a/resources/sounds/liquid/lavapop.mp3 and /dev/null differ diff --git a/resources/sounds/liquid/splash.mp3 b/resources/sounds/liquid/splash.mp3 deleted file mode 100644 index b9a5ef3..0000000 Binary files a/resources/sounds/liquid/splash.mp3 and /dev/null differ diff --git a/resources/sounds/liquid/water.mp3 b/resources/sounds/liquid/water.mp3 deleted file mode 100644 index c9c7908..0000000 Binary files a/resources/sounds/liquid/water.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chicken1.mp3 b/resources/sounds/mob/chicken1.mp3 deleted file mode 100644 index 9cb13c0..0000000 Binary files a/resources/sounds/mob/chicken1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chicken2.mp3 b/resources/sounds/mob/chicken2.mp3 deleted file mode 100644 index 744cbfa..0000000 Binary files a/resources/sounds/mob/chicken2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chicken3.mp3 b/resources/sounds/mob/chicken3.mp3 deleted file mode 100644 index eb5f8cb..0000000 Binary files a/resources/sounds/mob/chicken3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chickenhurt1.mp3 b/resources/sounds/mob/chickenhurt1.mp3 deleted file mode 100644 index de1b789..0000000 Binary files a/resources/sounds/mob/chickenhurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chickenhurt2.mp3 b/resources/sounds/mob/chickenhurt2.mp3 deleted file mode 100644 index 81cb41a..0000000 Binary files a/resources/sounds/mob/chickenhurt2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/chickenplop.mp3 b/resources/sounds/mob/chickenplop.mp3 deleted file mode 100644 index ee727ad..0000000 Binary files a/resources/sounds/mob/chickenplop.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cow1.mp3 b/resources/sounds/mob/cow1.mp3 deleted file mode 100644 index 77daa7c..0000000 Binary files a/resources/sounds/mob/cow1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cow2.mp3 b/resources/sounds/mob/cow2.mp3 deleted file mode 100644 index ee90091..0000000 Binary files a/resources/sounds/mob/cow2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cow3.mp3 b/resources/sounds/mob/cow3.mp3 deleted file mode 100644 index 7ebedd3..0000000 Binary files a/resources/sounds/mob/cow3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cow4.mp3 b/resources/sounds/mob/cow4.mp3 deleted file mode 100644 index 4278b7a..0000000 Binary files a/resources/sounds/mob/cow4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cowhurt1.mp3 b/resources/sounds/mob/cowhurt1.mp3 deleted file mode 100644 index 856a8e9..0000000 Binary files a/resources/sounds/mob/cowhurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cowhurt2.mp3 b/resources/sounds/mob/cowhurt2.mp3 deleted file mode 100644 index 3233b35..0000000 Binary files a/resources/sounds/mob/cowhurt2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/cowhurt3.mp3 b/resources/sounds/mob/cowhurt3.mp3 deleted file mode 100644 index 2c85fa0..0000000 Binary files a/resources/sounds/mob/cowhurt3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/creeper1.mp3 b/resources/sounds/mob/creeper1.mp3 deleted file mode 100644 index b85c274..0000000 Binary files a/resources/sounds/mob/creeper1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/creeper2.mp3 b/resources/sounds/mob/creeper2.mp3 deleted file mode 100644 index 51e89e8..0000000 Binary files a/resources/sounds/mob/creeper2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/creeper3.mp3 b/resources/sounds/mob/creeper3.mp3 deleted file mode 100644 index e77564d..0000000 Binary files a/resources/sounds/mob/creeper3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/creeper4.mp3 b/resources/sounds/mob/creeper4.mp3 deleted file mode 100644 index 00957c6..0000000 Binary files a/resources/sounds/mob/creeper4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/creeperdeath.mp3 b/resources/sounds/mob/creeperdeath.mp3 deleted file mode 100644 index 6d9d6f6..0000000 Binary files a/resources/sounds/mob/creeperdeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/affectionate scream.mp3 b/resources/sounds/mob/ghast/affectionate scream.mp3 deleted file mode 100644 index 424946f..0000000 Binary files a/resources/sounds/mob/ghast/affectionate scream.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/charge.mp3 b/resources/sounds/mob/ghast/charge.mp3 deleted file mode 100644 index c082b74..0000000 Binary files a/resources/sounds/mob/ghast/charge.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/death.mp3 b/resources/sounds/mob/ghast/death.mp3 deleted file mode 100644 index 2bd1075..0000000 Binary files a/resources/sounds/mob/ghast/death.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/fireball4.mp3 b/resources/sounds/mob/ghast/fireball4.mp3 deleted file mode 100644 index 4dce2bd..0000000 Binary files a/resources/sounds/mob/ghast/fireball4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan1.mp3 b/resources/sounds/mob/ghast/moan1.mp3 deleted file mode 100644 index 301c24b..0000000 Binary files a/resources/sounds/mob/ghast/moan1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan2.mp3 b/resources/sounds/mob/ghast/moan2.mp3 deleted file mode 100644 index cd0a105..0000000 Binary files a/resources/sounds/mob/ghast/moan2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan3.mp3 b/resources/sounds/mob/ghast/moan3.mp3 deleted file mode 100644 index a5d09c6..0000000 Binary files a/resources/sounds/mob/ghast/moan3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan4.mp3 b/resources/sounds/mob/ghast/moan4.mp3 deleted file mode 100644 index 608062c..0000000 Binary files a/resources/sounds/mob/ghast/moan4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan5.mp3 b/resources/sounds/mob/ghast/moan5.mp3 deleted file mode 100644 index 03bf612..0000000 Binary files a/resources/sounds/mob/ghast/moan5.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan6.mp3 b/resources/sounds/mob/ghast/moan6.mp3 deleted file mode 100644 index 16b3654..0000000 Binary files a/resources/sounds/mob/ghast/moan6.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/moan7.mp3 b/resources/sounds/mob/ghast/moan7.mp3 deleted file mode 100644 index 03fec8a..0000000 Binary files a/resources/sounds/mob/ghast/moan7.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/scream1.mp3 b/resources/sounds/mob/ghast/scream1.mp3 deleted file mode 100644 index d29c38e..0000000 Binary files a/resources/sounds/mob/ghast/scream1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/scream2.mp3 b/resources/sounds/mob/ghast/scream2.mp3 deleted file mode 100644 index 9c9be59..0000000 Binary files a/resources/sounds/mob/ghast/scream2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/scream3.mp3 b/resources/sounds/mob/ghast/scream3.mp3 deleted file mode 100644 index d6e77d2..0000000 Binary files a/resources/sounds/mob/ghast/scream3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/scream4.mp3 b/resources/sounds/mob/ghast/scream4.mp3 deleted file mode 100644 index b0840dd..0000000 Binary files a/resources/sounds/mob/ghast/scream4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/ghast/scream5.mp3 b/resources/sounds/mob/ghast/scream5.mp3 deleted file mode 100644 index f493863..0000000 Binary files a/resources/sounds/mob/ghast/scream5.mp3 and /dev/null differ diff --git a/resources/sounds/mob/pig1.mp3 b/resources/sounds/mob/pig1.mp3 deleted file mode 100644 index bd91f6c..0000000 Binary files a/resources/sounds/mob/pig1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/pig2.mp3 b/resources/sounds/mob/pig2.mp3 deleted file mode 100644 index cbf540c..0000000 Binary files a/resources/sounds/mob/pig2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/pig3.mp3 b/resources/sounds/mob/pig3.mp3 deleted file mode 100644 index caefa6f..0000000 Binary files a/resources/sounds/mob/pig3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/pigdeath.mp3 b/resources/sounds/mob/pigdeath.mp3 deleted file mode 100644 index b98c11f..0000000 Binary files a/resources/sounds/mob/pigdeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/sheep1.mp3 b/resources/sounds/mob/sheep1.mp3 deleted file mode 100644 index 51eee55..0000000 Binary files a/resources/sounds/mob/sheep1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/sheep2.mp3 b/resources/sounds/mob/sheep2.mp3 deleted file mode 100644 index 13d643e..0000000 Binary files a/resources/sounds/mob/sheep2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/sheep3.mp3 b/resources/sounds/mob/sheep3.mp3 deleted file mode 100644 index 3a9cd4b..0000000 Binary files a/resources/sounds/mob/sheep3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeleton1.mp3 b/resources/sounds/mob/skeleton1.mp3 deleted file mode 100644 index f0277e1..0000000 Binary files a/resources/sounds/mob/skeleton1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeleton2.mp3 b/resources/sounds/mob/skeleton2.mp3 deleted file mode 100644 index 7b62953..0000000 Binary files a/resources/sounds/mob/skeleton2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeleton3.mp3 b/resources/sounds/mob/skeleton3.mp3 deleted file mode 100644 index bca5f36..0000000 Binary files a/resources/sounds/mob/skeleton3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeletondeath.mp3 b/resources/sounds/mob/skeletondeath.mp3 deleted file mode 100644 index 88a889b..0000000 Binary files a/resources/sounds/mob/skeletondeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeletonhurt1.mp3 b/resources/sounds/mob/skeletonhurt1.mp3 deleted file mode 100644 index 6b002ec..0000000 Binary files a/resources/sounds/mob/skeletonhurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeletonhurt2.mp3 b/resources/sounds/mob/skeletonhurt2.mp3 deleted file mode 100644 index b71d197..0000000 Binary files a/resources/sounds/mob/skeletonhurt2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeletonhurt3.mp3 b/resources/sounds/mob/skeletonhurt3.mp3 deleted file mode 100644 index d303697..0000000 Binary files a/resources/sounds/mob/skeletonhurt3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/skeletonhurt4.mp3 b/resources/sounds/mob/skeletonhurt4.mp3 deleted file mode 100644 index 2414506..0000000 Binary files a/resources/sounds/mob/skeletonhurt4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slime1.mp3 b/resources/sounds/mob/slime1.mp3 deleted file mode 100644 index ee8cba6..0000000 Binary files a/resources/sounds/mob/slime1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slime2.mp3 b/resources/sounds/mob/slime2.mp3 deleted file mode 100644 index 64b35c6..0000000 Binary files a/resources/sounds/mob/slime2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slime3.mp3 b/resources/sounds/mob/slime3.mp3 deleted file mode 100644 index 7999312..0000000 Binary files a/resources/sounds/mob/slime3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slime4.mp3 b/resources/sounds/mob/slime4.mp3 deleted file mode 100644 index dccd6d6..0000000 Binary files a/resources/sounds/mob/slime4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slime5.mp3 b/resources/sounds/mob/slime5.mp3 deleted file mode 100644 index fa7ce01..0000000 Binary files a/resources/sounds/mob/slime5.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slimeattack1.mp3 b/resources/sounds/mob/slimeattack1.mp3 deleted file mode 100644 index 628f7de..0000000 Binary files a/resources/sounds/mob/slimeattack1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/slimeattack2.mp3 b/resources/sounds/mob/slimeattack2.mp3 deleted file mode 100644 index 393a08e..0000000 Binary files a/resources/sounds/mob/slimeattack2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/spider1.mp3 b/resources/sounds/mob/spider1.mp3 deleted file mode 100644 index 5974091..0000000 Binary files a/resources/sounds/mob/spider1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/spider2.mp3 b/resources/sounds/mob/spider2.mp3 deleted file mode 100644 index 77a0431..0000000 Binary files a/resources/sounds/mob/spider2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/spider3.mp3 b/resources/sounds/mob/spider3.mp3 deleted file mode 100644 index d5328ee..0000000 Binary files a/resources/sounds/mob/spider3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/spider4.mp3 b/resources/sounds/mob/spider4.mp3 deleted file mode 100644 index 37bf2dd..0000000 Binary files a/resources/sounds/mob/spider4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/spiderdeath.mp3 b/resources/sounds/mob/spiderdeath.mp3 deleted file mode 100644 index 715fe4e..0000000 Binary files a/resources/sounds/mob/spiderdeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/bark1.mp3 b/resources/sounds/mob/wolf/bark1.mp3 deleted file mode 100644 index 2727638..0000000 Binary files a/resources/sounds/mob/wolf/bark1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/bark2.mp3 b/resources/sounds/mob/wolf/bark2.mp3 deleted file mode 100644 index 6054414..0000000 Binary files a/resources/sounds/mob/wolf/bark2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/bark3.mp3 b/resources/sounds/mob/wolf/bark3.mp3 deleted file mode 100644 index c69f614..0000000 Binary files a/resources/sounds/mob/wolf/bark3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/death.mp3 b/resources/sounds/mob/wolf/death.mp3 deleted file mode 100644 index 14e7487..0000000 Binary files a/resources/sounds/mob/wolf/death.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/growl1.mp3 b/resources/sounds/mob/wolf/growl1.mp3 deleted file mode 100644 index 605a1ac..0000000 Binary files a/resources/sounds/mob/wolf/growl1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/growl2.mp3 b/resources/sounds/mob/wolf/growl2.mp3 deleted file mode 100644 index d810b07..0000000 Binary files a/resources/sounds/mob/wolf/growl2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/growl3.mp3 b/resources/sounds/mob/wolf/growl3.mp3 deleted file mode 100644 index 046f276..0000000 Binary files a/resources/sounds/mob/wolf/growl3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/howl1.mp3 b/resources/sounds/mob/wolf/howl1.mp3 deleted file mode 100644 index 1fd43ea..0000000 Binary files a/resources/sounds/mob/wolf/howl1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/howl2.mp3 b/resources/sounds/mob/wolf/howl2.mp3 deleted file mode 100644 index 3916f56..0000000 Binary files a/resources/sounds/mob/wolf/howl2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/hurt1.mp3 b/resources/sounds/mob/wolf/hurt1.mp3 deleted file mode 100644 index c49cd84..0000000 Binary files a/resources/sounds/mob/wolf/hurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/hurt2.mp3 b/resources/sounds/mob/wolf/hurt2.mp3 deleted file mode 100644 index 7f9d4f1..0000000 Binary files a/resources/sounds/mob/wolf/hurt2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/hurt3.mp3 b/resources/sounds/mob/wolf/hurt3.mp3 deleted file mode 100644 index c74ca2a..0000000 Binary files a/resources/sounds/mob/wolf/hurt3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/panting.mp3 b/resources/sounds/mob/wolf/panting.mp3 deleted file mode 100644 index 19dacdb..0000000 Binary files a/resources/sounds/mob/wolf/panting.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/shake.mp3 b/resources/sounds/mob/wolf/shake.mp3 deleted file mode 100644 index 44fb74a..0000000 Binary files a/resources/sounds/mob/wolf/shake.mp3 and /dev/null differ diff --git a/resources/sounds/mob/wolf/whine.mp3 b/resources/sounds/mob/wolf/whine.mp3 deleted file mode 100644 index f017364..0000000 Binary files a/resources/sounds/mob/wolf/whine.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombie1.mp3 b/resources/sounds/mob/zombie1.mp3 deleted file mode 100644 index 257cbb3..0000000 Binary files a/resources/sounds/mob/zombie1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombie2.mp3 b/resources/sounds/mob/zombie2.mp3 deleted file mode 100644 index 676f2ba..0000000 Binary files a/resources/sounds/mob/zombie2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombie3.mp3 b/resources/sounds/mob/zombie3.mp3 deleted file mode 100644 index 1ac7b0f..0000000 Binary files a/resources/sounds/mob/zombie3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiedeath.mp3 b/resources/sounds/mob/zombiedeath.mp3 deleted file mode 100644 index c004584..0000000 Binary files a/resources/sounds/mob/zombiedeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiehurt1.mp3 b/resources/sounds/mob/zombiehurt1.mp3 deleted file mode 100644 index 9cb67a8..0000000 Binary files a/resources/sounds/mob/zombiehurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiehurt2.mp3 b/resources/sounds/mob/zombiehurt2.mp3 deleted file mode 100644 index aee3841..0000000 Binary files a/resources/sounds/mob/zombiehurt2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpig1.mp3 b/resources/sounds/mob/zombiepig/zpig1.mp3 deleted file mode 100644 index aee5a2b..0000000 Binary files a/resources/sounds/mob/zombiepig/zpig1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpig2.mp3 b/resources/sounds/mob/zombiepig/zpig2.mp3 deleted file mode 100644 index 3ab619a..0000000 Binary files a/resources/sounds/mob/zombiepig/zpig2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpig3.mp3 b/resources/sounds/mob/zombiepig/zpig3.mp3 deleted file mode 100644 index 5f1e46c..0000000 Binary files a/resources/sounds/mob/zombiepig/zpig3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpig4.mp3 b/resources/sounds/mob/zombiepig/zpig4.mp3 deleted file mode 100644 index 64a51de..0000000 Binary files a/resources/sounds/mob/zombiepig/zpig4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpigangry1.mp3 b/resources/sounds/mob/zombiepig/zpigangry1.mp3 deleted file mode 100644 index 85de17e..0000000 Binary files a/resources/sounds/mob/zombiepig/zpigangry1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpigangry2.mp3 b/resources/sounds/mob/zombiepig/zpigangry2.mp3 deleted file mode 100644 index 8d8ad88..0000000 Binary files a/resources/sounds/mob/zombiepig/zpigangry2.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpigangry3.mp3 b/resources/sounds/mob/zombiepig/zpigangry3.mp3 deleted file mode 100644 index cea462e..0000000 Binary files a/resources/sounds/mob/zombiepig/zpigangry3.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpigangry4.mp3 b/resources/sounds/mob/zombiepig/zpigangry4.mp3 deleted file mode 100644 index 10e0e95..0000000 Binary files a/resources/sounds/mob/zombiepig/zpigangry4.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpigdeath.mp3 b/resources/sounds/mob/zombiepig/zpigdeath.mp3 deleted file mode 100644 index 0354366..0000000 Binary files a/resources/sounds/mob/zombiepig/zpigdeath.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpighurt1.mp3 b/resources/sounds/mob/zombiepig/zpighurt1.mp3 deleted file mode 100644 index ddca274..0000000 Binary files a/resources/sounds/mob/zombiepig/zpighurt1.mp3 and /dev/null differ diff --git a/resources/sounds/mob/zombiepig/zpighurt2.mp3 b/resources/sounds/mob/zombiepig/zpighurt2.mp3 deleted file mode 100644 index 5b910b2..0000000 Binary files a/resources/sounds/mob/zombiepig/zpighurt2.mp3 and /dev/null differ diff --git a/resources/sounds/note/bass.mp3 b/resources/sounds/note/bass.mp3 deleted file mode 100644 index e0daff5..0000000 Binary files a/resources/sounds/note/bass.mp3 and /dev/null differ diff --git a/resources/sounds/note/bassattack.mp3 b/resources/sounds/note/bassattack.mp3 deleted file mode 100644 index 292a863..0000000 Binary files a/resources/sounds/note/bassattack.mp3 and /dev/null differ diff --git a/resources/sounds/note/bd.mp3 b/resources/sounds/note/bd.mp3 deleted file mode 100644 index 42defa3..0000000 Binary files a/resources/sounds/note/bd.mp3 and /dev/null differ diff --git a/resources/sounds/note/harp.mp3 b/resources/sounds/note/harp.mp3 deleted file mode 100644 index f1badf8..0000000 Binary files a/resources/sounds/note/harp.mp3 and /dev/null differ diff --git a/resources/sounds/note/hat.mp3 b/resources/sounds/note/hat.mp3 deleted file mode 100644 index dd2eb7c..0000000 Binary files a/resources/sounds/note/hat.mp3 and /dev/null differ diff --git a/resources/sounds/note/pling.mp3 b/resources/sounds/note/pling.mp3 deleted file mode 100644 index 42497ba..0000000 Binary files a/resources/sounds/note/pling.mp3 and /dev/null differ diff --git a/resources/sounds/note/snare.mp3 b/resources/sounds/note/snare.mp3 deleted file mode 100644 index 85e4af1..0000000 Binary files a/resources/sounds/note/snare.mp3 and /dev/null differ diff --git a/resources/sounds/portal/portal.mp3 b/resources/sounds/portal/portal.mp3 deleted file mode 100644 index 7b8cd9e..0000000 Binary files a/resources/sounds/portal/portal.mp3 and /dev/null differ diff --git a/resources/sounds/portal/travel.mp3 b/resources/sounds/portal/travel.mp3 deleted file mode 100644 index 8042bff..0000000 Binary files a/resources/sounds/portal/travel.mp3 and /dev/null differ diff --git a/resources/sounds/portal/trigger.mp3 b/resources/sounds/portal/trigger.mp3 deleted file mode 100644 index ec00975..0000000 Binary files a/resources/sounds/portal/trigger.mp3 and /dev/null differ diff --git a/resources/sounds/random/bow.mp3 b/resources/sounds/random/bow.mp3 deleted file mode 100644 index 647f01a..0000000 Binary files a/resources/sounds/random/bow.mp3 and /dev/null differ diff --git a/resources/sounds/random/breath.mp3 b/resources/sounds/random/breath.mp3 deleted file mode 100644 index d6bf2ed..0000000 Binary files a/resources/sounds/random/breath.mp3 and /dev/null differ diff --git a/resources/sounds/random/click.mp3 b/resources/sounds/random/click.mp3 deleted file mode 100644 index 8fe1791..0000000 Binary files a/resources/sounds/random/click.mp3 and /dev/null differ diff --git a/resources/sounds/random/door_close.mp3 b/resources/sounds/random/door_close.mp3 deleted file mode 100644 index 09bc3dc..0000000 Binary files a/resources/sounds/random/door_close.mp3 and /dev/null differ diff --git a/resources/sounds/random/door_open.mp3 b/resources/sounds/random/door_open.mp3 deleted file mode 100644 index 6e151cb..0000000 Binary files a/resources/sounds/random/door_open.mp3 and /dev/null differ diff --git a/resources/sounds/random/drr.mp3 b/resources/sounds/random/drr.mp3 deleted file mode 100644 index 3f7c679..0000000 Binary files a/resources/sounds/random/drr.mp3 and /dev/null differ diff --git a/resources/sounds/random/explode.mp3 b/resources/sounds/random/explode.mp3 deleted file mode 100644 index 00bd150..0000000 Binary files a/resources/sounds/random/explode.mp3 and /dev/null differ diff --git a/resources/sounds/random/fizz.mp3 b/resources/sounds/random/fizz.mp3 deleted file mode 100644 index ee120fd..0000000 Binary files a/resources/sounds/random/fizz.mp3 and /dev/null differ diff --git a/resources/sounds/random/fuse.mp3 b/resources/sounds/random/fuse.mp3 deleted file mode 100644 index f098c6c..0000000 Binary files a/resources/sounds/random/fuse.mp3 and /dev/null differ diff --git a/resources/sounds/random/glass1.mp3 b/resources/sounds/random/glass1.mp3 deleted file mode 100644 index 18680d6..0000000 Binary files a/resources/sounds/random/glass1.mp3 and /dev/null differ diff --git a/resources/sounds/random/glass2.mp3 b/resources/sounds/random/glass2.mp3 deleted file mode 100644 index fb08b8b..0000000 Binary files a/resources/sounds/random/glass2.mp3 and /dev/null differ diff --git a/resources/sounds/random/glass3.mp3 b/resources/sounds/random/glass3.mp3 deleted file mode 100644 index 3e34621..0000000 Binary files a/resources/sounds/random/glass3.mp3 and /dev/null differ diff --git a/resources/sounds/random/hurt.mp3 b/resources/sounds/random/hurt.mp3 deleted file mode 100644 index 4fa55de..0000000 Binary files a/resources/sounds/random/hurt.mp3 and /dev/null differ diff --git a/resources/sounds/random/pop.mp3 b/resources/sounds/random/pop.mp3 deleted file mode 100644 index aaec450..0000000 Binary files a/resources/sounds/random/pop.mp3 and /dev/null differ diff --git a/resources/sounds/random/splash.mp3 b/resources/sounds/random/splash.mp3 deleted file mode 100644 index b9a5ef3..0000000 Binary files a/resources/sounds/random/splash.mp3 and /dev/null differ diff --git a/resources/sounds/random/wood click.mp3 b/resources/sounds/random/wood click.mp3 deleted file mode 100644 index 9185a51..0000000 Binary files a/resources/sounds/random/wood click.mp3 and /dev/null differ diff --git a/resources/sounds/step/cloth1.mp3 b/resources/sounds/step/cloth1.mp3 deleted file mode 100644 index 002c1ef..0000000 Binary files a/resources/sounds/step/cloth1.mp3 and /dev/null differ diff --git a/resources/sounds/step/cloth2.mp3 b/resources/sounds/step/cloth2.mp3 deleted file mode 100644 index 2dbab59..0000000 Binary files a/resources/sounds/step/cloth2.mp3 and /dev/null differ diff --git a/resources/sounds/step/cloth3.mp3 b/resources/sounds/step/cloth3.mp3 deleted file mode 100644 index 89ab9ef..0000000 Binary files a/resources/sounds/step/cloth3.mp3 and /dev/null differ diff --git a/resources/sounds/step/cloth4.mp3 b/resources/sounds/step/cloth4.mp3 deleted file mode 100644 index dc9d828..0000000 Binary files a/resources/sounds/step/cloth4.mp3 and /dev/null differ diff --git a/resources/sounds/step/grass1.mp3 b/resources/sounds/step/grass1.mp3 deleted file mode 100644 index ed6c94e..0000000 Binary files a/resources/sounds/step/grass1.mp3 and /dev/null differ diff --git a/resources/sounds/step/grass2.mp3 b/resources/sounds/step/grass2.mp3 deleted file mode 100644 index f8590e5..0000000 Binary files a/resources/sounds/step/grass2.mp3 and /dev/null differ diff --git a/resources/sounds/step/grass3.mp3 b/resources/sounds/step/grass3.mp3 deleted file mode 100644 index 18087db..0000000 Binary files a/resources/sounds/step/grass3.mp3 and /dev/null differ diff --git a/resources/sounds/step/grass4.mp3 b/resources/sounds/step/grass4.mp3 deleted file mode 100644 index 5cd8d8a..0000000 Binary files a/resources/sounds/step/grass4.mp3 and /dev/null differ diff --git a/resources/sounds/step/gravel1.mp3 b/resources/sounds/step/gravel1.mp3 deleted file mode 100644 index c50dcc2..0000000 Binary files a/resources/sounds/step/gravel1.mp3 and /dev/null differ diff --git a/resources/sounds/step/gravel2.mp3 b/resources/sounds/step/gravel2.mp3 deleted file mode 100644 index 33d1818..0000000 Binary files a/resources/sounds/step/gravel2.mp3 and /dev/null differ diff --git a/resources/sounds/step/gravel3.mp3 b/resources/sounds/step/gravel3.mp3 deleted file mode 100644 index b4633d6..0000000 Binary files a/resources/sounds/step/gravel3.mp3 and /dev/null differ diff --git a/resources/sounds/step/gravel4.mp3 b/resources/sounds/step/gravel4.mp3 deleted file mode 100644 index dab12d7..0000000 Binary files a/resources/sounds/step/gravel4.mp3 and /dev/null differ diff --git a/resources/sounds/step/sand1.mp3 b/resources/sounds/step/sand1.mp3 deleted file mode 100644 index 0f6da6f..0000000 Binary files a/resources/sounds/step/sand1.mp3 and /dev/null differ diff --git a/resources/sounds/step/sand2.mp3 b/resources/sounds/step/sand2.mp3 deleted file mode 100644 index aa3bc6c..0000000 Binary files a/resources/sounds/step/sand2.mp3 and /dev/null differ diff --git a/resources/sounds/step/sand3.mp3 b/resources/sounds/step/sand3.mp3 deleted file mode 100644 index daa955e..0000000 Binary files a/resources/sounds/step/sand3.mp3 and /dev/null differ diff --git a/resources/sounds/step/sand4.mp3 b/resources/sounds/step/sand4.mp3 deleted file mode 100644 index 6bfedfc..0000000 Binary files a/resources/sounds/step/sand4.mp3 and /dev/null differ diff --git a/resources/sounds/step/snow1.mp3 b/resources/sounds/step/snow1.mp3 deleted file mode 100644 index 5134ec2..0000000 Binary files a/resources/sounds/step/snow1.mp3 and /dev/null differ diff --git a/resources/sounds/step/snow2.mp3 b/resources/sounds/step/snow2.mp3 deleted file mode 100644 index f092071..0000000 Binary files a/resources/sounds/step/snow2.mp3 and /dev/null differ diff --git a/resources/sounds/step/snow3.mp3 b/resources/sounds/step/snow3.mp3 deleted file mode 100644 index 23fa8ef..0000000 Binary files a/resources/sounds/step/snow3.mp3 and /dev/null differ diff --git a/resources/sounds/step/snow4.mp3 b/resources/sounds/step/snow4.mp3 deleted file mode 100644 index dce2cbd..0000000 Binary files a/resources/sounds/step/snow4.mp3 and /dev/null differ diff --git a/resources/sounds/step/stone1.mp3 b/resources/sounds/step/stone1.mp3 deleted file mode 100644 index 007494f..0000000 Binary files a/resources/sounds/step/stone1.mp3 and /dev/null differ diff --git a/resources/sounds/step/stone2.mp3 b/resources/sounds/step/stone2.mp3 deleted file mode 100644 index af36ebc..0000000 Binary files a/resources/sounds/step/stone2.mp3 and /dev/null differ diff --git a/resources/sounds/step/stone3.mp3 b/resources/sounds/step/stone3.mp3 deleted file mode 100644 index ecb1eb9..0000000 Binary files a/resources/sounds/step/stone3.mp3 and /dev/null differ diff --git a/resources/sounds/step/stone4.mp3 b/resources/sounds/step/stone4.mp3 deleted file mode 100644 index 9450f00..0000000 Binary files a/resources/sounds/step/stone4.mp3 and /dev/null differ diff --git a/resources/sounds/step/wood1.mp3 b/resources/sounds/step/wood1.mp3 deleted file mode 100644 index 32c134d..0000000 Binary files a/resources/sounds/step/wood1.mp3 and /dev/null differ diff --git a/resources/sounds/step/wood2.mp3 b/resources/sounds/step/wood2.mp3 deleted file mode 100644 index e99c496..0000000 Binary files a/resources/sounds/step/wood2.mp3 and /dev/null differ diff --git a/resources/sounds/step/wood3.mp3 b/resources/sounds/step/wood3.mp3 deleted file mode 100644 index 67a0487..0000000 Binary files a/resources/sounds/step/wood3.mp3 and /dev/null differ diff --git a/resources/sounds/step/wood4.mp3 b/resources/sounds/step/wood4.mp3 deleted file mode 100644 index 481516a..0000000 Binary files a/resources/sounds/step/wood4.mp3 and /dev/null differ diff --git a/resources/sounds/tile/piston/in.mp3 b/resources/sounds/tile/piston/in.mp3 deleted file mode 100644 index a3d69ca..0000000 Binary files a/resources/sounds/tile/piston/in.mp3 and /dev/null differ diff --git a/resources/sounds/tile/piston/out.mp3 b/resources/sounds/tile/piston/out.mp3 deleted file mode 100644 index 0a84b38..0000000 Binary files a/resources/sounds/tile/piston/out.mp3 and /dev/null differ diff --git a/resources/sounds/vehicle/minecart1.mp3 b/resources/sounds/vehicle/minecart1.mp3 deleted file mode 100644 index fbf50f6..0000000 Binary files a/resources/sounds/vehicle/minecart1.mp3 and /dev/null differ diff --git a/resources/sounds/vehicle/minecart2.mp3 b/resources/sounds/vehicle/minecart2.mp3 deleted file mode 100644 index c86cf01..0000000 Binary files a/resources/sounds/vehicle/minecart2.mp3 and /dev/null differ diff --git a/resources/sounds/vehicle/minecart3.mp3 b/resources/sounds/vehicle/minecart3.mp3 deleted file mode 100644 index e8e046d..0000000 Binary files a/resources/sounds/vehicle/minecart3.mp3 and /dev/null differ diff --git a/resources/sounds/vehicle/minecart4.mp3 b/resources/sounds/vehicle/minecart4.mp3 deleted file mode 100644 index 28e6e76..0000000 Binary files a/resources/sounds/vehicle/minecart4.mp3 and /dev/null differ diff --git a/resources/terrain.png b/resources/terrain.png deleted file mode 100644 index 9165212..0000000 Binary files a/resources/terrain.png and /dev/null differ diff --git a/resources/terrain/moon.png b/resources/terrain/moon.png deleted file mode 100644 index 61cebbc..0000000 Binary files a/resources/terrain/moon.png and /dev/null differ diff --git a/resources/terrain/sun.png b/resources/terrain/sun.png deleted file mode 100644 index d343344..0000000 Binary files a/resources/terrain/sun.png and /dev/null differ diff --git a/resources/title/black.png b/resources/title/black.png deleted file mode 100644 index dc2ad3e..0000000 Binary files a/resources/title/black.png and /dev/null differ diff --git a/resources/title/mojang.png b/resources/title/mojang.png deleted file mode 100644 index 794beb0..0000000 Binary files a/resources/title/mojang.png and /dev/null differ diff --git a/resources/title/splashes.txt b/resources/title/splashes.txt deleted file mode 100644 index 0d69170..0000000 --- a/resources/title/splashes.txt +++ /dev/null @@ -1,210 +0,0 @@ -Pre-beta! -As seen on TV! -Awesome! -100% pure! -May contain nuts! -Better than Prey! -More polygons! -Sexy! -Limited edition! -Flashing letters! -Made by Notch! -Coming soon! -Best in class! -When it's finished! -Absolutely dragon free! -Excitement! -More than 500 sold! -One of a kind! -Heaps of hits on YouTube! -Indev! -Spiders everywhere! -Check it out! -Holy cow, man! -It's a game! -Made in Sweden! -Uses LWJGL! -Reticulating splines! -Minecraft! -Yaaay! -Alpha version! -Singleplayer! -Keyboard compatible! -Undocumented! -Ingots! -Exploding creepers! -That's not a moon! -l33t! -Create! -Survive! -Dungeon! -Exclusive! -The bee's knees! -Down with O.P.P.! -Closed source! -Classy! -Wow! -Not on steam! -9.95 euro! -Half price! -Oh man! -Check it out! -Awesome community! -Pixels! -Teetsuuuuoooo! -Kaaneeeedaaaa! -Now with difficulty! -Enhanced! -90% bug free! -Pretty! -12 herbs and spices! -Fat free! -Absolutely no memes! -Free dental! -Ask your doctor! -Minors welcome! -Cloud computing! -Legal in Finland! -Hard to label! -Technically good! -Bringing home the bacon! -Indie! -GOTY! -Ceci n'est pas une title screen! -Euclidian! -Now in 3D! -Inspirational! -Herregud! -Complex cellular automata! -Yes, sir! -Played by cowboys! -OpenGL 1.1! -Thousands of colors! -Try it! -Age of Wonders is better! -Try the mushroom stew! -Sensational! -Hot tamale, hot hot tamale! -Play him off, keyboard cat! -Guaranteed! -Macroscopic! -Bring it on! -Random splash! -Call your mother! -Monster infighting! -Loved by millions! -Ultimate edition! -Freaky! -You've got a brand new key! -Water proof! -Uninflammable! -Whoa, dude! -All inclusive! -Tell your friends! -NP is not in P! -Notch <3 ez! -Music by C418! -Livestreamed! -Haunted! -Polynomial! -Terrestrial! -All is full of love! -Full of stars! -Scientific! -Cooler than Spock! -Collaborate and listen! -Never dig down! -Take frequent breaks! -Not linear! -Han shot first! -Nice to meet you! -Buckets of lava! -Ride the pig! -Larger than Earth! -sqrt(-1) love you! -Phobos anomaly! -Punching wood! -Falling off cliffs! -0% sugar! -150% hyperbole! -Synecdoche! -Let's danec! -Seecret Friday update! -Reference implementation! -Lewd with two dudes with food! -Kiss the sky! -20 GOTO 10! -Verlet intregration! -Peter Griffin! -Do not distribute! -Cogito ergo sum! -4815162342 lines of code! -A skeleton popped out! -The Work of Notch! -The sum of its parts! -BTAF used to be good! -I miss ADOM! -umop-apisdn! -OICU812! -Bring me Ray Cokes! -Finger-licking! -Thematic! -Pneumatic! -Sublime! -Octagonal! -Une baguette! -Gargamel plays it! -Rita is the new top dog! -SWM forever! -Representing Edsbyn! -Matt Damon! -Superfragilisticexpialidocious! -Consummate V's! -Cow Tools! -Double buffered! -Fan fiction! -Flaxkikare! -Jason! Jason! Jason! -Hotter than the sun! -Internet enabled! -Autonomous! -Engage! -Fantasy! -DRR! DRR! DRR! -Kick it root down! -Regional resources! -Woo, facepunch! -Woo, somethingawful! -Woo, /v/! -Woo, tigsource! -Woo, minecraftforum! -Woo, worldofminecraft! -Google anlyticsed! -Now supports ���! -Give us Gordon! -Tip your waiter! -Very fun! -12345 is a bad password! -Vote for net neutrality! -Lives in a pineapple under the sea! -MAP11 has two names! -Omnipotent! -Gasp! -...! -Bees, bees, bees, bees! -Jag känner en bot! -This text is hard to read if you play the game at the default resolution, but at 1080p it's fine! -Haha, LOL! -Hampsterdance! -Switches and ores! -Menger sponge! -idspispopd! -Eple (original edit)! -So fresh, so clean! -Slow acting portals! -Try the Nether! -Don't look directly at the bugs! -Oh, ok, Pigmen! -Finally with ladders! -Scary! -Play Minecraft, Watch Topgear, Get Pig \ No newline at end of file diff --git a/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java b/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java index b2fcb82..2fbacd7 100644 --- a/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java +++ b/src/lwjgl/java/net/PeytonPlayz585/opengl/GL11_1.java @@ -72,7 +72,8 @@ import net.minecraft.src.MathHelper; import net.minecraft.src.Tessellator; import paulscode.sound.SoundSystem; import paulscode.sound.SoundSystemConfig; -import paulscode.sound.libraries.LibraryLWJGLOpenAL; +import paulscode.sound.codecs.CodecJOrbis; +import net.lax1dude.eaglercraft.adapter.sound.LibraryLWJGLOpenAL; import org.lwjgl.opengl.ARBDebugOutput; import org.lwjgl.opengl.ARBDebugOutputCallback; @@ -5047,6 +5048,7 @@ public class GL11_1 { try { SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class); + SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); SoundSystemConfig.setCodec("mp3", CodecJLayerMP3.class); ss = new SoundSystem(); }catch(Throwable t) { diff --git a/src/lwjgl/java/paulscode/sound/Channel.java b/src/lwjgl/java/paulscode/sound/Channel.java deleted file mode 100644 index abc1b0b..0000000 --- a/src/lwjgl/java/paulscode/sound/Channel.java +++ /dev/null @@ -1,262 +0,0 @@ -package paulscode.sound; - -import java.util.LinkedList; -import javax.sound.sampled.AudioFormat; - -/** - * The Channel class is the base class which can be extended for - * library-specific channels. It is also used in the "no-sound" library. A - * channel is a reserved sound-card voice through which sources are played back. - * Channels can be either streaming channels or normal (non-streaming) ones. For - * consistant naming conventions, each sub-class should have the name prefix - * "Channel".
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class Channel { - /** - * The library class associated with this type of channel. - */ - protected Class libraryType = Library.class; - - /** - * Global identifier for the type of channel (normal or streaming). Possible - * values for this varriable can be found in the - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class. - */ - public int channelType; - - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * Whatever source is attached to this channel. - */ - public Source attachedSource = null; - - /** - * Cumulative counter of the buffers played then unqued. - */ - public int buffersUnqueued = 0; - - /** - * Constructor: Takes channelType identifier as a paramater. Possible values for - * channel type can be found in the {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} class. - * - * @param type Type of channel (normal or streaming). - */ - public Channel(int type) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - channelType = type; - } - - /** - * Shuts the channel down and removes references to all instantiated objects. - */ - public void cleanup() { - logger = null; - } - - /** - * Queues up the initial byte[] buffers of data to be streamed. - * - * @param bufferList List of the first buffers to be played for a streaming - * source. - * @return False if an error occurred or if end of stream was reached. - */ - public boolean preLoadBuffers(LinkedList bufferList) { - return true; - } - - /** - * Queues up a byte[] buffer of data to be streamed. - * - * @param buffer The next buffer to be played for a streaming source. - * @return False if an error occurred or if the channel is shutting down. - */ - public boolean queueBuffer(byte[] buffer) { - return false; - } - - /** - * Feeds raw data to the stream. - * - * @param buffer Buffer containing raw audio data to stream. - * @return Number of prior buffers that have been processed. - */ - public int feedRawAudioData(byte[] buffer) { - return 1; - } - - /** - * Returns the number of queued byte[] buffers that have finished playing. - * - * @return Number of buffers processed. - */ - public int buffersProcessed() { - return 0; - } - - /** - * Calculates the number of milliseconds since the channel began playing. - * - * @return Milliseconds, or -1 if unable to calculate. - */ - public float millisecondsPlayed() { - return -1; - } - - /** - * Plays the next queued byte[] buffer. This method is run from the seperate - * {@link paulscode.sound.StreamThread StreamThread}. - * - * @return False when no more buffers are left to process. - */ - public boolean processBuffer() { - return false; - } - - /** - * Sets the channel up to receive the specified audio format. - */ - public void setAudioFormat(AudioFormat audioFormat) { - } - - /** - * Dequeues all previously queued data. - */ - public void flush() { - } - - /** - * Stops the channel, dequeues any queued data, and closes the channel. - */ - public void close() { - } - - /** - * Plays the currently attached normal source, opens this channel up for - * streaming, or resumes playback if this channel was paused. - */ - public void play() { - } - - /** - * Temporarily stops playback for this channel. - */ - public void pause() { - } - - /** - * Stops playback for this channel and rewinds the attached source to the - * beginning. - */ - public void stop() { - } - - /** - * Rewinds the attached source to the beginning. Stops the source if it was - * paused. - */ - public void rewind() { - } - - /** - * Used to determine if a channel is actively playing a source. This method will - * return false if the channel is paused or stopped and when no data is queued - * to be streamed. - * - * @return True if this channel is playing a source. - */ - public boolean playing() { - return false; - } - - /** - * Returns the name of the class. - * - * @return "Channel" + library title. - */ - public String getClassName() { - String libTitle = SoundSystemConfig.getLibraryTitle(libraryType); - - if (libTitle.equals("No Sound")) - return "Channel"; - else - return "Channel" + libTitle; - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - protected void message(String message) { - logger.message(message, 0); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - protected void importantMessage(String message) { - logger.importantMessage(message, 0); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, getClassName(), message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - protected void errorMessage(String message) { - logger.errorMessage(getClassName(), message, 0); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - */ - protected void printStackTrace(Exception e) { - logger.printStackTrace(e, 1); - } -} diff --git a/src/lwjgl/java/paulscode/sound/CommandObject.java b/src/lwjgl/java/paulscode/sound/CommandObject.java deleted file mode 100644 index 2fda3f0..0000000 --- a/src/lwjgl/java/paulscode/sound/CommandObject.java +++ /dev/null @@ -1,599 +0,0 @@ -package paulscode.sound; - -/** - * The CommandObject class is used to store arguments in the SoundSystem's - * Command Queue. Queued CommandObjects are then processed by the - * {@link paulscode.sound.CommandThread CommandThread}. Commands are queued and - * executed in the background, so it is unlikely that the user will ever need to - * use this class.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class CommandObject { - /** - * Global identifier for the command to initialize the current sound library. - */ - public static final int INITIALIZE = 1; - /** - * Global identifier for the command to pre-load a sound file. - */ - public static final int LOAD_SOUND = 2; - /** - * Global identifier for the command to pre-load a sound file. - */ - public static final int LOAD_DATA = 3; - /** - * Global identifier for the command to remove a sound file from memory. - */ - public static final int UNLOAD_SOUND = 4; - /** - * Global identifier for the command to queue a sound file. - */ - public static final int QUEUE_SOUND = 5; - /** - * Global identifier for the command to dequeue a sound file. - */ - public static final int DEQUEUE_SOUND = 6; - /** - * Global identifier for the command to fade-out transition a source. - */ - public static final int FADE_OUT = 7; - /** - * Global identifier for the command to fade-out/in transition a source. - */ - public static final int FADE_OUT_IN = 8; - /** - * Global identifier for the command to check volume levels of fading sources. - */ - public static final int CHECK_FADE_VOLUMES = 9; - /** - * Global identifier for the command to create a new source. - */ - public static final int NEW_SOURCE = 10; - /** - * Global identifier for the command to create a new raw data stream. - */ - public static final int RAW_DATA_STREAM = 11; - /** - * Global identifier for the command to create a source and immediately play it. - */ - public static final int QUICK_PLAY = 12; - /** - * Global identifier for the command to set a source's position in 3D space. - */ - public static final int SET_POSITION = 13; - /** - * Global identifier for the command to change a source's volume. - */ - public static final int SET_VOLUME = 14; - /** - * Global identifier for the command to change a source's pitch. - */ - public static final int SET_PITCH = 15; - /** - * Global identifier for the command to change a source's priority. - */ - public static final int SET_PRIORITY = 16; - /** - * Global identifier for the command to tell a source whether or not to loop. - */ - public static final int SET_LOOPING = 17; - /** - * Global identifier for the command to set a source's attenuation model. - */ - public static final int SET_ATTENUATION = 18; - /** - * Global identifier for the command to set a source's fade distance or rolloff - * factor. - */ - public static final int SET_DIST_OR_ROLL = 19; - /** - * Global identifier for the command to change the Doppler factor. - */ - public static final int CHANGE_DOPPLER_FACTOR = 20; - /** - * Global identifier for the command to change the Doppler velocity. - */ - public static final int CHANGE_DOPPLER_VELOCITY = 21; - /** - * Global identifier for the command to set a source's velocity. - */ - public static final int SET_VELOCITY = 22; - /** - * Global identifier for the command to set a source's velocity. - */ - public static final int SET_LISTENER_VELOCITY = 23; - /** - * Global identifier for the command to play a source. - */ - public static final int PLAY = 24; - /** - * Global identifier for the command to play a source. - */ - public static final int FEED_RAW_AUDIO_DATA = 25; - /** - * Global identifier for the command to pause a source. - */ - public static final int PAUSE = 26; - /** - * Global identifier for the command to stop a source. - */ - public static final int STOP = 27; - /** - * Global identifier for the command to rewind a source. - */ - public static final int REWIND = 28; - /** - * Global identifier for the command to flush all queued data. - */ - public static final int FLUSH = 29; - /** - * Global identifier for the command to cull a source. - */ - public static final int CULL = 30; - /** - * Global identifier for the command to activate a source. - */ - public static final int ACTIVATE = 31; - /** - * Global identifier for the command to set a source as permanant or temporary. - */ - public static final int SET_TEMPORARY = 32; - /** - * Global identifier for the command to delete a source. - */ - public static final int REMOVE_SOURCE = 33; - /** - * Global identifier for the command to move the listner. - */ - public static final int MOVE_LISTENER = 34; - /** - * Global identifier for the command to set the listener's position. - */ - public static final int SET_LISTENER_POSITION = 35; - /** - * Global identifier for the command to turn the listener. - */ - public static final int TURN_LISTENER = 36; - /** - * Global identifier for the command to set the listener's turn angle. - */ - public static final int SET_LISTENER_ANGLE = 37; - /** - * Global identifier for the command to change the listener's orientation. - */ - public static final int SET_LISTENER_ORIENTATION = 38; - /** - * Global identifier for the command to change the master volume. - */ - public static final int SET_MASTER_VOLUME = 39; - /** - * Global identifier for the command to create a new library. - */ - public static final int NEW_LIBRARY = 40; - - /** - * Any buffer required for a command. - */ - public byte[] buffer; - /** - * Any int arguments required for a command. - */ - public int[] intArgs; - /** - * Any float arguments required for a command. - */ - public float[] floatArgs; - /** - * Any long arguments required for a command. - */ - public long[] longArgs; - /** - * Any boolean arguments required for a command. - */ - public boolean[] boolArgs; - /** - * Any String arguments required for a command. - */ - public String[] stringArgs; - - /** - * Any Class arguments required for a command. - */ - public Class[] classArgs; - - /** - * Any Object arguments required for a command. - */ - public Object[] objectArgs; - - /** - * Which command to execute. - */ - public int Command; - - /** - * Constructor used to create a command which doesn't require any arguments. - * - * @param cmd Which command to execute. - */ - public CommandObject(int cmd) { - Command = cmd; - } - - /** - * Constructor used to create a command which requires one integer argument. - * - * @param cmd Which command to execute. - * @param i The integer argument needed to execute this command. - */ - public CommandObject(int cmd, int i) { - Command = cmd; - intArgs = new int[1]; - intArgs[0] = i; - } - - /** - * Constructor used to create a command which requires one Library Class - * argument. - * - * @param cmd Which command to execute. - * @param c The Library Class argument needed to execute this command. - */ - public CommandObject(int cmd, Class c) { - Command = cmd; - classArgs = new Class[1]; - classArgs[0] = c; - } - - /** - * Constructor used to create a command which requires one float argument. - * - * @param cmd Which command to execute. - * @param f The float argument needed to execute this command. - */ - public CommandObject(int cmd, float f) { - Command = cmd; - floatArgs = new float[1]; - floatArgs[0] = f; - } - - /** - * Constructor used to create a command which requires one String argument. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - */ - public CommandObject(int cmd, String s) { - Command = cmd; - stringArgs = new String[1]; - stringArgs[0] = s; - } - - /** - * Constructor used to create a command which requires one Object argument. - * - * @param cmd Which command to execute. - * @param o The Object argument needed to execute this command. - */ - public CommandObject(int cmd, Object o) { - Command = cmd; - objectArgs = new Object[1]; - objectArgs[0] = o; - } - - /** - * Constructor used to create a command which requires one String argument and - * one Object argument. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param o The Object argument needed to execute this command. - */ - public CommandObject(int cmd, String s, Object o) { - Command = cmd; - stringArgs = new String[1]; - stringArgs[0] = s; - objectArgs = new Object[1]; - objectArgs[0] = o; - } - - /** - * Constructor used to create a command which requires one String argument and - * one byte buffer argument. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param buff The byte buffer argument needed to execute this command. - */ - public CommandObject(int cmd, String s, byte[] buff) { - Command = cmd; - stringArgs = new String[1]; - stringArgs[0] = s; - buffer = buff; - } - - /** - * Constructor used to create a command which requires one String argument, one - * Object argument, and one long argument. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param o The Object argument needed to execute this command. - * @param l The long argument needed to execute this command. - */ - public CommandObject(int cmd, String s, Object o, long l) { - Command = cmd; - stringArgs = new String[1]; - stringArgs[0] = s; - objectArgs = new Object[1]; - objectArgs[0] = o; - longArgs = new long[1]; - longArgs[0] = l; - } - - /** - * Constructor used to create a command which requires one String argument, one - * Object argument, and two long arguments. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param o The Object argument needed to execute this command. - * @param l1 The first long argument needed to execute this command. - * @param l2 The second long argument needed to execute this command. - */ - public CommandObject(int cmd, String s, Object o, long l1, long l2) { - Command = cmd; - stringArgs = new String[1]; - stringArgs[0] = s; - objectArgs = new Object[1]; - objectArgs[0] = o; - longArgs = new long[2]; - longArgs[0] = l1; - longArgs[1] = l2; - } - - /** - * Constructor used to create a command which requires two String arguments. - * - * @param cmd Which command to execute. - * @param s1 The first String argument needed to execute this command. - * @param s2 The second String argument needed to execute this command. - */ - public CommandObject(int cmd, String s1, String s2) { - Command = cmd; - stringArgs = new String[2]; - stringArgs[0] = s1; - stringArgs[1] = s2; - } - - /** - * Constructor used to create a command which requires a String and an int as - * arguments. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param i The integer argument needed to execute this command. - */ - public CommandObject(int cmd, String s, int i) { - Command = cmd; - intArgs = new int[1]; - stringArgs = new String[1]; - intArgs[0] = i; - stringArgs[0] = s; - } - - /** - * Constructor used to create a command which requires a String and a float as - * arguments. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param f The float argument needed to execute this command. - */ - public CommandObject(int cmd, String s, float f) { - Command = cmd; - floatArgs = new float[1]; - stringArgs = new String[1]; - floatArgs[0] = f; - stringArgs[0] = s; - } - - /** - * Constructor used to create a command which requires a String and a boolean as - * arguments. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param b The boolean argument needed to execute this command. - */ - public CommandObject(int cmd, String s, boolean b) { - Command = cmd; - boolArgs = new boolean[1]; - stringArgs = new String[1]; - boolArgs[0] = b; - stringArgs[0] = s; - } - - /** - * Constructor used to create a command which requires three float arguments. - * - * @param cmd Which command to execute. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - */ - public CommandObject(int cmd, float f1, float f2, float f3) { - Command = cmd; - floatArgs = new float[3]; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - } - - /** - * Constructor used to create a command which a String and three float - * arguments. - * - * @param cmd Which command to execute. - * @param s The String argument needed to execute this command. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - */ - public CommandObject(int cmd, String s, float f1, float f2, float f3) { - Command = cmd; - floatArgs = new float[3]; - stringArgs = new String[1]; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - stringArgs[0] = s; - } - - /** - * Constructor used to create a command which requires six float arguments. - * - * @param cmd Which command to execute. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - * @param f4 The fourth float argument needed to execute this command. - * @param f5 The fifth float argument needed to execute this command. - * @param f6 The sixth float argument needed to execute this command. - */ - public CommandObject(int cmd, float f1, float f2, float f3, float f4, float f5, float f6) { - Command = cmd; - floatArgs = new float[6]; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - floatArgs[3] = f4; - floatArgs[4] = f5; - floatArgs[5] = f6; - } - - /** - * Constructor used to create a command which requires several arguments. - * - * @param cmd Which command to execute. - * @param b1 The first boolean argument needed to execute this command. - * @param b2 The second boolean argument needed to execute this command. - * @param b3 The third boolean argument needed to execute this command. - * @param s The String argument needed to execute this command. - * @param o The Object argument needed to execute this command. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - * @param i The integer argument needed to execute this command. - * @param f4 The fourth float argument needed to execute this command. - */ - public CommandObject(int cmd, boolean b1, boolean b2, boolean b3, String s, Object o, float f1, float f2, float f3, - int i, float f4) { - Command = cmd; - intArgs = new int[1]; - floatArgs = new float[4]; - boolArgs = new boolean[3]; - stringArgs = new String[1]; - objectArgs = new Object[1]; - intArgs[0] = i; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - floatArgs[3] = f4; - boolArgs[0] = b1; - boolArgs[1] = b2; - boolArgs[2] = b3; - stringArgs[0] = s; - objectArgs[0] = o; - } - - /** - * Constructor used to create a command which requires several arguments. - * - * @param cmd Which command to execute. - * @param b1 The first boolean argument needed to execute this command. - * @param b2 The second boolean argument needed to execute this command. - * @param b3 The third boolean argument needed to execute this command. - * @param s The String argument needed to execute this command. - * @param o The Object argument needed to execute this command. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - * @param i The integer argument needed to execute this command. - * @param f4 The fourth float argument needed to execute this command. - * @param b4 The fourth boolean argument needed to execute this command. - */ - public CommandObject(int cmd, boolean b1, boolean b2, boolean b3, String s, Object o, float f1, float f2, float f3, - int i, float f4, boolean b4) { - Command = cmd; - intArgs = new int[1]; - floatArgs = new float[4]; - boolArgs = new boolean[4]; - stringArgs = new String[1]; - objectArgs = new Object[1]; - intArgs[0] = i; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - floatArgs[3] = f4; - boolArgs[0] = b1; - boolArgs[1] = b2; - boolArgs[2] = b3; - boolArgs[3] = b4; - stringArgs[0] = s; - objectArgs[0] = o; - } - - /** - * Constructor used to create a command which requires several arguments. - * - * @param cmd Which command to execute. - * @param o The Object argument needed to execute this command. - * @param b The first boolean argument needed to execute this command. - * @param s The String argument needed to execute this command. - * @param f1 The first float argument needed to execute this command. - * @param f2 The second float argument needed to execute this command. - * @param f3 The third float argument needed to execute this command. - * @param i The integer argument needed to execute this command. - * @param f4 The fourth float argument needed to execute this command. - */ - public CommandObject(int cmd, Object o, boolean b, String s, float f1, float f2, float f3, int i, float f4) { - Command = cmd; - intArgs = new int[1]; - floatArgs = new float[4]; - boolArgs = new boolean[1]; - stringArgs = new String[1]; - objectArgs = new Object[1]; - intArgs[0] = i; - floatArgs[0] = f1; - floatArgs[1] = f2; - floatArgs[2] = f3; - floatArgs[3] = f4; - boolArgs[0] = b; - stringArgs[0] = s; - objectArgs[0] = o; - } -} diff --git a/src/lwjgl/java/paulscode/sound/CommandThread.java b/src/lwjgl/java/paulscode/sound/CommandThread.java deleted file mode 100644 index 9e874a4..0000000 --- a/src/lwjgl/java/paulscode/sound/CommandThread.java +++ /dev/null @@ -1,161 +0,0 @@ -package paulscode.sound; - -/** - * The CommandThread class is designed to move all command processing into a - * single thread to be run in the background and avoid conflicts between - * threads. Commands are processed in the order that they were queued. The - * arguements for each command are stored in a - * {@link paulscode.sound.CommandObject CommandObject}. The Command Queue is - * located in the {@link paulscode.sound.SoundSystem SoundSystem} class. Calling - * kill() stops the thread, and this should be immediatly followed by a call to - * interrupt() to wake up the thread so it may end. This class also checks for - * temporary sources that are finished playing, and removes them. - * - * NOTE: The command thread is created automatically by the sound system, so it - * is unlikely that the user would ever need to use this class.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class CommandThread extends SimpleThread { - /** - * Processes status messages, warnings, and error messages. - */ - protected SoundSystemLogger logger; - - /** - * Handle to the Sound System. This is where the Command Queue is located. - */ - private SoundSystem soundSystem; - - /** - * Name of this class. - */ - protected String className = "CommandThread"; - - /** - * Constructor: Takes a handle to the SoundSystem object as a parameter. - * - * @param s Handle to the SoundSystem. - */ - public CommandThread(SoundSystem s) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - soundSystem = s; - } - - /** - * Shuts the thread down and removes references to all instantiated objects. - * NOTE: Method alive() will return false when cleanup() has finished. - */ - @Override - protected void cleanup() { - kill(); - - logger = null; - soundSystem = null; - - super.cleanup(); // Important! - } - - /** - * The main loop for processing commands. The Command Thread starts out asleep, - * and it sleeps again after it finishes processing commands, so it must be - * interrupted when commands are queued for processing. - */ - @Override - public void run() { - long previousTime = System.currentTimeMillis(); - long currentTime = previousTime; - - if (soundSystem == null) { - errorMessage("SoundSystem was null in method run().", 0); - cleanup(); - return; - } - - // Start out asleep: - snooze(3600000); - - while (!dying()) { - // Perform user-specific source management: - soundSystem.ManageSources(); - - // Process all queued commands: - soundSystem.CommandQueue(null); - - // Remove temporary sources every ten seconds: - currentTime = System.currentTimeMillis(); - if ((!dying()) && ((currentTime - previousTime) > 10000)) { - previousTime = currentTime; - soundSystem.removeTemporarySources(); - } - - // Wait for more commands: - if (!dying()) - snooze(3600000); - } - - cleanup(); // Important! - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - protected void message(String message, int indent) { - logger.message(message, indent); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - protected void importantMessage(String message, int indent) { - logger.importantMessage(message, indent); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, className, message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - protected void errorMessage(String message, int indent) { - logger.errorMessage(className, message, indent); - } -} diff --git a/src/lwjgl/java/paulscode/sound/FilenameURL.java b/src/lwjgl/java/paulscode/sound/FilenameURL.java deleted file mode 100644 index 0b2bb00..0000000 --- a/src/lwjgl/java/paulscode/sound/FilenameURL.java +++ /dev/null @@ -1,135 +0,0 @@ -package paulscode.sound; - -import java.net.URL; - -/** - * The FilenameURL class is designed to associate a String filename/identifier - * with a URL. Handles either case where user supplies a String path or user - * supplies a URL instance.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class FilenameURL { - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * Filename or identifier for the file. - */ - private String filename = null; - - /** - * URL interface to the file. - */ - private URL url = null; - - /** - * Constructor: Saves handles to the url and identifier. The identifier should - * look like a filename, and it must have the correct extension so SoundSystem - * knows what format to use for the file referenced by the URL instance. - * - * @param url URL interface to a file. - * @param identifier Identifier (filename) for the file. - */ - public FilenameURL(URL url, String identifier) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - filename = identifier; - this.url = url; - } - - /** - * Constructor: Saves a handle to the filename (used later to generate a URL - * instance). The file may either be located within the JAR or at an online - * location. If the file is online, filename must begin with "http://", since - * that is how SoundSystem recognizes URL names. - * - * @param filename Name of the file. - */ - public FilenameURL(String filename) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - this.filename = filename; - url = null; - } - - /** - * Returns the filename/identifier. - * - * @return Filename or identifier for the file. - */ - public String getFilename() { - return filename; - } - - /** - * Returns the URL interface to the file. If a URL was not originally specified - * in the constructor, then the first time this method is called it creates a - * URL instance using the previously specified filename. - * - * @return URL interface to the file. - */ - public URL getURL() { - if (url == null) { - // Check if the file is online or inside the JAR: - if (filename.matches(SoundSystemConfig.PREFIX_URL)) { - // Online - try { - url = new URL(filename); - } catch (Exception e) { - errorMessage("Unable to access online URL in " + "method 'getURL'"); - printStackTrace(e); - return null; - } - } else { - // Inside the JAR - url = getClass().getClassLoader().getResource(SoundSystemConfig.getSoundFilesPackage() + filename); - } - } - return url; - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - private void errorMessage(String message) { - logger.errorMessage("MidiChannel", message, 0); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - */ - private void printStackTrace(Exception e) { - logger.printStackTrace(e, 1); - } -} diff --git a/src/lwjgl/java/paulscode/sound/ICodec.java b/src/lwjgl/java/paulscode/sound/ICodec.java deleted file mode 100644 index e988acf..0000000 --- a/src/lwjgl/java/paulscode/sound/ICodec.java +++ /dev/null @@ -1,117 +0,0 @@ -package paulscode.sound; - -import java.net.URL; -import javax.sound.sampled.AudioFormat; - -/** - * The ICodec interface provides a common interface for SoundSystem to use for - * accessing external codec libraries.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public interface ICodec { - /** - * Should tell derived classes when they may need to reverse the byte order of - * the data before returning it in the read() and readAll() methods. The reason - * for the reversBytOrder method is because some external codec libraries - * produce audio data in a format that some external audio libraries require to - * be reversed. Derivatives of the Library and Source classes for audio - * libraries which require this type of data to be reversed should call the - * reverseByteOrder() method for all instances of ICodec that they use. - * Derivatives of the ICodec interface for codec libraries which which produce - * this type of data should use the reverseByteOrder() method to know when the - * data needs to be reversed before returning it in the read() and readAll() - * methods. If a particular codec library does not produce this type of data, - * its derived ICodec class may disregard any calls to the reverseByteOrder() - * method. - * - * @param b True if the calling audio library requires byte-reversal by some - * codec libraries. - */ - public void reverseByteOrder(boolean b); - - /** - * Should make any preperations required before reading from the audio stream. - * If another stream is already opened, it should be closed and a new audio - * stream opened in its place. This method is used internally by SoundSystem not - * only to initialize a stream, but also to rewind streams and to switch stream - * sources on the fly. - * - * @return False if an error occurred or if end of stream was reached. - */ - public boolean initialize(URL url); - - /** - * Should return false if the stream is busy initializing. To prevent bad data - * from being returned by this method, derived classes should internally - * synchronize with any elements used by both the initialized() and initialize() - * methods. - * - * @return True if steam is initialized. - */ - public boolean initialized(); - - /** - * Should read in one stream buffer worth of audio data. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about accessing and changing default settings. - * - * @return The audio data wrapped into a SoundBuffer context. - */ - public SoundBuffer read(); - - /** - * Should read in all the audio data from the stream (up to the default "maximum - * file size". See {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} - * for more information about accessing and changing default settings. - * - * @return the audio data wrapped into a SoundBuffer context. - */ - public SoundBuffer readAll(); - - /** - * Should return false if there is still more data available to be read in. To - * prevent bad data from being returned by this method, derived classes should - * internally synchronize with any elements used in both the endOfStream() and - * the read() or readAll() methods. - * - * @return True if end of stream was reached. - */ - public boolean endOfStream(); - - /** - * Should close any open streams and remove references to all instantiated - * objects. - */ - public void cleanup(); - - /** - * Should return the audio format of the data being returned by the read() and - * readAll() methods. - * - * @return Information wrapped into an AudioFormat context. - */ - public AudioFormat getAudioFormat(); -} diff --git a/src/lwjgl/java/paulscode/sound/IStreamListener.java b/src/lwjgl/java/paulscode/sound/IStreamListener.java deleted file mode 100644 index e9e6538..0000000 --- a/src/lwjgl/java/paulscode/sound/IStreamListener.java +++ /dev/null @@ -1,12 +0,0 @@ -package paulscode.sound; - -public interface IStreamListener { - /** - * Notifies implementation that an End Of Stream was reached. - * - * @param sourcename String identifier of the source which reached the EOS. - * @param queueSize Number of items left the the stream's play queue, or zero - * if none. - */ - public void endOfStream(String sourcename, int queueSize); -} diff --git a/src/lwjgl/java/paulscode/sound/Library.java b/src/lwjgl/java/paulscode/sound/Library.java deleted file mode 100644 index 945d620..0000000 --- a/src/lwjgl/java/paulscode/sound/Library.java +++ /dev/null @@ -1,1479 +0,0 @@ -package paulscode.sound; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; -import javax.sound.sampled.AudioFormat; - -/** - * The Library class is the class from which all library types are extended. It - * provides generic methods for interfacing with the audio libraries supported - * by the SoundSystem. Specific libraries should extend this class and override - * the necessary methods. For consistant naming conventions, each sub-class - * should have the name prefix "Library". - * - * This class may also be used as the "No Sound Library" (i.e. silent mode) if - * no other audio libraries are supported by the host machine, or to mute all - * sound.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class Library { - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * Position and orientation of the listener. - */ - protected ListenerData listener; - - /** - * Map containing sound file data for easy lookup by filename / identifier. - */ - protected HashMap bufferMap = null; - - /** - * Map containing all created sources for easy look-up by name. - */ - protected HashMap sourceMap; // (name, source data) pairs - - /** - * Interface through which MIDI files can be played. - */ - private MidiChannel midiChannel; - - /** - * Array containing maximum number of non-streaming audio channels. - */ - protected List streamingChannels; - - /** - * Array containing maximum number of non-streaming audio channels. - */ - protected List normalChannels; - - /** - * Source name last played on each streaming channel. - */ - private String[] streamingChannelSourceNames; - - /** - * Source name last played on each non-streaming channel. - */ - private String[] normalChannelSourceNames; - - /** - * Increments through the steaming channel list as new sources are played. - */ - private int nextStreamingChannel = 0; - - /** - * Increments through the non-steaming channel list as new sources are played. - */ - private int nextNormalChannel = 0; - - /** - * Handles processing for all streaming sources. - */ - protected StreamThread streamThread; - - /** - * Whether or not the library requires reversal of audio data byte order. - */ - protected boolean reverseByteOrder = false; - - /** - * Constructor: Instantiates the source map and listener information. NOTES: The - * 'super()' method should be at the top of constructors for all extended - * classes. The varriable 'libraryType' should be given a new value in the - * constructors for all extended classes. - */ - public Library() throws SoundSystemException { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - // instantiate the buffer map: - bufferMap = new HashMap(); - - // instantiate the source map: - sourceMap = new HashMap(); - - listener = new ListenerData(0.0f, 0.0f, 0.0f, // position - 0.0f, 0.0f, -1.0f, // look-at direction - 0.0f, 1.0f, 0.0f, // up direction - 0.0f); // angle - - streamingChannels = new LinkedList(); - normalChannels = new LinkedList(); - streamingChannelSourceNames = new String[SoundSystemConfig.getNumberStreamingChannels()]; - normalChannelSourceNames = new String[SoundSystemConfig.getNumberNormalChannels()]; - - streamThread = new StreamThread(); - streamThread.start(); - } - - /* ########################################################################## */ - /* BEGIN OVERRIDE METHODS */ - /* */ - /* The following methods should be overrided as required */ - /* ########################################################################## */ - - /** - * Stops all sources, shuts down sound library, and removes references to all - * instantiated objects. - */ - public void cleanup() { - streamThread.kill(); - streamThread.interrupt(); - - // wait up to 5 seconds for stream thread to end: - for (int i = 0; i < 50; i++) { - if (!streamThread.alive()) - break; - try { - Thread.sleep(100); - } catch (Exception e) { - } - } - - if (streamThread.alive()) { - errorMessage("Stream thread did not die!"); - message("Ignoring errors... continuing clean-up."); - } - - if (midiChannel != null) { - midiChannel.cleanup(); - midiChannel = null; - } - - Channel channel = null; - if (streamingChannels != null) { - while (!streamingChannels.isEmpty()) { - channel = streamingChannels.remove(0); - channel.close(); - channel.cleanup(); - channel = null; - } - streamingChannels.clear(); - streamingChannels = null; - } - if (normalChannels != null) { - while (!normalChannels.isEmpty()) { - channel = normalChannels.remove(0); - channel.close(); - channel.cleanup(); - channel = null; - } - normalChannels.clear(); - normalChannels = null; - } - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and cleanup all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - source.cleanup(); - } - sourceMap.clear(); - sourceMap = null; - - listener = null; - streamThread = null; - } - - /** - * Initializes the sound library. - */ - public void init() throws SoundSystemException { - Channel channel = null; - - // create the streaming channels: - for (int x = 0; x < SoundSystemConfig.getNumberStreamingChannels(); x++) { - channel = createChannel(SoundSystemConfig.TYPE_STREAMING); - if (channel == null) - break; - streamingChannels.add(channel); - } - // create the non-streaming channels: - for (int x = 0; x < SoundSystemConfig.getNumberNormalChannels(); x++) { - channel = createChannel(SoundSystemConfig.TYPE_NORMAL); - if (channel == null) - break; - normalChannels.add(channel); - } - } - - /** - * Checks if the no-sound library type is compatible. - * - * @return True or false. - */ - public static boolean libraryCompatible() { - return true; // the no-sound library is always compatible. - } - - /** - * Creates a new channel of the specified type (normal or streaming). Possible - * values for channel type can be found in the - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class. - * - * @param type Type of channel. - * @return The new channel. - */ - protected Channel createChannel(int type) { - return new Channel(type); - } - - /** - * Pre-loads a sound into memory. - * - * @param filenameURL Filename/URL of the sound file to load. - * @return True if the sound loaded properly. - */ - public boolean loadSound(FilenameURL filenameURL) { - return true; - } - - /** - * Saves the specified sample data, under the specified identifier. This - * identifier can be later used in place of 'filename' parameters to reference - * the sample data. - * - * @param buffer the sample data and audio format to save. - * @param identifier What to call the sample. - * @return True if there weren't any problems. - */ - public boolean loadSound(SoundBuffer buffer, String identifier) { - return true; - } - - /** - * Returns the filenames of all previously loaded sounds. - * - * @return LinkedList of String filenames. - */ - public LinkedList getAllLoadedFilenames() { - LinkedList filenames = new LinkedList(); - Set keys = bufferMap.keySet(); - Iterator iter = keys.iterator(); - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - filenames.add(iter.next()); - } - - return filenames; - } - - /** - * Returns the sourcenames of all sources. - * - * @return LinkedList of String sourcenames. - */ - public LinkedList getAllSourcenames() { - LinkedList sourcenames = new LinkedList(); - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - - if (midiChannel != null) - sourcenames.add(midiChannel.getSourcename()); - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - sourcenames.add(iter.next()); - } - - return sourcenames; - } - - /** - * Removes a pre-loaded sound from memory. This is a good method to use for - * freeing up memory after a large sound file is no longer needed. NOTE: the - * source will remain in memory after this method has been called, for as long - * as the sound is attached to an existing source. - * - * @param filename Filename/identifier of the sound file to unload. - */ - public void unloadSound(String filename) { - bufferMap.remove(filename); - } - - /** - * Opens a direct line for streaming audio data. - * - * @param audioFormat Format that the data will be in. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param posX X position for this source. - * @param posY Y position for this source. - * @param posZ Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void rawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float posX, float posY, - float posZ, int attModel, float distOrRoll) { - sourceMap.put(sourcename, - new Source(audioFormat, priority, sourcename, posX, posY, posZ, attModel, distOrRoll)); - } - - /** - * Creates a new source using the specified information. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will load the sound in pieces rather - * than all at once. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param posX X position for this source. - * @param posY Y position for this source. - * @param posZ Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void newSource(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float posX, float posY, float posZ, int attModel, float distOrRoll) { - sourceMap.put(sourcename, new Source(priority, toStream, toLoop, sourcename, filenameURL, null, posX, posY, - posZ, attModel, distOrRoll, false)); - } - - /** - * Creates and immediately plays a new source that will be removed when it - * finishes playing. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will load the sound in pieces rather - * than all at once. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL The filename/URL of the sound file to play at this source. - * @param posX X position for this source. - * @param posY Y position for this source. - * @param posZ Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void quickPlay(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float posX, float posY, float posZ, int attModel, float distOrRoll, boolean tmp) { - sourceMap.put(sourcename, new Source(priority, toStream, toLoop, sourcename, filenameURL, null, posX, posY, - posZ, attModel, distOrRoll, tmp)); - } - - /** - * - * Defines whether or not the source should be removed after it finishes - * playing. - * - * @param sourcename The source's name. - * @param temporary True or False. - */ - public void setTemporary(String sourcename, boolean temporary) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setTemporary(temporary); - } - - /** - * Changes the specified source's position. - * - * @param sourcename The source's name. - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - public void setPosition(String sourcename, float x, float y, float z) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setPosition(x, y, z); - } - - /** - * Sets the specified source's priority factor. A priority source will not be - * overriden if there are too many sources playing at once. - * - * @param sourcename The source's name. - * @param pri True or False. - */ - public void setPriority(String sourcename, boolean pri) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setPriority(pri); - } - - /** - * Sets the specified source's looping parameter. If parameter lp is false, the - * source will play once and stop. - * - * @param sourcename The source's name. - * @param lp True or False. - */ - public void setLooping(String sourcename, boolean lp) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setLooping(lp); - } - - /** - * Sets the specified source's attenuation model. - * - * @param sourcename The source's name. - * @param model Attenuation model to use. - */ - public void setAttenuation(String sourcename, int model) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setAttenuation(model); - } - - /** - * Sets the specified source's fade distance or rolloff factor. - * - * @param sourcename The source's name. - * @param dr Fade distance or rolloff factor. - */ - public void setDistOrRoll(String sourcename, float dr) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setDistOrRoll(dr); - } - - /** - * Sets the specified source's velocity, for use in Doppler effect. - * - * @param sourcename The source's name. - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - public void setVelocity(String sourcename, float x, float y, float z) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.setVelocity(x, y, z); - } - - /** - * Sets the listener's velocity, for use in Doppler effect. - * - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - public void setListenerVelocity(float x, float y, float z) { - listener.setVelocity(x, y, z); - } - - /** - * Notifies the underlying library that the Doppler parameters have changed. - */ - public void dopplerChanged() { - } - - /** - * Returns the number of miliseconds since the specified source began playing. - * - * @return miliseconds, or -1 if not playing or unable to calculate - */ - public float millisecondsPlayed(String sourcename) { - if (sourcename == null || sourcename.equals("")) { - errorMessage("Sourcename not specified in method " + "'millisecondsPlayed'"); - return -1; - } - - if (midiSourcename(sourcename)) { - errorMessage("Unable to calculate milliseconds for MIDI source."); - return -1; - } else { - Source source = sourceMap.get(sourcename); - if (source == null) { - errorMessage("Source '" + sourcename + "' not found in " + "method 'millisecondsPlayed'"); - } - return source.millisecondsPlayed(); - } - } - - /** - * Feeds raw data through the specified source. The source must be a streaming - * source and it can not be already associated with a file or URL to stream - * from. - * - * @param sourcename Name of the streaming source to play from. - * @param buffer Byte buffer containing raw audio data to stream. - * @return Number of prior buffers that have been processed, or -1 if unable to - * queue the buffer (if the source was culled, for example). - */ - public int feedRawAudioData(String sourcename, byte[] buffer) { - if (sourcename == null || sourcename.equals("")) { - errorMessage("Sourcename not specified in method " + "'feedRawAudioData'"); - return -1; - } - - if (midiSourcename(sourcename)) { - errorMessage("Raw audio data can not be fed to the " + "MIDI channel."); - return -1; - } else { - Source source = sourceMap.get(sourcename); - if (source == null) { - errorMessage("Source '" + sourcename + "' not found in " + "method 'feedRawAudioData'"); - } - return feedRawAudioData(source, buffer); - } - } - - /** - * Feeds raw data through the specified source. The source must be a streaming - * source and it can not be already associated with a file or URL to stream - * from. - * - * @param source Streaming source to play from. - * @param buffer Byte buffer containing raw audio data to stream. - * @return Number of prior buffers that have been processed, or -1 if unable to - * queue the buffer (if the source was culled, for example). - */ - public int feedRawAudioData(Source source, byte[] buffer) { - if (source == null) { - errorMessage("Source parameter null in method " + "'feedRawAudioData'"); - return -1; - } - if (!source.toStream) { - errorMessage("Only a streaming source may be specified in " + "method 'feedRawAudioData'"); - return -1; - } - if (!source.rawDataStream) { - errorMessage("Streaming source already associated with a " + "file or URL in method'feedRawAudioData'"); - return -1; - } - - if (!source.playing() || source.channel == null) { - Channel channel; - if (source.channel != null && (source.channel.attachedSource == source)) - channel = source.channel; - else - channel = getNextChannel(source); - - int processed = source.feedRawAudioData(channel, buffer); - channel.attachedSource = source; - streamThread.watch(source); - streamThread.interrupt(); - return processed; - } - - return (source.feedRawAudioData(source.channel, buffer)); - } - - /** - * Looks up the specified source and plays it. - * - * @param sourcename Name of the source to play. - */ - public void play(String sourcename) { - if (sourcename == null || sourcename.equals("")) { - errorMessage("Sourcename not specified in method 'play'"); - return; - } - - if (midiSourcename(sourcename)) { - midiChannel.play(); - } else { - Source source = sourceMap.get(sourcename); - if (source == null) { - errorMessage("Source '" + sourcename + "' not found in " + "method 'play'"); - } - play(source); - } - } - - /** - * Plays the specified source. - * - * @param source The source to play. - */ - public void play(Source source) { - if (source == null) - return; - - // raw data streams will automatically play when data is sent to them, - // so no need to do anything here. - if (source.rawDataStream) - return; - - if (!source.active()) - return; - - if (!source.playing()) { - Channel channel = getNextChannel(source); - - if (source != null && channel != null) { - if (source.channel != null && source.channel.attachedSource != source) - source.channel = null; - channel.attachedSource = source; - source.play(channel); - if (source.toStream) { - streamThread.watch(source); - streamThread.interrupt(); - } - } - } - } - - /** - * Stops the specified source. - * - * @param sourcename The source's name. - */ - public void stop(String sourcename) { - if (sourcename == null || sourcename.equals("")) { - errorMessage("Sourcename not specified in method 'stop'"); - return; - } - if (midiSourcename(sourcename)) { - midiChannel.stop(); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.stop(); - } - } - - /** - * Pauses the specified source. - * - * @param sourcename The source's name. - */ - public void pause(String sourcename) { - if (sourcename == null || sourcename.equals("")) { - errorMessage("Sourcename not specified in method 'stop'"); - return; - } - if (midiSourcename(sourcename)) { - midiChannel.pause(); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.pause(); - } - } - - /** - * Rewinds the specified source. - * - * @param sourcename The source's name. - */ - public void rewind(String sourcename) { - if (midiSourcename(sourcename)) { - midiChannel.rewind(); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.rewind(); - } - } - - /** - * Clears all previously queued data from a stream. - * - * @param sourcename The source's name. - */ - public void flush(String sourcename) { - if (midiSourcename(sourcename)) - errorMessage("You can not flush the MIDI channel"); - else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.flush(); - } - } - - /** - * Culls the specified source. A culled source will not play until it has been - * activated again. - * - * @param sourcename The source's name. - */ - public void cull(String sourcename) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.cull(); - } - - /** - * Activates a previously culled source, so it can be played again. - * - * @param sourcename The source's name. - */ - public void activate(String sourcename) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) { - mySource.activate(); - if (mySource.toPlay) - play(mySource); - } - } - - /** - * Sets the overall volume to the specified value, affecting all sources. - * - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - public void setMasterVolume(float value) { - SoundSystemConfig.setMasterGain(value); - if (midiChannel != null) - midiChannel.resetGain(); - } - - /** - * Manually sets the specified source's volume. - * - * @param sourcename The source's name. - * @param value A float value ( 0.0f - 1.0f ). - */ - public void setVolume(String sourcename, float value) { - if (midiSourcename(sourcename)) { - midiChannel.setVolume(value); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) { - float newVolume = value; - if (newVolume < 0.0f) - newVolume = 0.0f; - else if (newVolume > 1.0f) - newVolume = 1.0f; - - mySource.sourceVolume = newVolume; - mySource.positionChanged(); - } - } - } - - /** - * Returns the current volume of the specified source, or zero if the specified - * source was not found. - * - * @param sourcename Source to read volume from. - * @return Float value representing the source volume (0.0f - 1.0f). - */ - public float getVolume(String sourcename) { - if (midiSourcename(sourcename)) { - return midiChannel.getVolume(); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - return mySource.sourceVolume; - else - return 0.0f; - } - } - - /** - * Manually sets the specified source's pitch. - * - * @param sourcename The source's name. - * @param value A float value ( 0.5f - 2.0f ). - */ - public void setPitch(String sourcename, float value) { - if (!midiSourcename(sourcename)) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) { - float newPitch = value; - if (newPitch < 0.5f) - newPitch = 0.5f; - else if (newPitch > 2.0f) - newPitch = 2.0f; - - mySource.setPitch(newPitch); - mySource.positionChanged(); - } - } - } - - /** - * Returns the pitch of the specified source. - * - * @param sourcename The source's name. - * @return Float value representing the source pitch (0.5f - 2.0f). - */ - public float getPitch(String sourcename) { - if (!midiSourcename(sourcename)) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - return mySource.getPitch(); - } - return 1.0f; - } - - /** - * Moves the listener relative to the current position. - * - * @param x X offset. - * @param y Y offset. - * @param z Z offset. - */ - public void moveListener(float x, float y, float z) { - setListenerPosition(listener.position.x + x, listener.position.y + y, listener.position.z + z); - } - - /** - * Changes the listener's position. - * - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - public void setListenerPosition(float x, float y, float z) { - // update listener's position - listener.setPosition(x, y, z); - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - source.positionChanged(); - } - } - - /** - * Turn the listener 'angle' radians counterclockwise around the y-Axis, - * relative to the current angle. - * - * @param angle Angle in radians. - */ - public void turnListener(float angle) { - setListenerAngle(listener.angle + angle); - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - source.positionChanged(); - } - } - - /** - * Changes the listeners orientation to the specified 'angle' radians - * counterclockwise around the y-Axis. - * - * @param angle Angle in radians. - */ - public void setListenerAngle(float angle) { - listener.setAngle(angle); - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - source.positionChanged(); - } - } - - /** - * Changes the listeners orientation using the specified coordinates. - * - * @param lookX X element of the look-at direction. - * @param lookY Y element of the look-at direction. - * @param lookZ Z element of the look-at direction. - * @param upX X element of the up direction. - * @param upY Y element of the up direction. - * @param upZ Z element of the up direction. - */ - public void setListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) { - listener.setOrientation(lookX, lookY, lookZ, upX, upY, upZ); - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and update the volume of all sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - source.positionChanged(); - } - } - - /** - * Changes the listeners position and orientation using the specified listener - * data. - * - * @param l Listener data to use. - */ - public void setListenerData(ListenerData l) { - listener.setData(l); - } - - /** - * Creates sources based on the source map provided. - * - * @param srcMap Sources to copy. - */ - public void copySources(HashMap srcMap) { - if (srcMap == null) - return; - Set keys = srcMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source srcData; - - // remove any existing sources before starting: - sourceMap.clear(); - - // loop through and copy all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - srcData = srcMap.get(sourcename); - if (srcData != null) { - loadSound(srcData.filenameURL); - sourceMap.put(sourcename, new Source(srcData, null)); - } - } - } - - /** - * Stops and deletes the specified source. - * - * @param sourcename The source's name. - */ - public void removeSource(String sourcename) { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) { - // if this is a streaming source just mark it removed - - // https://github.com/MinecraftForge/MinecraftForge/pull/4765 - if (mySource.toStream) - mySource.removed = true; - else - mySource.cleanup(); // end the source, free memory - } - sourceMap.remove(sourcename); - } - - /** - * Searches for and removes all temporary sources that have finished playing. - */ - public void removeTemporarySources() { - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source srcData; - - // loop through and cleanup all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - srcData = sourceMap.get(sourcename); - if ((srcData != null) && (srcData.temporary) && (!srcData.playing())) { - srcData.cleanup(); // end the source, free memory - iter.remove(); - } - } - } - - /* ########################################################################## */ - /* END OVERRIDE METHODS */ - /* ########################################################################## */ - - /** - * Returns a handle to the next available channel. If the specified source is a - * normal source, a normal channel is returned, and if it is a streaming source, - * then a streaming channel is returned. If all channels of the required type - * are currently playing, then the next channel playing a non-priority source is - * returned. If no channels are available (i.e. they are all playing priority - * sources) then getNextChannel returns null. - * - * @param source Source to find a channel for. - * @return The next available channel, or null. - */ - private Channel getNextChannel(Source source) { - if (source == null) - return null; - - String sourcename = source.sourcename; - if (sourcename == null) - return null; - - int x; - int channels; - int nextChannel; - List channelList; - String[] sourceNames; - String name; - - if (source.toStream) { - nextChannel = nextStreamingChannel; - channelList = streamingChannels; - sourceNames = streamingChannelSourceNames; - } else { - nextChannel = nextNormalChannel; - channelList = normalChannels; - sourceNames = normalChannelSourceNames; - } - - channels = channelList.size(); - - // Check if this source is already on a channel: - for (x = 0; x < channels; x++) { - if (sourcename.equals(sourceNames[x])) - return channelList.get(x); - } - - int n = nextChannel; - Source src; - // Play on the next new or non-playing channel: - for (x = 0; x < channels; x++) { - name = sourceNames[n]; - if (name == null) - src = null; - else - src = sourceMap.get(name); - - if (src == null || !src.playing()) { - if (source.toStream) { - nextStreamingChannel = n + 1; - if (nextStreamingChannel >= channels) - nextStreamingChannel = 0; - } else { - nextNormalChannel = n + 1; - if (nextNormalChannel >= channels) - nextNormalChannel = 0; - } - sourceNames[n] = sourcename; - return channelList.get(n); - } - n++; - if (n >= channels) - n = 0; - } - - n = nextChannel; - // Play on the next non-priority channel: - for (x = 0; x < channels; x++) { - name = sourceNames[n]; - if (name == null) - src = null; - else - src = sourceMap.get(name); - - if (src == null || !src.playing() || !src.priority) { - if (source.toStream) { - nextStreamingChannel = n + 1; - if (nextStreamingChannel >= channels) - nextStreamingChannel = 0; - } else { - nextNormalChannel = n + 1; - if (nextNormalChannel >= channels) - nextNormalChannel = 0; - } - sourceNames[n] = sourcename; - return channelList.get(n); - } - n++; - if (n >= channels) - n = 0; - } - - return null; - } - - /** - * Plays all sources whose 'toPlay' varriable is true but are not currently - * playing (such as sources which were culled while looping and then - * reactivated). - */ - public void replaySources() { - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // loop through and cleanup all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) { - if (source.toPlay && !source.playing()) { - play(sourcename); - source.toPlay = false; - } - } - } - } - - /** - * If the specified source is a streaming source or MIDI source, this method - * queues up the next sound to play when the previous playback ends. This method - * has no effect on non-streaming sources. - * - * @param sourcename Source identifier. - * @param filenameURL Filename/URL of the sound file to play next. - */ - public void queueSound(String sourcename, FilenameURL filenameURL) { - if (midiSourcename(sourcename)) { - midiChannel.queueSound(filenameURL); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.queueSound(filenameURL); - } - } - - /** - * Removes the first occurrence of the specified filename from the specified - * source's list of sounds to play when previous playback ends. This method has - * no effect on non-streaming sources. - * - * @param sourcename Source identifier. - * @param filename Filename/identifier of the sound file to remove from the - * queue. - */ - public void dequeueSound(String sourcename, String filename) { - if (midiSourcename(sourcename)) { - midiChannel.dequeueSound(filename); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.dequeueSound(filename); - } - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then begins playing the specified file at the source's previously assigned - * volume level. If the filenameURL parameter is null or empty, the specified - * source will simply fade out and stop. The miliseconds parameter must be - * non-negative or zero. This method will remove anything that is currently in - * the specified source's list of queued sounds that would have played next when - * the current sound finished playing. This method may only be used for - * streaming and MIDI sources. - * - * @param sourcename Name of the source to fade out. - * @param filenameURL Filename/URL of the sound file to play next, or null for - * none. - * @param milis Number of miliseconds the fadeout should take. - */ - public void fadeOut(String sourcename, FilenameURL filenameURL, long milis) { - if (midiSourcename(sourcename)) { - midiChannel.fadeOut(filenameURL, milis); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.fadeOut(filenameURL, milis); - } - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then fades the volume back in playing the specified file. Final volume after - * fade-in completes will be equal to the source's previously assigned volume - * level. The filenameURL parameter may not be null or empty. The miliseconds - * parameters must be non-negative or zero. This method will remove anything - * that is currently in the specified source's list of queued sounds that would - * have played next when the current sound finished playing. This method may - * only be used for streaming and MIDI sources. - * - * @param sourcename Name of the source to fade out/in. - * @param filenameURL Filename/URL of the sound file to play next, or null for - * none. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - public void fadeOutIn(String sourcename, FilenameURL filenameURL, long milisOut, long milisIn) { - if (midiSourcename(sourcename)) { - midiChannel.fadeOutIn(filenameURL, milisOut, milisIn); - } else { - Source mySource = sourceMap.get(sourcename); - if (mySource != null) - mySource.fadeOutIn(filenameURL, milisOut, milisIn); - } - } - - /** - * Makes sure the current volume levels of streaming sources and MIDI are - * correct. This method is designed to help reduce the "jerky" fading behavior - * that happens when using some library and codec pluggins (such as - * LibraryJavaSound and CodecJOrbis). This method has no effect on normal - * "non-streaming" sources. It would normally be called somewhere in the main - * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for - * every frame. It is better to just call this method at some acceptable - * "granularity" (play around with different granularities to find what sounds - * acceptable for a particular situation). - */ - public void checkFadeVolumes() { - if (midiChannel != null) - midiChannel.resetGain(); - Channel c; - Source s; - for (int x = 0; x < streamingChannels.size(); x++) { - c = streamingChannels.get(x); - if (c != null) { - s = c.attachedSource; - if (s != null) - s.checkFadeOut(); - } - } - c = null; - s = null; - } - - /** - * Loads the specified MIDI file, and saves the source information about it. - * - * @param toLoop Midi file should loop or play once. - * @param sourcename Source identifier. - * @param filenameURL Filename/URL of the MIDI file to load. - */ - public void loadMidi(boolean toLoop, String sourcename, FilenameURL filenameURL) { - if (filenameURL == null) { - errorMessage("Filename/URL not specified in method 'loadMidi'."); - return; - } - - if (!filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI)) { - errorMessage("Filename/identifier doesn't end in '.mid' or" + "'.midi' in method loadMidi."); - return; - } - - if (midiChannel == null) { - midiChannel = new MidiChannel(toLoop, sourcename, filenameURL); - } else { - midiChannel.switchSource(toLoop, sourcename, filenameURL); - } - } - - /** - * Unloads the current Midi file. - */ - public void unloadMidi() { - if (midiChannel != null) - midiChannel.cleanup(); - midiChannel = null; - } - - /** - * Checks if the sourcename matches the midi source. - * - * @param sourcename Source identifier. - * @return True if sourcename and midi sourcename match. - */ - public boolean midiSourcename(String sourcename) { - if (midiChannel == null || sourcename == null) - return false; - - if (midiChannel.getSourcename() == null || sourcename.equals("")) - return false; - - if (sourcename.equals(midiChannel.getSourcename())) - return true; - - return false; - } - - /** - * - * Returns the Source object identified by the specified name. - * - * @param sourcename The source's name. - * @return The source, or null if not found. - */ - public Source getSource(String sourcename) { - return sourceMap.get(sourcename); - } - - /** - * - * Returns a handle to the MIDI channel, or null if one does not exist. - * - * @return The MIDI channel. - */ - public MidiChannel getMidiChannel() { - return midiChannel; - } - - /** - * - * Specifies the MIDI channel to use. - * - * @param c New MIDI channel. - */ - public void setMidiChannel(MidiChannel c) { - if (midiChannel != null && midiChannel != c) - midiChannel.cleanup(); - - midiChannel = c; - } - - /** - * Tells all the sources that the listener has moved. - */ - public void listenerMoved() { - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source srcData; - - // loop through and copy all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - srcData = sourceMap.get(sourcename); - if (srcData != null) { - srcData.listenerMoved(); - } - } - } - - /** - * Returns the sources map. - * - * @return Map of all sources. - */ - public HashMap getSources() { - return sourceMap; - } - - /** - * Returns information about the listener. - * - * @return A ListenerData object. - */ - public ListenerData getListenerData() { - return listener; - } - - /** - * Indicates whether or not this library requires some codecs to reverse-order - * the audio data they generate. - * - * @return True if audio data should be reverse-ordered. - */ - public boolean reverseByteOrder() { - return reverseByteOrder; - } - - /** - * Returns the short title of this library type. - * - * @return A short title. - */ - public static String getTitle() { - return "No Sound"; - } - - /** - * Returns a longer description of this library type. - * - * @return A longer description. - */ - public static String getDescription() { - return "Silent Mode"; - } - - /** - * Returns the name of the class. - * - * @return "Library" + library title. - */ - public String getClassName() { - return "Library"; - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - protected void message(String message) { - logger.message(message, 0); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - protected void importantMessage(String message) { - logger.importantMessage(message, 0); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, getClassName(), message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - protected void errorMessage(String message) { - logger.errorMessage(getClassName(), message, 0); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - */ - protected void printStackTrace(Exception e) { - logger.printStackTrace(e, 1); - } -} diff --git a/src/lwjgl/java/paulscode/sound/ListenerData.java b/src/lwjgl/java/paulscode/sound/ListenerData.java deleted file mode 100644 index e2033b4..0000000 --- a/src/lwjgl/java/paulscode/sound/ListenerData.java +++ /dev/null @@ -1,276 +0,0 @@ -package paulscode.sound; - -/** - * The listenerData class is used to store information about the listener's - * position and orientation. A ListenerData object can be obtained using - * SoundSystem's getListenerData() method. See {@link paulscode.sound.Vector3D - * Vector3D} for more information about 3D coordinates and vectors.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class ListenerData { - /** - * Listener's position in 3D space - */ - public Vector3D position; - /** - * A normalized vector indicating the direction the listener is facing - */ - public Vector3D lookAt; - /** - * A normalized vector indicating the up direction - */ - public Vector3D up; - /** - * Listener's velocity in world-space - */ - public Vector3D velocity; - - /** - * Used for easy rotation along the x/z plane (for use in a first-person shooter - * type of application). - */ - public float angle = 0.0f; - - /** - * Constructor: Set this listener data to the origin facing along the z-axis - */ - public ListenerData() { - position = new Vector3D(0.0f, 0.0f, 0.0f); - lookAt = new Vector3D(0.0f, 0.0f, -1.0f); - up = new Vector3D(0.0f, 1.0f, 0.0f); - velocity = new Vector3D(0.0f, 0.0f, 0.0f); - angle = 0.0f; - } - - /** - * Constructor: Set this listener data to the specified values for position and - * orientation. - * - * @param pX Listener's X coordinate. - * @param pY Listener's Y coordinate. - * @param pZ Listener's Z coordinate. - * @param lX X element of the look-at direction. - * @param lY Y element of the look-at direction. - * @param lZ Z element of the look-at direction. - * @param uX X element of the up direction. - * @param uY Y element of the up direction. - * @param uZ Z element of the up direction. - * @param a Angle in radians that the listener is turned counterclockwise - * around the y-axis. - */ - public ListenerData(float pX, float pY, float pZ, float lX, float lY, float lZ, float uX, float uY, float uZ, - float a) { - position = new Vector3D(pX, pY, pZ); - lookAt = new Vector3D(lX, lY, lZ); - up = new Vector3D(uX, uY, uZ); - velocity = new Vector3D(0.0f, 0.0f, 0.0f); - angle = a; - } - - /** - * Constructor: Set this listener data to the specified values for position and - * orientation. - * - * @param p Position of the listener in 3D space. - * @param l Normalized vector indicating the direction which the listener is - * facing. - * @param u Normalized vector indicating the up direction. - * @param a Angle in radians that the listener is turned counterclockwise around - * the y-axis. - */ - public ListenerData(Vector3D p, Vector3D l, Vector3D u, float a) { - position = p.clone(); - lookAt = l.clone(); - up = u.clone(); - velocity = new Vector3D(0.0f, 0.0f, 0.0f); - angle = a; - } - - /** - * Change this listener data using the specified coordinates for position and - * orientation. - * - * @param pX Listener's X coordinate. - * @param pY Listener's Y coordinate. - * @param pZ Listener's Z coordinate. - * @param lX X element of the look-at direction. - * @param lY Y element of the look-at direction. - * @param lZ Z element of the look-at direction. - * @param uX X element of the up direction. - * @param uY Y element of the up direction. - * @param uZ Z element of the up direction. - * @param a Angle in radians that the listener is turned counterclockwise - * around the y-axis. - */ - public void setData(float pX, float pY, float pZ, float lX, float lY, float lZ, float uX, float uY, float uZ, - float a) { - position.x = pX; - position.y = pY; - position.z = pZ; - lookAt.x = lX; - lookAt.y = lY; - lookAt.z = lZ; - up.x = uX; - up.y = uY; - up.z = uZ; - angle = a; - } - - /** - * Change this listener data using the specified 3D vectors for position and - * orientation. - * - * @param p Position of the listener in 3D space. - * @param l Normalized vector indicating the direction which the listener is - * facing. - * @param u Normalized vector indicating the up direction. - * @param a Angle in radians that the listener is turned counterclockwise around - * the y-axis. - */ - public void setData(Vector3D p, Vector3D l, Vector3D u, float a) { - position.x = p.x; - position.y = p.y; - position.z = p.z; - lookAt.x = l.x; - lookAt.y = l.y; - lookAt.z = l.z; - up.x = u.x; - up.y = u.y; - up.z = u.z; - angle = a; - } - - /** - * Change this listener data to match the specified listener data. - * - * @param l Listener data to use. - */ - public void setData(ListenerData l) { - position.x = l.position.x; - position.y = l.position.y; - position.z = l.position.z; - lookAt.x = l.lookAt.x; - lookAt.y = l.lookAt.y; - lookAt.z = l.lookAt.z; - up.x = l.up.x; - up.y = l.up.y; - up.z = l.up.z; - angle = l.angle; - } - - /** - * Change this listener's position using the specified coordinates. - * - * @param x Listener's X coordinate. - * @param y Listener's Y coordinate. - * @param z Listener's Z coordinate. - */ - public void setPosition(float x, float y, float z) { - position.x = x; - position.y = y; - position.z = z; - } - - /** - * Change this listener's position using the specified vector. - * - * @param p New position. - */ - public void setPosition(Vector3D p) { - position.x = p.x; - position.y = p.y; - position.z = p.z; - } - - /** - * Changes the listeners orientation using the specified coordinates. - * - * @param lX X element of the look-at direction. - * @param lY Y element of the look-at direction. - * @param lZ Z element of the look-at direction. - * @param uX X element of the up direction. - * @param uY Y element of the up direction. - * @param uZ Z element of the up direction. - */ - public void setOrientation(float lX, float lY, float lZ, float uX, float uY, float uZ) { - lookAt.x = lX; - lookAt.y = lY; - lookAt.z = lZ; - up.x = uX; - up.y = uY; - up.z = uZ; - } - - /** - * Changes the listeners orientation using the specified vectors. - * - * @param l Normalized vector representing the look-at direction. - * @param u Normalized vector representing the up direction. - */ - public void setOrientation(Vector3D l, Vector3D u) { - lookAt.x = l.x; - lookAt.y = l.y; - lookAt.z = l.z; - up.x = u.x; - up.y = u.y; - up.z = u.z; - } - - /** - * Change this listener's velocity in world-space. - * - * @param v New velocity. - */ - public void setVelocity(Vector3D v) { - velocity.x = v.x; - velocity.y = v.y; - velocity.z = v.z; - } - - /** - * Change this listener's velocity in world-space. - * - * @param x New velocity along world x-axis. - * @param y New velocity along world y-axis. - * @param z New velocity along world z-axis. - */ - public void setVelocity(float x, float y, float z) { - velocity.x = x; - velocity.y = y; - velocity.z = z; - } - - /** - * Sets the listener's angle counterclockwise around the y-axis. - * - * @param a Angle in radians. - */ - public void setAngle(float a) { - angle = a; - lookAt.x = -1.0f * (float) Math.sin(angle); - lookAt.z = -1.0f * (float) Math.cos(angle); - } -} diff --git a/src/lwjgl/java/paulscode/sound/MidiChannel.java b/src/lwjgl/java/paulscode/sound/MidiChannel.java deleted file mode 100644 index 7da7ba8..0000000 --- a/src/lwjgl/java/paulscode/sound/MidiChannel.java +++ /dev/null @@ -1,1370 +0,0 @@ -package paulscode.sound; - -import java.io.IOException; -import java.net.URL; -import java.util.LinkedList; -import java.util.ListIterator; - -import javax.sound.midi.InvalidMidiDataException; -import javax.sound.midi.MetaEventListener; -import javax.sound.midi.MetaMessage; -import javax.sound.midi.MidiDevice; -import javax.sound.midi.MidiSystem; -import javax.sound.midi.MidiUnavailableException; -import javax.sound.midi.Receiver; -import javax.sound.midi.Sequence; -import javax.sound.midi.Sequencer; -import javax.sound.midi.ShortMessage; -import javax.sound.midi.Synthesizer; - -/** - * The MidiChannel class provides an interface for playing MIDI files, using the - * JavaSound API. For more information about the JavaSound API, visit - * http://java.sun.com/products/java-media/sound/
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class MidiChannel implements MetaEventListener { - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * Filename/URL to the file: - */ - private FilenameURL filenameURL; - - /** - * Unique source identifier for this MIDI source. - */ - private String sourcename; - - /** - * Global identifier for the MIDI "change volume" event. - */ - private static final int CHANGE_VOLUME = 7; - - /** - * Global identifier for the MIDI "end of track" event. - */ - private static final int END_OF_TRACK = 47; - - /** - * Used to return a current value from one of the synchronized boolean-interface - * methods. - */ - private static final boolean GET = false; - - /** - * Used to set the value in one of the synchronized boolean-interface methods. - */ - private static final boolean SET = true; - - /** - * Used when a parameter for one of the synchronized boolean-interface methods - * is not aplicable. - */ - private static final boolean XXX = false; - - /** - * Runs the assigned sequence, passing information on to the synthesizer for - * playback. - */ - private Sequencer sequencer = null; - - /** - * Converts MIDI events into audio. - */ - private Synthesizer synthesizer = null; - - /** - * Converts MIDI events into audio if there is no default Synthesizer. - */ - private MidiDevice synthDevice = null; - - /** - * Sequence of MIDI events defining sound. - */ - private Sequence sequence = null; - - /** - * Should playback loop or play only once. - */ - private boolean toLoop = true; - - /** - * Playback volume, float value (0.0f - 1.0f). - */ - private float gain = 1.0f; - - /** - * True while sequencer is busy being set up. - */ - private boolean loading = true; - - /** - * The list of MIDI files to play when the current sequence finishes. - */ - private LinkedList sequenceQueue = null; - - /** - * Ensures that only one thread accesses the sequenceQueue at a time. - */ - private final Object sequenceQueueLock = new Object(); - - /** - * Specifies the gain factor used for the fade-out effect, or -1 when playback - * is not currently fading out. - */ - protected float fadeOutGain = -1.0f; - - /** - * Specifies the gain factor used for the fade-in effect, or 1 when playback is - * not currently fading in. - */ - protected float fadeInGain = 1.0f; - - /** - * Specifies the number of miliseconds it should take to fade out. - */ - protected long fadeOutMilis = 0; - - /** - * Specifies the number of miliseconds it should take to fade in. - */ - protected long fadeInMilis = 0; - - /** - * System time in miliseconds when the last fade in/out volume check occurred. - */ - protected long lastFadeCheck = 0; - - /** - * Used for fading in and out effects. - */ - private FadeThread fadeThread = null; - - /** - * Constructor: Defines the basic source information. - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param filename Name of the MIDI file to play. - */ - public MidiChannel(boolean toLoop, String sourcename, String filename) { - // let others know we are busy loading: - loading(SET, true); - - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - // save information about the source: - filenameURL(SET, new FilenameURL(filename)); - sourcename(SET, sourcename); - setLooping(toLoop); - - // initialize the MIDI channel: - init(); - - // finished loading: - loading(SET, false); - } - - /** - * Constructor: Defines the basic source information. The fourth parameter, - * 'identifier' should look like a filename, and it must have the correct - * extension (.mid or .midi). - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param midiFile URL to the MIDI file to play. - * @param identifier Filename/identifier for the MIDI file. - */ - public MidiChannel(boolean toLoop, String sourcename, URL midiFile, String identifier) { - // let others know we are busy loading - loading(SET, true); - - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - // save information about the source: - filenameURL(SET, new FilenameURL(midiFile, identifier)); - sourcename(SET, sourcename); - setLooping(toLoop); - - // initialize the MIDI channel: - init(); - - // finished loading: - loading(SET, false); - } - - /** - * Constructor: Defines the basic source information. - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param midiFilenameURL Filename/URL to the MIDI file to play. - */ - public MidiChannel(boolean toLoop, String sourcename, FilenameURL midiFilenameURL) { - // let others know we are busy loading - loading(SET, true); - - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - // save information about the source: - filenameURL(SET, midiFilenameURL); - sourcename(SET, sourcename); - setLooping(toLoop); - - // initialize the MIDI channel: - init(); - - // finished loading: - loading(SET, false); - } - - /** - * Initializes the sequencer, loads the sequence, and sets up the synthesizer. - */ - private void init() { - // Load a sequencer: - getSequencer(); - - // Load the sequence to play: - setSequence(filenameURL(GET, null).getURL()); - - // Load a synthesizer to play the sequence on: - getSynthesizer(); - - // Ensure the initial volume is correct: - // (TODO: doesn't always work??) - resetGain(); - } - - /** - * Shuts the channel down and removes references to all instantiated objects. - */ - public void cleanup() { - loading(SET, true); - setLooping(true); - - if (sequencer != null) { - try { - sequencer.stop(); - sequencer.close(); - sequencer.removeMetaEventListener(this); - } catch (Exception e) { - } - } - - logger = null; - sequencer = null; - synthesizer = null; - sequence = null; - - synchronized (sequenceQueueLock) { - if (sequenceQueue != null) - sequenceQueue.clear(); - sequenceQueue = null; - } - - // End the fade effects thread if it exists: - if (fadeThread != null) { - boolean killException = false; - try { - fadeThread.kill(); // end the fade effects thread. - fadeThread.interrupt(); // wake the thread up so it can end. - } catch (Exception e) { - killException = true; - } - - if (!killException) { - // wait up to 5 seconds for fade effects thread to end: - for (int i = 0; i < 50; i++) { - if (!fadeThread.alive()) - break; - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - } - } - - // Let user know if there was a problem ending the fade thread - if (killException || fadeThread.alive()) { - errorMessage("MIDI fade effects thread did not die!"); - message("Ignoring errors... continuing clean-up."); - } - } - - fadeThread = null; - - loading(SET, false); - } - - /** - * Queues up the next MIDI sequence to play when the previous sequence ends. - * - * @param filenameURL MIDI sequence to play next. - */ - public void queueSound(FilenameURL filenameURL) { - if (filenameURL == null) { - errorMessage("Filename/URL not specified in method 'queueSound'"); - return; - } - - synchronized (sequenceQueueLock) { - if (sequenceQueue == null) - sequenceQueue = new LinkedList(); - sequenceQueue.add(filenameURL); - } - } - - /** - * Removes the first occurrence of the specified filename/identifier from the - * list of MIDI sequences to play when the previous sequence ends. - * - * @param filename Filename or identifier of a MIDI sequence to remove from the - * queue. - */ - public void dequeueSound(String filename) { - if (filename == null || filename.equals("")) { - errorMessage("Filename not specified in method 'dequeueSound'"); - return; - } - - synchronized (sequenceQueueLock) { - if (sequenceQueue != null) { - ListIterator i = sequenceQueue.listIterator(); - while (i.hasNext()) { - if (i.next().getFilename().equals(filename)) { - i.remove(); - break; - } - } - } - } - } - - /** - * Fades out the volume of whatever sequence is currently playing, then begins - * playing the specified MIDI file at the previously assigned volume level. If - * the filenameURL parameter is null or empty, playback will simply fade out and - * stop. The miliseconds parameter must be non-negative or zero. This method - * will remove anything that is currently in the list of queued MIDI sequences - * that would have played next when current playback finished. - * - * @param filenameURL MIDI file to play next, or null for none. - * @param milis Number of miliseconds the fadeout should take. - */ - public void fadeOut(FilenameURL filenameURL, long milis) { - if (milis < 0) { - errorMessage("Miliseconds may not be negative in method " + "'fadeOut'."); - return; - } - - fadeOutMilis = milis; - fadeInMilis = 0; - fadeOutGain = 1.0f; - lastFadeCheck = System.currentTimeMillis(); - - synchronized (sequenceQueueLock) { - if (sequenceQueue != null) - sequenceQueue.clear(); - - if (filenameURL != null) { - if (sequenceQueue == null) - sequenceQueue = new LinkedList(); - sequenceQueue.add(filenameURL); - } - } - if (fadeThread == null) { - fadeThread = new FadeThread(); - fadeThread.start(); - } - fadeThread.interrupt(); - } - - /** - * Fades out the volume of whatever sequence is currently playing, then fades - * the volume back in playing the specified MIDI file. Final volume after - * fade-in completes will be equal to the previously assigned volume level. The - * filenameURL parameter may not be null or empty. The miliseconds parameters - * must be non-negative or zero. This method will remove anything that is - * currently in the list of queued MIDI sequences that would have played next - * when current playback finished. - * - * @param filenameURL MIDI file to play next, or null for none. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - public void fadeOutIn(FilenameURL filenameURL, long milisOut, long milisIn) { - if (filenameURL == null) { - errorMessage("Filename/URL not specified in method 'fadeOutIn'."); - return; - } - if (milisOut < 0 || milisIn < 0) { - errorMessage("Miliseconds may not be negative in method " + "'fadeOutIn'."); - return; - } - - fadeOutMilis = milisOut; - fadeInMilis = milisIn; - fadeOutGain = 1.0f; - lastFadeCheck = System.currentTimeMillis(); - - synchronized (sequenceQueueLock) { - if (sequenceQueue == null) - sequenceQueue = new LinkedList(); - sequenceQueue.clear(); - sequenceQueue.add(filenameURL); - } - if (fadeThread == null) { - fadeThread = new FadeThread(); - fadeThread.start(); - } - fadeThread.interrupt(); - } - - /** - * Resets this source's volume if it is fading out or in. Returns true if this - * source is currently in the process of fading out. When fade-out completes, - * this method transitions the source to the next sound in the sound sequence - * queue if there is one. This method has no effect on non-streaming sources. - * - * @return True if this source is in the process of fading out. - */ - private synchronized boolean checkFadeOut() { - if (fadeOutGain == -1.0f && fadeInGain == 1.0f) - return false; - - long currentTime = System.currentTimeMillis(); - long milisPast = currentTime - lastFadeCheck; - lastFadeCheck = currentTime; - - if (fadeOutGain >= 0.0f) { - if (fadeOutMilis == 0) { - fadeOutGain = 0.0f; - fadeInGain = 0.0f; - if (!incrementSequence()) - stop(); - rewind(); - resetGain(); - return false; - } else { - float fadeOutReduction = ((float) milisPast) / ((float) fadeOutMilis); - - fadeOutGain -= fadeOutReduction; - if (fadeOutGain <= 0.0f) { - fadeOutGain = -1.0f; - fadeInGain = 0.0f; - if (!incrementSequence()) - stop(); - rewind(); - resetGain(); - return false; - } - } - resetGain(); - return true; - } - - if (fadeInGain < 1.0f) { - fadeOutGain = -1.0f; - if (fadeInMilis == 0) { - fadeOutGain = -1.0f; - fadeInGain = 1.0f; - } else { - float fadeInIncrease = ((float) milisPast) / ((float) fadeInMilis); - fadeInGain += fadeInIncrease; - if (fadeInGain >= 1.0f) { - fadeOutGain = -1.0f; - fadeInGain = 1.0f; - } - } - resetGain(); - } - - return false; - } - - /** - * Removes the next sequence from the queue and assigns it to the sequencer. - * - * @return True if there was something in the queue. - */ - private boolean incrementSequence() { - synchronized (sequenceQueueLock) { - // Is there a queue, and if so, is there anything in it: - if (sequenceQueue != null && sequenceQueue.size() > 0) { - // grab the next filename/URL from the queue: - filenameURL(SET, sequenceQueue.remove(0)); - - // Let everyone know we are busy loading: - loading(SET, true); - - // Check if we have a sequencer: - if (sequencer == null) { - // nope, try and get one now: - getSequencer(); - } else { - // We have a sequencer. Stop it now: - sequencer.stop(); - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - // Stop listening for a moment: - sequencer.removeMetaEventListener(this); - // wait a bit for the sequencer to shut down and rewind: - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - } - // We need to have a sequencer at this point: - if (sequencer == null) { - errorMessage("Unable to set the sequence in method " + "'incrementSequence', because there wasn't " - + "a sequencer to use."); - - // Finished loading: - loading(SET, false); - - // failure: - return false; - } - // set the new sequence to be played: - setSequence(filenameURL(GET, null).getURL()); - // start playing again: - sequencer.start(); - // make sure we play at the correct volume: - // (TODO: This doesn't always work??) - resetGain(); - // start listening for end of track event again: - sequencer.addMetaEventListener(this); - - // Finished loading: - loading(SET, false); - - // We successfully moved to the next sequence: - return true; - } - } - - // Nothing left to load - return false; - } - - /** - * Plays the MIDI file from the beginning, or from where it left off if it was - * paused. - */ - public void play() { - if (!loading()) { - // Make sure there is a sequencer: - if (sequencer == null) - return; - - try { - // start playing: - sequencer.start(); - // event will be sent when end of track is reached: - sequencer.addMetaEventListener(this); - } catch (Exception e) { - errorMessage("Exception in method 'play'"); - printStackTrace(e); - SoundSystemException sse = new SoundSystemException(e.getMessage()); - SoundSystem.setException(sse); - } - } - } - - /** - * Stops playback and rewinds to the beginning. - */ - public void stop() { - if (!loading()) { - // Make sure there is a sequencer: - if (sequencer == null) - return; - - try { - // stop playback: - sequencer.stop(); - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - // No need to listen any more: - sequencer.removeMetaEventListener(this); - } catch (Exception e) { - errorMessage("Exception in method 'stop'"); - printStackTrace(e); - SoundSystemException sse = new SoundSystemException(e.getMessage()); - SoundSystem.setException(sse); - } - } - } - - /** - * Temporarily stops playback without rewinding. - */ - public void pause() { - if (!loading()) { - // Make sure there is a sequencer: - if (sequencer == null) - return; - - try { - // stop playback. Will resume from this location next play. - sequencer.stop(); - } catch (Exception e) { - errorMessage("Exception in method 'pause'"); - printStackTrace(e); - SoundSystemException sse = new SoundSystemException(e.getMessage()); - SoundSystem.setException(sse); - } - } - } - - /** - * Returns playback to the beginning. - */ - public void rewind() { - if (!loading()) { - // Make sure there is a sequencer: - if (sequencer == null) - return; - - try { - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - } catch (Exception e) { - errorMessage("Exception in method 'rewind'"); - printStackTrace(e); - SoundSystemException sse = new SoundSystemException(e.getMessage()); - SoundSystem.setException(sse); - } - } - } - - /** - * Changes the volume of MIDI playback. - * - * @param value Float value (0.0f - 1.0f). - */ - public void setVolume(float value) { - gain = value; - resetGain(); - } - - /** - * Returns the current volume for the MIDI source. - * - * @return Float value (0.0f - 1.0f). - */ - public float getVolume() { - return gain; - } - - /** - * Changes the basic information about the MIDI source. This method removes any - * queued filenames/URLs from the list of MIDI sequences that would have played - * after the current sequence ended. - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param filename Name of the MIDI file to play. - */ - public void switchSource(boolean toLoop, String sourcename, String filename) { - // Let everyone know we are busy loading: - loading(SET, true); - - // save information about the source: - filenameURL(SET, new FilenameURL(filename)); - sourcename(SET, sourcename); - setLooping(toLoop); - - reset(); - - // Finished loading: - loading(SET, false); - } - - /** - * Changes the basic information about the MIDI source. This method removes any - * queued filenames/URLs from the list of MIDI sequences that would have played - * after the current sequence ended. The fourth parameter, 'identifier' should - * look like a filename, and it must have the correct extension (.mid or .midi). - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param midiFile URL to the MIDI file to play. - * @param identifier Filename/identifier for the MIDI file. - */ - public void switchSource(boolean toLoop, String sourcename, URL midiFile, String identifier) { - // Let everyone know we are busy loading: - loading(SET, true); - - // save information about the source: - filenameURL(SET, new FilenameURL(midiFile, identifier)); - sourcename(SET, sourcename); - setLooping(toLoop); - - reset(); - - // Finished loading: - loading(SET, false); - } - - /** - * Changes the basic information about the MIDI source. This method removes any - * queued filenames/URLs from the list of MIDI sequences that would have played - * after the current sequence ended. - * - * @param toLoop Should playback loop or play only once? - * @param sourcename Unique identifier for this source. - * @param filenameURL Filename/URL of the MIDI file to play. - */ - public void switchSource(boolean toLoop, String sourcename, FilenameURL filenameURL) { - // Let everyone know we are busy loading: - loading(SET, true); - - // save information about the source: - filenameURL(SET, filenameURL); - sourcename(SET, sourcename); - setLooping(toLoop); - - reset(); - - // Finished loading: - loading(SET, false); - } - - /** - * Stops and rewinds the sequencer, and resets the sequence. - */ - private void reset() { - synchronized (sequenceQueueLock) { - if (sequenceQueue != null) - sequenceQueue.clear(); - } - - // Check if we have a sequencer: - if (sequencer == null) { - // nope, try and get one now: - getSequencer(); - } else { - // We have a sequencer. Stop it now: - sequencer.stop(); - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - // Stop listening for a moment: - sequencer.removeMetaEventListener(this); - // wait a bit for the sequencer to shut down and rewind: - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - } - // We need to have a sequencer at this point: - if (sequencer == null) { - errorMessage( - "Unable to set the sequence in method " + "'reset', because there wasn't " + "a sequencer to use."); - return; - } - - // set the new sequence to be played: - setSequence(filenameURL(GET, null).getURL()); - // start playing again: - sequencer.start(); - // make sure we play at the correct volume: - // (TODO: This doesn't always work??) - resetGain(); - // start listening for end of track event again: - sequencer.addMetaEventListener(this); - } - - /** - * Sets the value of boolean 'toLoop'. - * - * @param value True or False. - */ - public void setLooping(boolean value) { - toLoop(SET, value); - } - - /** - * Returns the value of boolean 'toLoop'. - * - * @return True while looping. - */ - public boolean getLooping() { - return toLoop(GET, XXX); - } - - /** - * Sets or returns the value of boolean 'toLoop'. - * - * @param action GET or SET. - * @param value New value if action == SET, or XXX if action == GET. - * @return True while looping. - */ - private synchronized boolean toLoop(boolean action, boolean value) { - if (action == SET) - toLoop = value; - return toLoop; - } - - /** - * Check if a MIDI file is in the process of loading. - */ - public boolean loading() { - return (loading(GET, XXX)); - } - - /** - * Sets or returns the value of boolean 'loading'. - * - * @param action GET or SET. - * @param value New value if action == SET, or XXX if action == GET. - * @return True while a MIDI file is in the process of loading. - */ - private synchronized boolean loading(boolean action, boolean value) { - if (action == SET) - loading = value; - return loading; - } - - /** - * Defines the unique identifier for this source - * - * @param value New source name. - */ - public void setSourcename(String value) { - sourcename(SET, value); - } - - /** - * Returns the unique identifier for this source. - * - * @return The source's name. - */ - public String getSourcename() { - return sourcename(GET, null); - } - - /** - * Sets or returns the value of String 'sourcename'. - * - * @param action GET or SET. - * @param value New value if action == SET, or null if action == GET. - * @return The source's name. - */ - private synchronized String sourcename(boolean action, String value) { - if (action == SET) - sourcename = value; - return sourcename; - } - - /** - * Defines which MIDI file to play. - * - * @param value Path to the MIDI file. - */ - public void setFilenameURL(FilenameURL value) { - filenameURL(SET, value); - } - - /** - * Returns the filename/identifier of the MIDI file being played. - * - * @return Filename of identifier of the MIDI file. - */ - public String getFilename() { - return filenameURL(GET, null).getFilename(); - } - - /** - * Returns the MIDI file being played. - * - * @return Filename/URL of the MIDI file. - */ - public FilenameURL getFilenameURL() { - return filenameURL(GET, null); - } - - /** - * Sets or returns the value of filenameURL. - * - * @param action GET or SET. - * @param value New value if action == SET, or null if action == GET. - * @return Path to the MIDI file. - */ - private synchronized FilenameURL filenameURL(boolean action, FilenameURL value) { - if (action == SET) - filenameURL = value; - return filenameURL; - } - - /** - * Called when MIDI events occur. - * - * @param message Meta mssage describing the MIDI event. - */ - public void meta(MetaMessage message) { - if (message.getType() == END_OF_TRACK) { - // Generate an EOS event: - SoundSystemConfig.notifyEOS(sourcename, sequenceQueue.size()); - - // check if we should loop or not: - if (toLoop) { - // looping - // Check if playback is in the process of fading out. - if (!checkFadeOut()) { - // Not fading out, progress to the next MIDI sequence if - // any are queued. - if (!incrementSequence()) { - try { - // Rewind to the beginning. - sequencer.setMicrosecondPosition(0); - sequencer.start(); - // Make sure playback volume is correct. - resetGain(); - } catch (Exception e) { - } - } - } else if (sequencer != null) { - try { - // Rewind to the beginning. - sequencer.setMicrosecondPosition(0); - sequencer.start(); - // Make sure playback volume is correct. - resetGain(); - } catch (Exception e) { - } - } - } else { - // non-looping - if (!checkFadeOut()) { - if (!incrementSequence()) { - try { - // stop playback: - sequencer.stop(); - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - // stop looping: - sequencer.removeMetaEventListener(this); - } catch (Exception e) { - } - } - } else { - try { - // stop playback: - sequencer.stop(); - // rewind to the beginning: - sequencer.setMicrosecondPosition(0); - // stop looping: - sequencer.removeMetaEventListener(this); - } catch (Exception e) { - } - } - } - } - } - - /** - * Resets playback volume to the correct level. - */ - public void resetGain() { - // make sure the value for gain is valid (between 0 and 1) - if (gain < 0.0f) - gain = 0.0f; - if (gain > 1.0f) - gain = 1.0f; - - int midiVolume = (int) (gain * SoundSystemConfig.getMasterGain() * (float) Math.abs(fadeOutGain) * fadeInGain - * 127.0f); - if (synthesizer != null) { - javax.sound.midi.MidiChannel[] channels = synthesizer.getChannels(); - for (int c = 0; channels != null && c < channels.length; c++) { - channels[c].controlChange(CHANGE_VOLUME, midiVolume); - } - } else if (synthDevice != null) { - try { - ShortMessage volumeMessage = new ShortMessage(); - for (int i = 0; i < 16; i++) { - volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, i, CHANGE_VOLUME, midiVolume); - synthDevice.getReceiver().send(volumeMessage, -1); - } - } catch (Exception e) { - errorMessage("Error resetting gain on MIDI device"); - printStackTrace(e); - } - } else if (sequencer != null && sequencer instanceof Synthesizer) { - synthesizer = (Synthesizer) sequencer; - javax.sound.midi.MidiChannel[] channels = synthesizer.getChannels(); - for (int c = 0; channels != null && c < channels.length; c++) { - channels[c].controlChange(CHANGE_VOLUME, midiVolume); - } - } else { - try { - Receiver receiver = MidiSystem.getReceiver(); - ShortMessage volumeMessage = new ShortMessage(); - for (int c = 0; c < 16; c++) { - volumeMessage.setMessage(ShortMessage.CONTROL_CHANGE, c, CHANGE_VOLUME, midiVolume); - receiver.send(volumeMessage, -1); - } - } catch (Exception e) { - errorMessage("Error resetting gain on default receiver"); - printStackTrace(e); - } - } - } - - /** - * Attempts to load the default sequencer. If it fails, then other common - * sequencers are tried. If none can be loaded, then variable 'sequencer' - * remains null. - */ - private void getSequencer() { - try { - sequencer = MidiSystem.getSequencer(); - if (sequencer != null) { - try { - sequencer.getTransmitter(); - } catch (MidiUnavailableException mue) { - message("Unable to get a transmitter from the " + "default MIDI sequencer"); - } - sequencer.open(); - } - } catch (MidiUnavailableException mue) { - message("Unable to open the default MIDI sequencer"); - sequencer = null; - } catch (Exception e) { - if (e instanceof InterruptedException) { - message("Caught InterruptedException while attempting to " - + "open the default MIDI sequencer. Trying again."); - sequencer = null; - } - try { - sequencer = MidiSystem.getSequencer(); - if (sequencer != null) { - try { - sequencer.getTransmitter(); - } catch (MidiUnavailableException mue) { - message("Unable to get a transmitter from the " + "default MIDI sequencer"); - } - sequencer.open(); - } - } catch (MidiUnavailableException mue) { - message("Unable to open the default MIDI sequencer"); - sequencer = null; - } catch (Exception e2) { - message("Unknown error opening the default MIDI sequencer"); - sequencer = null; - } - } - - if (sequencer == null) - sequencer = openSequencer("Real Time Sequencer"); - if (sequencer == null) - sequencer = openSequencer("Java Sound Sequencer"); - if (sequencer == null) { - errorMessage("Failed to find an available MIDI sequencer"); - return; - } - } - - /** - * Loads the MIDI sequence form the specified URL, and sets the sequence. If - * variable 'sequencer' is null or an error occurs, then variable 'sequence' - * remains null. - * - * @param midiSource URL to a MIDI file. - */ - private void setSequence(URL midiSource) { - if (sequencer == null) { - errorMessage("Unable to update the sequence in method " + "'setSequence', because variable 'sequencer' " - + "is null"); - return; - } - - if (midiSource == null) { - errorMessage("Unable to load Midi file in method 'setSequence'."); - return; - } - - try { - sequence = MidiSystem.getSequence(midiSource); - } catch (IOException ioe) { - errorMessage("Input failed while reading from MIDI file in " + "method 'setSequence'."); - printStackTrace(ioe); - return; - } catch (InvalidMidiDataException imde) { - errorMessage("Invalid MIDI data encountered, or not a MIDI " + "file in method 'setSequence' (1)."); - printStackTrace(imde); - return; - } - if (sequence == null) { - errorMessage("MidiSystem 'getSequence' method returned null " + "in method 'setSequence'."); - } else { - try { - sequencer.setSequence(sequence); - } catch (InvalidMidiDataException imde) { - errorMessage("Invalid MIDI data encountered, or not a MIDI " + "file in method 'setSequence' (2)."); - printStackTrace(imde); - return; - } catch (Exception e) { - errorMessage("Problem setting sequence from MIDI file in " + "method 'setSequence'."); - printStackTrace(e); - return; - } - } - } - - /** - * First attempts to load the specified "override MIDI synthesizer" if one was - * defined. If none was defined or unable to use it, then attempts to load the - * default synthesizer. If that fails, then other common synthesizers are - * attempted. If none can be loaded, then MIDI is not possible on this system. - */ - private void getSynthesizer() { - if (sequencer == null) { - errorMessage("Unable to load a Synthesizer in method " + "'getSynthesizer', because variable 'sequencer' " - + "is null"); - return; - } - - // Check if an alternate MIDI synthesizer was specified to use - String overrideMIDISynthesizer = SoundSystemConfig.getOverrideMIDISynthesizer(); - if (overrideMIDISynthesizer != null && !overrideMIDISynthesizer.equals("")) { - // Try and open the specified device: - synthDevice = openMidiDevice(overrideMIDISynthesizer); - // See if we got it: - if (synthDevice != null) { - // Got it, try and link it to the sequencer: - try { - sequencer.getTransmitter().setReceiver(synthDevice.getReceiver()); - // Success! - return; - } catch (MidiUnavailableException mue) { - // Problem linking the two, let the user know - errorMessage("Unable to link sequencer transmitter " + "with receiver for MIDI device '" - + overrideMIDISynthesizer + "'"); - } - } - } - - // No alternate MIDI synthesizer was specified, or unable to use it. - - // If the squencer were also a synthesizer, that would make things easy: - if (sequencer instanceof Synthesizer) { - synthesizer = (Synthesizer) sequencer; - } else { - // Try getting the default synthesizer first: - try { - synthesizer = MidiSystem.getSynthesizer(); - synthesizer.open(); - } catch (MidiUnavailableException mue) { - message("Unable to open the default synthesizer"); - synthesizer = null; - } - - // See if we were sucessful: - if (synthesizer == null) { - // Try for the common MIDI synthesizers: - synthDevice = openMidiDevice("Java Sound Synthesizer"); - if (synthDevice == null) - synthDevice = openMidiDevice("Microsoft GS Wavetable"); - if (synthDevice == null) - synthDevice = openMidiDevice("Gervill"); - if (synthDevice == null) { - // Still nothing, MIDI is not going to work - errorMessage("Failed to find an available MIDI " + "synthesizer"); - return; - } - } - - // Are we using the default synthesizer or something else? - if (synthesizer == null) { - // Link the sequencer and synthesizer: - try { - sequencer.getTransmitter().setReceiver(synthDevice.getReceiver()); - } catch (MidiUnavailableException mue) { - errorMessage("Unable to link sequencer transmitter " + "with MIDI device receiver"); - } - } else { - // Bug-fix for multiple-receivers playing simultaneously - if (synthesizer.getDefaultSoundbank() == null) { - // Link the sequencer to the default receiver: - try { - sequencer.getTransmitter().setReceiver(MidiSystem.getReceiver()); - } catch (MidiUnavailableException mue) { - errorMessage("Unable to link sequencer transmitter " + "with default receiver"); - } - } else { - // Link the sequencer to the default synthesizer: - try { - sequencer.getTransmitter().setReceiver(synthesizer.getReceiver()); - } catch (MidiUnavailableException mue) { - errorMessage("Unable to link sequencer transmitter " + "with synthesizer receiver"); - } - } - // End bug-fix - } - } - } - - /** - * Attempts to open the Sequencer with a name containing the specified string. - * - * @param containsString Part or all of a Sequencer's name. - * @return Handle to the Sequencer, or null if not found or error. - */ - private Sequencer openSequencer(String containsString) { - Sequencer s = null; - s = (Sequencer) openMidiDevice(containsString); - if (s == null) - return null; - try { - s.getTransmitter(); - } catch (MidiUnavailableException mue) { - message(" Unable to get a transmitter from this sequencer"); - s = null; - return null; - } - - return s; - } - - /** - * Attempts to open the MIDI device with a name containing the specified string. - * - * @param containsString Part or all of a MIDI device's name. - * @return Handle to the MIDI device, or null if not found or error. - */ - private MidiDevice openMidiDevice(String containsString) { - message("Searching for MIDI device with name containing '" + containsString + "'"); - MidiDevice device = null; - MidiDevice.Info[] midiDevices = MidiSystem.getMidiDeviceInfo(); - for (int i = 0; i < midiDevices.length; i++) { - device = null; - try { - device = MidiSystem.getMidiDevice(midiDevices[i]); - } catch (MidiUnavailableException e) { - message(" Problem in method 'getMidiDevice': " + "MIDIUnavailableException was thrown"); - device = null; - } - if (device != null && midiDevices[i].getName().contains(containsString)) { - message(" Found MIDI device named '" + midiDevices[i].getName() + "'"); - if (device instanceof Synthesizer) - message(" *this is a Synthesizer instance"); - if (device instanceof Sequencer) - message(" *this is a Sequencer instance"); - try { - device.open(); - } catch (MidiUnavailableException mue) { - message(" Unable to open this MIDI device"); - device = null; - } - return device; - } - } - message(" MIDI device not found"); - return null; - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - protected void message(String message) { - logger.message(message, 0); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - protected void importantMessage(String message) { - logger.importantMessage(message, 0); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, "MidiChannel", message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - protected void errorMessage(String message) { - logger.errorMessage("MidiChannel", message, 0); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - */ - protected void printStackTrace(Exception e) { - logger.printStackTrace(e, 1); - } - - /** - * The FadeThread class handles sequence changing, timing, and volume change - * messages in the background. - */ - private class FadeThread extends SimpleThread { - @Override - /** - * Runs in the background, timing fade in and fade out, changing the sequence, - * and issuing the appropriate volume change messages. - */ - public void run() { - while (!dying()) { - // if not currently fading in or out, put the thread to sleep - if (fadeOutGain == -1.0f && fadeInGain == 1.0f) - snooze(3600000); - checkFadeOut(); - // only update every 50 miliseconds (no need to peg the cpu) - snooze(50); - } - // Important! - cleanup(); - } - } - -} diff --git a/src/lwjgl/java/paulscode/sound/SimpleThread.java b/src/lwjgl/java/paulscode/sound/SimpleThread.java deleted file mode 100644 index 1d808cc..0000000 --- a/src/lwjgl/java/paulscode/sound/SimpleThread.java +++ /dev/null @@ -1,179 +0,0 @@ -package paulscode.sound; - -/** - * The SimpleThread class is the template used to create all thread classes used - * by in the SoundSystem library. It provides methods for common actions like - * sleeping, killing, and checking liveness. NOTE: super.cleanup() must be - * called at the bottom of overriden cleanup() methods, and cleanup() must be - * called at the bottom of the run() method for all extended classes.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SimpleThread extends Thread { - /** - * Used to return a current value from one of the synchronized boolean-interface - * methods. - */ - private static final boolean GET = false; - - /** - * Used to set the value in one of the synchronized boolean-interface methods. - */ - private static final boolean SET = true; - - /** - * Used when a parameter for one of the synchronized boolean-interface methods - * is not aplicable. - */ - private static final boolean XXX = false; - - /** - * True when thread is running. - */ - private boolean alive = true; - - /** - * True when thread should end. - */ - private boolean kill = false; - - /** - * Removes all references to instantiated objects, and changes the thread's - * state to "not alive". Method alive() returns false when this method has - * completed. NOTE: super.cleanup() must be called at the bottom of overriden - * cleanup() methods, and cleanup() must be called at the bottom of the run() - * method for all extended classes. - */ - protected void cleanup() { - kill(SET, true); // tread needs to shut down - alive(SET, false); // thread has ended - } - - /** - * Executes the thread's main loop. NOTES: Extended classes should check method - * dying() often to know when the user wants the thread to shut down. Method - * cleanup() must be called at the bottom of the run() method for all extended - * classes. - */ - @Override - public void run() { - /* How the run() method should be set up: */ - - // Do your stuff here. Remember to check dying() often to know when - // the user wants the thread to shut down. - - // MUST call cleanup() at the bottom of Overridden run() method!!!!! - cleanup(); // clears memory and sets status to dead. - } - - /** - * Calls the rerun() method on a seperate thread, which calls run() when the - * previous thread finishes. - */ - public void restart() { - new Thread() { - @Override - public void run() { - rerun(); - } - }.start(); - } - - /** - * Kills the previous thread, waits for it to die, then calls run(). - */ - private void rerun() { - kill(SET, true); - while (alive(GET, XXX)) { - snooze(100); - } - alive(SET, true); - kill(SET, false); - run(); - } - - /** - * Returns false when the cleanup() method has finished. This method should be - * used to know when the thread has been safely shut down. - * - * @return True while the thread is alive. - */ - public boolean alive() { - return alive(GET, XXX); - } - - /** - * Causes method dying() to return true, letting the thread know it needs to - * shut down. - */ - public void kill() { - kill(SET, true); - } - - /** - * Returns true when the thread is supposed to shut down. - * - * @return True if the thread should die. - */ - protected boolean dying() { - return kill(GET, XXX); - } - - /** - * Sets or returns the value of boolean 'alive'. - * - * @param action GET or SET. - * @param value New value if action == SET, or XXX if action == GET. - * @return True while the thread is alive. - */ - private synchronized boolean alive(boolean action, boolean value) { - if (action == SET) - alive = value; - return alive; - } - - /** - * Sets or returns the value of boolean 'kill'. - * - * @param action GET or SET. - * @param value New value if action == SET, or XXX if action == GET. - * @return True if the thread should die. - */ - private synchronized boolean kill(boolean action, boolean value) { - if (action == SET) - kill = value; - return kill; - } - - /** - * Sleeps for the specified number of milliseconds. - */ - protected void snooze(long milliseconds) { - try { - Thread.sleep(milliseconds); - } catch (InterruptedException e) { - } - } -} diff --git a/src/lwjgl/java/paulscode/sound/SoundBuffer.java b/src/lwjgl/java/paulscode/sound/SoundBuffer.java deleted file mode 100644 index 98ad33d..0000000 --- a/src/lwjgl/java/paulscode/sound/SoundBuffer.java +++ /dev/null @@ -1,77 +0,0 @@ -package paulscode.sound; - -import javax.sound.sampled.AudioFormat; - -/** - * The SoundBuffer class is used to wrap audio data along with the format in - * which the data is stored.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SoundBuffer { - /** - * The actual audio data. - */ - public byte[] audioData; - /** - * The audio format in which the data is stored. - */ - public AudioFormat audioFormat; - - /** - * Constructor: Wraps the specified data with the specified audio format. - * - * @param audioData The actual audio data. - * @param audioFormat The audio format in which the data is stored. - */ - public SoundBuffer(byte[] audioData, AudioFormat audioFormat) { - this.audioData = audioData; - this.audioFormat = audioFormat; - } - - /** - * Removes handles to all instantiated objects. - */ - public void cleanup() { - audioData = null; - audioFormat = null; - } - - /** - * Trims down the size of the audio data if it is larger than the specified - * maximum length. - * - * @param maxLength Maximum size this buffer may be. - */ - public void trimData(int maxLength) { - if (audioData == null || maxLength == 0) - audioData = null; - else if (audioData.length > maxLength) { - byte[] trimmedArray = new byte[maxLength]; - System.arraycopy(audioData, 0, trimmedArray, 0, maxLength); - audioData = trimmedArray; - } - } -} diff --git a/src/lwjgl/java/paulscode/sound/SoundSystem.java b/src/lwjgl/java/paulscode/sound/SoundSystem.java deleted file mode 100644 index 1861234..0000000 --- a/src/lwjgl/java/paulscode/sound/SoundSystem.java +++ /dev/null @@ -1,2632 +0,0 @@ -package paulscode.sound; - -import java.net.URL; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; -import net.PeytonPlayz585.EaglercraftRandom; -import java.util.Set; -import javax.sound.sampled.AudioFormat; - -/** - * The SoundSystem class is the core class for the SoundSystem library. It is - * capable of interfacing with external sound library and codec library - * pluggins. This core class is stripped down to give it a smaller memory - * footprint and to make it more customizable. This library was created to - * provide a simple, common interface to a variety of 3rd-party sound and codec - * libraries, and to simplify switching between them on the fly. If no external - * pluggins are loaded, this core class by itself is only capable of playing - * MIDI files. Specific implementations (such as SoundSystemJPCT) will extend - * this core class. They will automatically link with popular external pluggins - * and provide extra methods for ease of use. There should be only one instance - * of this class in any program! The SoundSystem can be constructed by defining - * which sound library to use, or by allowing SoundSystem to perform its own - * library compatibility checking. See {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for information about changing default settings and - * linking with external pluggins.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SoundSystem { - /** - * Used to return a current value from one of the synchronized boolean-interface - * methods. - */ - private static final boolean GET = false; - /** - * Used to set the value in one of the synchronized boolean-interface methods. - */ - private static final boolean SET = true; - /** - * Used when a parameter for one of the synchronized boolean-interface methods - * is not aplicable. - */ - private static final boolean XXX = false; - - /** - * Processes status messages, warnings, and error messages. - */ - protected SoundSystemLogger logger; - - /** - * Handle to the active sound library. - */ - protected Library soundLibrary; - - /** - * List of queued commands to perform. - */ - protected List commandQueue; - - /** - * Used internally by SoundSystem to keep track of play/pause/stop/rewind - * commands. This prevents source management (culling and activating) from being - * adversely affected by the quickPlay, quickStream, and backgroundMusic - * methods. - */ - private List sourcePlayList; - - /** - * Processes queued commands in the background. - */ - protected CommandThread commandThread; - - /** - * Generates random numbers. - */ - public EaglercraftRandom randomNumberGenerator; - - /** - * Name of this class. - */ - protected String className = "SoundSystem"; - - /** - * Indicates the currently loaded sound-library, or null if none. - */ - private static Class currentLibrary = null; - - /** - * Becomes true when the sound library has been initialized. - */ - private static boolean initialized = false; - - /** - * Indicates the last exception that was thrown. - */ - private static SoundSystemException lastException = null; - - /** - * Constructor: Create the sound system using the default library. If the - * default library is not compatible, another library type will be loaded - * instead, in the order of library preference. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for information - * about sound library types. - */ - public SoundSystem() { - // create the message logger: - logger = SoundSystemConfig.getLogger(); - // if the user didn't create one, then do it now: - if (logger == null) { - logger = new SoundSystemLogger(); - SoundSystemConfig.setLogger(logger); - } - - linkDefaultLibrariesAndCodecs(); - - LinkedList libraries = SoundSystemConfig.getLibraries(); - - if (libraries != null) { - ListIterator i = libraries.listIterator(); - Class c; - while (i.hasNext()) { - c = i.next(); - try { - init(c); - return; - } catch (SoundSystemException sse) { - logger.printExceptionMessage(sse, 1); - } - } - } - try { - init(Library.class); - return; - } catch (SoundSystemException sse) { - logger.printExceptionMessage(sse, 1); - } - } - - /** - * Constructor: Create the sound system using the specified library. - * - * @param libraryClass Library to use. See - * {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for information about chosing a sound - * library. - */ - public SoundSystem(Class libraryClass) throws SoundSystemException { - // create the message logger: - logger = SoundSystemConfig.getLogger(); - // if the user didn't create one, then do it now: - if (logger == null) { - logger = new SoundSystemLogger(); - SoundSystemConfig.setLogger(logger); - } - linkDefaultLibrariesAndCodecs(); - - init(libraryClass); - } - - /** - * Links with any default libraries or codecs should be made in this method. - * This method is empty in the core SoundSystem class, and should be overriden - * by classes which extend SoundSystem. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for information - * about linking with sound libraries and codecs. - */ - protected void linkDefaultLibrariesAndCodecs() { - } - - /** - * Loads the message logger, initializes the specified sound library, and starts - * the command thread. Also instantiates the random number generator and the - * command queue. - * - * @param libraryClass Library to initialize. See - * {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for information about chosing a sound - * library. - */ - protected void init(Class libraryClass) throws SoundSystemException { - message("", 0); - message("Starting up " + className + " version " + SoundSystem.class.getPackage().getImplementationVersion() - + "...", 0); - - // create the random number generator: - randomNumberGenerator = new EaglercraftRandom(); - // create the command queue: - commandQueue = new LinkedList(); - // create the working source playlist: - sourcePlayList = new LinkedList(); - - // Instantiate and start the Command Processer thread: - commandThread = new CommandThread(this); // Gets a SoundSystem handle - commandThread.start(); - - snooze(200); - - newLibrary(libraryClass); - message("", 0); - } - - /** - * Ends the command thread, shuts down the sound system, and removes references - * to all instantiated objects. - */ - public void cleanup() { - boolean killException = false; - message("", 0); - message(className + " shutting down...", 0); - - // End the command thread: - try { - commandThread.kill(); // end the command processor loop. - commandThread.interrupt(); // wake the thread up so it can end. - } catch (Exception e) { - killException = true; - } - - if (!killException) { - // wait up to 5 seconds for command thread to end: - for (int i = 0; i < 50; i++) { - if (!commandThread.alive()) - break; - snooze(100); - } - } - - // Let user know if there was a problem ending the command thread - if (killException || commandThread.alive()) { - errorMessage("Command thread did not die!", 0); - message("Ignoring errors... continuing clean-up.", 0); - } - - initialized(SET, false); - currentLibrary(SET, null); - try { - // Stop all sources and shut down the sound library: - if (soundLibrary != null) - soundLibrary.cleanup(); - } catch (Exception e) { - errorMessage("Problem during Library.cleanup()!", 0); - message("Ignoring errors... continuing clean-up.", 0); - } - - try { - // remove any queued commands: - if (commandQueue != null) - commandQueue.clear(); - } catch (Exception e) { - errorMessage("Unable to clear the command queue!", 0); - message("Ignoring errors... continuing clean-up.", 0); - } - - try { - // empty the source management list: - if (sourcePlayList != null) - sourcePlayList.clear(); - } catch (Exception e) { - errorMessage("Unable to clear the source management list!", 0); - message("Ignoring errors... continuing clean-up.", 0); - } - - // Remove references to all instantiated objects: - randomNumberGenerator = null; - soundLibrary = null; - commandQueue = null; - sourcePlayList = null; - commandThread = null; - - importantMessage("Author: Paul Lamb, www.paulscode.com", 1); - message("", 0); - } - - /** - * Wakes up the Command Thread to process commands. This method should be used - * if there is a need to call methods 'ManageSources' and 'CommandQueue' - * externally. In most cases, this method will not be needed, since SoundSystem - * automatically wakes the Command Thread every time commands are placed into - * either the ManageSources queue or CommandQueue to be processed. - */ - public void interruptCommandThread() { - if (commandThread == null) { - errorMessage("Command Thread null in method " + "'interruptCommandThread'", 0); - return; - } - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Pre-loads a sound into memory. The file may either be located within the JAR - * or at an online location. If the file is online, filename must begin with - * "http://", since that is how SoundSystem recognizes URL's. If the file is - * located within the compiled JAR, the package in which sound files are located - * may be set by calling SoundSystemConfig.setSoundFilesPackage(). - * - * @param filename Filename of the sound file to load. - */ - public void loadSound(String filename) { - // Queue a command to load the sound file: - CommandQueue(new CommandObject(CommandObject.LOAD_SOUND, new FilenameURL(filename))); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Pre-loads a sound specified by the given URL into memory. The second - * parameter 'identifier' should look like a filename, and it must have the - * correct extension so SoundSystem knows what codec to use for the file - * referenced by the URL instance. - * - * @param url URL handle to the sound file to load. - * @param identifier Filename/identifier of the file referenced by the URL. - */ - public void loadSound(URL url, String identifier) { - // Queue a command to load the sound file from a URL: - CommandQueue(new CommandObject(CommandObject.LOAD_SOUND, new FilenameURL(url, identifier))); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Saves raw PCM audio data in the specified audio format, under the specified - * identifier. This identifier can be later used in place of 'filename' - * parameters to reference the sample data. - * - * @param data The sample data - * @param format Format the sample data is stored in - * @param identifier What to call the sample. - */ - public void loadSound(byte[] data, AudioFormat format, String identifier) { - // Queue a command to load the sound file from a URL: - CommandQueue(new CommandObject(CommandObject.LOAD_DATA, identifier, new SoundBuffer(data, format))); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Removes a pre-loaded sound from memory. This is a good method to use for - * freeing up memory after a large sound file is no longer needed. NOTE: the - * source will remain in memory after calling this method as long as the sound - * is attached to an existing source. When calling this method, calls should - * also be made to method removeSource( String ) for all sources which this - * sound is bound to. - * - * @param filename Filename/identifier of the sound file to unload. - */ - public void unloadSound(String filename) { - // Queue a command to unload the sound file: - CommandQueue(new CommandObject(CommandObject.UNLOAD_SOUND, filename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * If the specified source is a streaming source or MIDI source, this method - * queues up the next sound to play when the previous playback ends. The file - * may either be located within the JAR or at an online location. If the file is - * online, filename must begin with "http://", since that is how SoundSystem - * recognizes URL paths. If the file is located within the compiled JAR, the - * package in which sound files are located may be set by calling - * SoundSystemConfig.setSoundFilesPackage(). This method has no effect on - * non-streaming sources. - * - * @param sourcename Source identifier. - * @param filename Name of the sound file to play next. - */ - public void queueSound(String sourcename, String filename) { - // Queue a command to queue the sound: - CommandQueue(new CommandObject(CommandObject.QUEUE_SOUND, sourcename, new FilenameURL(filename))); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * If the specified source is a streaming source or MIDI source, this method - * queues up the next sound to play when the previous playback ends. The third - * parameter 'identifier' should look like a filename, and it must have the - * correct extension so SoundSystem knows what codec to use for the file - * referenced by the URL instance. This method has no effect on non-streaming - * sources. - * - * @param sourcename Source identifier. - * @param url URL handle to the sound file to load. - * @param identifier Filename/identifier of the file referenced by the URL. - */ - public void queueSound(String sourcename, URL url, String identifier) { - // Queue a command to queue the sound: - CommandQueue(new CommandObject(CommandObject.QUEUE_SOUND, sourcename, new FilenameURL(url, identifier))); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Removes the first occurrence of the specified filename/identifier from the - * specified source's list of sounds to play when previous playback ends. This - * method has no effect on non-streaming sources. - * - * @param sourcename Source identifier. - * @param filename Filename/identifier of the sound file to play next. - */ - public void dequeueSound(String sourcename, String filename) { - // Queue a command to dequeue the sound: - CommandQueue(new CommandObject(CommandObject.DEQUEUE_SOUND, sourcename, filename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then begins playing the specified file at the source's previously assigned - * volume level. The file may either be located within the JAR or at an online - * location. If the file is online, filename must begin with "http://", since - * that is how SoundSystem recognizes URL paths. If the file is located within - * the compiled JAR, the package in which sound files are located may be set by - * calling SoundSystemConfig.setSoundFilesPackage(). If the filename parameter - * is null or empty, the specified source will simply fade out and stop. The - * miliseconds parameter must be non-negative or zero. This method will remove - * anything that is currently in the specified source's list of queued sounds - * that would have played next when the current sound finished playing. This - * method may only be used for streaming and MIDI sources. - * - * @param sourcename Name of the source to fade out. - * @param filename Name of a sound file to play next, or null for none. - * @param milis Number of miliseconds the fadeout should take. - */ - public void fadeOut(String sourcename, String filename, long milis) { - FilenameURL fu = null; - if (filename != null) - fu = new FilenameURL(filename); - // Queue a command to fade out: - CommandQueue(new CommandObject(CommandObject.FADE_OUT, sourcename, fu, milis)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then begins playing the specified file at the source's previously assigned - * volume level. If the url parameter is null or empty, the specified source - * will simply fade out and stop. The third parameter 'identifier' should look - * like a filename, and it must have the correct extension so SoundSystem knows - * what codec to use for the file referenced by the URL instance. The - * miliseconds parameter must be non-negative or zero. This method will remove - * anything that is currently in the specified source's list of queued sounds - * that would have played next when the current sound finished playing. This - * method may only be used for streaming and MIDI sources. - * - * @param sourcename Name of the source to fade out. - * @param url URL handle to the sound file to play next, or null for - * none. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param milis Number of miliseconds the fadeout should take. - */ - public void fadeOut(String sourcename, URL url, String identifier, long milis) { - FilenameURL fu = null; - if (url != null && identifier != null) - fu = new FilenameURL(url, identifier); - // Queue a command to fade out: - CommandQueue(new CommandObject(CommandObject.FADE_OUT, sourcename, fu, milis)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then fades the volume back in playing the specified filename. Final volume - * after fade-in completes will be equal to the source's previously assigned - * volume level. The filename parameter may not be null or empty. The file may - * either be located within the JAR or at an online location. If the file is - * online, filename must begin with "http://", since that is how SoundSystem - * recognizes URL paths. If the file is located within the compiled JAR, the - * package in which sound files are located may be set by calling - * SoundSystemConfig.setSoundFilesPackage(). The miliseconds parameters must be - * non-negative or zero. This method will remove anything that is currently in - * the specified source's list of queued sounds that would have played next when - * the current sound finished playing. This method may only be used for - * streaming and MIDI sources. - * - * @param sourcename Name of the source to fade out/in. - * @param filename Name of a sound file to play next, or null for none. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - public void fadeOutIn(String sourcename, String filename, long milisOut, long milisIn) { - // Queue a command to load the sound file: - CommandQueue( - new CommandObject(CommandObject.FADE_OUT_IN, sourcename, new FilenameURL(filename), milisOut, milisIn)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then fades the volume back in playing the specified file. Final volume after - * fade-in completes will be equal to the source's previously assigned volume - * level. The url parameter may not be null or empty. The third parameter - * 'identifier' should look like a filename, and it must have the correct - * extension so SoundSystem knows what codec to use for the file referenced by - * the URL instance. The miliseconds parameters must be non-negative or zero. - * This method will remove anything that is currently in the specified source's - * list of queued sounds that would have played next when the current sound - * finished playing. This method may only be used for streaming and MIDI - * sources. - * - * @param sourcename Name of the source to fade out/in. - * @param url URL handle to the sound file to play next. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - public void fadeOutIn(String sourcename, URL url, String identifier, long milisOut, long milisIn) { - // Queue a command to load the sound file: - CommandQueue(new CommandObject(CommandObject.FADE_OUT_IN, sourcename, new FilenameURL(url, identifier), - milisOut, milisIn)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Makes sure the current volume levels of streaming sources and MIDI are - * correct. This method is designed to help reduce the "jerky" fading behavior - * that happens when using some library and codec pluggins (such as - * LibraryJavaSound and CodecJOrbis). This method has no effect on normal - * "non-streaming" sources. It would normally be called somewhere in the main - * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for - * every frame. It is better to just call this method at some acceptable - * "granularity" (play around with different granularities to find what sounds - * acceptable for a particular situation). - */ - public void checkFadeVolumes() { - // Queue a command to load check fading source volumes: - CommandQueue(new CommandObject(CommandObject.CHECK_FADE_VOLUMES)); - // Wake the command thread to process commands: - commandThread.interrupt(); - } - - /** - * Creates a new permanant, streaming, priority source with zero attenuation. - * The file may either be located within the JAR or at an online location. If - * the file is online, filename must begin with "http://", since that is how - * SoundSystem recognizes URL paths. If the file is located within the compiled - * JAR, the package in which sound files are located may be set by calling - * SoundSystemConfig.setSoundFilesPackage(). - * - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filename Filename of the sound file to stream at this source. - * @param toLoop Should this source loop, or play only once. - */ - public void backgroundMusic(String sourcename, String filename, boolean toLoop) { - // Queue a command to quick stream a new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, true, true, toLoop, sourcename, - new FilenameURL(filename), 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 0, false)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - - commandThread.interrupt(); - } - - /** - * Creates a new permanant, streaming, priority source with zero attenuation. - * The third parameter 'identifier' should look like a filename, and it must - * have the correct extension so SoundSystem knows what codec to use for the - * file referenced by the URL instance. - * - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param url URL handle to the sound file to stream at this source. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param toLoop Should this source loop, or play only once. - */ - public void backgroundMusic(String sourcename, URL url, String identifier, boolean toLoop) { - // Queue a command to quick stream a new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, true, true, toLoop, sourcename, - new FilenameURL(url, identifier), 0, 0, 0, SoundSystemConfig.ATTENUATION_NONE, 0, false)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - - commandThread.interrupt(); - } - - /** - * Creates a new non-streaming source. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Attenuation, fade distance, and rolloff factor. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filename Filename/identifier of the sound file to play at this - * source. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void newSource(boolean priority, String sourcename, String filename, boolean toLoop, float x, float y, - float z, int attmodel, float distOrRoll) { - CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, false, toLoop, sourcename, - new FilenameURL(filename), x, y, z, attmodel, distOrRoll)); - commandThread.interrupt(); - } - - /** - * Creates a new non-streaming source. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Attenuation, fade distance, and rolloff factor. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param url URL handle to the sound file to stream at this source. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void newSource(boolean priority, String sourcename, URL url, String identifier, boolean toLoop, float x, - float y, float z, int attmodel, float distOrRoll) { - CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, false, toLoop, sourcename, - new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll)); - commandThread.interrupt(); - } - - /** - * Creates a new streaming source. The file may either be located within the JAR - * or at an online location. If the file is online, filename must begin with - * "http://", since that is how SoundSystem recognizes URL paths. If the file is - * located within the compiled JAR, the package in which sound files are located - * may be set by calling SoundSystemConfig.setSoundFilesPackage(). - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filename The filename of the sound file to play at this source. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void newStreamingSource(boolean priority, String sourcename, String filename, boolean toLoop, float x, - float y, float z, int attmodel, float distOrRoll) { - CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, true, toLoop, sourcename, - new FilenameURL(filename), x, y, z, attmodel, distOrRoll)); - commandThread.interrupt(); - } - - /** - * Creates a new streaming source. The fourth parameter 'identifier' should look - * like a filename, and it must have the correct extension so SoundSystem knows - * what codec to use for the file referenced by the URL instance. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param url URL handle to the sound file to stream at this source. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void newStreamingSource(boolean priority, String sourcename, URL url, String identifier, boolean toLoop, - float x, float y, float z, int attmodel, float distOrRoll) { - CommandQueue(new CommandObject(CommandObject.NEW_SOURCE, priority, true, toLoop, sourcename, - new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll)); - commandThread.interrupt(); - } - - /** - * Opens a direct line for streaming audio data. This method creates a new - * streaming source to play the data at. The resulting streaming source can be - * manipulated the same as any other streaming source. Raw data can be sent to - * the new streaming source using the feedRawAudioData() method. - * - * @param audioFormat Format that the data will be in. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - public void rawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, float z, - int attModel, float distOrRoll) { - CommandQueue(new CommandObject(CommandObject.RAW_DATA_STREAM, audioFormat, priority, sourcename, x, y, z, - attModel, distOrRoll)); - commandThread.interrupt(); - } - - /** - * Creates a temporary source and plays it. After the source finishes playing, - * it is removed. Returns a randomly generated name for the new source. NOTE: to - * make a source created by this method permanant, call the setActive() method - * using the return value for sourcename. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param filename Filename/identifier of the sound file to play at this - * source. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @return The new sorce's name. - */ - public String quickPlay(boolean priority, String filename, boolean toLoop, float x, float y, float z, int attmodel, - float distOrRoll) { - // generate a random name for this source: - String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt(); - - // Queue a command to quick play this new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, false, toLoop, sourcename, - new FilenameURL(filename), x, y, z, attmodel, distOrRoll, true)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - - // return the new source name. - return sourcename; - } - - /** - * Creates a temporary source and plays it. After the source finishes playing, - * it is removed. Returns a randomly generated name for the new source. NOTE: to - * make a source created by this method permanant, call the setActive() method - * using the return value for sourcename. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param url URL handle to the sound file to stream at this source. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @return The new sorce's name. - */ - public String quickPlay(boolean priority, URL url, String identifier, boolean toLoop, float x, float y, float z, - int attmodel, float distOrRoll) { - // generate a random name for this source: - String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt(); - - // Queue a command to quick play this new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, false, toLoop, sourcename, - new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll, true)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - - // return the new source name. - return sourcename; - } - - /** - * Creates a temporary source and streams it. After the source finishes playing, - * it is removed. The file may either be located within the JAR or at an online - * location. If the file is online, filename must begin with "http://", since - * that is how SoundSystem recognizes URL paths. If the file is located within - * the compiled JAR, the package in which sound files are located may be set by - * calling SoundSystemConfig.setSoundFilesPackage(). Returns a randomly - * generated name for the new source. NOTE: to make a source created by this - * method permanant, call the setActive() method using the return value for - * sourcename. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param filename Filename of the sound file to stream at this source. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @return The new sorce's name. - */ - public String quickStream(boolean priority, String filename, boolean toLoop, float x, float y, float z, - int attmodel, float distOrRoll) { - // generate a random name for this source: - String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt(); - - // Queue a command to quick stream this new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, true, toLoop, sourcename, - new FilenameURL(filename), x, y, z, attmodel, distOrRoll, true)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - - // return the new source name. - return sourcename; - } - - /** - * Creates a temporary source and streams it. After the source finishes playing, - * it is removed. The third parameter 'identifier' should look like a filename, - * and it must have the correct extension so SoundSystem knows what codec to use - * for the file referenced by the URL instance. Returns a randomly generated - * name for the new source. NOTE: to make a source created by this method - * permanant, call the setActive() method using the return value for sourcename. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param url URL handle to the sound file to stream at this source. - * @param identifier Filename/identifier of the file referenced by the URL. - * @param toLoop Should this source loop, or play only once. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attmodel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @return The new sorce's name. - */ - public String quickStream(boolean priority, URL url, String identifier, boolean toLoop, float x, float y, float z, - int attmodel, float distOrRoll) { - // generate a random name for this source: - String sourcename = "Source_" + randomNumberGenerator.nextInt() + "_" + randomNumberGenerator.nextInt(); - - // Queue a command to quick stream this new source: - CommandQueue(new CommandObject(CommandObject.QUICK_PLAY, priority, true, toLoop, sourcename, - new FilenameURL(url, identifier), x, y, z, attmodel, distOrRoll, true)); - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - // Wake the command thread to process commands: - commandThread.interrupt(); - - // return the new source name. - return sourcename; - } - - /** - * Move a source to the specified location. - * - * @param sourcename Identifier for the source. - * @param x destination X coordinate. - * @param y destination Y coordinate. - * @param z destination Z coordinate. - */ - public void setPosition(String sourcename, float x, float y, float z) { - CommandQueue(new CommandObject(CommandObject.SET_POSITION, sourcename, x, y, z)); - commandThread.interrupt(); - } - - /** - * Manually sets the specified source's volume. - * - * @param sourcename Source to move. - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - public void setVolume(String sourcename, float value) { - CommandQueue(new CommandObject(CommandObject.SET_VOLUME, sourcename, value)); - commandThread.interrupt(); - } - - /** - * Returns the current volume of the specified source, or zero if the specified - * source was not found. - * - * @param sourcename Source to read volume from. - * @return Float value representing the source volume (0.0f - 1.0f). - */ - public float getVolume(String sourcename) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (soundLibrary != null) - return soundLibrary.getVolume(sourcename); - else - return 0.0f; - } - } - - /** - * Manually sets the specified source's pitch. - * - * @param sourcename The source's name. - * @param value A float value ( 0.5f - 2.0f ). - */ - public void setPitch(String sourcename, float value) { - CommandQueue(new CommandObject(CommandObject.SET_PITCH, sourcename, value)); - commandThread.interrupt(); - } - - /** - * Returns the pitch of the specified source. - * - * @param sourcename The source's name. - * @return Float value representing the source pitch (0.5f - 2.0f). - */ - public float getPitch(String sourcename) { - if (soundLibrary != null) - return soundLibrary.getPitch(sourcename); - else - return 1.0f; - } - - /** - * Set a source's priority factor. A priority source will not be overriden when - * too many sources are playing at once. - * - * @param sourcename Identifier for the source. - * @param pri Setting this to true makes this source a priority source. - */ - public void setPriority(String sourcename, boolean pri) { - CommandQueue(new CommandObject(CommandObject.SET_PRIORITY, sourcename, pri)); - commandThread.interrupt(); - } - - /** - * Changes a source to looping or non-looping. - * - * @param sourcename Identifier for the source. - * @param lp This source should loop. - */ - public void setLooping(String sourcename, boolean lp) { - CommandQueue(new CommandObject(CommandObject.SET_LOOPING, sourcename, lp)); - commandThread.interrupt(); - } - - /** - * Changes a source's attenuation model. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Attenuation. - * - * @param sourcename Identifier for the source. - * @param model Attenuation model to use. - */ - public void setAttenuation(String sourcename, int model) { - CommandQueue(new CommandObject(CommandObject.SET_ATTENUATION, sourcename, model)); - commandThread.interrupt(); - } - - /** - * Changes a source's fade distance or rolloff factor. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about fade distance and rolloff. - * - * @param sourcename Identifier for the source. - * @param dr Either the fading distance or rolloff factor, depending on - * the attenuation model used. - */ - public void setDistOrRoll(String sourcename, float dr) { - CommandQueue(new CommandObject(CommandObject.SET_DIST_OR_ROLL, sourcename, dr)); - commandThread.interrupt(); - } - - /** - * Changes the Doppler factor, for determining Doppler effect scale. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param dopplerFactor New value for Doppler factor. - */ - public void changeDopplerFactor(float dopplerFactor) { - CommandQueue(new CommandObject(CommandObject.CHANGE_DOPPLER_FACTOR, dopplerFactor)); - commandThread.interrupt(); - } - - /** - * Changes the Doppler velocity, for use in Doppler effect. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param dopplerVelocity New value for Doppler velocity. - */ - public void changeDopplerVelocity(float dopplerVelocity) { - CommandQueue(new CommandObject(CommandObject.CHANGE_DOPPLER_VELOCITY, dopplerVelocity)); - commandThread.interrupt(); - } - - /** - * Sets the specified source's velocity, for use in Doppler effect. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param sourcename The source's name. - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - public void setVelocity(String sourcename, float x, float y, float z) { - CommandQueue(new CommandObject(CommandObject.SET_VELOCITY, sourcename, x, y, z)); - commandThread.interrupt(); - } - - /** - * Sets the listener's velocity, for use in Doppler effect. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - public void setListenerVelocity(float x, float y, float z) { - CommandQueue(new CommandObject(CommandObject.SET_LISTENER_VELOCITY, x, y, z)); - commandThread.interrupt(); - } - - /** - * Returns the number of miliseconds since the specified source began playing. - * - * @return miliseconds, or -1 if not playing or unable to calculate - */ - public float millisecondsPlayed(String sourcename) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - return soundLibrary.millisecondsPlayed(sourcename); - } - } - - /** - * Feeds raw data through the specified source. The source must be a streaming - * source and it can not be already associated with a file or URL to stream - * from. Only use this for streaming sources created with the rawDataStream() - * method. NOTE: Be carefull how much data you send to a source to stream. The - * data will be processed at playback speed, so if you queue up 1 hour worth of - * data, it will take 1 hour to play (not to mention hogging a ton of memory). - * To clear out all queued data from the source, use the flush() method. Also - * note: if there is a break in the data stream, you will hear clicks and - * studders, so ensure that the data flow is steady. - * - * @param sourcename Name of the streaming source to play from. - * @param buffer Byte buffer containing raw audio data to stream. - */ - public void feedRawAudioData(String sourcename, byte[] buffer) { - CommandQueue(new CommandObject(CommandObject.FEED_RAW_AUDIO_DATA, sourcename, buffer)); - commandThread.interrupt(); - } - - /** - * Plays the specified source. - * - * @param sourcename Identifier for the source. - */ - public void play(String sourcename) { - CommandQueue(new CommandObject(CommandObject.PLAY, sourcename)); - commandThread.interrupt(); - } - - /** - * Pauses the specified source. - * - * @param sourcename Identifier for the source. - */ - public void pause(String sourcename) { - CommandQueue(new CommandObject(CommandObject.PAUSE, sourcename)); - commandThread.interrupt(); - } - - /** - * Stops the specified source. - * - * @param sourcename Identifier for the source. - */ - public void stop(String sourcename) { - CommandQueue(new CommandObject(CommandObject.STOP, sourcename)); - commandThread.interrupt(); - } - - /** - * Rewinds the specified source. - * - * @param sourcename Identifier for the source. - */ - public void rewind(String sourcename) { - CommandQueue(new CommandObject(CommandObject.REWIND, sourcename)); - commandThread.interrupt(); - } - - /** - * Flushes all previously queued audio data from a streaming source. - * - * @param sourcename Identifier for the source. - */ - public void flush(String sourcename) { - CommandQueue(new CommandObject(CommandObject.FLUSH, sourcename)); - commandThread.interrupt(); - } - - /** - * Culls the specified source. A culled source can not be played until it has - * been activated again. - * - * @param sourcename Identifier for the source. - */ - public void cull(String sourcename) { - CommandQueue(new CommandObject(CommandObject.CULL, sourcename)); - commandThread.interrupt(); - } - - /** - * Activates the specified source after it was culled, so it can be played - * again. - * - * @param sourcename Identifier for the source. - */ - public void activate(String sourcename) { - CommandQueue(new CommandObject(CommandObject.ACTIVATE, sourcename)); - commandThread.interrupt(); - } - - /** - * Sets a flag for a source indicating whether it should be used or if it should - * be removed after it finishes playing. One possible use for this method is to - * make temporary sources that were created with quickPlay() permanant. Another - * use could be to have a source automatically removed after it finishes - * playing. NOTE: Setting a source to temporary does not stop it, and setting a - * source to permanant does not play it. It is also important to note that a - * looping temporary source will not be removed as long as it keeps playing. - * - * @param sourcename Identifier for the source. - * @param temporary True = temporary, False = permanant. - */ - public void setTemporary(String sourcename, boolean temporary) { - CommandQueue(new CommandObject(CommandObject.SET_TEMPORARY, sourcename, temporary)); - commandThread.interrupt(); - } - - /** - * Removes the specified source and clears up any memory it used. - * - * @param sourcename Identifier for the source. - */ - public void removeSource(String sourcename) { - CommandQueue(new CommandObject(CommandObject.REMOVE_SOURCE, sourcename)); - commandThread.interrupt(); - } - - /** - * Moves the listener relative to the current location. - * - * @param x X offset. - * @param y Y offset. - * @param z Z offset. - */ - public void moveListener(float x, float y, float z) { - CommandQueue(new CommandObject(CommandObject.MOVE_LISTENER, x, y, z)); - commandThread.interrupt(); - } - - /** - * Moves the listener to the specified location. - * - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - public void setListenerPosition(float x, float y, float z) { - CommandQueue(new CommandObject(CommandObject.SET_LISTENER_POSITION, x, y, z)); - commandThread.interrupt(); - } - - /** - * Turns the listener counterclockwise by "angle" radians around the y-axis, - * relative to the current angle. - * - * @param angle radian offset. - */ - public void turnListener(float angle) { - CommandQueue(new CommandObject(CommandObject.TURN_LISTENER, angle)); - commandThread.interrupt(); - } - - /** - * Sets the listener's angle in radians around the y-axis. - * - * @param angle radians. - */ - public void setListenerAngle(float angle) { - CommandQueue(new CommandObject(CommandObject.SET_LISTENER_ANGLE, angle)); - commandThread.interrupt(); - } - - /** - * Sets the listener's orientation. - * - * @param lookX X coordinate of the (normalized) look-at vector. - * @param lookY Y coordinate of the (normalized) look-at vector. - * @param lookZ Z coordinate of the (normalized) look-at vector. - * @param upX X coordinate of the (normalized) up-direction vector. - * @param upY Y coordinate of the (normalized) up-direction vector. - * @param upZ Z coordinate of the (normalized) up-direction vector. - */ - public void setListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) { - CommandQueue(new CommandObject(CommandObject.SET_LISTENER_ORIENTATION, lookX, lookY, lookZ, upX, upY, upZ)); - commandThread.interrupt(); - } - - /** - * Sets the overall volume, affecting all sources. - * - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - public void setMasterVolume(float value) { - CommandQueue(new CommandObject(CommandObject.SET_MASTER_VOLUME, value)); - commandThread.interrupt(); - } - - /** - * Returns the overall volume, affecting all sources. - * - * @return Float value representing the master volume (0.0f - 1.0f). - */ - public float getMasterVolume() { - return SoundSystemConfig.getMasterGain(); - } - - /** - * Method for obtaining information about the listener's position and - * orientation. - * - * @return a {@link paulscode.sound.ListenerData ListenerData} object. - */ - public ListenerData getListenerData() { - synchronized (SoundSystemConfig.THREAD_SYNC) { - return soundLibrary.getListenerData(); - } - } - - /** - * Switches to the specified library, and preserves all sources. - * - * @param libraryClass Library to use. - * @return True if switch was successful. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for - * information about chosing a sound library. - */ - public boolean switchLibrary(Class libraryClass) throws SoundSystemException { - synchronized (SoundSystemConfig.THREAD_SYNC) { - initialized(SET, false); - - HashMap sourceMap = null; - ListenerData listenerData = null; - - boolean wasMidiChannel = false; - MidiChannel midiChannel = null; - FilenameURL midiFilenameURL = null; - String midiSourcename = ""; - boolean midiToLoop = true; - - if (soundLibrary != null) { - currentLibrary(SET, null); - sourceMap = copySources(soundLibrary.getSources()); - listenerData = soundLibrary.getListenerData(); - midiChannel = soundLibrary.getMidiChannel(); - if (midiChannel != null) { - wasMidiChannel = true; - midiToLoop = midiChannel.getLooping(); - midiSourcename = midiChannel.getSourcename(); - midiFilenameURL = midiChannel.getFilenameURL(); - } - - soundLibrary.cleanup(); - soundLibrary = null; - } - message("", 0); - message("Switching to " + SoundSystemConfig.getLibraryTitle(libraryClass), 0); - message("(" + SoundSystemConfig.getLibraryDescription(libraryClass) + ")", 1); - - try { - soundLibrary = (Library) libraryClass.newInstance(); - } catch (InstantiationException ie) { - errorMessage("The specified library did not load properly", 1); - } catch (IllegalAccessException iae) { - errorMessage("The specified library did not load properly", 1); - } catch (ExceptionInInitializerError eiie) { - errorMessage("The specified library did not load properly", 1); - } catch (SecurityException se) { - errorMessage("The specified library did not load properly", 1); - } - - if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'switchLibrary'", - 1)) { - SoundSystemException sse = new SoundSystemException( - className + " did not load properly. " + "Library was null after initialization.", - SoundSystemException.LIBRARY_NULL); - lastException(SET, sse); - initialized(SET, true); - throw sse; - } - - try { - soundLibrary.init(); - } catch (SoundSystemException sse) { - lastException(SET, sse); - initialized(SET, true); - throw sse; - } - - soundLibrary.setListenerData(listenerData); - if (wasMidiChannel) { - if (midiChannel != null) - midiChannel.cleanup(); - midiChannel = new MidiChannel(midiToLoop, midiSourcename, midiFilenameURL); - soundLibrary.setMidiChannel(midiChannel); - } - soundLibrary.copySources(sourceMap); - - message("", 0); - - lastException(SET, null); - initialized(SET, true); - - return true; - } - } - - /** - * Switches to the specified library, loosing all sources. - * - * @param libraryClass Library to use. See - * {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for information about chosing a sound - * library. - */ - public boolean newLibrary(Class libraryClass) throws SoundSystemException { - initialized(SET, false); - - CommandQueue(new CommandObject(CommandObject.NEW_LIBRARY, libraryClass)); - commandThread.interrupt(); - - for (int x = 0; (!initialized(GET, XXX)) && (x < 100); x++) { - snooze(400); - commandThread.interrupt(); - } - - if (!initialized(GET, XXX)) { - SoundSystemException sse = new SoundSystemException(className + " did not load after 30 seconds.", - SoundSystemException.LIBRARY_NULL); - lastException(SET, sse); - throw sse; - } else { - SoundSystemException sse = lastException(GET, null); - if (sse != null) - throw sse; - } - return true; - } - - /** - * Switches to the specified library, loosing all sources. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the newLibrary() method instead. - * - * @param libraryClass Library to use. See - * {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for information about chosing a sound - * library. - */ - private void CommandNewLibrary(Class libraryClass) { - initialized(SET, false); - - String headerMessage = "Initializing "; - if (soundLibrary != null) { - currentLibrary(SET, null); - // we are switching libraries - headerMessage = "Switching to "; - soundLibrary.cleanup(); - soundLibrary = null; - } - message(headerMessage + SoundSystemConfig.getLibraryTitle(libraryClass), 0); - message("(" + SoundSystemConfig.getLibraryDescription(libraryClass) + ")", 1); - - try { - soundLibrary = (Library) libraryClass.newInstance(); - } catch (InstantiationException ie) { - errorMessage("The specified library did not load properly", 1); - } catch (IllegalAccessException iae) { - errorMessage("The specified library did not load properly", 1); - } catch (ExceptionInInitializerError eiie) { - errorMessage("The specified library did not load properly", 1); - } catch (SecurityException se) { - errorMessage("The specified library did not load properly", 1); - } - - if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'newLibrary'", 1)) { - lastException(SET, - new SoundSystemException( - className + " did not load properly. " + "Library was null after initialization.", - SoundSystemException.LIBRARY_NULL)); - importantMessage("Switching to silent mode", 1); - - try { - soundLibrary = new Library(); - } catch (SoundSystemException sse) { - lastException(SET, - new SoundSystemException( - "Silent mode did not load properly. " + "Library was null after initialization.", - SoundSystemException.LIBRARY_NULL)); - initialized(SET, true); - return; - } - } - - try { - soundLibrary.init(); - } catch (SoundSystemException sse) { - lastException(SET, sse); - initialized(SET, true); - return; - } - - lastException(SET, null); - initialized(SET, true); - - return; - } - - /** - * Calls the library's initialize() method. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly. - */ - private void CommandInitialize() { - try { - if (errorCheck(soundLibrary == null, "Library null after " + "initialization in method 'CommandInitialize'", - 1)) { - SoundSystemException sse = new SoundSystemException( - className + " did not load properly. " + "Library was null after initialization.", - SoundSystemException.LIBRARY_NULL); - lastException(SET, sse); - throw sse; - } - soundLibrary.init(); - } catch (SoundSystemException sse) { - lastException(SET, sse); - initialized(SET, true); - } - } - - /** - * Loads sample data from a sound file or URL into memory. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the loadSound() method instead. - * - * @param filenameURL Filename/URL of the sound file to load. - */ - private void CommandLoadSound(FilenameURL filenameURL) { - if (soundLibrary != null) - soundLibrary.loadSound(filenameURL); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0); - } - - /** - * Saves the specified sample data, under the specified identifier. This - * identifier can be later used in place of 'filename' parameters to reference - * the sample data. This method is used internally by SoundSystem for thread - * synchronization, and it can not be called directly - please use the - * loadSound() method instead. - * - * @param buffer the sample data and audio format to save. - * @param identifier What to call the sample. - */ - private void CommandLoadSound(SoundBuffer buffer, String identifier) { - if (soundLibrary != null) - soundLibrary.loadSound(buffer, identifier); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0); - } - - /** - * Removes previously loaded sampled data from memory. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the unloadSound() method instead. - * - * @param filename Filename or string identifyer of sound to unload. - */ - private void CommandUnloadSound(String filename) { - if (soundLibrary != null) - soundLibrary.unloadSound(filename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandLoadSound'", 0); - } - - /** - * If the specified source is a streaming source or MIDI source, this method - * queues up the next sound to play when the previous playback ends. This method - * has no effect on non-streaming sources. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the queueSound() method instead. - * - * @param sourcename Source identifier. - * @param filenameURL Filename/URL of the sound file to play next. - */ - private void CommandQueueSound(String sourcename, FilenameURL filenameURL) { - if (soundLibrary != null) - soundLibrary.queueSound(sourcename, filenameURL); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandQueueSound'", 0); - } - - /** - * Removes the first occurrence of the specified filename/identifier from the - * specified source's list of sounds to play when previous playback ends. This - * method has no effect on non-streaming sources. This method is used internally - * by SoundSystem for thread synchronization, and it can not be called directly - * - please use the dequeueSound() method instead. - * - * @param sourcename Source identifier. - * @param filename Filename/identifier of the sound file to remove from the - * queue. - */ - private void CommandDequeueSound(String sourcename, String filename) { - if (soundLibrary != null) - soundLibrary.dequeueSound(sourcename, filename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandDequeueSound'", 0); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then begins playing the specified file at the source's previously assigned - * volume level. If the filenameURL parameter is null or empty, the specified - * source will simply fade out and stop. The miliseconds parameter must be - * non-negative or zero. This method will remove anything that is currently in - * the specified source's list of queued sounds that would have played next when - * the current sound finished playing. This method may only be used for - * streaming and MIDI sources. This method is used internally by SoundSystem for - * thread synchronization, and it can not be called directly - please use the - * fadeOut() method instead. - * - * @param sourcename Name of the source to fade out. - * @param filenameURL Filename/URL of a sound file to play next, or null for - * none. - * @param milis Number of miliseconds the fadeout should take. - */ - private void CommandFadeOut(String sourcename, FilenameURL filenameURL, long milis) { - if (soundLibrary != null) - soundLibrary.fadeOut(sourcename, filenameURL, milis); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandFadeOut'", 0); - } - - /** - * Fades out the volume of whatever the specified source is currently playing, - * then fades the volume back in playing the specified file. Final volume after - * fade-in completes will be equal to the source's previously assigned volume - * level. The filenameURL parameter may not be null or empty. The miliseconds - * parameters must be non-negative or zero. This method will remove anything - * that is currently in the specified source's list of queued sounds that would - * have played next when the current sound finished playing. This method may - * only be used for streaming and MIDI sources. This method is used internally - * by SoundSystem for thread synchronization, and it can not be called directly - * - please use the fadeOutIn() method instead. - * - * @param sourcename Name of the source to fade out/in. - * @param filenameURL Filename/URL of a sound file to play next, or null for - * none. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - private void CommandFadeOutIn(String sourcename, FilenameURL filenameURL, long milisOut, long milisIn) { - if (soundLibrary != null) - soundLibrary.fadeOutIn(sourcename, filenameURL, milisOut, milisIn); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandFadeOutIn'", 0); - } - - /** - * Makes sure the current volume levels of streaming sources and MIDI are - * correct. This method is designed to help reduce the "jerky" fading behavior - * that happens when using some library and codec pluggins (such as - * LibraryJavaSound and CodecJOrbis). This method has no effect on normal - * "non-streaming" sources. It would normally be called somewhere in the main - * "game loop". IMPORTANT: To optimize frame-rates, do not call this method for - * every frame. It is better to just call this method at some acceptable - * "granularity" (play around with different granularities to find what sounds - * acceptable for a particular situation). This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the checkFadeVolumes() method instead. - */ - private void CommandCheckFadeVolumes() { - if (soundLibrary != null) - soundLibrary.checkFadeVolumes(); - else - errorMessage("Variable 'soundLibrary' null in method " + "'CommandCheckFadeVolumes'", 0); - } - - /** - * Loads a sound file into memory. This method is used internally by SoundSystem - * for thread synchronization, and it can not be called directly - please use - * the newSource() method instead. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Whether or not to stream the source. - * @param toLoop Whether or not to loop the source. - * @param sourcename A unique identifier for the source. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distORroll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - private void CommandNewSource(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float x, float y, float z, int attModel, float distORroll) { - if (soundLibrary != null) { - if (filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI) && !SoundSystemConfig.midiCodec()) { - soundLibrary.loadMidi(toLoop, sourcename, filenameURL); - } else { - soundLibrary.newSource(priority, toStream, toLoop, sourcename, filenameURL, x, y, z, attModel, - distORroll); - } - } else - errorMessage("Variable 'soundLibrary' null in method 'CommandNewSource'", 0); - } - - /** - * Opens a direct line for streaming audio data. This method is used internally - * by SoundSystem, and it can not be called directly - please use the - * rawDataStream() method instead. - * - * @param audioFormat Format that the data will be in. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - private void CommandRawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, - float z, int attModel, float distOrRoll) { - if (soundLibrary != null) - soundLibrary.rawDataStream(audioFormat, priority, sourcename, x, y, z, attModel, distOrRoll); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandRawDataStream'", 0); - } - - /** - * Creates a temporary source and either plays or streams it. After the source - * finishes playing, it is removed. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the quickPlay() method instead. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Whether or not to stream the source. - * @param toLoop Whether or not to loop the source. - * @param sourcename A unique identifier for the source. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distORroll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @param temporary Whether or not the source should be removed after it - * finishes playing. - */ - private void CommandQuickPlay(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float x, float y, float z, int attModel, float distORroll, boolean temporary) { - if (soundLibrary != null) { - if (filenameURL.getFilename().matches(SoundSystemConfig.EXTENSION_MIDI) && !SoundSystemConfig.midiCodec()) { - soundLibrary.loadMidi(toLoop, sourcename, filenameURL); - } else { - soundLibrary.quickPlay(priority, toStream, toLoop, sourcename, filenameURL, x, y, z, attModel, - distORroll, temporary); - } - } else - errorMessage("Variable 'soundLibrary' null in method 'CommandQuickPlay'", 0); - } - - /** - * Moves a source to the specified coordinates. This method is used internally - * by SoundSystem for thread synchronization, and it can not be called directly - * - please use the setPosition() method instead. - * - * @param sourcename Source to move. - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - private void CommandSetPosition(String sourcename, float x, float y, float z) { - if (soundLibrary != null) - soundLibrary.setPosition(sourcename, x, y, z); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandMoveSource'", 0); - } - - /** - * Manually sets the specified source's volume. This method is used internally - * by SoundSystem for thread synchronization, and it can not be called directly - * - please use the setVolume() method instead. - * - * @param sourcename Source to change the volume of. - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - private void CommandSetVolume(String sourcename, float value) { - if (soundLibrary != null) - soundLibrary.setVolume(sourcename, value); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetVolume'", 0); - } - - /** - * Manually sets the specified source's pitch. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the setPitch() method instead. - * - * @param sourcename Source to change the pitch of. - * @param value New pitch, float value ( 0.5f - 2.0f ). - */ - private void CommandSetPitch(String sourcename, float value) { - if (soundLibrary != null) - soundLibrary.setPitch(sourcename, value); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetPitch'", 0); - } - - /** - * Set a source's priority factor. A priority source will not be overriden when - * too many sources are playing at once. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the setPriority() method instead. - * - * @param sourcename Identifier for the source. - * @param pri Setting this to true makes this source a priority source. - */ - private void CommandSetPriority(String sourcename, boolean pri) { - if (soundLibrary != null) - soundLibrary.setPriority(sourcename, pri); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetPriority'", 0); - } - - /** - * Changes a source to looping or non-looping. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the setLooping() method instead. - * - * @param sourcename Identifier for the source. - * @param lp This source should loop. - */ - private void CommandSetLooping(String sourcename, boolean lp) { - if (soundLibrary != null) - soundLibrary.setLooping(sourcename, lp); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetLooping'", 0); - } - - /** - * Changes a source's attenuation model. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the setAttenuation() method instead. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Attenuation. - * - * @param sourcename Identifier for the source. - * @param model Attenuation model to use. - */ - private void CommandSetAttenuation(String sourcename, int model) { - if (soundLibrary != null) - soundLibrary.setAttenuation(sourcename, model); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetAttenuation'", 0); - } - - /** - * Changes a source's fade distance or rolloff factor. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about fade distance and rolloff. - * - * @param sourcename Identifier for the source. - * @param dr Either the fading distance or rolloff factor, depending on - * the attenuation model used. - */ - private void CommandSetDistOrRoll(String sourcename, float dr) { - if (soundLibrary != null) - soundLibrary.setDistOrRoll(sourcename, dr); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetDistOrRoll'", 0); - } - - /** - * Changes the Doppler factor. This method is used internally by SoundSystem for - * thread synchronization, and it can not be called directly - please use the - * setDopplerFactor() method instead. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param dopplerFactor New Doppler factor, for determining Doppler effect - * scale. - */ - private void CommandChangeDopplerFactor(float dopplerFactor) { - if (soundLibrary != null) { - SoundSystemConfig.setDopplerFactor(dopplerFactor); - soundLibrary.dopplerChanged(); - } else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetDopplerFactor'", 0); - } - - /** - * Changes the Doppler velocity. This method is used internally by SoundSystem - * for thread synchronization, and it can not be called directly - please use - * the setDopplerVelocity() method instead. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param dopplerVelocity New Doppler velocity, for use in Doppler effect. - */ - private void CommandChangeDopplerVelocity(float dopplerVelocity) { - if (soundLibrary != null) { - SoundSystemConfig.setDopplerVelocity(dopplerVelocity); - soundLibrary.dopplerChanged(); - } else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetDopplerFactor'", 0); - } - - /** - * Changes a source's velocity, for use in Doppler effect. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the setVelocity() method instead. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param sourcename Identifier for the source. - * @param x Source's velocity along the world x-axis. - * @param y Source's velocity along the world y-axis. - * @param z Source's velocity along the world z-axis. - */ - private void CommandSetVelocity(String sourcename, float x, float y, float z) { - if (soundLibrary != null) - soundLibrary.setVelocity(sourcename, x, y, z); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandVelocity'", 0); - } - - /** - * Changes the listener's velocity, for use in Doppler effect. This method is - * used internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the setListenerVelocity() method instead. See - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} for more - * information about Doppler effect. - * - * @param x Velocity along the world x-axis. - * @param y Velocity along the world y-axis. - * @param z Velocity along the world z-axis. - */ - private void CommandSetListenerVelocity(float x, float y, float z) { - if (soundLibrary != null) - soundLibrary.setListenerVelocity(x, y, z); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerVelocity'", 0); - } - - /** - * Plays the specified source. This method is used internally by SoundSystem for - * thread synchronization, and it can not be called directly - please use the - * play() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandPlay(String sourcename) { - if (soundLibrary != null) - soundLibrary.play(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandPlay'", 0); - } - - /** - * Feeds raw data through the specified source. The source must be a streaming - * source and it can not be already associated with a file or URL to stream - * from. This method is used internally by SoundSystem for thread - * synchronization, and it can not be called directly - please use the - * feedRawAudioData() method instead. - * - * @param sourcename Name of the streaming source to play from. - * @param buffer Byte buffer containing raw audio data to stream. - */ - private void CommandFeedRawAudioData(String sourcename, byte[] buffer) { - if (soundLibrary != null) - soundLibrary.feedRawAudioData(sourcename, buffer); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandFeedRawAudioData'", 0); - } - - /** - * Pauses the specified source. This method is used internally by SoundSystem - * for thread synchronization, and it can not be called directly - please use - * the pause() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandPause(String sourcename) { - if (soundLibrary != null) - soundLibrary.pause(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandPause'", 0); - } - - /** - * Stops the specified source. This method is used internally by SoundSystem for - * thread synchronization, and it can not be called directly - please use the - * stop() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandStop(String sourcename) { - if (soundLibrary != null) - soundLibrary.stop(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandStop'", 0); - } - - /** - * Rewinds the specified source. This method is used internally by SoundSystem - * for thread synchronization, and it can not be called directly - please use - * the rewind() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandRewind(String sourcename) { - if (soundLibrary != null) - soundLibrary.rewind(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandRewind'", 0); - } - - /** - * Flushes all previously queued audio data from a streaming source. This method - * is used internally by SoundSystem for thread synchronization, and it can not - * be called directly - please use the flush() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandFlush(String sourcename) { - if (soundLibrary != null) - soundLibrary.flush(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandFlush'", 0); - } - - /** - * Sets a flag for a source indicating whether it should be used or if it should - * be removed after it finishes playing. One possible use for this method is to - * make temporary sources that were created with quickPlay() permanant. Another - * use could be to have a source automatically removed after it finishes - * playing. NOTE: Setting a source to inactive does not stop it, and setting a - * source to active does not play it. It is also important to note that a - * looping inactive source will not be removed as long as it keeps playing. This - * method is used internally by SoundSystem for thread synchronization, and it - * can not be called directly - please use the setTemporary() method instead. - * - * @param sourcename Identifier for the source. - * @param temporary True or False. - */ - private void CommandSetTemporary(String sourcename, boolean temporary) { - if (soundLibrary != null) - soundLibrary.setTemporary(sourcename, temporary); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetActive'", 0); - } - - /** - * Removes the specified source and clears up any memory it used. This method is - * used internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the removeSource() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandRemoveSource(String sourcename) { - if (soundLibrary != null) - soundLibrary.removeSource(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandRemoveSource'", 0); - } - - /** - * Moves the listener relative to the current location. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the moveListener() method instead. - * - * @param x X offset. - * @param y Y offset. - * @param z Z offset. - */ - private void CommandMoveListener(float x, float y, float z) { - if (soundLibrary != null) - soundLibrary.moveListener(x, y, z); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandMoveListener'", 0); - } - - /** - * Moves the listener to the specified location. This method is used internally - * by SoundSystem for thread synchronization, and it can not be called directly - * - please use the setListenerPosition() method instead. - * - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - private void CommandSetListenerPosition(float x, float y, float z) { - if (soundLibrary != null) - soundLibrary.setListenerPosition(x, y, z); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerPosition'", 0); - } - - /** - * Turns the listener counterclockwise by "angle" radians around the y-axis, - * relative to the current angle. This method is used internally by SoundSystem - * for thread synchronization, and it can not be called directly - please use - * the turnListener() method instead. - * - * @param angle radian offset. - */ - private void CommandTurnListener(float angle) { - if (soundLibrary != null) - soundLibrary.turnListener(angle); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandTurnListener'", 0); - } - - /** - * Sets the listener's angle in radians around the y-axis. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the setListenerAngle() method instead. - * - * @param angle radians. - */ - private void CommandSetListenerAngle(float angle) { - if (soundLibrary != null) - soundLibrary.setListenerAngle(angle); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerAngle'", 0); - } - - /** - * Sets the listener's orientation. This method is used internally by - * SoundSystem for thread synchronization, and it can not be called directly - - * please use the setListenerOrientation() method instead. - * - * @param lookX X coordinate of the (normalized) look-at vector. - * @param lookY Y coordinate of the (normalized) look-at vector. - * @param lookZ Z coordinate of the (normalized) look-at vector. - * @param upX X coordinate of the (normalized) look-at vector. - * @param upY Y coordinate of the (normalized) look-at vector. - * @param upZ Z coordinate of the (normalized) look-at vector. - */ - private void CommandSetListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) { - if (soundLibrary != null) - soundLibrary.setListenerOrientation(lookX, lookY, lookZ, upX, upY, upZ); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetListenerOrientation'", 0); - } - - /** - * Culls the specified source. A culled source can not be played until it has - * been activated again. This method is used internally by SoundSystem for - * thread synchronization, and it can not be called directly - please use the - * cull() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandCull(String sourcename) { - if (soundLibrary != null) - soundLibrary.cull(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandCull'", 0); - } - - /** - * Activates a previously culled source, so it can be played again. This method - * is used internally by SoundSystem for thread synchronization, and it can not - * be called directly - please use the activate() method instead. - * - * @param sourcename Identifier for the source. - */ - private void CommandActivate(String sourcename) { - if (soundLibrary != null) - soundLibrary.activate(sourcename); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandActivate'", 0); - } - - /** - * Sets the overall volume, affecting all sources. This method is used - * internally by SoundSystem for thread synchronization, and it can not be - * called directly - please use the setMasterVolume() method instead. - * - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - private void CommandSetMasterVolume(float value) { - if (soundLibrary != null) - soundLibrary.setMasterVolume(value); - else - errorMessage("Variable 'soundLibrary' null in method 'CommandSetMasterVolume'", 0); - } - - /** - * This method can be overridden by extended classes to be used for source - * management (culling and activating sources based on established rules). One - * possible use for this method is sorting sources by distance, culling the - * furthest, and activating the closest. This method is automatically called on - * the CommandThread before processing queued commands, so you do not need to - * call it anywhere else. Note: use methods cull() and activate() here, NOT - * CommandCull() and CommandActivate() (thread safety issue). IMPORTANT: Always - * use synchronized( SoundSystemConfig.THREAD_SYNC ) when manually manipulating - * sources from outside the Command Thread! - */ - protected void ManageSources() { - // OVERRIDDEN METHODS MUST USE THIS: - - /******* - * synchronized( SoundSystemConfig.THREAD_SYNC ) { // TODO: Sort the sources, - * cull and activate, etc. } - ********/ - } - - /** - * Queues a command. If newCommand is null, all commands are dequeued and - * executed. This is automatically used by the sound system, so it is not likely - * that a user would ever need to use this method. See - * {@link paulscode.sound.CommandObject CommandObject} for more information - * about commands. - * - * @param newCommand Command to queue, or null to execute commands. - * @return True if more commands exist, false if queue is empty. - */ - public boolean CommandQueue(CommandObject newCommand) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (newCommand == null) { - // New command is null - that means execute all queued commands. - boolean activations = false; - CommandObject commandObject; - - // Loop through the command queue: - while (commandQueue != null && commandQueue.size() > 0) { - // Grab the oldest command in the queue: - commandObject = commandQueue.remove(0); - // See what it is, and execute the proper Command method: - if (commandObject != null) { - switch (commandObject.Command) { - case CommandObject.INITIALIZE: - CommandInitialize(); - break; - case CommandObject.LOAD_SOUND: - CommandLoadSound((FilenameURL) commandObject.objectArgs[0]); - break; - case CommandObject.LOAD_DATA: - CommandLoadSound((SoundBuffer) commandObject.objectArgs[0], commandObject.stringArgs[0]); - break; - case CommandObject.UNLOAD_SOUND: - CommandUnloadSound(commandObject.stringArgs[0]); - break; - case CommandObject.QUEUE_SOUND: - CommandQueueSound(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0]); - break; - case CommandObject.DEQUEUE_SOUND: - CommandDequeueSound(commandObject.stringArgs[0], commandObject.stringArgs[1]); - break; - case CommandObject.FADE_OUT: - CommandFadeOut(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0], - commandObject.longArgs[0]); - break; - case CommandObject.FADE_OUT_IN: - CommandFadeOutIn(commandObject.stringArgs[0], (FilenameURL) commandObject.objectArgs[0], - commandObject.longArgs[0], commandObject.longArgs[1]); - break; - case CommandObject.CHECK_FADE_VOLUMES: - CommandCheckFadeVolumes(); - break; - case CommandObject.NEW_SOURCE: - CommandNewSource(commandObject.boolArgs[0], commandObject.boolArgs[1], - commandObject.boolArgs[2], commandObject.stringArgs[0], - (FilenameURL) commandObject.objectArgs[0], commandObject.floatArgs[0], - commandObject.floatArgs[1], commandObject.floatArgs[2], commandObject.intArgs[0], - commandObject.floatArgs[3]); - break; - case CommandObject.RAW_DATA_STREAM: - CommandRawDataStream((AudioFormat) commandObject.objectArgs[0], commandObject.boolArgs[0], - commandObject.stringArgs[0], commandObject.floatArgs[0], commandObject.floatArgs[1], - commandObject.floatArgs[2], commandObject.intArgs[0], commandObject.floatArgs[3]); - break; - case CommandObject.QUICK_PLAY: - CommandQuickPlay(commandObject.boolArgs[0], commandObject.boolArgs[1], - commandObject.boolArgs[2], commandObject.stringArgs[0], - (FilenameURL) commandObject.objectArgs[0], commandObject.floatArgs[0], - commandObject.floatArgs[1], commandObject.floatArgs[2], commandObject.intArgs[0], - commandObject.floatArgs[3], commandObject.boolArgs[3]); - break; - case CommandObject.SET_POSITION: - CommandSetPosition(commandObject.stringArgs[0], commandObject.floatArgs[0], - commandObject.floatArgs[1], commandObject.floatArgs[2]); - break; - case CommandObject.SET_VOLUME: - CommandSetVolume(commandObject.stringArgs[0], commandObject.floatArgs[0]); - break; - case CommandObject.SET_PITCH: - CommandSetPitch(commandObject.stringArgs[0], commandObject.floatArgs[0]); - break; - case CommandObject.SET_PRIORITY: - CommandSetPriority(commandObject.stringArgs[0], commandObject.boolArgs[0]); - break; - case CommandObject.SET_LOOPING: - CommandSetLooping(commandObject.stringArgs[0], commandObject.boolArgs[0]); - break; - case CommandObject.SET_ATTENUATION: - CommandSetAttenuation(commandObject.stringArgs[0], commandObject.intArgs[0]); - break; - case CommandObject.SET_DIST_OR_ROLL: - CommandSetDistOrRoll(commandObject.stringArgs[0], commandObject.floatArgs[0]); - break; - case CommandObject.CHANGE_DOPPLER_FACTOR: - CommandChangeDopplerFactor(commandObject.floatArgs[0]); - break; - case CommandObject.CHANGE_DOPPLER_VELOCITY: - CommandChangeDopplerVelocity(commandObject.floatArgs[0]); - break; - case CommandObject.SET_VELOCITY: - CommandSetVelocity(commandObject.stringArgs[0], commandObject.floatArgs[0], - commandObject.floatArgs[1], commandObject.floatArgs[2]); - break; - case CommandObject.SET_LISTENER_VELOCITY: - CommandSetListenerVelocity(commandObject.floatArgs[0], commandObject.floatArgs[1], - commandObject.floatArgs[2]); - break; - // Methods related to playing sources must be processed - // after cull/activate commands in order for source - // management to work properly, so save them for - // later: - // ------------------------------------------------------ - case CommandObject.PLAY: - sourcePlayList.add(commandObject); - break; - case CommandObject.FEED_RAW_AUDIO_DATA: - sourcePlayList.add(commandObject); - break; - // ------------------------------------------------------ - case CommandObject.PAUSE: - CommandPause(commandObject.stringArgs[0]); - break; - case CommandObject.STOP: - CommandStop(commandObject.stringArgs[0]); - break; - case CommandObject.REWIND: - CommandRewind(commandObject.stringArgs[0]); - break; - case CommandObject.FLUSH: - CommandFlush(commandObject.stringArgs[0]); - break; - case CommandObject.CULL: - CommandCull(commandObject.stringArgs[0]); - break; - case CommandObject.ACTIVATE: - activations = true; - CommandActivate(commandObject.stringArgs[0]); - break; - case CommandObject.SET_TEMPORARY: - CommandSetTemporary(commandObject.stringArgs[0], commandObject.boolArgs[0]); - break; - case CommandObject.REMOVE_SOURCE: - CommandRemoveSource(commandObject.stringArgs[0]); - break; - case CommandObject.MOVE_LISTENER: - CommandMoveListener(commandObject.floatArgs[0], commandObject.floatArgs[1], - commandObject.floatArgs[2]); - break; - case CommandObject.SET_LISTENER_POSITION: - CommandSetListenerPosition(commandObject.floatArgs[0], commandObject.floatArgs[1], - commandObject.floatArgs[2]); - break; - case CommandObject.TURN_LISTENER: - CommandTurnListener(commandObject.floatArgs[0]); - break; - case CommandObject.SET_LISTENER_ANGLE: - CommandSetListenerAngle(commandObject.floatArgs[0]); - break; - case CommandObject.SET_LISTENER_ORIENTATION: - CommandSetListenerOrientation(commandObject.floatArgs[0], commandObject.floatArgs[1], - commandObject.floatArgs[2], commandObject.floatArgs[3], commandObject.floatArgs[4], - commandObject.floatArgs[5]); - break; - case CommandObject.SET_MASTER_VOLUME: - CommandSetMasterVolume(commandObject.floatArgs[0]); - break; - case CommandObject.NEW_LIBRARY: - CommandNewLibrary(commandObject.classArgs[0]); - break; - // If we don't recognize the command, just skip it: - default: - break; - } - } - } - - // If any sources were reactivated, check if they need to be - // replayed: - if (activations) - soundLibrary.replaySources(); - - // Now that we have the correct sources culled and activated, we - // can start playing sources. Loop through the playlist and - // execute the commands: - while (sourcePlayList != null && sourcePlayList.size() > 0) { - // Grab the oldest command in the queue: - commandObject = sourcePlayList.remove(0); - if (commandObject != null) { - // See what it is, and execute the proper Command method: - switch (commandObject.Command) { - case CommandObject.PLAY: - CommandPlay(commandObject.stringArgs[0]); - break; - case CommandObject.FEED_RAW_AUDIO_DATA: - CommandFeedRawAudioData(commandObject.stringArgs[0], commandObject.buffer); - break; - } - } - } - - return (commandQueue != null && commandQueue.size() > 0); - } else { - // make sure the commandQueue exists: - if (commandQueue == null) - return false; - // queue a new command - commandQueue.add(newCommand); - // Of course there is something in the list now, since we just - // added it: - return true; - } - } - } - - /** - * Searches for and removes any temporary sources that have finished playing. - * This method is used internally by SoundSystem, and it is unlikely that the - * user will ever need to use it. - */ - public void removeTemporarySources() { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (soundLibrary != null) - soundLibrary.removeTemporarySources(); - } - } - - /** - * Returns true if the specified source is playing. - * - * @param sourcename Unique identifier of the source to check. - * @return True or false. - */ - public boolean playing(String sourcename) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (soundLibrary == null) - return false; - - Source src = soundLibrary.getSources().get(sourcename); - - if (src == null) - return false; - - return src.playing(); - } - } - - /** - * Returns true if anything is currently playing. - * - * @return True or false. - */ - public boolean playing() { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (soundLibrary == null) - return false; - - HashMap sourceMap = soundLibrary.getSources(); - if (sourceMap == null) - return false; - - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - if (source.playing()) - return true; - } - - return false; - } - } - - /** - * Copies and returns the peripheral information from a map of sources. This - * method is used internally by SoundSystem, and it is unlikely that the user - * will ever need to use it. - * - * @param sourceMap Sources to copy. - * @return New map of sources. - */ - private HashMap copySources(HashMap sourceMap) { - Set keys = sourceMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // New map of generic source data: - HashMap returnMap = new HashMap(); - - // loop through and store information from all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = sourceMap.get(sourcename); - if (source != null) - returnMap.put(sourcename, new Source(source, null)); - } - return returnMap; - } - - /** - * Checks if the specified library type is compatible. - * - * @param libraryClass Libary type to check. - * @return True or false. - */ - public static boolean libraryCompatible(Class libraryClass) { - // create the message logger: - SoundSystemLogger logger = SoundSystemConfig.getLogger(); - // if the user didn't create one, then do it now: - if (logger == null) { - logger = new SoundSystemLogger(); - SoundSystemConfig.setLogger(logger); - } - logger.message("", 0); - logger.message("Checking if " + SoundSystemConfig.getLibraryTitle(libraryClass) + " is compatible...", 0); - - boolean comp = SoundSystemConfig.libraryCompatible(libraryClass); - - if (comp) - logger.message("...yes", 1); - else - logger.message("...no", 1); - - return comp; - } - - /** - * Returns the currently loaded library, or -1 if none. - * - * @return Global library identifier - */ - public static Class currentLibrary() { - return (currentLibrary(GET, null)); - } - - /** - * Returns false if a sound library is busy initializing. - * - * @return True or false. - */ - public static boolean initialized() { - return (initialized(GET, XXX)); - } - - /** - * Returns the last SoundSystemException thrown, or null if none. - * - * @return The last exception. - */ - public static SoundSystemException getLastException() { - return (lastException(GET, null)); - } - - /** - * Stores a SoundSystemException which can be retreived later with the - * 'getLastException' method. - * - * @param e Exception to store. - */ - public static void setException(SoundSystemException e) { - lastException(SET, e); - } - - /** - * Sets or returns the value of boolean 'initialized'. - * - * @param action Action to perform (GET or SET). - * @param value New value if action is SET, otherwise XXX. - * @return value of boolean 'initialized'. - */ - private static boolean initialized(boolean action, boolean value) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (action == SET) - initialized = value; - return initialized; - } - } - - /** - * Sets or returns the value of boolean 'initialized'. - * - * @param action Action to perform (GET or SET). - * @param value New value if action is SET, otherwise XXX. - * @return value of boolean 'initialized'. - */ - private static Class currentLibrary(boolean action, Class value) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (action == SET) - currentLibrary = value; - return currentLibrary; - } - } - - /** - * Sets or returns the error code for the last error that occurred. If no errors - * have occurred, returns SoundSystem.ERROR_NONE - * - * @param action Action to perform (GET or SET). - * @param e New exception if action is SET, otherwise XXX. - * @return Last SoundSystemException thrown. - */ - private static SoundSystemException lastException(boolean action, SoundSystemException e) { - synchronized (SoundSystemConfig.THREAD_SYNC) { - if (action == SET) - lastException = e; - return lastException; - } - } - - /** - * Sleeps for the specified number of milliseconds. - */ - protected static void snooze(long milliseconds) { - try { - Thread.sleep(milliseconds); - } catch (InterruptedException e) { - } - } - - /** - * Prints a message. - * - * @param message Message to print. - * @param indent Number of tabs to indent the message. - */ - protected void message(String message, int indent) { - logger.message(message, indent); - } - - /** - * Prints an important message. - * - * @param message Message to print. - * @param indent Number of tabs to indent the message. - */ - protected void importantMessage(String message, int indent) { - logger.importantMessage(message, indent); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @param indent Number of tabs to indent the message. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message, int indent) { - return logger.errorCheck(error, className, message, indent); - } - - /** - * Prints an error message. - * - * @param message Message to print. - * @param indent Number of tabs to indent the message. - */ - protected void errorMessage(String message, int indent) { - logger.errorMessage(className, message, indent); - } -} diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java b/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java deleted file mode 100644 index fbe20e1..0000000 --- a/src/lwjgl/java/paulscode/sound/SoundSystemConfig.java +++ /dev/null @@ -1,994 +0,0 @@ -package paulscode.sound; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Locale; -import java.util.ListIterator; -import java.util.LinkedList; - -/** - * The SoundSystemConfig class is used to access global sound system settings, - * and to link with external pluggins. All members of this class are static. - * SoundSystemConfig is sort of a "catch all" configuration class, so if you are - * not sure where to find something in the SoundSystem library, this is probably - * a good place to start.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SoundSystemConfig { -// GLOBAL THREAD SYNCHRONIZATION - /** - * Lock object used to synchronize the three threads used by SoundSystem. - * Synchronize on this anytime you manually manipulate a Source's properties. - */ - public static final Object THREAD_SYNC = new Object(); -// END GLOBAL THREAD SYNCHRONIZATION - -// GLOBAL IDENTIFIERS - - /** - * A normal (non-streaming) source. Also used to define a Channel type as - * normal. - */ - public static final int TYPE_NORMAL = 0; - /** - * A streaming source. Also used to define a Channel type as streaming. - */ - public static final int TYPE_STREAMING = 1; - - /** - * Global identifier for no attenuation. Attenuation is how a source's volume - * fades with distance. When there is no attenuation, a source's volume remains - * constaint regardles of distance. - */ - public static final int ATTENUATION_NONE = 0; // no attenuation - /** - * Global identifier for rolloff attenuation. Rolloff attenuation is a realistic - * attenuation model, which uses a rolloff factor to determine how quickly a - * source fades with distance. A smaller rolloff factor will fade at a further - * distance, and a rolloff factor of 0 will never fade. NOTE: In OpenAL, rolloff - * attenuation only works for monotone sounds. - */ - public static final int ATTENUATION_ROLLOFF = 1; // logrithmic attenuation - /** - * Global identifier for linear attenuation. Linear attenuation is less - * realistic than rolloff attenuation, but it allows the user to specify a - * maximum "fade distance" where a source's volume becomes zero. - */ - public static final int ATTENUATION_LINEAR = 2; // linear attenuation - - /** - * A Regular expression for determining if a file's extension is MIDI. - */ - public static String EXTENSION_MIDI = ".*[mM][iI][dD][iI]?$"; - - /** - * A Regular expression for determining if a path is an online URL. - */ - public static String PREFIX_URL = "^[hH][tT][tT][pP]://.*"; - -// END GLOBAL IDENTIFIERS - -// PRIVATE STATIC VARIABLES - - /** - * Handle to the message logger. The default logger can be changed by - * overridding the {@link paulscode.sound.SoundSystemLogger SoundSystemLogger} - * class and calling the setLogger() method (must be done BEFORE instantiating - * the SoundSystem class!) - */ - private static SoundSystemLogger logger = null; - - /** - * List of library types in their order of priority. - */ - private static LinkedList libraries; - - /** - * List of codecs and the file formats they are associated with. - */ - private static LinkedList codecs = null; - - /** - * List of stream listeners. - */ - private static LinkedList streamListeners = null; - /** - * For synchronizing access to the streamListeners list. - */ - private static final Object streamListenersLock = new Object(); - - /** - * Maximum number of normal (non-streaming) channels that can be created. NOTE: - * JavaSound may require the total number of channels (non-streaming + - * streaming) to be 32. - */ - private static int numberNormalChannels = 28; - /** - * Maximum number of streaming channels that can be created. NOTE: JavaSound may - * require the total number of channels (non-streaming + streaming) to be 32. - */ - private static int numberStreamingChannels = 4; - /** - * Overall volume, affecting all sources. Float value (0.0f - 1.0f). - */ - private static float masterGain = 1.0f; - /** - * Attenuation model to use if not specified. Attenuation is how a source's - * volume fades with distance. - */ - private static int defaultAttenuationModel = ATTENUATION_ROLLOFF; - /** - * Default value to use for the rolloff factor if not specified. - */ - private static float defaultRolloffFactor = 0.03f; - /** - * Value to use for the doppler factor, for determining Doppler scale. - */ - private static float dopplerFactor = 0.0f; - /** - * Value to use for the doppler velocity. - */ - private static float dopplerVelocity = 1.0f; - /** - * Default value to use for fade distance if not specified. - */ - private static float defaultFadeDistance = 1000.0f; - /** - * Package where the sound files are located (must be followed by '/'). - */ - private static String soundFilesPackage = "Sounds/"; - - /** - * Number of bytes to load at a time when streaming. - */ - private static int streamingBufferSize = 131072; - /** - * Number of buffers used for each streaming sorce. Slow codecs may require this - * number to be greater than 2 to prevent audio skipping during playback. - */ - private static int numberStreamingBuffers = 3; - /** - * Enables a transition-speed optimization by assuming all sounds in each - * streaming source's queue will have exactly the same format once decoded - * (including channels, sample rate, and sample size). This is an advanced - * setting which should only be changed by experienced developers. - */ - private static boolean streamQueueFormatsMatch = false; - /** - * The maximum number of bytes to read in for (non-streaming) files. Increase - * this value if non-streaming sounds are getting cut off. Decrease this value - * if large sound files are causing lag during load time. - */ - private static int maxFileSize = 268435456; - /** - * Size of each chunk to read at a time for loading (non-streaming) files. - * Increase if loading sound files is causing significant lag. - */ - private static int fileChunkSize = 1048576; - - /** - * Indicates whether or not there is a codec for reading from MIDI files. If - * there is no codec for MIDI, then SoundSystem uses javax.sound.midi. - */ - private static boolean midiCodec = false; - - /** - * MIDI device to try using as the Synthesizer. May be the full name or part of - * the name. If this String is empty, the default Synthesizer will be used, or - * one of the common alternate synthesizers if the default Synthesizer is - * unavailable. - */ - private static String overrideMIDISynthesizer = ""; - -// END PRIVATE STATIC VARIABLES - -// THESE TWO METHODS PROVIDE INFORMATION ABOUT THE INDIVIDUAL SOUND LIBRARIES - - /** - * Adds an entry to the list of library types. This method has no effect if the - * specified library type is already in the list of libraries. NOTE: The - * parameterless constructor of the SoundSystem class will try to load libraries - * in the order that they were entered into the list. - * - * @param libraryClass Derivitive of class 'Library'. - */ - public static void addLibrary(Class libraryClass) throws SoundSystemException { - if (libraryClass == null) - throw new SoundSystemException("Parameter null in method 'addLibrary'", - SoundSystemException.NULL_PARAMETER); - if (!Library.class.isAssignableFrom(libraryClass)) - throw new SoundSystemException( - "The specified class does not " + "extend class 'Library' in method 'addLibrary'"); - - if (libraries == null) - libraries = new LinkedList(); - - if (!libraries.contains(libraryClass)) - libraries.add(libraryClass); - } - - /** - * Removes the specified library from the list of library types. - * - * @param libraryClass Derivitive of class 'Library'. - */ - public static void removeLibrary(Class libraryClass) throws SoundSystemException { - if (libraries == null || libraryClass == null) - return; - - libraries.remove(libraryClass); - } - - /** - * Returns the list of library types. - * - * @return LinkedList of classes derived from 'Library', or null if none were - * specified. - */ - public static LinkedList getLibraries() { - return libraries; - } - - /** - * Checks if the specified library class is compatible on the user's machine. - * - * @param libraryClass Library type to check. - * @return True or false. - */ - public static boolean libraryCompatible(Class libraryClass) { - if (libraryClass == null) { - errorMessage("Parameter 'libraryClass' null in method" + "'librayCompatible'"); - return false; - } - if (!Library.class.isAssignableFrom(libraryClass)) { - errorMessage("The specified class does not extend class " + "'Library' in method 'libraryCompatible'"); - return false; - } - - Object o = runMethod(libraryClass, "libraryCompatible", new Class[0], new Object[0]); - - if (o == null) { - errorMessage("Method 'Library.libraryCompatible' returned " + "'null' in method 'libraryCompatible'"); - return false; - } - - return (((Boolean) o).booleanValue()); - } - - /** - * Return the short title of the specified library, or null if error. - * - * @param libraryClass Derivitive of class 'Library'. - * @return String containing the library title. - */ - public static String getLibraryTitle(Class libraryClass) { - if (libraryClass == null) { - errorMessage("Parameter 'libraryClass' null in method" + "'getLibrayTitle'"); - return null; - } - if (!Library.class.isAssignableFrom(libraryClass)) { - errorMessage("The specified class does not extend class " + "'Library' in method 'getLibraryTitle'"); - return null; - } - - Object o = runMethod(libraryClass, "getTitle", new Class[0], new Object[0]); - if (o == null) { - errorMessage("Method 'Library.getTitle' returned " + "'null' in method 'getLibraryTitle'"); - return null; - } - - return ((String) o); - } - - /** - * Return the longer description of the specified library, or null if error. - * - * @param libraryClass Derivitive of class 'Library'. - * @return String containing the library title. - */ - public static String getLibraryDescription(Class libraryClass) { - if (libraryClass == null) { - errorMessage("Parameter 'libraryClass' null in method" + "'getLibrayDescription'"); - return null; - } - if (!Library.class.isAssignableFrom(libraryClass)) { - errorMessage("The specified class does not extend class " + "'Library' in method 'getLibraryDescription'"); - return null; - } - - Object o = runMethod(libraryClass, "getDescription", new Class[0], new Object[0]); - if (o == null) { - errorMessage("Method 'Library.getDescription' returned " + "'null' in method 'getLibraryDescription'"); - return null; - } - - return ((String) o); - } - - /** - * Return whether or not requires reversal of audio data byte-order. - * - * @param libraryClass Derivitive of class 'Library'. - * @return True if byte-order reversal is required. - */ - public static boolean reverseByteOrder(Class libraryClass) { - if (libraryClass == null) { - errorMessage("Parameter 'libraryClass' null in method" + "'reverseByteOrder'"); - return false; - } - if (!Library.class.isAssignableFrom(libraryClass)) { - errorMessage("The specified class does not extend class " + "'Library' in method 'reverseByteOrder'"); - return false; - } - - Object o = runMethod(libraryClass, "reversByteOrder", new Class[0], new Object[0]); - if (o == null) { - errorMessage("Method 'Library.reverseByteOrder' returned " + "'null' in method 'getLibraryDescription'"); - return false; - } - - return (((Boolean) o).booleanValue()); - } - -// END LIBRARY INFORMATION - -// Use the following methods to interface the private variables above: - -// STATIC NONSYNCHRONIZED INTERFACE METHODS - /** - * Changes the message logger to use for handling status messages, warnings, and - * error messages. This method should only be called BEFORE instantiating the - * SoundSystem class! If this method is called after the SoundSystem has been - * created, there will be handles floating around to two different loggers, and - * the results will be undesirable. This method can be used to change how - * messages are handled. First, the {@link paulscode.sound.SoundSystemLogger - * SoundSystemLogger} class should be extended and methods overriden to change - * how messages are handled. Then, the overridden class should be instantiated, - * and a call made to SoundSystemConfig.setLogger() before creating the - * SoundSystem object. If an alternate logger is not set by the user before the - * SoundSystem is instantiated, then an instance of the base SoundSystemLogger - * class will be used by default. - * - * @param l Handle to a message logger. - */ - public static void setLogger(SoundSystemLogger l) { - logger = l; - } - - /** - * Returns a handle to the message logger. - * - * @return The current message logger. - */ - public static SoundSystemLogger getLogger() { - return logger; - } - -// STATIC SYNCHRONIZED INTERFACE METHODS - - /** - * Sets the maximum number of normal (non-streaming) channels that can be - * created. Streaming channels are created first, so the higher the maximum - * number of streaming channels is set, the fewer non-streaming channels will be - * available. If unable to create the number of channels specified, SoundSystem - * will create as many as possible. NOTE: Some sound library pluggins may - * require the total number of channels (non-streaming + streaming) to be 32. - * - * @param number How many normal audio channels. - */ - public static synchronized void setNumberNormalChannels(int number) { - numberNormalChannels = number; - } - - /** - * Returns the maximum number of normal (non-streaming) channels that can be - * created. - * - * @return Maximum non-streaming channels. - */ - public static synchronized int getNumberNormalChannels() { - return numberNormalChannels; - } - - /** - * Sets the maximum number of streaming channels that can be created. Streaming - * channels are created first, so the higher the maximum number of streaming - * channels is set, the fewer non-streaming channels will be available. If - * unable to create the number of channels specified, SoundSystem will create as - * many as possible. NOTE: Some sound library pluggins may require the total - * number of channels (non-streaming + streaming) to be 32. - * - * @param number How many streaming audio channels. - */ - public static synchronized void setNumberStreamingChannels(int number) { - numberStreamingChannels = number; - } - - /** - * Returns the maximum number of streaming channels that can be created. - * - * @return Maximum streaming channels. - */ - public static synchronized int getNumberStreamingChannels() { - return numberStreamingChannels; - } - - /** - * Sets the varriable used for overall volume, affecting all sources. - * - * @param value Float value (0.0f - 1.0f). - */ - public static synchronized void setMasterGain(float value) { - masterGain = value; - } - - /** - * Returns the value for the overall volume. - * - * @return A float value (0.0f - 1.0f). - */ - public static synchronized float getMasterGain() { - return masterGain; - } - - /** - * Sets the default attenuation model to use when one is not specified. - * Attenuation is how a source's volume fades with distance. - * - * @param model A global attenuation model identifier. - */ - public static synchronized void setDefaultAttenuation(int model) { - defaultAttenuationModel = model; - } - - /** - * Returns the default attenuation model used when one is not specified. - * - * @return A global attenuation model identifier - */ - public static synchronized int getDefaultAttenuation() { - return defaultAttenuationModel; - } - - /** - * Sets the default rolloff factor to use when one is not specified. - * - * @param rolloff Rolloff factor. - */ - public static synchronized void setDefaultRolloff(float rolloff) { - defaultRolloffFactor = rolloff; - } - - /** - * Returns the doppler factor, for determining Doppler Effect scale. - * - * @return Doppler factor - */ - public static synchronized float getDopplerFactor() { - return dopplerFactor; - } - - /** - * Sets the doppler factor, for determining Doppler Effect scale. Use this - * method BEFORE instantiating the SoundSystem. To change the Doppler factor - * after the SoundSystem is instantiated, use the - * SoundSystem.changeDopplerFactor method instead. - * - * @param factor Doppler factor. - */ - public static synchronized void setDopplerFactor(float factor) { - dopplerFactor = factor; - } - - /** - * Returns the Doppler Velocity, for use in Doppler Effect. - * - * @return Doppler velocity. - */ - public static synchronized float getDopplerVelocity() { - return dopplerVelocity; - } - - /** - * Sets the Doppler velocity, for use in Doppler Effect. Use this method BEFORE - * instantiating the SoundSystem. To change the Doppler velocity after the - * SoundSystem is instantiated, use the SoundSystem.changeDopplerVelocity method - * instead. - * - * @param velocity Doppler velocity. - */ - public static synchronized void setDopplerVelocity(float velocity) { - dopplerVelocity = velocity; - } - - /** - * Returns the default rolloff factor used when one is not specified. - * - * @return Default rolloff factor - */ - public static synchronized float getDefaultRolloff() { - return defaultRolloffFactor; - } - - /** - * Sets the default fade distance to use when one is not specified. - * - * @param distance Fade Distance. - */ - public static synchronized void setDefaultFadeDistance(float distance) { - defaultFadeDistance = distance; - } - - /** - * Returns the default fade distance used when one is not specified. - * - * @return Default fade distance - */ - public static synchronized float getDefaultFadeDistance() { - return defaultFadeDistance; - } - - /** - * Sets the package where sound files are located. - * - * @param location Path to the sound files location (must be followed by '/'). - */ - public static synchronized void setSoundFilesPackage(String location) { - soundFilesPackage = location; - } - - /** - * Returns the package where sound files are located. - * - * @return Path to the sound files location - */ - public static synchronized String getSoundFilesPackage() { - return soundFilesPackage; - } - - /** - * Sets the number of bytes to load at a time when streaming. - * - * @param size Size in bytes. - */ - public static synchronized void setStreamingBufferSize(int size) { - streamingBufferSize = size; - } - - /** - * Returns the number of bytes to load at a time when streaming. - * - * @return Size in bytes. - */ - public static synchronized int getStreamingBufferSize() { - return streamingBufferSize; - } - - /** - * Sets the number of buffers used for each streaming sorce. Slow codecs may - * require this number to be greater than 2 to prevent audio skipping during - * playback. - * - * @param num How many buffers. - */ - public static synchronized void setNumberStreamingBuffers(int num) { - numberStreamingBuffers = num; - } - - /** - * Returns the number of buffers used for each streaming sorce. - * - * @return How many buffers. - */ - public static synchronized int getNumberStreamingBuffers() { - return numberStreamingBuffers; - } - - /** - * Enables a transition-speed optimization by assuming all sounds in each - * streaming source's queue will have exactly the same format once decoded - * (including channels, sample rate, and sample size). This is an advanced - * setting which should only be changed by experienced developers. - * - * @param val False by default. - */ - public static synchronized void setStreamQueueFormatsMatch(boolean val) { - streamQueueFormatsMatch = val; - } - - /** - * Returns whether or not all sounds in each streaming source's queue will be - * handled as if they have exactly the same format once decoded (including - * channels, sample rate, and sample size). This is an advanced setting which - * should only be changed by experienced developers. - * - * @return Normally false. - */ - public static synchronized boolean getStreamQueueFormatsMatch() { - return streamQueueFormatsMatch; - } - - /** - * Sets the maximum number of bytes to read in for (non-streaming) files. - * Increase this value if non-streaming sounds are getting cut off. Decrease - * this value if large sound files are causing lag during load time. - * - * @param size Size in bytes. - */ - public static synchronized void setMaxFileSize(int size) { - maxFileSize = size; - } - - /** - * Returns the maximum number of bytes to read in for (non-streaming) files. - * - * @return Size in bytes. - */ - public static synchronized int getMaxFileSize() { - return maxFileSize; - } - - /** - * Sets the size of each chunk to read at a time for loading (non-streaming) - * files. Increase if loading sound files is causing significant lag. - * - * @param size Size in bytes. - */ - public static synchronized void setFileChunkSize(int size) { - fileChunkSize = size; - } - - /** - * Returns the size of each chunk to read at a time for loading (non-streaming) - * files. - * - * @return Size in bytes. - */ - public static synchronized int getFileChunkSize() { - return fileChunkSize; - } - - /** - * Returns the name of the MIDI synthesizer to use instead of the default, or - * empty string if none was specified. - * - * @return All or part of a MIDI device name, or empty string for not specified. - */ - public static synchronized String getOverrideMIDISynthesizer() { - return overrideMIDISynthesizer; - } - - /** - * Sets the name of the MIDI synthesizer to use instead of the default. If - * 'name' is an empty string, the default Synthesizer will be used, or one of - * the common alternate synthesizers if the default Synthesizer is unavailable. - * - * @param name All or part of the MIDI device name. - */ - public static synchronized void setOverrideMIDISynthesizer(String name) { - overrideMIDISynthesizer = name; - } - - /** - * Uses the specified file extension to associate a particular file format with - * the codec used to read audio data from it. - * - * @param extension File extension to be associated with the specified codec. - * @param iCodecClass Codec type to use for files with the specified extension. - */ - public static synchronized void setCodec(String extension, Class iCodecClass) throws SoundSystemException { - if (extension == null) - throw new SoundSystemException("Parameter 'extension' null in " + "method 'setCodec'.", - SoundSystemException.NULL_PARAMETER); - if (iCodecClass == null) - throw new SoundSystemException("Parameter 'iCodecClass' null in " + "method 'setCodec'.", - SoundSystemException.NULL_PARAMETER); - if (!ICodec.class.isAssignableFrom(iCodecClass)) - throw new SoundSystemException( - "The specified class does " + "not implement interface 'ICodec' in method 'setCodec'", - SoundSystemException.CLASS_TYPE_MISMATCH); - - if (codecs == null) - codecs = new LinkedList(); - - ListIterator i = codecs.listIterator(); - Codec codec; - - while (i.hasNext()) { - codec = i.next(); - if (extension.matches(codec.extensionRegX)) - i.remove(); - } - codecs.add(new Codec(extension, iCodecClass)); - - // Let SoundSystem know if this is a MIDI codec, so it won't use - // javax.sound.midi anymore: - if (extension.matches(EXTENSION_MIDI)) - midiCodec = true; - } - - /** - * Returns the codec that can be used to read audio data from the specified - * file. - * - * @param filename File to get a codec for. - * @return Codec to use for reading audio data. - */ - public static synchronized ICodec getCodec(String filename) { - if (codecs == null) - return null; - - ListIterator i = codecs.listIterator(); - Codec codec; - - while (i.hasNext()) { - codec = i.next(); - if (filename.matches(codec.extensionRegX)) - return codec.getInstance(); - } - - return null; - } - - /** - * Indicates whether or not there is a codec for reading from MIDI files. If - * there is no codec for MIDI, then SoundSystem uses javax.sound.midi. - * - * @return True if there the user defined a MIDI codec. - */ - public static boolean midiCodec() { - return midiCodec; - } - - /** - * Adds an entry to the list of stream listeners. If the instance is already in - * the list, the command is ignored. - * - * @param streamListener Implementation of interface 'IStreamListener'. - */ - public static void addStreamListener(IStreamListener streamListener) { - synchronized (streamListenersLock) { - if (streamListeners == null) - streamListeners = new LinkedList(); - - if (!streamListeners.contains(streamListener)) - streamListeners.add(streamListener); - } - } - - /** - * Removes an entry from the list of stream listeners. - * - * @param streamListener Implementation of interface 'IStreamListener'. - */ - public static void removeStreamListener(IStreamListener streamListener) { - - synchronized (streamListenersLock) { - if (streamListeners == null) - streamListeners = new LinkedList(); - - if (streamListeners.contains(streamListener)) - streamListeners.remove(streamListener); - } - } - - /** - * Notifies all stream listeners that an End Of Stream was reached. If there are - * no listeners, the command is ignored. - * - * @param sourcename String identifier of the source which reached the EOS. - * @param queueSize Number of items left the the stream's play queue, or zero - * if none. - */ - public static void notifyEOS(String sourcename, int queueSize) { - synchronized (streamListenersLock) { - if (streamListeners == null) - return; - } - final String srcName = sourcename; - final int qSize = queueSize; - - new Thread() { - @Override - public void run() { - synchronized (streamListenersLock) { - if (streamListeners == null) - return; - ListIterator i = streamListeners.listIterator(); - IStreamListener streamListener; - while (i.hasNext()) { - streamListener = i.next(); - if (streamListener == null) - i.remove(); - else - streamListener.endOfStream(srcName, qSize); - } - } - } - }.start(); - } - -// END STATIC SYNCHRONIZED INTERFACE METHODS - -// PRIVATE INTERNAL METHODS - - /** - * Display the specified error message using the current logger. - * - * @param message Error message to display. - */ - private static void errorMessage(String message) { - if (logger != null) - logger.errorMessage("SoundSystemConfig", message, 0); - } - - // We don't know what Class parameter 'c' is, so we will ignore the - // warning message "unchecked call to getMethod". - @SuppressWarnings("unchecked") - /** - * Returns the results of calling the specified method from the specified class - * using the specified parameters. - * - * @param c Class to call the method on. - * @param method Name of the method. - * @param paramTypes Data types of the parameters being passed to the method. - * @param params Actual parameters to pass to the method. - * @return Specified method's return value, or null if error or void. - */ - private static Object runMethod(Class c, String method, Class[] paramTypes, Object[] params) { - Method m = null; - try { - m = c.getMethod(method, paramTypes); // <--- generates a warning - } catch (NoSuchMethodException nsme) { - errorMessage("NoSuchMethodException thrown when attempting " + "to call method '" + method + "' in " - + "method 'runMethod'"); - return null; - } catch (SecurityException se) { - errorMessage("Access denied when attempting to call method '" + method + "' in method 'runMethod'"); - return null; - } catch (NullPointerException npe) { - errorMessage("NullPointerException thrown when attempting " + "to call method '" + method + "' in " - + "method 'runMethod'"); - return null; - } - if (m == null) { - errorMessage("Method '" + method + "' not found for the class " + "specified in method 'runMethod'"); - return null; - } - - Object o = null; - try { - o = m.invoke(null, params); - } catch (IllegalAccessException iae) { - errorMessage("IllegalAccessException thrown when attempting " + "to invoke method '" + method + "' in " - + "method 'runMethod'"); - return null; - } catch (IllegalArgumentException iae) { - errorMessage("IllegalArgumentException thrown when attempting " + "to invoke method '" + method + "' in " - + "method 'runMethod'"); - return null; - } catch (InvocationTargetException ite) { - errorMessage("InvocationTargetException thrown while attempting " - + "to invoke method 'Library.getTitle' in " + "method 'getLibraryTitle'"); - return null; - } catch (NullPointerException npe) { - errorMessage("NullPointerException thrown when attempting " + "to invoke method '" + method + "' in " - + "method 'runMethod'"); - return null; - } catch (ExceptionInInitializerError eiie) { - errorMessage("ExceptionInInitializerError thrown when " + "attempting to invoke method '" + method + "' in " - + "method 'runMethod'"); - return null; - } - - return (o); - } - -// END PRIVATE INTERNAL METHODS - -// PRIVATE INTERNAL CLASSES - - /** - * The Codec class is used to associate individual file formats with the codecs - * used to load audio data from them. - * - * Author: Paul Lamb - */ - private static class Codec { - /** - * A regular expression used to match a file's extension. This is used to - * determine the file format. - */ - public String extensionRegX; - /** - * Codec used to load audio data from this file format. - */ - public Class iCodecClass; - - /** - * Constructor: Converts the specified extension string into a regular - * expression, and associates that with the specified codec. - * - * @param extension File extension to be associated with the specified codec. - * @param iCodec Codec to use for files with the specified extension. - */ - public Codec(String extension, Class iCodecClass) { - extensionRegX = ""; - // Make sure an extension was specified: - if (extension != null && extension.length() > 0) { - // We are only interested in the file extension. The filename - // can begin with whatever: - extensionRegX = ".*"; - String c; - for (int x = 0; x < extension.length(); x++) { - // Each character could be either upper or lower case: - c = extension.substring(x, x + 1); - extensionRegX += "[" + c.toLowerCase(Locale.ENGLISH) + c.toUpperCase(Locale.ENGLISH) + "]"; - } - // The extension will be at the end of the filename: - extensionRegX += "$"; - } - // remember the codec to use for this format: - this.iCodecClass = iCodecClass; - } - - public ICodec getInstance() { - if (iCodecClass == null) - return null; - - Object o = null; - try { - o = iCodecClass.newInstance(); - } catch (InstantiationException ie) { - instantiationErrorMessage(); - return null; - } catch (IllegalAccessException iae) { - instantiationErrorMessage(); - return null; - } catch (ExceptionInInitializerError eiie) { - instantiationErrorMessage(); - return null; - } catch (SecurityException se) { - instantiationErrorMessage(); - return null; - } - - if (o == null) { - instantiationErrorMessage(); - return null; - } - - return (ICodec) o; - } - - private void instantiationErrorMessage() { - errorMessage( - "Unrecognized ICodec implementation in method " + "'getInstance'. Ensure that the implementing " - + "class has one public, parameterless constructor."); - } - } -// END PRIVATE INTERNAL CLASSES -} diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemException.java b/src/lwjgl/java/paulscode/sound/SoundSystemException.java deleted file mode 100644 index 72bea9a..0000000 --- a/src/lwjgl/java/paulscode/sound/SoundSystemException.java +++ /dev/null @@ -1,83 +0,0 @@ -package paulscode.sound; - -/** - * The SoundSystemException class is used to provide information about serious - * errors.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SoundSystemException extends Exception { - /** - * Global identifier for no problem. - */ - public static final int ERROR_NONE = 0; - /** - * Global identifier for a generic exception. - */ - public static final int UNKNOWN_ERROR = 1; - /** - * Global identifier for a null parameter. - */ - public static final int NULL_PARAMETER = 2; - /** - * Global identifier for a class type mismatch. - */ - public static final int CLASS_TYPE_MISMATCH = 3; - /** - * Global identifier for the sound library does not exist. - */ - public static final int LIBRARY_NULL = 4; - /** - * Global identifier for the sound library does not exist. - */ - public static final int LIBRARY_TYPE = 5; - - /** - * Holds a global identifier indicating the type of exception. - */ - private int myType = UNKNOWN_ERROR; - - /** - * Constructor: Generic exception. Specify the error message. - */ - public SoundSystemException(String message) { - super(message); - } - - /** - * Constructor: Specify the error message and type of exception. - * - * @param message Description of the problem. - * @param type Global identifier for type of exception. - */ - public SoundSystemException(String message, int type) { - super(message); - myType = type; - } - - public int getType() { - return myType; - } -} diff --git a/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java b/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java deleted file mode 100644 index 226444b..0000000 --- a/src/lwjgl/java/paulscode/sound/SoundSystemLogger.java +++ /dev/null @@ -1,159 +0,0 @@ -package paulscode.sound; - -/** - * The SoundSystemLogger class handles all status messages, warnings, and error - * messages for the SoundSystem library. This class can be extended and methods - * overriden to change how messages are handled. To do this, the overridden - * class should be instantiated, and a call should be made to method - * SoundSystemConfig.setLogger() BEFORE creating the SoundSystem object. If the - * setLogger() method is called after the SoundSystem has been created, there - * will be handles floating around to two different message loggers, and the - * results will be undesirable. See {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} for more information about changing default settings. If - * an alternate logger is not set by the user, then an instance of this base - * class will be automatically created by default when the SoundSystem class is - * instantiated.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SoundSystemLogger { - /** - * Prints a message. - * - * @param message Message to print. - * @param indent Number of tabs to indent the message. - */ - public void message(String message, int indent) { - String messageText; - // Determine how many spaces to indent: - String spacer = ""; - for (int x = 0; x < indent; x++) { - spacer += " "; - } - // indent the message: - messageText = spacer + message; - - // Print the message: - System.out.println(messageText); - } - - /** - * Prints an important message. - * - * @param message Message to print. - * @param indent Number of tabs to indent the message. - */ - public void importantMessage(String message, int indent) { - String messageText; - // Determine how many spaces to indent: - String spacer = ""; - for (int x = 0; x < indent; x++) { - spacer += " "; - } - // indent the message: - messageText = spacer + message; - - // Print the message: - System.out.println(messageText); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param classname Name of the class checking for an error. - * @param message Message to print if error is true. - * @param indent Number of tabs to indent the message. - * @return True if error is true. - */ - public boolean errorCheck(boolean error, String classname, String message, int indent) { - if (error) - errorMessage(classname, message, indent); - return error; - } - - /** - * Prints the classname which generated the error, followed by the error - * message. - * - * @param classname Name of the class which generated the error. - * @param message The actual error message. - * @param indent Number of tabs to indent the message. - */ - public void errorMessage(String classname, String message, int indent) { - String headerLine, messageText; - // Determine how many spaces to indent: - String spacer = ""; - for (int x = 0; x < indent; x++) { - spacer += " "; - } - // indent the header: - headerLine = spacer + "Error in class '" + classname + "'"; - // indent the message one more than the header: - messageText = " " + spacer + message; - - // Print the error message: - System.out.println(headerLine); - System.out.println(messageText); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - * @param indent Number of tabs to indent the message and stack trace. - */ - public void printStackTrace(Exception e, int indent) { - printExceptionMessage(e, indent); - importantMessage("STACK TRACE:", indent); - if (e == null) - return; - - StackTraceElement[] stack = e.getStackTrace(); - if (stack == null) - return; - - StackTraceElement line; - for (int x = 0; x < stack.length; x++) { - line = stack[x]; - if (line != null) - message(line.toString(), indent + 1); - } - } - - /** - * Prints an exception's error message. - * - * @param e Exception containing the message to print. - * @param indent Number of tabs to indent the message. - */ - public void printExceptionMessage(Exception e, int indent) { - importantMessage("ERROR MESSAGE:", indent); - if (e.getMessage() == null) - message("(none)", indent + 1); - else - message(e.getMessage(), indent + 1); - } -} diff --git a/src/lwjgl/java/paulscode/sound/Source.java b/src/lwjgl/java/paulscode/sound/Source.java deleted file mode 100644 index 55c7f74..0000000 --- a/src/lwjgl/java/paulscode/sound/Source.java +++ /dev/null @@ -1,1229 +0,0 @@ -package paulscode.sound; - -import java.net.URL; -import java.util.LinkedList; -import java.util.ListIterator; -import javax.sound.sampled.AudioFormat; - -/** - * The Source class is used to store information about a source. Source objects - * are stored in a map in the Library class. The information they contain is - * used to create library-specific sources. This is the template class which is - * extended for each specific library. This class is also used by the "No Sound" - * library to represent a mute source.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class Source { - /** - * The library class associated with this type of channel. - */ - protected Class libraryType = Library.class; - - /** - * Used to return a current value from one of the synchronized boolean-interface - * methods. - */ - private static final boolean GET = false; - - /** - * Used to set the value in one of the synchronized boolean-interface methods. - */ - private static final boolean SET = true; - - /** - * Used when a parameter for one of the synchronized boolean-interface methods - * is not aplicable. - */ - private static final boolean XXX = false; - - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * True if this source is being directly fed with raw audio data. - */ - public boolean rawDataStream = false; - - /** - * Format the raw data will be in if this is a Raw Data Stream source. - */ - public AudioFormat rawDataFormat = null; - - /** - * Determines whether a source should be removed after it finishes playing. - */ - public boolean temporary = false; - - /** - * Determines whether or not this is a priority source. Priority sources will - * not be overwritten by other sources when there are no available channels. - */ - public boolean priority = false; - - /** - * Whether or not this source should be streamed. - */ - public boolean toStream = false; - - /** - * Whether this source should loop or only play once. - */ - public boolean toLoop = false; - - /** - * Whether this source needs to be played (for example if it was playing and - * looping when it got culled). - */ - public boolean toPlay = false; - - /** - * Unique name for this source. More than one source can not have the same - * sourcename. - */ - public String sourcename = ""; - - /** - * The audio file which this source should play. - */ - public FilenameURL filenameURL = null; - - /** - * This source's position in 3D space. - */ - public Vector3D position; - - /** - * Attenuation model to use for this source. - */ - public int attModel = 0; - - /** - * Either fade distance or rolloff factor, depending on the value of attModel. - */ - public float distOrRoll = 0.0f; - - /** - * Source's velocity in world-space, for use in Doppler effect. - */ - public Vector3D velocity; - - /** - * This source's volume (a float between 0.0 - 1.0). This value is used - * internally for attenuation, and should not be used to manually change a - * source's volume. - */ - public float gain = 1.0f; - - /** - * This value should be used to manually increase or decrease source volume. - */ - public float sourceVolume = 1.0f; - - /** - * Indicates to the streaming thread that this source is removed and needs - * cleanup. - * - * @see https://github.com/MinecraftForge/MinecraftForge/pull/4765 - */ - public boolean removed = false; - - /** - * This value represents the source's pitch (float value between 0.5f - 2.0f). - */ - protected float pitch = 1.0f; - - /** - * This source's distance from the listener. - */ - public float distanceFromListener = 0.0f; - - /** - * Channel to play this source on. - */ - public Channel channel = null; - - /** - * Holds the data used by normal sources. - */ - public SoundBuffer soundBuffer = null; - - /** - * False when this source gets culled. - */ - private boolean active = true; - - /** - * Whether or not this source has been stopped. - */ - private boolean stopped = true; - - /** - * Whether or not this source has been paused. - */ - private boolean paused = false; - - /** - * Codec used to read data for streaming sources. - */ - protected ICodec codec = null; - - /** - * Codec used to read in some initial data from the next sound in the queue. - */ - protected ICodec nextCodec = null; - - /** - * List of buffers to hold some initial data from the next sound in the queue. - */ - protected LinkedList nextBuffers = null; - - /** - * The list of files to stream when the current stream finishes. - */ - protected LinkedList soundSequenceQueue = null; - - /** - * Ensures that only one thread accesses the soundSequenceQueue at a time. - */ - protected final Object soundSequenceLock = new Object(); - - /** - * Used by streaming sources to indicate whether or not the initial - * stream-buffers still need to be queued. - */ - public boolean preLoad = false; - - /** - * Specifies the gain factor used for the fade-out effect, or -1 when source is - * not currently fading out. - */ - protected float fadeOutGain = -1.0f; - - /** - * Specifies the gain factor used for the fade-in effect, or 1 when source is - * not currently fading in. - */ - protected float fadeInGain = 1.0f; - - /** - * Specifies the number of miliseconds it should take to fade out. - */ - protected long fadeOutMilis = 0; - - /** - * Specifies the number of miliseconds it should take to fade in. - */ - protected long fadeInMilis = 0; - - /** - * System time in miliseconds when the last fade in/out volume check occurred. - */ - protected long lastFadeCheck = 0; - - /** - * Constructor: Creates a new source using the specified parameters. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will create a streaming source. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL The filename/URL of the sound file to play at this source. - * @param soundBuffer Buffer containing audio data, or null if not loaded yet. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of 'att'. - * @param temporary Whether or not to remove this source after it finishes - * playing. - */ - public Source(boolean priority, boolean toStream, boolean toLoop, String sourcename, FilenameURL filenameURL, - SoundBuffer soundBuffer, float x, float y, float z, int attModel, float distOrRoll, boolean temporary) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - this.priority = priority; - this.toStream = toStream; - this.toLoop = toLoop; - this.sourcename = sourcename; - this.filenameURL = filenameURL; - this.soundBuffer = soundBuffer; - position = new Vector3D(x, y, z); - this.attModel = attModel; - this.distOrRoll = distOrRoll; - this.velocity = new Vector3D(0, 0, 0); - this.temporary = temporary; - - if (toStream && filenameURL != null) - codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - } - - /** - * Constructor: Creates a new source matching the specified one. - * - * @param old Source to copy information from. - * @param soundBuffer Buffer containing audio data, or null if not loaded yet. - */ - public Source(Source old, SoundBuffer soundBuffer) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - priority = old.priority; - toStream = old.toStream; - toLoop = old.toLoop; - sourcename = old.sourcename; - filenameURL = old.filenameURL; - position = old.position.clone(); - attModel = old.attModel; - distOrRoll = old.distOrRoll; - velocity = old.velocity.clone(); - temporary = old.temporary; - - sourceVolume = old.sourceVolume; - - rawDataStream = old.rawDataStream; - rawDataFormat = old.rawDataFormat; - - this.soundBuffer = soundBuffer; - - if (toStream && filenameURL != null) - codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - } - - /** - * Constructor: Creates a new streaming source that will be directly fed with - * raw audio data. - * - * @param audioFormat Format that the data will be in. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of 'att'. - */ - public Source(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, float z, int attModel, - float distOrRoll) { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - this.priority = priority; - this.toStream = true; - this.toLoop = false; - this.sourcename = sourcename; - this.filenameURL = null; - this.soundBuffer = null; - position = new Vector3D(x, y, z); - this.attModel = attModel; - this.distOrRoll = distOrRoll; - this.velocity = new Vector3D(0, 0, 0); - this.temporary = false; - - rawDataStream = true; - rawDataFormat = audioFormat; - } - /* Override methods */ - - /** - * Shuts the source down and removes references to all instantiated objects. - */ - public void cleanup() { - if (codec != null) - codec.cleanup(); - - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null) - soundSequenceQueue.clear(); - soundSequenceQueue = null; - } - - sourcename = null; - filenameURL = null; - position = null; - soundBuffer = null; - codec = null; - } - - /** - * If this is a streaming source, queues up the next sound to play when the - * previous stream ends. This method has no effect on non-streaming sources. - * - * @param filenameURL The filename/URL of the sound file to stream next. - */ - public void queueSound(FilenameURL filenameURL) { - if (!toStream) { - errorMessage("Method 'queueSound' may only be used for " + "streaming and MIDI sources."); - return; - } - if (filenameURL == null) { - errorMessage("File not specified in method 'queueSound'"); - return; - } - - synchronized (soundSequenceLock) { - if (soundSequenceQueue == null) - soundSequenceQueue = new LinkedList(); - soundSequenceQueue.add(filenameURL); - } - } - - /** - * Removes the first occurrence of the specified filename from the list of - * sounds to play when the previous stream ends. This method has no effect on - * non-streaming sources. - * - * @param filename Filename/identifier of a sound file to remove from the queue. - */ - public void dequeueSound(String filename) { - if (!toStream) { - errorMessage("Method 'dequeueSound' may only be used for " + "streaming and MIDI sources."); - return; - } - if (filename == null || filename.equals("")) { - errorMessage("Filename not specified in method 'dequeueSound'"); - return; - } - - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null) { - ListIterator i = soundSequenceQueue.listIterator(); - while (i.hasNext()) { - if (i.next().getFilename().equals(filename)) { - i.remove(); - break; - } - } - } - } - } - - /** - * Fades out the volume of whatever this source is currently playing, then - * begins playing the specified filename at the source's previously assigned - * volume level. If the filename parameter is null or empty, the source will - * simply fade out and stop. The miliseconds parameter must be non-negative or - * zero. This method will remove anything that is currently in the list of - * queued sounds that would have played next when the current sound finished - * playing. This method has no effect on non-streaming sources. - * - * @param filenameURL Filename/URL of the sound file to play next, or null for - * none. - * @param milis Number of miliseconds the fadeout should take. - */ - public void fadeOut(FilenameURL filenameURL, long milis) { - if (!toStream) { - errorMessage("Method 'fadeOut' may only be used for " + "streaming and MIDI sources."); - return; - } - if (milis < 0) { - errorMessage("Miliseconds may not be negative in method " + "'fadeOut'."); - return; - } - - fadeOutMilis = milis; - fadeInMilis = 0; - fadeOutGain = 1.0f; - lastFadeCheck = System.currentTimeMillis(); - - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null) - soundSequenceQueue.clear(); - - if (filenameURL != null) { - if (soundSequenceQueue == null) - soundSequenceQueue = new LinkedList(); - soundSequenceQueue.add(filenameURL); - } - } - } - - /** - * Fades out the volume of whatever this source is currently playing, then fades - * the volume back in playing the specified file. Final volume after fade-in - * completes will be equal to the source's previously assigned volume level. The - * filenameURL parameter may not be null or empty. The miliseconds parameters - * must be non-negative or zero. This method will remove anything that is - * currently in the list of queued sounds that would have played next when the - * current sound finished playing. This method has no effect on non-streaming - * sources. - * - * @param filenameURL Filename/URL of the sound file to play next, or null for - * none. - * @param milisOut Number of miliseconds the fadeout should take. - * @param milisIn Number of miliseconds the fadein should take. - */ - public void fadeOutIn(FilenameURL filenameURL, long milisOut, long milisIn) { - if (!toStream) { - errorMessage("Method 'fadeOutIn' may only be used for " + "streaming and MIDI sources."); - return; - } - if (filenameURL == null) { - errorMessage("Filename/URL not specified in method 'fadeOutIn'."); - return; - } - if (milisOut < 0 || milisIn < 0) { - errorMessage("Miliseconds may not be negative in method " + "'fadeOutIn'."); - return; - } - - fadeOutMilis = milisOut; - fadeInMilis = milisIn; - - fadeOutGain = 1.0f; - lastFadeCheck = System.currentTimeMillis(); - - synchronized (soundSequenceLock) { - if (soundSequenceQueue == null) - soundSequenceQueue = new LinkedList(); - soundSequenceQueue.clear(); - soundSequenceQueue.add(filenameURL); - } - } - - /** - * Resets this source's volume if it is fading out or in. Returns true if this - * source is currently in the process of fading out. When fade-out completes, - * this method transitions the source to the next sound in the sound sequence - * queue if there is one. This method has no effect on non-streaming sources. - * - * @return True if this source is in the process of fading out. - */ - public boolean checkFadeOut() { - if (!toStream) - return false; - - if (fadeOutGain == -1.0f && fadeInGain == 1.0f) - return false; - - long currentTime = System.currentTimeMillis(); - long milisPast = currentTime - lastFadeCheck; - lastFadeCheck = currentTime; - - if (fadeOutGain >= 0.0f) { - if (fadeOutMilis == 0) { - fadeOutGain = -1.0f; - fadeInGain = 0.0f; - if (!incrementSoundSequence()) { - stop(); - } - positionChanged(); - preLoad = true; - return false; - } else { - float fadeOutReduction = ((float) milisPast) / ((float) fadeOutMilis); - fadeOutGain -= fadeOutReduction; - if (fadeOutGain <= 0.0f) { - fadeOutGain = -1.0f; - fadeInGain = 0.0f; - if (!incrementSoundSequence()) - stop(); - positionChanged(); - preLoad = true; - return false; - } - } - positionChanged(); - return true; - } - - if (fadeInGain < 1.0f) { - fadeOutGain = -1.0f; - if (fadeInMilis == 0) { - fadeOutGain = -1.0f; - fadeInGain = 1.0f; - } else { - float fadeInIncrease = ((float) milisPast) / ((float) fadeInMilis); - fadeInGain += fadeInIncrease; - if (fadeInGain >= 1.0f) { - fadeOutGain = -1.0f; - fadeInGain = 1.0f; - } - } - positionChanged(); - return true; - } - return false; - } - - /** - * Removes the next filename/URL from the sound sequence queue and assigns it to - * this source. This method has no effect on non-streaming sources. This method - * is used internally by SoundSystem, and it is unlikely that the user will ever - * need to use it. - * - * @return True if there was something in the queue. - */ - public boolean incrementSoundSequence() { - if (!toStream) { - errorMessage("Method 'incrementSoundSequence' may only be used " + "for streaming and MIDI sources."); - return false; - } - - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) { - filenameURL = soundSequenceQueue.remove(0); - if (codec != null) - codec.cleanup(); - codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - return true; - } - } - return false; - } - - /** - * Reads in initial buffers of data from the next sound in the sound sequence - * queue, to reduce lag when the transition occurrs. This method has no effect - * on non-streaming sources. This method is used internally by SoundSystem, and - * it is unlikely that the user will ever need to use it. - * - * @return False if there is nothing in the queue to read from. - */ - public boolean readBuffersFromNextSoundInSequence() { - if (!toStream) { - errorMessage("Method 'readBuffersFromNextSoundInSequence' may " + "only be used for streaming sources."); - return false; - } - - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) { - if (nextCodec != null) - nextCodec.cleanup(); - nextCodec = SoundSystemConfig.getCodec(soundSequenceQueue.get(0).getFilename()); - nextCodec.initialize(soundSequenceQueue.get(0).getURL()); - - SoundBuffer buffer = null; - for (int i = 0; i < SoundSystemConfig.getNumberStreamingBuffers() && !nextCodec.endOfStream(); i++) { - buffer = nextCodec.read(); - if (buffer != null) { - if (nextBuffers == null) - nextBuffers = new LinkedList(); - nextBuffers.add(buffer); - } - } - return true; - } - } - return false; - } - - /** - * Returns the size of the sound sequence queue (if this is a streaming source). - * - * @return Number of sounds left in the queue, or zero if none. - */ - public int getSoundSequenceQueueSize() { - if (soundSequenceQueue == null) - return 0; - return soundSequenceQueue.size(); - } - - /** - * Sets whether or not this source should be removed when it finishes playing. - * - * @param tmp True or false. - */ - public void setTemporary(boolean tmp) { - temporary = tmp; - } - - /** - * Called every time the listener's position or orientation changes. - */ - public void listenerMoved() { - } - - /** - * Moves the source to the specified position. - * - * @param x X coordinate to move to. - * @param y Y coordinate to move to. - * @param z Z coordinate to move to. - */ - public void setPosition(float x, float y, float z) { - position.x = x; - position.y = y; - position.z = z; - } - - /** - * Called every time the source changes position. - */ - public void positionChanged() { - } - - /** - * Sets whether or not this source is a priority source. A priority source will - * not be overritten by another source if there are no channels available to - * play on. - * - * @param pri True or false. - */ - public void setPriority(boolean pri) { - priority = pri; - } - - /** - * Sets whether this source should loop or only play once. - * - * @param lp True or false. - */ - public void setLooping(boolean lp) { - toLoop = lp; - } - - /** - * Sets this source's attenuation model. - * - * @param model Attenuation model to use. - */ - public void setAttenuation(int model) { - attModel = model; - } - - /** - * Sets this source's fade distance or rolloff factor, depending on the - * attenuation model. - * - * @param dr New value for fade distance or rolloff factor. - */ - public void setDistOrRoll(float dr) { - distOrRoll = dr; - } - - /** - * Sets this source's velocity, for use in Doppler effect. - * - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - public void setVelocity(float x, float y, float z) { - this.velocity.x = x; - this.velocity.y = y; - this.velocity.z = z; - } - - /** - * Returns the source's distance from the listener. - * - * @return How far away the source is. - */ - public float getDistanceFromListener() { - return distanceFromListener; - } - - /** - * Manually sets the specified source's pitch. - * - * @param value A float value ( 0.5f - 2.0f ). - */ - public void setPitch(float value) { - float newPitch = value; - if (newPitch < 0.5f) - newPitch = 0.5f; - else if (newPitch > 2.0f) - newPitch = 2.0f; - pitch = newPitch; - } - - /** - * Returns the pitch of the specified source. - * - * @return Float value representing the source pitch (0.5f - 2.0f). - */ - public float getPitch() { - return pitch; - } - - /** - * Indicates whether or not this source's associated library requires some - * codecs to reverse-order the audio data they generate. - * - * @return True if audio data should be reverse-ordered. - */ - public boolean reverseByteOrder() { - return SoundSystemConfig.reverseByteOrder(libraryType); - } - - /** - * Changes the sources peripheral information to match the supplied parameters. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will create a streaming source. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of 'att'. - * @param temporary Whether or not to remove this source after it finishes - * playing. - */ - public void changeSource(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, SoundBuffer soundBuffer, float x, float y, float z, int attModel, float distOrRoll, - boolean temporary) { - this.priority = priority; - this.toStream = toStream; - this.toLoop = toLoop; - this.sourcename = sourcename; - this.filenameURL = filenameURL; - this.soundBuffer = soundBuffer; - position.x = x; - position.y = y; - position.z = z; - this.attModel = attModel; - this.distOrRoll = distOrRoll; - this.temporary = temporary; - } - - /** - * Feeds raw data to the specified channel. - * - * @param buffer Byte buffer containing raw audio data to stream. - * @param c Channel to stream on. - * @return Number of prior buffers that have been processed, or -1 if unable to - * queue the buffer (if the source was culled, for example). - */ - public int feedRawAudioData(Channel c, byte[] buffer) { - if (!active(GET, XXX)) { - toPlay = true; - return -1; - } - if (channel != c) { - channel = c; - channel.close(); - channel.setAudioFormat(rawDataFormat); - positionChanged(); - } - - // change the state of this source to not stopped and not paused: - stopped(SET, false); - paused(SET, false); - - return channel.feedRawAudioData(buffer); - } - - /** - * Plays the source on the specified channel. - * - * @param c Channel to play on. - */ - public void play(Channel c) { - if (!active(GET, XXX)) { - if (toLoop) - toPlay = true; - return; - } - if (channel != c) { - channel = c; - channel.close(); - } - // change the state of this source to not stopped and not paused: - stopped(SET, false); - paused(SET, false); - } - /* END Override methods */ - - /** - * Streams the source on its current channel - * - * @return False when stream has finished playing. - */ - public boolean stream() { - if (channel == null) - return false; - - if (preLoad) { - if (rawDataStream) - preLoad = false; - else - return preLoad(); - } - - if (rawDataStream) { - if (stopped() || paused()) - return true; - if (channel.buffersProcessed() > 0) - channel.processBuffer(); - return true; - } else { - if (codec == null) - return false; - if (stopped()) - return false; - if (paused()) - return true; - - int processed = channel.buffersProcessed(); - - SoundBuffer buffer = null; - for (int i = 0; i < processed; i++) { - buffer = codec.read(); - if (buffer != null) { - if (buffer.audioData != null) - channel.queueBuffer(buffer.audioData); - buffer.cleanup(); - buffer = null; - return true; - } else if (codec.endOfStream()) { - synchronized (soundSequenceLock) { - if (SoundSystemConfig.getStreamQueueFormatsMatch()) { - if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) { - if (codec != null) - codec.cleanup(); - filenameURL = soundSequenceQueue.remove(0); - codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - codec.initialize(filenameURL.getURL()); - buffer = codec.read(); - if (buffer != null) { - if (buffer.audioData != null) - channel.queueBuffer(buffer.audioData); - buffer.cleanup(); - buffer = null; - return true; - } - } else if (toLoop) { - codec.initialize(filenameURL.getURL()); - buffer = codec.read(); - if (buffer != null) { - if (buffer.audioData != null) - channel.queueBuffer(buffer.audioData); - buffer.cleanup(); - buffer = null; - return true; - } - } - } - } - } - /* - * if( codec.endOfStream() ) { synchronized( soundSequenceLock ) { if( - * SoundSystemConfig.getStreamQueueFormatsMatch() ) { if( soundSequenceQueue != - * null && soundSequenceQueue.size() > 0 ) { if( codec != null ) - * codec.cleanup(); filenameURL = soundSequenceQueue.remove( 0 ); codec = - * SoundSystemConfig.getCodec( filenameURL.getFilename() ); codec.initialize( - * filenameURL.getURL() ); return true; } else if( toLoop ) { codec.initialize( - * filenameURL.getURL() ); buffer = codec.read(); if( buffer != null ) { if( - * buffer.audioData != null ) channel.queueBuffer( buffer.audioData ); - * buffer.cleanup(); buffer = null; } } } } return false; } - */ - } - } - return false; - } - - /** - * Queues up the initial stream-buffers for the stream. - * - * @return False if the end of the stream was reached. - */ - public boolean preLoad() { - if (channel == null) - return false; - - if (codec == null) - return false; - - SoundBuffer buffer = null; - - boolean noNextBuffers = false; - synchronized (soundSequenceLock) { - if (nextBuffers == null || nextBuffers.isEmpty()) - noNextBuffers = true; - } - - if (nextCodec != null && !noNextBuffers) { - codec = nextCodec; - nextCodec = null; - synchronized (soundSequenceLock) { - while (!nextBuffers.isEmpty()) { - buffer = nextBuffers.remove(0); - if (buffer != null) { - if (buffer.audioData != null) - channel.queueBuffer(buffer.audioData); - buffer.cleanup(); - buffer = null; - } - } - } - } else { - nextCodec = null; - URL url = filenameURL.getURL(); - - codec.initialize(url); - for (int i = 0; i < SoundSystemConfig.getNumberStreamingBuffers(); i++) { - buffer = codec.read(); - if (buffer != null) { - if (buffer.audioData != null) - channel.queueBuffer(buffer.audioData); - buffer.cleanup(); - buffer = null; - } - } - } - - return true; - } - - /** - * Pauses the source. - */ - public void pause() { - toPlay = false; - paused(SET, true); - if (channel != null) - channel.pause(); - else - errorMessage("Channel null in method 'pause'"); - } - - /** - * Stops the source. - */ - public void stop() { - toPlay = false; - stopped(SET, true); - paused(SET, false); - if (channel != null) - channel.stop(); - else - errorMessage("Channel null in method 'stop'"); - } - - /** - * Rewinds the source. If the source was paused, then it is stopped. - */ - public void rewind() { - if (paused(GET, XXX)) { - stop(); - } - if (channel != null) { - boolean rePlay = playing(); - channel.rewind(); - if (toStream && rePlay) { - stop(); - play(channel); - } - } else - errorMessage("Channel null in method 'rewind'"); - } - - /** - * Dequeues any previously queued data. - */ - public void flush() { - if (channel != null) - channel.flush(); - else - errorMessage("Channel null in method 'flush'"); - } - - /** - * Stops and flushes the source, and prevents it from being played again until - * the activate() is called. - */ - public void cull() { - if (!active(GET, XXX)) - return; - if (playing() && toLoop) - toPlay = true; - if (rawDataStream) - toPlay = true; - active(SET, false); - if (channel != null) - channel.close(); - channel = null; - } - - /** - * Allows a previously culled source to be played again. - */ - public void activate() { - active(SET, true); - } - - /** - * Returns false if the source has been culled. - * - * @return True or False - */ - public boolean active() { - return active(GET, XXX); - } - - /** - * Returns true if the source is playing. - * - * @return True or False - */ - public boolean playing() { - if (channel == null || channel.attachedSource != this) - return false; - else if (paused() || stopped()) - return false; - else - return channel.playing(); - } - - /** - * Returns true if the source has been stopped. - * - * @return True or False - */ - public boolean stopped() { - return stopped(GET, XXX); - } - - /** - * Returns true if the source has been paused. - * - * @return True or False - */ - public boolean paused() { - return paused(GET, XXX); - } - - /** - * Returns the number of miliseconds since the source began playing. - * - * @return miliseconds, or -1 if not playing or unable to calculate - */ - public float millisecondsPlayed() { - if (channel == null) - return (-1); - else - return channel.millisecondsPlayed(); - } - - /** - * Sets or returns whether or not the source has been culled. - * - * @return True or False - */ - private synchronized boolean active(boolean action, boolean value) { - if (action == SET) - active = value; - return active; - } - - /** - * Sets or returns whether or not the source has been stopped. - * - * @return True or False - */ - private synchronized boolean stopped(boolean action, boolean value) { - if (action == SET) - stopped = value; - return stopped; - } - - /** - * Sets or returns whether or not the source has been paused. - * - * @return True or False - */ - private synchronized boolean paused(boolean action, boolean value) { - if (action == SET) - paused = value; - return paused; - } - - /** - * Returns the name of the class. - * - * @return SoundLibraryXXXX. - */ - public String getClassName() { - String libTitle = SoundSystemConfig.getLibraryTitle(libraryType); - - if (libTitle.equals("No Sound")) - return "Source"; - else - return "Source" + libTitle; - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - protected void message(String message) { - logger.message(message, 0); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - protected void importantMessage(String message) { - logger.importantMessage(message, 0); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - protected boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, getClassName(), message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - protected void errorMessage(String message) { - logger.errorMessage(getClassName(), message, 0); - } - - /** - * Prints an exception's error message followed by the stack trace. - * - * @param e Exception containing the information to print. - */ - protected void printStackTrace(Exception e) { - logger.printStackTrace(e, 1); - } -} diff --git a/src/lwjgl/java/paulscode/sound/StreamThread.java b/src/lwjgl/java/paulscode/sound/StreamThread.java deleted file mode 100644 index 9bc810c..0000000 --- a/src/lwjgl/java/paulscode/sound/StreamThread.java +++ /dev/null @@ -1,253 +0,0 @@ -package paulscode.sound; - -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; - -/** - * The StreamThread class is used to process all streaming sources. This thread - * starts out asleep, and it sleeps when all streaming sources are finished - * playing, so it is necessary to call interrupt() after adding new streaming - * sources to the list.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- * - */ -public class StreamThread extends SimpleThread { - /** - * Processes status messages, warnings, and error messages. - */ - private SoundSystemLogger logger; - - /** - * List of sources that are currently streaming. - */ - private List streamingSources; - - /** - * Used to synchronize access to the streaming sources list. - */ - private final Object listLock = new Object(); - - /** - * Constructor: Grabs a handle to the message logger and instantiates the - * streaming sources list. - */ - public StreamThread() { - // grab a handle to the message logger: - logger = SoundSystemConfig.getLogger(); - - streamingSources = new LinkedList(); - } - - /** - * Removes all references to instantiated objects, and changes the thread's - * state to "not alive". Method alive() returns false when the cleanup() method - * has completed. - */ - @Override - protected void cleanup() { - kill(); - super.cleanup(); // Important!! - } - - /** - * The main loop for processing commands. The thread sleeps when it finishes - * processing commands, and it must be interrupted to process more. - */ - @Override - public void run() { - ListIterator iter; - Source src; - - // Start out asleep: - snooze(3600000); - - while (!dying()) { - while (!dying() && !streamingSources.isEmpty()) { - // Make sure noone else is accessing the list of sources: - synchronized (listLock) { - iter = streamingSources.listIterator(); - while (!dying() && iter.hasNext()) { - src = iter.next(); - // If this is a removed source, we cleanup here and then let normal cleanup run - // - https://github.com/MinecraftForge/MinecraftForge/pull/4765 - if (src != null && src.removed) { - src.cleanup(); - src = null; - } - if (src == null) { - iter.remove(); - } else if (src.stopped()) { - if (!src.rawDataStream) - iter.remove(); - } else if (!src.active()) { - if (src.toLoop || src.rawDataStream) - src.toPlay = true; - iter.remove(); - } else if (!src.paused()) { - src.checkFadeOut(); - if ((!src.stream()) && (!src.rawDataStream)) { - if (src.channel == null || !src.channel.processBuffer()) { - if (src.nextCodec == null) { - src.readBuffersFromNextSoundInSequence(); - } - /* - * if( src.getSoundSequenceQueueSize() > 0 ) { src.incrementSoundSequence(); } - * - * // check if this is a looping source else - */ if (src.toLoop) { - // wait for stream to finish playing - if (!src.playing()) { - // Generate an EOS event: - SoundSystemConfig.notifyEOS(src.sourcename, - src.getSoundSequenceQueueSize()); - // Check if the source is currently - // in the process of fading out. - if (src.checkFadeOut()) { - // Source is fading out. - // Keep looping until it - // finishes. - src.preLoad = true; - } else { - // Source is not fading out. - // If there is another sound in - // the sequence, switch to it - // before replaying. - src.incrementSoundSequence(); - src.preLoad = true; // replay - } - } - } else { - // wait for stream to finish playing - if (!src.playing()) { - // Generate an EOS event: - SoundSystemConfig.notifyEOS(src.sourcename, - src.getSoundSequenceQueueSize()); - // Check if the source is currently - // in the process of fading out - if (!src.checkFadeOut()) { - // Source is not fading out. - // Play anything else that is - // in the sound sequence queue. - if (src.incrementSoundSequence()) - src.preLoad = true; - else - iter.remove(); // finished - } - } - } - } - } - } - } - } - if (!dying() && !streamingSources.isEmpty()) - snooze(20); // sleep a bit so we don't peg the cpu - } - if (!dying() && streamingSources.isEmpty()) - snooze(3600000); // sleep until there is more to do. - } - - cleanup(); // Important!! - } - - /** - * Adds a new streaming source to the list. If another source in the list is - * already playing on the same channel, it is stopped and removed from the list. - * - * @param source New source to stream. - */ - public void watch(Source source) { - // make sure the source exists: - if (source == null) - return; - - // make sure we aren't already watching this source: - if (streamingSources.contains(source)) - return; - - ListIterator iter; - Source src; - - // Make sure noone else is accessing the list of sources: - synchronized (listLock) { - // Any currently watched source which is null or playing on the - // same channel as the new source should be stopped and removed - // from the list. - iter = streamingSources.listIterator(); - while (iter.hasNext()) { - src = iter.next(); - if (src == null) { - iter.remove(); - } else if (source.channel == src.channel) { - src.stop(); - iter.remove(); - } - } - - // Add the new source to the list: - streamingSources.add(source); - } - } - - /** - * Prints a message. - * - * @param message Message to print. - */ - private void message(String message) { - logger.message(message, 0); - } - - /** - * Prints an important message. - * - * @param message Message to print. - */ - private void importantMessage(String message) { - logger.importantMessage(message, 0); - } - - /** - * Prints the specified message if error is true. - * - * @param error True or False. - * @param message Message to print if error is true. - * @return True if error is true. - */ - private boolean errorCheck(boolean error, String message) { - return logger.errorCheck(error, "StreamThread", message, 0); - } - - /** - * Prints an error message. - * - * @param message Message to print. - */ - private void errorMessage(String message) { - logger.errorMessage("StreamThread", message, 0); - } -} diff --git a/src/lwjgl/java/paulscode/sound/Vector3D.java b/src/lwjgl/java/paulscode/sound/Vector3D.java deleted file mode 100644 index 37d76b3..0000000 --- a/src/lwjgl/java/paulscode/sound/Vector3D.java +++ /dev/null @@ -1,193 +0,0 @@ -package paulscode.sound; - -/** - * The Vector3D class contains methods to simplify common 3D vector functions, - * such as cross and dot product, normalize, etc.
- *
- * SoundSystem License:
- *
- * You are free to use this library for any purpose, commercial or otherwise. - * You may modify this library or source code, and distribute it any way you - * like, provided the following conditions are met:
- * 1) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 2) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 3) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 4) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 5) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 6) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class Vector3D { - - /** - * The vector's X coordinate. - */ - public float x; - - /** - * The vector's Y coordinate. - */ - public float y; - - /** - * The vector's Z coordinate. - */ - public float z; - - /** - * Constructor: Places the vector at the origin. - */ - public Vector3D() { - x = 0.0f; - y = 0.0f; - z = 0.0f; - } - - /** - * Constructor: Places the vector at the specified 3D coordinates. - * - * @param nx X coordinate for the new vector. - * @param ny Y coordinate for the new vector. - * @param nz Z coordinate for the new vector. - */ - public Vector3D(float nx, float ny, float nz) { - x = nx; - y = ny; - z = nz; - } - - /** - * Returns a new instance containing the same information as this one. - * - * @return A new Vector3D. - */ - @Override - public Vector3D clone() { - return new Vector3D(x, y, z); - } - - /** - * Returns a vector containing the cross-product: A cross B. - * - * @param A First vector in the cross product. - * @param B Second vector in the cross product. - * @return A new Vector3D. - */ - public Vector3D cross(Vector3D A, Vector3D B) { - return new Vector3D(A.y * B.z - B.y * A.z, A.z * B.x - B.z * A.x, A.x * B.y - B.x * A.y); - } - - /** - * Returns a vector containing the cross-product: (this) cross B. - * - * @param B Second vector in the cross product. - * @return A new Vector3D. - */ - public Vector3D cross(Vector3D B) { - return new Vector3D(y * B.z - B.y * z, z * B.x - B.z * x, x * B.y - B.x * y); - - } - - /** - * Returns the dot-product result of: A dot B. - * - * @param A First vector in the dot product. - * @param B Second vector in the dot product. - * @return Dot product. - */ - public float dot(Vector3D A, Vector3D B) { - return ((A.x * B.x) + (A.y * B.y) + (A.z * B.z)); - } - - /** - * Returns the dot-product result of: (this) dot B. - * - * @param B Second vector in the dot product. - * @return Dot product. - */ - public float dot(Vector3D B) { - return ((x * B.x) + (y * B.y) + (z * B.z)); - } - - /** - * Returns the vector represented by: A + B. - * - * @param A First vector. - * @param B Vector to add to A. - * @return A new Vector3D. - */ - public Vector3D add(Vector3D A, Vector3D B) { - return new Vector3D(A.x + B.x, A.y + B.y, A.z + B.z); - } - - /** - * Returns the vector represented by: (this) + B. - * - * @param B Vector to add to this one. - * @return A new Vector3D. - */ - public Vector3D add(Vector3D B) { - return new Vector3D(x + B.x, y + B.y, z + B.z); - } - - /** - * Returns the vector represented by: A - B. - * - * @param A First vector. - * @param B Vector to subtract from A. - * @return A new Vector3D. - */ - public Vector3D subtract(Vector3D A, Vector3D B) { - return new Vector3D(A.x - B.x, A.y - B.y, A.z - B.z); - } - - /** - * Returns the vector represented by: (this) - B. - * - * @param B Vector to subtract from this one. - * @return A new Vector3D. - */ - public Vector3D subtract(Vector3D B) { - return new Vector3D(x - B.x, y - B.y, z - B.z); - } - - /** - * Returns the length of this vector. - * - * @return Length. - */ - public float length() { - return (float) Math.sqrt(x * x + y * y + z * z); - } - - /** - * Changes the length of this vector to 1.0. - */ - public void normalize() { - double t = Math.sqrt(x * x + y * y + z * z); - x = (float) (x / t); - y = (float) (y / t); - z = (float) (z / t); - } - - /** - * Returns a string depicting this vector. - * - * @return "Vector3D (x, y, z)". - */ - @Override - public String toString() { - return "Vector3D (" + x + ", " + y + ", " + z + ")"; - } -} diff --git a/src/lwjgl/java/paulscode/sound/libraries/ChannelLWJGLOpenAL.java b/src/lwjgl/java/paulscode/sound/libraries/ChannelLWJGLOpenAL.java deleted file mode 100644 index 8d5fd5c..0000000 --- a/src/lwjgl/java/paulscode/sound/libraries/ChannelLWJGLOpenAL.java +++ /dev/null @@ -1,602 +0,0 @@ -package paulscode.sound.libraries; - -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.util.LinkedList; -import javax.sound.sampled.AudioFormat; - -// From the lwjgl library, http://www.lwjgl.org -import org.lwjgl.BufferUtils; -import org.lwjgl.openal.AL10; -import org.lwjgl.openal.AL11; - -import paulscode.sound.Channel; -import paulscode.sound.SoundSystemConfig; - -/** - * The ChannelLWJGLOpenAL class is used to reserve a sound-card voice using the - * lwjgl binding of OpenAL. Channels can be either normal or streaming channels. - *
- *
- * This software is based on or using the LWJGL Lightweight Java Gaming Library - * available from http://www.lwjgl.org/.

- *
- * LWJGL License:
- * Copyright (c) 2002-2008 Lightweight Java Game Library Project All rights - * reserved.
- * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - *
- * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution.
- * * Neither the name of 'Light Weight Java Game Library' nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE.
- *
- *
- *
SoundSystem LibraryLWJGLOpenAL License:
- *
- * You are free to use this library for any purpose, commercial or - * otherwise. You may modify this library or source code, and distribute it any - * way you like, provided the following conditions are met:
- * 1) You must abide by the conditions of the aforementioned LWJGL License.
- * 2) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 3) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 4) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 5) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 6) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 7) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class ChannelLWJGLOpenAL extends Channel { - /** - * OpenAL's IntBuffer identifier for this channel. - */ - public IntBuffer ALSource; - - /** - * OpenAL data format to use when playing back the assigned source. - */ - public int ALformat; // OpenAL data format - - /** - * Sample rate (speed) to use for play-back. - */ - public int sampleRate; // sample rate - - /** - * Miliseconds of buffers previously played (streaming sources). - */ - public float millisPreviouslyPlayed = 0; - - /** - * Constructor: takes channelType identifier and a handle to the OpenAL - * IntBuffer identifier to use for this channel. Possible values for channel - * type can be found in the {@link paulscode.sound.SoundSystemConfig - * SoundSystemConfig} class. - * - * @param type Type of channel (normal or streaming). - * @param src Handle to the OpenAL source identifier. - */ - public ChannelLWJGLOpenAL(int type, IntBuffer src) { - super(type); - libraryType = LibraryLWJGLOpenAL.class; - ALSource = src; - } - - /** - * Empties the streamBuffers list, stops and deletes the ALSource, shuts the - * channel down, and removes references to all instantiated objects. - */ - @Override - public void cleanup() { - if (ALSource != null) { - try { - // Stop playing the source: - AL10.alSourceStop(ALSource); - AL10.alGetError(); - } catch (Exception e) { - } - try { - // Delete the source: - AL10.alDeleteSources(ALSource); - AL10.alGetError(); - } catch (Exception e) { - } - ALSource.clear(); - } - ALSource = null; - - super.cleanup(); - } - - /** - * Attaches an OpenAL sound-buffer identifier for the sound data to be played - * back for a normal source. - * - * @param buf Intbuffer identifier for the sound data to play. - * @return False if an error occurred. - */ - public boolean attachBuffer(IntBuffer buf) { - // A sound buffer can only be attached to a normal source: - if (errorCheck(channelType != SoundSystemConfig.TYPE_NORMAL, - "Sound buffers may only be attached to normal " + "sources.")) - return false; - - // send the sound buffer to the channel: - AL10.alSourcei(ALSource.get(0), AL10.AL_BUFFER, buf.get(0)); - - // save the format for later, for determining milliseconds played - if (attachedSource != null && attachedSource.soundBuffer != null - && attachedSource.soundBuffer.audioFormat != null) - setAudioFormat(attachedSource.soundBuffer.audioFormat); - - // Check for errors and return: - return checkALError(); - } - - /** - * Sets the channel up to receive the specified audio format. - * - * @param audioFormat Format to use when playing the stream data. - */ - @Override - public void setAudioFormat(AudioFormat audioFormat) { - int soundFormat = 0; - if (audioFormat.getChannels() == 1) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_MONO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_MONO16; - } else { - errorMessage("Illegal sample size in method " + "'setAudioFormat'"); - return; - } - } else if (audioFormat.getChannels() == 2) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_STEREO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_STEREO16; - } else { - errorMessage("Illegal sample size in method " + "'setAudioFormat'"); - return; - } - } else { - errorMessage("Audio data neither mono nor stereo in " + "method 'setAudioFormat'"); - return; - } - ALformat = soundFormat; - sampleRate = (int) audioFormat.getSampleRate(); - } - - /** - * Sets the channel up to receive the specified OpenAL audio format and sample - * rate. - * - * @param format Format to use. - * @param rate Sample rate (speed) to use. - */ - public void setFormat(int format, int rate) { - ALformat = format; - sampleRate = rate; - } - - /** - * Queues up the initial byte[] buffers of data to be streamed. - * - * @param bufferList List of the first buffers to be played for a streaming - * source. - * @return False if problem occurred or if end of stream was reached. - */ - @Override - public boolean preLoadBuffers(LinkedList bufferList) { - // Stream buffers can only be queued for streaming sources: - if (errorCheck(channelType != SoundSystemConfig.TYPE_STREAMING, - "Buffers may only be queued for streaming sources.")) - return false; - - if (errorCheck(bufferList == null, "Buffer List null in method 'preLoadBuffers'")) - return false; - - IntBuffer streamBuffers; - - // Remember if the channel was playing: - boolean playing = playing(); - // stop the channel if it is playing: - if (playing) { - AL10.alSourceStop(ALSource.get(0)); - checkALError(); - } - // Clear out any previously queued buffers: - int processed = AL10.alGetSourcei(ALSource.get(0), AL10.AL_BUFFERS_PROCESSED); - if (processed > 0) { - streamBuffers = BufferUtils.createIntBuffer(processed); - AL10.alGenBuffers(streamBuffers); - if (errorCheck(checkALError(), "Error clearing stream buffers in method 'preLoadBuffers'")) - return false; - AL10.alSourceUnqueueBuffers(ALSource.get(0), streamBuffers); - if (errorCheck(checkALError(), "Error unqueuing stream buffers in method 'preLoadBuffers'")) - return false; - } - - // restart the channel if it was previously playing: - if (playing) { - AL10.alSourcePlay(ALSource.get(0)); - checkALError(); - } - - streamBuffers = BufferUtils.createIntBuffer(bufferList.size()); - AL10.alGenBuffers(streamBuffers); - if (errorCheck(checkALError(), "Error generating stream buffers in method 'preLoadBuffers'")) - return false; - - ByteBuffer byteBuffer = null; - for (int i = 0; i < bufferList.size(); i++) { - // byteBuffer = ByteBuffer.wrap( bufferList.get(i), 0, - // bufferList.get(i).length ); - byteBuffer = (ByteBuffer) BufferUtils.createByteBuffer(bufferList.get(i).length).put(bufferList.get(i)) - .flip(); - - try { - AL10.alBufferData(streamBuffers.get(i), ALformat, byteBuffer, sampleRate); - } catch (Exception e) { - errorMessage("Error creating buffers in method " + "'preLoadBuffers'"); - printStackTrace(e); - return false; - } - if (errorCheck(checkALError(), "Error creating buffers in method 'preLoadBuffers'")) - return false; - - } - - try { - AL10.alSourceQueueBuffers(ALSource.get(0), streamBuffers); - } catch (Exception e) { - errorMessage("Error queuing buffers in method 'preLoadBuffers'"); - printStackTrace(e); - return false; - } - if (errorCheck(checkALError(), "Error queuing buffers in method 'preLoadBuffers'")) - return false; - - AL10.alSourcePlay(ALSource.get(0)); - if (errorCheck(checkALError(), "Error playing source in method 'preLoadBuffers'")) - return false; - - // Success: - return true; - } - - /** - * Queues up a byte[] buffer of data to be streamed. - * - * @param buffer The next buffer to be played for a streaming source. - * @return False if an error occurred or if the channel is shutting down. - */ - @Override - public boolean queueBuffer(byte[] buffer) { - // Stream buffers can only be queued for streaming sources: - if (errorCheck(channelType != SoundSystemConfig.TYPE_STREAMING, - "Buffers may only be queued for streaming sources.")) - return false; - - // ByteBuffer byteBuffer = ByteBuffer.wrap( buffer, 0, buffer.length ); - ByteBuffer byteBuffer = (ByteBuffer) BufferUtils.createByteBuffer(buffer.length).put(buffer).flip(); - - IntBuffer intBuffer = BufferUtils.createIntBuffer(1); - - AL10.alSourceUnqueueBuffers(ALSource.get(0), intBuffer); - if (checkALError()) - return false; - - if (AL10.alIsBuffer(intBuffer.get(0))) - millisPreviouslyPlayed += millisInBuffer(intBuffer.get(0)); - checkALError(); - - AL10.alBufferData(intBuffer.get(0), ALformat, byteBuffer, sampleRate); - if (checkALError()) - return false; - - AL10.alSourceQueueBuffers(ALSource.get(0), intBuffer); - if (checkALError()) - return false; - - return true; - } - - /** - * Feeds raw data to the stream. - * - * @param buffer Buffer containing raw audio data to stream. - * @return Number of prior buffers that have been processed., or -1 if error. - */ - @Override - public int feedRawAudioData(byte[] buffer) { - // Stream buffers can only be queued for streaming sources: - if (errorCheck(channelType != SoundSystemConfig.TYPE_STREAMING, - "Raw audio data can only be fed to streaming sources.")) - return -1; - - // ByteBuffer byteBuffer = ByteBuffer.wrap( buffer, 0, buffer.length ); - ByteBuffer byteBuffer = (ByteBuffer) BufferUtils.createByteBuffer(buffer.length).put(buffer).flip(); - - IntBuffer intBuffer; - - // Clear out any previously queued buffers: - int processed = AL10.alGetSourcei(ALSource.get(0), AL10.AL_BUFFERS_PROCESSED); - if (processed > 0) { - intBuffer = BufferUtils.createIntBuffer(processed); - AL10.alGenBuffers(intBuffer); - if (errorCheck(checkALError(), "Error clearing stream buffers in method 'feedRawAudioData'")) - return -1; - AL10.alSourceUnqueueBuffers(ALSource.get(0), intBuffer); - if (errorCheck(checkALError(), "Error unqueuing stream buffers in method 'feedRawAudioData'")) - return -1; - int i; - intBuffer.rewind(); - while (intBuffer.hasRemaining()) { - i = intBuffer.get(); - if (AL10.alIsBuffer(i)) { - millisPreviouslyPlayed += millisInBuffer(i); - } - checkALError(); - } - AL10.alDeleteBuffers(intBuffer); - checkALError(); - } - intBuffer = BufferUtils.createIntBuffer(1); - AL10.alGenBuffers(intBuffer); - if (errorCheck(checkALError(), "Error generating stream buffers in method 'preLoadBuffers'")) - return -1; - - AL10.alBufferData(intBuffer.get(0), ALformat, byteBuffer, sampleRate); - if (checkALError()) - return -1; - - AL10.alSourceQueueBuffers(ALSource.get(0), intBuffer); - if (checkALError()) - return -1; - - if (attachedSource != null && attachedSource.channel == this && attachedSource.active()) { - // restart the channel if it was previously playing: - if (!playing()) { - AL10.alSourcePlay(ALSource.get(0)); - checkALError(); - } - } - - return processed; - } - - /** - * Returns the number of milliseconds of audio contained in specified buffer. - * - * @return milliseconds, or 0 if unable to calculate. - */ - public float millisInBuffer(int alBufferi) { - return (((float) AL10.alGetBufferi(alBufferi, AL10.AL_SIZE) - / (float) AL10.alGetBufferi(alBufferi, AL10.AL_CHANNELS) - / ((float) AL10.alGetBufferi(alBufferi, AL10.AL_BITS) / 8.0f) / (float) sampleRate) * 1000); - } - - /** - * Calculates the number of milliseconds since the channel began playing. - * - * @return Milliseconds, or -1 if unable to calculate. - */ - @Override - public float millisecondsPlayed() { - // get number of samples played in current buffer - float offset = (float) AL10.alGetSourcei(ALSource.get(0), AL11.AL_BYTE_OFFSET); - - float bytesPerFrame = 1f; - switch (ALformat) { - case AL10.AL_FORMAT_MONO8: - bytesPerFrame = 1f; - break; - case AL10.AL_FORMAT_MONO16: - bytesPerFrame = 2f; - break; - case AL10.AL_FORMAT_STEREO8: - bytesPerFrame = 2f; - break; - case AL10.AL_FORMAT_STEREO16: - bytesPerFrame = 4f; - break; - default: - break; - } - - offset = (((float) offset / bytesPerFrame) / (float) sampleRate) * 1000; - - // add the milliseconds from stream-buffers that played previously - if (channelType == SoundSystemConfig.TYPE_STREAMING) - offset += millisPreviouslyPlayed; - - // Return millis played: - return (offset); - } - - /** - * Returns the number of queued byte[] buffers that have finished playing. - * - * @return Number of buffers processed. - */ - @Override - public int buffersProcessed() { - // Only streaming sources process buffers: - if (channelType != SoundSystemConfig.TYPE_STREAMING) - return 0; - - // determine how many have been processed: - int processed = AL10.alGetSourcei(ALSource.get(0), AL10.AL_BUFFERS_PROCESSED); - - // Check for errors: - if (checkALError()) - return 0; - - // Return how many were processed: - return processed; - } - - /** - * Dequeues all previously queued data. - */ - @Override - public void flush() { - // Only a streaming source can be flushed, because only streaming - // sources have queued buffers: - if (channelType != SoundSystemConfig.TYPE_STREAMING) - return; - - // determine how many buffers have been queued: - int queued = AL10.alGetSourcei(ALSource.get(0), AL10.AL_BUFFERS_QUEUED); - // Check for errors: - if (checkALError()) - return; - - IntBuffer intBuffer = BufferUtils.createIntBuffer(1); - while (queued > 0) { - try { - AL10.alSourceUnqueueBuffers(ALSource.get(0), intBuffer); - } catch (Exception e) { - return; - } - if (checkALError()) - return; - queued--; - } - millisPreviouslyPlayed = 0; - } - - /** - * Stops the channel, dequeues any queued data, and closes the channel. - */ - @Override - public void close() { - try { - AL10.alSourceStop(ALSource.get(0)); - AL10.alGetError(); - } catch (Exception e) { - } - - if (channelType == SoundSystemConfig.TYPE_STREAMING) - flush(); - } - - /** - * Plays the currently attached normal source, opens this channel up for - * streaming, or resumes playback if this channel was paused. - */ - @Override - public void play() { - AL10.alSourcePlay(ALSource.get(0)); - checkALError(); - } - - /** - * Temporarily stops playback for this channel. - */ - @Override - public void pause() { - AL10.alSourcePause(ALSource.get(0)); - checkALError(); - } - - /** - * Stops playback for this channel and rewinds the attached source to the - * beginning. - */ - @Override - public void stop() { - AL10.alSourceStop(ALSource.get(0)); - if (!checkALError()) - millisPreviouslyPlayed = 0; - } - - /** - * Rewinds the attached source to the beginning. Stops the source if it was - * paused. - */ - @Override - public void rewind() { - // rewinding for streaming sources is handled elsewhere - if (channelType == SoundSystemConfig.TYPE_STREAMING) - return; - - AL10.alSourceRewind(ALSource.get(0)); - if (!checkALError()) - millisPreviouslyPlayed = 0; - } - - /** - * Used to determine if a channel is actively playing a source. This method will - * return false if the channel is paused or stopped and when no data is queued - * to be streamed. - * - * @return True if this channel is playing a source. - */ - @Override - public boolean playing() { - int state = AL10.alGetSourcei(ALSource.get(0), AL10.AL_SOURCE_STATE); - if (checkALError()) - return false; - - return (state == AL10.AL_PLAYING); - } - - /** - * Checks for OpenAL errors, and prints a message if there is an error. - * - * @return True if there was an error, False if not. - */ - private boolean checkALError() { - switch (AL10.alGetError()) { - case AL10.AL_NO_ERROR: - return false; - case AL10.AL_INVALID_NAME: - errorMessage("Invalid name parameter."); - return true; - case AL10.AL_INVALID_ENUM: - errorMessage("Invalid parameter."); - return true; - case AL10.AL_INVALID_VALUE: - errorMessage("Invalid enumerated parameter value."); - return true; - case AL10.AL_INVALID_OPERATION: - errorMessage("Illegal call."); - return true; - case AL10.AL_OUT_OF_MEMORY: - errorMessage("Unable to allocate memory."); - return true; - default: - errorMessage("An unrecognized error occurred."); - return true; - } - } -} diff --git a/src/lwjgl/java/paulscode/sound/libraries/LibraryLWJGLOpenAL.java b/src/lwjgl/java/paulscode/sound/libraries/LibraryLWJGLOpenAL.java deleted file mode 100644 index 4fdd3ce..0000000 --- a/src/lwjgl/java/paulscode/sound/libraries/LibraryLWJGLOpenAL.java +++ /dev/null @@ -1,974 +0,0 @@ -package paulscode.sound.libraries; - -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.nio.FloatBuffer; -import java.net.URL; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Set; -import javax.sound.sampled.AudioFormat; - -// From the lwjgl library, http://www.lwjgl.org -import org.lwjgl.BufferUtils; -import org.lwjgl.LWJGLException; -import org.lwjgl.openal.AL; -import org.lwjgl.openal.AL10; - -import paulscode.sound.Channel; -import paulscode.sound.FilenameURL; -import paulscode.sound.ICodec; -import paulscode.sound.Library; -import paulscode.sound.ListenerData; -import paulscode.sound.SoundBuffer; -import paulscode.sound.SoundSystemConfig; -import paulscode.sound.SoundSystemException; -import paulscode.sound.Source; - -/** - * The LibraryLWJGLOpenAL class interfaces the lwjgl binding of OpenAL.
- *
- * This software is based on or using the LWJGL Lightweight Java Gaming Library - * available from http://www.lwjgl.org/.

- *
- * LWJGL License:
- * Copyright (c) 2002-2008 Lightweight Java Game Library Project All rights - * reserved.
- * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - *
- * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution.
- * * Neither the name of 'Light Weight Java Game Library' nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE.
- *
- *
- *
SoundSystem LibraryLWJGLOpenAL License:
- *
- * You are free to use this library for any purpose, commercial or - * otherwise. You may modify this library or source code, and distribute it any - * way you like, provided the following conditions are met:
- * 1) You must abide by the conditions of the aforementioned LWJGL License.
- * 2) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 3) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 4) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 5) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 6) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 7) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class LibraryLWJGLOpenAL extends Library { - /** - * Used to return a current value from one of the synchronized boolean-interface - * methods. - */ - private static final boolean GET = false; - /** - * Used to set the value in one of the synchronized boolean-interface methods. - */ - private static final boolean SET = true; - /** - * Used when a parameter for one of the synchronized boolean-interface methods - * is not aplicable. - */ - private static final boolean XXX = false; - - /** - * Position of the listener in 3D space. - */ - private FloatBuffer listenerPositionAL = null; - /** - * Information about the listener's orientation. - */ - private FloatBuffer listenerOrientation = null; - /** - * Velocity of the listener. - */ - private FloatBuffer listenerVelocity = null; - /** - * Map containing OpenAL identifiers for sound buffers. - */ - private HashMap ALBufferMap = null; - - /** - * Whether or not the AL_PITCH control is supported. - */ - private static boolean alPitchSupported = true; - - /** - * Constructor: Instantiates the source map, buffer map and listener - * information. Also sets the library type to SoundSystemConfig.LIBRARY_OPENAL - */ - public LibraryLWJGLOpenAL() throws SoundSystemException { - super(); - ALBufferMap = new HashMap(); - reverseByteOrder = true; - } - - /** - * Initializes OpenAL, creates the listener, and grabs up audio channels. - */ - @Override - public void init() throws SoundSystemException { - boolean errors = false; // set to 'true' if error(s) occur: - - try { - // Try and create the sound system: - AL.create(); - errors = checkALError(); - } catch (LWJGLException e) { - // There was an exception - errorMessage("Unable to initialize OpenAL. Probable cause: " + "OpenAL not supported."); - printStackTrace(e); - throw new LibraryLWJGLOpenAL.Exception(e.getMessage(), LibraryLWJGLOpenAL.Exception.CREATE); - } - - // Let user know if the library loaded properly - if (errors) - importantMessage("OpenAL did not initialize properly!"); - else - message("OpenAL initialized."); - - // Listener is at the origin, facing along the z axis, no velocity: - listenerPositionAL = BufferUtils.createFloatBuffer(3) - .put(new float[] { listener.position.x, listener.position.y, listener.position.z }); - listenerOrientation = BufferUtils.createFloatBuffer(6).put(new float[] { listener.lookAt.x, listener.lookAt.y, - listener.lookAt.z, listener.up.x, listener.up.y, listener.up.z }); - listenerVelocity = BufferUtils.createFloatBuffer(3).put(new float[] { 0.0f, 0.0f, 0.0f }); - - // Flip the buffers, so they can be used: - listenerPositionAL.flip(); - listenerOrientation.flip(); - listenerVelocity.flip(); - - // Pass the buffers to the sound system, and check for potential errors: - AL10.alListener(AL10.AL_POSITION, listenerPositionAL); - errors = checkALError() || errors; - AL10.alListener(AL10.AL_ORIENTATION, listenerOrientation); - errors = checkALError() || errors; - AL10.alListener(AL10.AL_VELOCITY, listenerVelocity); - errors = checkALError() || errors; - - AL10.alDopplerFactor(SoundSystemConfig.getDopplerFactor()); - errors = checkALError() || errors; - - AL10.alDopplerVelocity(SoundSystemConfig.getDopplerVelocity()); - errors = checkALError() || errors; - - // Let user know what caused the above error messages: - if (errors) { - importantMessage("OpenAL did not initialize properly!"); - throw new LibraryLWJGLOpenAL.Exception("Problem encountered " + "while loading OpenAL or " - + "creating the listener. " + "Probable cause: OpenAL not " + "supported", - LibraryLWJGLOpenAL.Exception.CREATE); - } - - super.init(); - - // Check if we can use the AL_PITCH control: - ChannelLWJGLOpenAL channel = (ChannelLWJGLOpenAL) normalChannels.get(1); - try { - AL10.alSourcef(channel.ALSource.get(0), AL10.AL_PITCH, 1.0f); - if (checkALError()) { - alPitchSupported(SET, false); - throw new LibraryLWJGLOpenAL.Exception("OpenAL: AL_PITCH not " + "supported.", - LibraryLWJGLOpenAL.Exception.NO_AL_PITCH); - } else { - alPitchSupported(SET, true); - } - } catch (java.lang.Exception e) { - alPitchSupported(SET, false); - throw new LibraryLWJGLOpenAL.Exception("OpenAL: AL_PITCH not " + "supported.", - LibraryLWJGLOpenAL.Exception.NO_AL_PITCH); - } - } - - /** - * Checks if the OpenAL library type is compatible. - * - * @return True or false. - */ - public static boolean libraryCompatible() { - if (AL.isCreated()) - return true; - - try { - AL.create(); - } catch (java.lang.Exception e) { - return false; - } - - try { - AL.destroy(); - } catch (java.lang.Exception e) { - } - - return true; - } - - /** - * Creates a new channel of the specified type (normal or streaming). Possible - * values for channel type can be found in the - * {@link paulscode.sound.SoundSystemConfig SoundSystemConfig} class. - * - * @param type Type of channel. - */ - @Override - protected Channel createChannel(int type) { - ChannelLWJGLOpenAL channel; - IntBuffer ALSource; - - ALSource = BufferUtils.createIntBuffer(1); - try { - AL10.alGenSources(ALSource); - } catch (java.lang.Exception e) { - AL10.alGetError(); - return null; // no more voices left - } - - if (AL10.alGetError() != AL10.AL_NO_ERROR) - return null; - - channel = new ChannelLWJGLOpenAL(type, ALSource); - return channel; - } - - /** - * Stops all sources, shuts down OpenAL, and removes references to all - * instantiated objects. - */ - @Override - public void cleanup() { - super.cleanup(); - - Set keys = bufferMap.keySet(); - Iterator iter = keys.iterator(); - String filename; - IntBuffer buffer; - - // loop through and clear all sound buffers: - while (iter.hasNext()) { - filename = iter.next(); - buffer = ALBufferMap.get(filename); - if (buffer != null) { - AL10.alDeleteBuffers(buffer); - checkALError(); - buffer.clear(); - } - } - - bufferMap.clear(); - AL.destroy(); - - bufferMap = null; - listenerPositionAL = null; - listenerOrientation = null; - listenerVelocity = null; - } - - /** - * Pre-loads a sound into memory. - * - * @param filenameURL Filename/URL of the sound file to load. - * @return True if the sound loaded properly. - */ - @Override - public boolean loadSound(FilenameURL filenameURL) { - // Make sure the buffer map exists: - if (bufferMap == null) { - bufferMap = new HashMap(); - importantMessage("Buffer Map was null in method 'loadSound'"); - } - // Make sure the OpenAL buffer map exists: - if (ALBufferMap == null) { - ALBufferMap = new HashMap(); - importantMessage("Open AL Buffer Map was null in method" + "'loadSound'"); - } - - // make sure they gave us a filename: - if (errorCheck(filenameURL == null, "Filename/URL not specified in method 'loadSound'")) - return false; - - // check if it is already loaded: - if (bufferMap.get(filenameURL.getFilename()) != null) - return true; - - ICodec codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - if (errorCheck(codec == null, - "No codec found for file '" + filenameURL.getFilename() + "' in method 'loadSound'")) - return false; - codec.reverseByteOrder(true); - - URL url = filenameURL.getURL(); - if (errorCheck(url == null, "Unable to open file '" + filenameURL.getFilename() + "' in method 'loadSound'")) - return false; - - codec.initialize(url); - SoundBuffer buffer = codec.readAll(); - codec.cleanup(); - codec = null; - if (errorCheck(buffer == null, "Sound buffer null in method 'loadSound'")) - return false; - - bufferMap.put(filenameURL.getFilename(), buffer); - - AudioFormat audioFormat = buffer.audioFormat; - int soundFormat = 0; - if (audioFormat.getChannels() == 1) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_MONO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_MONO16; - } else { - errorMessage("Illegal sample size in method 'loadSound'"); - return false; - } - } else if (audioFormat.getChannels() == 2) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_STEREO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_STEREO16; - } else { - errorMessage("Illegal sample size in method 'loadSound'"); - return false; - } - } else { - errorMessage("File neither mono nor stereo in method " + "'loadSound'"); - return false; - } - - IntBuffer intBuffer = BufferUtils.createIntBuffer(1); - AL10.alGenBuffers(intBuffer); - if (errorCheck(AL10.alGetError() != AL10.AL_NO_ERROR, - "alGenBuffers error when loading " + filenameURL.getFilename())) - return false; - -// AL10.alBufferData( intBuffer.get( 0 ), soundFormat, -// ByteBuffer.wrap( buffer.audioData ), -// (int) audioFormat.getSampleRate() ); - AL10.alBufferData(intBuffer.get(0), soundFormat, - (ByteBuffer) BufferUtils.createByteBuffer(buffer.audioData.length).put(buffer.audioData).flip(), - (int) audioFormat.getSampleRate()); - - if (errorCheck(AL10.alGetError() != AL10.AL_NO_ERROR, - "alBufferData error when loading " + filenameURL.getFilename())) - - if (errorCheck(intBuffer == null, "Sound buffer was not created for " + filenameURL.getFilename())) - return false; - - ALBufferMap.put(filenameURL.getFilename(), intBuffer); - - return true; - } - - /** - * Saves the specified sample data, under the specified identifier. This - * identifier can be later used in place of 'filename' parameters to reference - * the sample data. - * - * @param buffer the sample data and audio format to save. - * @param identifier What to call the sample. - * @return True if there weren't any problems. - */ - @Override - public boolean loadSound(SoundBuffer buffer, String identifier) { - // Make sure the buffer map exists: - if (bufferMap == null) { - bufferMap = new HashMap(); - importantMessage("Buffer Map was null in method 'loadSound'"); - } - // Make sure the OpenAL buffer map exists: - if (ALBufferMap == null) { - ALBufferMap = new HashMap(); - importantMessage("Open AL Buffer Map was null in method" + "'loadSound'"); - } - - // make sure they gave us an identifier: - if (errorCheck(identifier == null, "Identifier not specified in method 'loadSound'")) - return false; - - // check if it is already loaded: - if (bufferMap.get(identifier) != null) - return true; - - if (errorCheck(buffer == null, "Sound buffer null in method 'loadSound'")) - return false; - - bufferMap.put(identifier, buffer); - - AudioFormat audioFormat = buffer.audioFormat; - int soundFormat = 0; - if (audioFormat.getChannels() == 1) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_MONO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_MONO16; - } else { - errorMessage("Illegal sample size in method 'loadSound'"); - return false; - } - } else if (audioFormat.getChannels() == 2) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_STEREO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_STEREO16; - } else { - errorMessage("Illegal sample size in method 'loadSound'"); - return false; - } - } else { - errorMessage("File neither mono nor stereo in method " + "'loadSound'"); - return false; - } - - IntBuffer intBuffer = BufferUtils.createIntBuffer(1); - AL10.alGenBuffers(intBuffer); - if (errorCheck(AL10.alGetError() != AL10.AL_NO_ERROR, "alGenBuffers error when saving " + identifier)) - return false; - -// AL10.alBufferData( intBuffer.get( 0 ), soundFormat, -// ByteBuffer.wrap( buffer.audioData ), -// (int) audioFormat.getSampleRate() ); - AL10.alBufferData(intBuffer.get(0), soundFormat, - (ByteBuffer) BufferUtils.createByteBuffer(buffer.audioData.length).put(buffer.audioData).flip(), - (int) audioFormat.getSampleRate()); - - if (errorCheck(AL10.alGetError() != AL10.AL_NO_ERROR, "alBufferData error when saving " + identifier)) - - if (errorCheck(intBuffer == null, "Sound buffer was not created for " + identifier)) - return false; - - ALBufferMap.put(identifier, intBuffer); - - return true; - } - - /** - * Removes a pre-loaded sound from memory. This is a good method to use for - * freeing up memory after a large sound file is no longer needed. NOTE: the - * source will remain in memory after this method has been called, for as long - * as the sound is attached to an existing source. - * - * @param filename Filename/identifier of the sound file to unload. - */ - @Override - public void unloadSound(String filename) { - ALBufferMap.remove(filename); - super.unloadSound(filename); - } - - /** - * Sets the overall volume to the specified value, affecting all sources. - * - * @param value New volume, float value ( 0.0f - 1.0f ). - */ - @Override - public void setMasterVolume(float value) { - super.setMasterVolume(value); - - AL10.alListenerf(AL10.AL_GAIN, value); - checkALError(); - } - - /** - * Creates a new source and places it into the source map. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will load the sound in pieces rather - * than all at once. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - @Override - public void newSource(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float x, float y, float z, int attModel, float distOrRoll) { - IntBuffer myBuffer = null; - if (!toStream) { - // Grab the sound buffer for this file: - myBuffer = ALBufferMap.get(filenameURL.getFilename()); - - // if not found, try loading it: - if (myBuffer == null) { - if (!loadSound(filenameURL)) { - errorMessage("Source '" + sourcename + "' was not created " - + "because an error occurred while loading " + filenameURL.getFilename()); - return; - } - } - - // try and grab the sound buffer again: - myBuffer = ALBufferMap.get(filenameURL.getFilename()); - // see if it was there this time: - if (myBuffer == null) { - errorMessage("Source '" + sourcename + "' was not created " - + "because a sound buffer was not found for " + filenameURL.getFilename()); - return; - } - } - SoundBuffer buffer = null; - - if (!toStream) { - // Grab the audio data for this file: - buffer = bufferMap.get(filenameURL.getFilename()); - // if not found, try loading it: - if (buffer == null) { - if (!loadSound(filenameURL)) { - errorMessage("Source '" + sourcename + "' was not created " - + "because an error occurred while loading " + filenameURL.getFilename()); - return; - } - } - // try and grab the sound buffer again: - buffer = bufferMap.get(filenameURL.getFilename()); - // see if it was there this time: - if (buffer == null) { - errorMessage("Source '" + sourcename + "' was not created " + "because audio data was not found for " - + filenameURL.getFilename()); - return; - } - } - - sourceMap.put(sourcename, new SourceLWJGLOpenAL(listenerPositionAL, myBuffer, priority, toStream, toLoop, - sourcename, filenameURL, buffer, x, y, z, attModel, distOrRoll, false)); - } - - /** - * Opens a direct line for streaming audio data. - * - * @param audioFormat Format that the data will be in. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - */ - @Override - public void rawDataStream(AudioFormat audioFormat, boolean priority, String sourcename, float x, float y, float z, - int attModel, float distOrRoll) { - sourceMap.put(sourcename, new SourceLWJGLOpenAL(listenerPositionAL, audioFormat, priority, sourcename, x, y, z, - attModel, distOrRoll)); - } - - /** - * Creates and immediately plays a new source. - * - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will load the sound in pieces rather - * than all at once. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may not - * use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this source. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, depending on - * the value of "attmodel". - * @param temporary Whether or not this source should be removed after it - * finishes playing. - */ - @Override - public void quickPlay(boolean priority, boolean toStream, boolean toLoop, String sourcename, - FilenameURL filenameURL, float x, float y, float z, int attModel, float distOrRoll, boolean temporary) { - IntBuffer myBuffer = null; - if (!toStream) { - // Grab the sound buffer for this file: - myBuffer = ALBufferMap.get(filenameURL.getFilename()); - // if not found, try loading it: - if (myBuffer == null) - loadSound(filenameURL); - // try and grab the sound buffer again: - myBuffer = ALBufferMap.get(filenameURL.getFilename()); - // see if it was there this time: - if (myBuffer == null) { - errorMessage("Sound buffer was not created for " + filenameURL.getFilename()); - return; - } - } - - SoundBuffer buffer = null; - - if (!toStream) { - // Grab the sound buffer for this file: - buffer = bufferMap.get(filenameURL.getFilename()); - // if not found, try loading it: - if (buffer == null) { - if (!loadSound(filenameURL)) { - errorMessage("Source '" + sourcename + "' was not created " - + "because an error occurred while loading " + filenameURL.getFilename()); - return; - } - } - // try and grab the sound buffer again: - buffer = bufferMap.get(filenameURL.getFilename()); - // see if it was there this time: - if (buffer == null) { - errorMessage("Source '" + sourcename + "' was not created " + "because audio data was not found for " - + filenameURL.getFilename()); - return; - } - } - SourceLWJGLOpenAL s = new SourceLWJGLOpenAL(listenerPositionAL, myBuffer, priority, toStream, toLoop, - sourcename, filenameURL, buffer, x, y, z, attModel, distOrRoll, false); - - sourceMap.put(sourcename, s); - play(s); - if (temporary) - s.setTemporary(true); - } - - /** - * Creates sources based on the source map provided. - * - * @param srcMap Sources to copy. - */ - @Override - public void copySources(HashMap srcMap) { - if (srcMap == null) - return; - Set keys = srcMap.keySet(); - Iterator iter = keys.iterator(); - String sourcename; - Source source; - - // Make sure the buffer map exists: - if (bufferMap == null) { - bufferMap = new HashMap(); - importantMessage("Buffer Map was null in method 'copySources'"); - } - // Make sure the OpenAL buffer map exists: - if (ALBufferMap == null) { - ALBufferMap = new HashMap(); - importantMessage("Open AL Buffer Map was null in method" + "'copySources'"); - } - - // remove any existing sources before starting: - sourceMap.clear(); - - SoundBuffer buffer; - // loop through and copy all the sources: - while (iter.hasNext()) { - sourcename = iter.next(); - source = srcMap.get(sourcename); - if (source != null) { - buffer = null; - if (!source.toStream) { - loadSound(source.filenameURL); - buffer = bufferMap.get(source.filenameURL.getFilename()); - } - if (source.toStream || buffer != null) - sourceMap.put(sourcename, new SourceLWJGLOpenAL(listenerPositionAL, - ALBufferMap.get(source.filenameURL.getFilename()), source, buffer)); - } - } - } - - /** - * Changes the listener's position. - * - * @param x Destination X coordinate. - * @param y Destination Y coordinate. - * @param z Destination Z coordinate. - */ - @Override - public void setListenerPosition(float x, float y, float z) { - super.setListenerPosition(x, y, z); - - listenerPositionAL.put(0, x); - listenerPositionAL.put(1, y); - listenerPositionAL.put(2, z); - - // Update OpenAL listener position: - AL10.alListener(AL10.AL_POSITION, listenerPositionAL); - // Check for errors: - checkALError(); - } - - /** - * Changes the listeners orientation to the specified 'angle' radians - * counterclockwise around the y-Axis. - * - * @param angle Radians. - */ - @Override - public void setListenerAngle(float angle) { - super.setListenerAngle(angle); - - listenerOrientation.put(0, listener.lookAt.x); - listenerOrientation.put(2, listener.lookAt.z); - - // Update OpenAL listener orientation: - AL10.alListener(AL10.AL_ORIENTATION, listenerOrientation); - // Check for errors: - checkALError(); - } - - /** - * Changes the listeners orientation using the specified coordinates. - * - * @param lookX X element of the look-at direction. - * @param lookY Y element of the look-at direction. - * @param lookZ Z element of the look-at direction. - * @param upX X element of the up direction. - * @param upY Y element of the up direction. - * @param upZ Z element of the up direction. - */ - @Override - public void setListenerOrientation(float lookX, float lookY, float lookZ, float upX, float upY, float upZ) { - super.setListenerOrientation(lookX, lookY, lookZ, upX, upY, upZ); - listenerOrientation.put(0, lookX); - listenerOrientation.put(1, lookY); - listenerOrientation.put(2, lookZ); - listenerOrientation.put(3, upX); - listenerOrientation.put(4, upY); - listenerOrientation.put(5, upZ); - AL10.alListener(AL10.AL_ORIENTATION, listenerOrientation); - checkALError(); - } - - /** - * Changes the listeners position and orientation using the specified listener - * data. - * - * @param l Listener data to use. - */ - @Override - public void setListenerData(ListenerData l) { - super.setListenerData(l); - - listenerPositionAL.put(0, l.position.x); - listenerPositionAL.put(1, l.position.y); - listenerPositionAL.put(2, l.position.z); - AL10.alListener(AL10.AL_POSITION, listenerPositionAL); - checkALError(); - - listenerOrientation.put(0, l.lookAt.x); - listenerOrientation.put(1, l.lookAt.y); - listenerOrientation.put(2, l.lookAt.z); - listenerOrientation.put(3, l.up.x); - listenerOrientation.put(4, l.up.y); - listenerOrientation.put(5, l.up.z); - AL10.alListener(AL10.AL_ORIENTATION, listenerOrientation); - checkALError(); - - listenerVelocity.put(0, l.velocity.x); - listenerVelocity.put(1, l.velocity.y); - listenerVelocity.put(2, l.velocity.z); - AL10.alListener(AL10.AL_VELOCITY, listenerVelocity); - checkALError(); - } - - /** - * Sets the listener's velocity, for use in Doppler effect. - * - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - @Override - public void setListenerVelocity(float x, float y, float z) { - super.setListenerVelocity(x, y, z); - - listenerVelocity.put(0, listener.velocity.x); - listenerVelocity.put(1, listener.velocity.y); - listenerVelocity.put(2, listener.velocity.z); - AL10.alListener(AL10.AL_VELOCITY, listenerVelocity); - } - - /** - * The Doppler parameters have changed. - */ - @Override - public void dopplerChanged() { - super.dopplerChanged(); - - AL10.alDopplerFactor(SoundSystemConfig.getDopplerFactor()); - checkALError(); - AL10.alDopplerVelocity(SoundSystemConfig.getDopplerVelocity()); - checkALError(); - } - - /** - * Checks for OpenAL errors, and prints a message if there is an error. - * - * @return True if there was an error, False if not. - */ - private boolean checkALError() { - switch (AL10.alGetError()) { - case AL10.AL_NO_ERROR: - return false; - case AL10.AL_INVALID_NAME: - errorMessage("Invalid name parameter."); - return true; - case AL10.AL_INVALID_ENUM: - errorMessage("Invalid parameter."); - return true; - case AL10.AL_INVALID_VALUE: - errorMessage("Invalid enumerated parameter value."); - return true; - case AL10.AL_INVALID_OPERATION: - errorMessage("Illegal call."); - return true; - case AL10.AL_OUT_OF_MEMORY: - errorMessage("Unable to allocate memory."); - return true; - default: - errorMessage("An unrecognized error occurred."); - return true; - } - } - - /** - * Whether or not the AL_PITCH control is supported. - * - * @return True if AL_PITCH is supported. - */ - public static boolean alPitchSupported() { - return alPitchSupported(GET, XXX); - } - - /** - * Sets or returns the value of boolean 'alPitchSupported'. - * - * @param action Action to perform (GET or SET). - * @param value New value if action is SET, otherwise XXX. - * @return value of boolean 'alPitchSupported'. - */ - private static synchronized boolean alPitchSupported(boolean action, boolean value) { - if (action == SET) - alPitchSupported = value; - return alPitchSupported; - } - - /** - * Returns the short title of this library type. - * - * @return A short title. - */ - public static String getTitle() { - return "LWJGL OpenAL"; - } - - /** - * Returns a longer description of this library type. - * - * @return A longer description. - */ - public static String getDescription() { - return "The LWJGL binding of OpenAL. For more information, see " + "http://www.lwjgl.org"; - } - - /** - * Returns the name of the class. - * - * @return "Library" + library title. - */ - @Override - public String getClassName() { - return "LibraryLWJGLOpenAL"; - } - - /** - * The LibraryLWJGLOpenAL.Exception class provides library-specific error - * information. - */ - public static class Exception extends SoundSystemException { - private static final long serialVersionUID = -7502452059037798035L; - /** - * Global identifier for an exception during AL.create(). Probably means that - * OpenAL is not supported. - */ - public static final int CREATE = 101; - /** - * Global identifier for an invalid name parameter in OpenAL. - */ - public static final int INVALID_NAME = 102; - /** - * Global identifier for an invalid parameter in OpenAL. - */ - public static final int INVALID_ENUM = 103; - /** - * Global identifier for an invalid enumerated parameter value in OpenAL. - */ - public static final int INVALID_VALUE = 104; - /** - * Global identifier for an illegal call in OpenAL. - */ - public static final int INVALID_OPERATION = 105; - /** - * Global identifier for OpenAL out of memory. - */ - public static final int OUT_OF_MEMORY = 106; - /** - * Global identifier for an exception while creating the OpenAL Listener. - */ - public static final int LISTENER = 107; - /** - * Global identifier for OpenAL AL_PITCH not supported. - */ - public static final int NO_AL_PITCH = 108; - - /** - * Constructor: Generates a standard "unknown error" exception with the - * specified message. - * - * @param message A brief description of the problem that occurred. - */ - public Exception(String message) { - super(message); - } - - /** - * Constructor: Generates an exception of the specified type, with the specified - * message. - * - * @param message A brief description of the problem that occurred. - * @param type Identifier indicating they type of error. - */ - public Exception(String message, int type) { - super(message, type); - } - } -} diff --git a/src/lwjgl/java/paulscode/sound/libraries/SourceLWJGLOpenAL.java b/src/lwjgl/java/paulscode/sound/libraries/SourceLWJGLOpenAL.java deleted file mode 100644 index f428782..0000000 --- a/src/lwjgl/java/paulscode/sound/libraries/SourceLWJGLOpenAL.java +++ /dev/null @@ -1,692 +0,0 @@ -package paulscode.sound.libraries; - -import java.nio.IntBuffer; -import java.nio.FloatBuffer; -import java.util.LinkedList; -import javax.sound.sampled.AudioFormat; - -// From the lwjgl library, http://www.lwjgl.org -import org.lwjgl.BufferUtils; -import org.lwjgl.openal.AL10; - -import paulscode.sound.Channel; -import paulscode.sound.FilenameURL; -import paulscode.sound.Source; -import paulscode.sound.SoundBuffer; -import paulscode.sound.SoundSystemConfig; - -/** - * The SourceLWJGLOpenAL class provides an interface to the lwjgl binding of - * OpenAL.
- *
- * This software is based on or using the LWJGL Lightweight Java Gaming Library - * available from http://www.lwjgl.org/.

- *
- * LWJGL License:
- * Copyright (c) 2002-2008 Lightweight Java Game Library Project All rights - * reserved.
- * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - *
- * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution.
- * * Neither the name of 'Light Weight Java Game Library' nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE.
- *
- *
- *
SoundSystem LibraryLWJGLOpenAL License:
- *
- * You are free to use this library for any purpose, commercial or - * otherwise. You may modify this library or source code, and distribute it any - * way you like, provided the following conditions are met:
- * 1) You must abide by the conditions of the aforementioned LWJGL License.
- * 2) You may not falsely claim to be the author of this library or any - * unmodified portion of it.
- * 3) You may not copyright this library or a modified version of it and then - * sue me for copyright infringement.
- * 4) If you modify the source code, you must clearly document the changes made - * before redistributing the modified source code, so other users know it is not - * the original code.
- * 5) You are not required to give me credit for this library in any derived - * work, but if you do, you must also mention my website: - * http://www.paulscode.com
- * 6) I the author will not be responsible for any damages (physical, financial, - * or otherwise) caused by the use if this library or any part of it.
- * 7) I the author do not guarantee, warrant, or make any representations, - * either expressed or implied, regarding the use of this library or any part of - * it.
- *
- * Author: Paul Lamb
- * http://www.paulscode.com
- */ -public class SourceLWJGLOpenAL extends Source { - /** - * The source's basic Channel type-cast to a ChannelLWJGLOpenAL. - */ - private ChannelLWJGLOpenAL channelOpenAL = (ChannelLWJGLOpenAL) channel; - - /** - * OpenAL IntBuffer sound-buffer identifier for this source if it is a normal - * source. - */ - private IntBuffer myBuffer; - - /** - * FloatBuffer containing the listener's 3D coordinates. - */ - private FloatBuffer listenerPosition; - - /** - * FloatBuffer containing the source's 3D coordinates. - */ - private FloatBuffer sourcePosition; - - /** - * FloatBuffer containing the source's velocity vector. - */ - private FloatBuffer sourceVelocity; - - /** - * Constructor: Creates a new source using the specified parameters. - * - * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. - * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a - * new normal source. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will create a streaming source. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may - * not use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this - * source. - * @param soundBuffer Buffer containing audio data, or null if not loaded - * yet. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, - * depending on the value of 'att'. - * @param temporary Whether or not to remove this source after it - * finishes playing. - */ - public SourceLWJGLOpenAL(FloatBuffer listenerPosition, IntBuffer myBuffer, boolean priority, boolean toStream, - boolean toLoop, String sourcename, FilenameURL filenameURL, SoundBuffer soundBuffer, float x, float y, - float z, int attModel, float distOrRoll, boolean temporary) { - super(priority, toStream, toLoop, sourcename, filenameURL, soundBuffer, x, y, z, attModel, distOrRoll, - temporary); - if (codec != null) - codec.reverseByteOrder(true); - this.listenerPosition = listenerPosition; - this.myBuffer = myBuffer; - libraryType = LibraryLWJGLOpenAL.class; - pitch = 1.0f; - resetALInformation(); - } - - /** - * Constructor: Creates a new source matching the specified source. - * - * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. - * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a - * new normal source. - * @param old Source to copy information from. - * @param soundBuffer Buffer containing audio data, or null if not loaded - * yet. - */ - public SourceLWJGLOpenAL(FloatBuffer listenerPosition, IntBuffer myBuffer, Source old, SoundBuffer soundBuffer) { - super(old, soundBuffer); - if (codec != null) - codec.reverseByteOrder(true); - this.listenerPosition = listenerPosition; - this.myBuffer = myBuffer; - libraryType = LibraryLWJGLOpenAL.class; - pitch = 1.0f; - resetALInformation(); - } - - /** - * Constructor: Creates a new streaming source that will be directly fed with - * raw audio data. - * - * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. - * @param audioFormat Format that the data will be in. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param sourcename A unique identifier for this source. Two sources may - * not use the same sourcename. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, - * depending on the value of 'att'. - */ - public SourceLWJGLOpenAL(FloatBuffer listenerPosition, AudioFormat audioFormat, boolean priority, String sourcename, - float x, float y, float z, int attModel, float distOrRoll) { - super(audioFormat, priority, sourcename, x, y, z, attModel, distOrRoll); - this.listenerPosition = listenerPosition; - libraryType = LibraryLWJGLOpenAL.class; - pitch = 1.0f; - resetALInformation(); - } - - /** - * Shuts the source down and removes references to all instantiated objects. - */ - @Override - public void cleanup() { - - super.cleanup(); - } - - /** - * Changes the peripheral information about the source using the specified - * parameters. - * - * @param listenerPosition FloatBuffer containing the listener's 3D coordinates. - * @param myBuffer OpenAL IntBuffer sound-buffer identifier to use for a - * new normal source. - * @param priority Setting this to true will prevent other sounds from - * overriding this one. - * @param toStream Setting this to true will create a streaming source. - * @param toLoop Should this source loop, or play only once. - * @param sourcename A unique identifier for this source. Two sources may - * not use the same sourcename. - * @param filenameURL Filename/URL of the sound file to play at this - * source. - * @param soundBuffer Buffer containing audio data, or null if not loaded - * yet. - * @param x X position for this source. - * @param y Y position for this source. - * @param z Z position for this source. - * @param attModel Attenuation model to use. - * @param distOrRoll Either the fading distance or rolloff factor, - * depending on the value of 'att'. - * @param temporary Whether or not to remove this source after it - * finishes playing. - */ - public void changeSource(FloatBuffer listenerPosition, IntBuffer myBuffer, boolean priority, boolean toStream, - boolean toLoop, String sourcename, FilenameURL filenameURL, SoundBuffer soundBuffer, float x, float y, - float z, int attModel, float distOrRoll, boolean temporary) { - super.changeSource(priority, toStream, toLoop, sourcename, filenameURL, soundBuffer, x, y, z, attModel, - distOrRoll, temporary); - this.listenerPosition = listenerPosition; - this.myBuffer = myBuffer; - pitch = 1.0f; - resetALInformation(); - } - - /** - * Removes the next filename from the sound sequence queue and assigns it to - * this source. This method has no effect on non-streaming sources. This method - * is used internally by SoundSystem, and it is unlikely that the user will ever - * need to use it. - * - * @return True if there was something in the queue. - */ - @Override - public boolean incrementSoundSequence() { - if (!toStream) { - errorMessage("Method 'incrementSoundSequence' may only be used " + "for streaming sources."); - return false; - } - synchronized (soundSequenceLock) { - if (soundSequenceQueue != null && soundSequenceQueue.size() > 0) { - filenameURL = soundSequenceQueue.remove(0); - if (codec != null) - codec.cleanup(); - codec = SoundSystemConfig.getCodec(filenameURL.getFilename()); - if (codec != null) { - codec.reverseByteOrder(true); - if (codec.getAudioFormat() == null) - codec.initialize(filenameURL.getURL()); - - AudioFormat audioFormat = codec.getAudioFormat(); - - if (audioFormat == null) { - errorMessage("Audio Format null in method " + "'incrementSoundSequence'"); - return false; - } - - int soundFormat = 0; - if (audioFormat.getChannels() == 1) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_MONO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_MONO16; - } else { - errorMessage("Illegal sample size in method " + "'incrementSoundSequence'"); - return false; - } - } else if (audioFormat.getChannels() == 2) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_STEREO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_STEREO16; - } else { - errorMessage("Illegal sample size in method " + "'incrementSoundSequence'"); - return false; - } - } else { - errorMessage("Audio data neither mono nor stereo in " + "method 'incrementSoundSequence'"); - return false; - } - - // Let the channel know what format and sample rate to use: - channelOpenAL.setFormat(soundFormat, (int) audioFormat.getSampleRate()); - preLoad = true; - } - return true; - } - } - return false; - } - - /** - * Called every time the listener's position or orientation changes. - */ - @Override - public void listenerMoved() { - positionChanged(); - } - - /** - * Moves the source to the specified position. - * - * @param x X coordinate to move to. - * @param y Y coordinate to move to. - * @param z Z coordinate to move to. - */ - @Override - public void setPosition(float x, float y, float z) { - super.setPosition(x, y, z); - - // Make sure OpenAL information has been created - if (sourcePosition == null) - resetALInformation(); - else - positionChanged(); - - // put the new position information into the buffer: - sourcePosition.put(0, x); - sourcePosition.put(1, y); - sourcePosition.put(2, z); - - // make sure we are assigned to a channel: - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - // move the source: - AL10.alSource(channelOpenAL.ALSource.get(0), AL10.AL_POSITION, sourcePosition); - checkALError(); - } - } - - /** - * Recalculates the distance from the listner and the gain. - */ - @Override - public void positionChanged() { - calculateDistance(); - calculateGain(); - - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_GAIN, - (gain * sourceVolume * (float) Math.abs(fadeOutGain) * fadeInGain)); - checkALError(); - } - checkPitch(); - } - - /** - * Checks the source's pitch. - */ - private void checkPitch() { - if (channel != null && channel.attachedSource == this && LibraryLWJGLOpenAL.alPitchSupported() - && channelOpenAL != null && channelOpenAL.ALSource != null) { - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_PITCH, pitch); - checkALError(); - } - } - - /** - * Sets whether this source should loop or only play once. - * - * @param lp True or false. - */ - @Override - public void setLooping(boolean lp) { - super.setLooping(lp); - - // make sure we are assigned to a channel: - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - if (lp) - AL10.alSourcei(channelOpenAL.ALSource.get(0), AL10.AL_LOOPING, AL10.AL_TRUE); - else - AL10.alSourcei(channelOpenAL.ALSource.get(0), AL10.AL_LOOPING, AL10.AL_FALSE); - checkALError(); - } - } - - /** - * Sets this source's attenuation model. - * - * @param model Attenuation model to use. - */ - @Override - public void setAttenuation(int model) { - super.setAttenuation(model); - // make sure we are assigned to a channel: - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - // attenuation changed, so update the rolloff factor accordingly - if (model == SoundSystemConfig.ATTENUATION_ROLLOFF) - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, distOrRoll); - else - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, 0.0f); - checkALError(); - } - } - - /** - * Sets this source's fade distance or rolloff factor, depending on the - * attenuation model. - * - * @param dr New value for fade distance or rolloff factor. - */ - @Override - public void setDistOrRoll(float dr) { - super.setDistOrRoll(dr); - // make sure we are assigned to a channel: - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - // if we are using rolloff attenuation, then dr is a rolloff factor: - if (attModel == SoundSystemConfig.ATTENUATION_ROLLOFF) - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, dr); - else - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, 0.0f); - checkALError(); - } - } - - /** - * Sets this source's velocity, for use in Doppler effect. - * - * @param x Velocity along world x-axis. - * @param y Velocity along world y-axis. - * @param z Velocity along world z-axis. - */ - @Override - public void setVelocity(float x, float y, float z) { - super.setVelocity(x, y, z); - - sourceVelocity = BufferUtils.createFloatBuffer(3).put(new float[] { x, y, z }); - sourceVelocity.flip(); - // make sure we are assigned to a channel: - if (channel != null && channel.attachedSource == this && channelOpenAL != null - && channelOpenAL.ALSource != null) { - AL10.alSource(channelOpenAL.ALSource.get(0), AL10.AL_VELOCITY, sourceVelocity); - checkALError(); - } - } - - /** - * Manually sets this source's pitch. - * - * @param value A float value ( 0.5f - 2.0f ). - */ - @Override - public void setPitch(float value) { - super.setPitch(value); - checkPitch(); - } - - /** - * Plays the source on the specified channel. - * - * @param c Channel to play on. - */ - @Override - public void play(Channel c) { - if (!active()) { - if (toLoop) - toPlay = true; - return; - } - - if (c == null) { - errorMessage("Unable to play source, because channel was null"); - return; - } - - boolean newChannel = (channel != c); - if (channel != null && channel.attachedSource != this) - newChannel = true; - - boolean wasPaused = paused(); - - super.play(c); - - channelOpenAL = (ChannelLWJGLOpenAL) channel; - - // Make sure the channel exists: - // check if we are already on this channel: - if (newChannel) { - setPosition(position.x, position.y, position.z); - checkPitch(); - - // Send the source's attributes to the channel: - if (channelOpenAL != null && channelOpenAL.ALSource != null) { - if (LibraryLWJGLOpenAL.alPitchSupported()) { - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_PITCH, pitch); - checkALError(); - } - AL10.alSource(channelOpenAL.ALSource.get(0), AL10.AL_POSITION, sourcePosition); - checkALError(); - - AL10.alSource(channelOpenAL.ALSource.get(0), AL10.AL_VELOCITY, sourceVelocity); - - checkALError(); - - if (attModel == SoundSystemConfig.ATTENUATION_ROLLOFF) - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, distOrRoll); - else - AL10.alSourcef(channelOpenAL.ALSource.get(0), AL10.AL_ROLLOFF_FACTOR, 0.0f); - checkALError(); - - if (toLoop && (!toStream)) - AL10.alSourcei(channelOpenAL.ALSource.get(0), AL10.AL_LOOPING, AL10.AL_TRUE); - else - AL10.alSourcei(channelOpenAL.ALSource.get(0), AL10.AL_LOOPING, AL10.AL_FALSE); - checkALError(); - } - if (!toStream) { - // This is not a streaming source, so make sure there is - // a sound buffer loaded to play: - if (myBuffer == null) { - errorMessage("No sound buffer to play"); - return; - } - - channelOpenAL.attachBuffer(myBuffer); - } - } - - // See if we are already playing: - if (!playing()) { - if (toStream && !wasPaused) { - if (codec == null) { - errorMessage("Decoder null in method 'play'"); - return; - } - if (codec.getAudioFormat() == null) - codec.initialize(filenameURL.getURL()); - - AudioFormat audioFormat = codec.getAudioFormat(); - - if (audioFormat == null) { - errorMessage("Audio Format null in method 'play'"); - return; - } - - int soundFormat = 0; - if (audioFormat.getChannels() == 1) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_MONO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_MONO16; - } else { - errorMessage("Illegal sample size in method 'play'"); - return; - } - } else if (audioFormat.getChannels() == 2) { - if (audioFormat.getSampleSizeInBits() == 8) { - soundFormat = AL10.AL_FORMAT_STEREO8; - } else if (audioFormat.getSampleSizeInBits() == 16) { - soundFormat = AL10.AL_FORMAT_STEREO16; - } else { - errorMessage("Illegal sample size in method 'play'"); - return; - } - } else { - errorMessage("Audio data neither mono nor stereo in " + "method 'play'"); - return; - } - - // Let the channel know what format and sample rate to use: - channelOpenAL.setFormat(soundFormat, (int) audioFormat.getSampleRate()); - preLoad = true; - } - channel.play(); - if (pitch != 1.0f) - checkPitch(); - } - } - - /** - * Queues up the initial stream-buffers for the stream. - * - * @return False if the end of the stream was reached. - */ - @Override - public boolean preLoad() { - if (codec == null) - return false; - - codec.initialize(filenameURL.getURL()); - LinkedList preLoadBuffers = new LinkedList(); - for (int i = 0; i < SoundSystemConfig.getNumberStreamingBuffers(); i++) { - soundBuffer = codec.read(); - - if (soundBuffer == null || soundBuffer.audioData == null) - break; - - preLoadBuffers.add(soundBuffer.audioData); - } - positionChanged(); - - channel.preLoadBuffers(preLoadBuffers); - - preLoad = false; - return true; - } - - /** - * Resets all the information OpenAL uses to play this source. - */ - private void resetALInformation() { - // Create buffers for the source's position and velocity - sourcePosition = BufferUtils.createFloatBuffer(3).put(new float[] { position.x, position.y, position.z }); - sourceVelocity = BufferUtils.createFloatBuffer(3).put(new float[] { velocity.x, velocity.y, velocity.z }); - - // flip the buffers, so they can be used: - sourcePosition.flip(); - sourceVelocity.flip(); - - positionChanged(); - } - - /** - * Calculates this source's distance from the listener. - */ - private void calculateDistance() { - if (listenerPosition != null) { - // Calculate the source's distance from the listener: - double dX = position.x - listenerPosition.get(0); - double dY = position.y - listenerPosition.get(1); - double dZ = position.z - listenerPosition.get(2); - distanceFromListener = (float) Math.sqrt(dX * dX + dY * dY + dZ * dZ); - } - } - - /** - * If using linear attenuation, calculates the gain for this source based on its - * distance from the listener. - */ - private void calculateGain() { - // If using linear attenuation, calculate the source's gain: - if (attModel == SoundSystemConfig.ATTENUATION_LINEAR) { - if (distanceFromListener <= 0) { - gain = 1.0f; - } else if (distanceFromListener >= distOrRoll) { - gain = 0.0f; - } else { - gain = 1.0f - (distanceFromListener / distOrRoll); - } - if (gain > 1.0f) - gain = 1.0f; - if (gain < 0.0f) - gain = 0.0f; - } else { - gain = 1.0f; - } - } - - /** - * Checks for OpenAL errors, and prints a message if there is an error. - * - * @return True if there was an error, False if not. - */ - private boolean checkALError() { - switch (AL10.alGetError()) { - case AL10.AL_NO_ERROR: - return false; - case AL10.AL_INVALID_NAME: - errorMessage("Invalid name parameter."); - return true; - case AL10.AL_INVALID_ENUM: - errorMessage("Invalid parameter."); - return true; - case AL10.AL_INVALID_VALUE: - errorMessage("Invalid enumerated parameter value."); - return true; - case AL10.AL_INVALID_OPERATION: - errorMessage("Illegal call."); - return true; - case AL10.AL_OUT_OF_MEMORY: - errorMessage("Unable to allocate memory."); - return true; - default: - errorMessage("An unrecognized error occurred."); - return true; - } - } -} diff --git a/src/main/java/net/minecraft/src/SoundManager.java b/src/main/java/net/minecraft/src/SoundManager.java index a9e3f17..f91cf6d 100644 --- a/src/main/java/net/minecraft/src/SoundManager.java +++ b/src/main/java/net/minecraft/src/SoundManager.java @@ -17,7 +17,7 @@ public class SoundManager { private static List sounds = new ArrayList(); private static int BgMusic = -1; - static String[] music = new String[] {"music.calm1_mp3", "music.calm2_mp3", "music.calm3_mp3", "newMusic.hal1_mp3", "newMusic.hal2_mp3", "newMusic.hal3_mp3", "newMusic.hal4_mp3", "newMusic.nuance1_mp3", "newMusic.nuance2_mp3", "newMusic.piano1_mp3", "newMusic.piano2_mp3", "newMusic.piano3_mp3"}; + static String[] music = new String[] {"music.calm1_ogg", "music.calm2_ogg", "music.calm3_ogg", "newMusic.hal1_ogg", "newMusic.hal2_ogg", "newMusic.hal3_ogg", "newMusic.hal4_ogg", "newMusic.nuance1_ogg", "newMusic.nuance2_ogg", "newMusic.piano1_ogg", "newMusic.piano2_ogg", "newMusic.piano3_ogg"}; public void func_340_a(GameSettings var1) { this.options = var1; @@ -135,7 +135,7 @@ public class SoundManager { } String var7; - var7 = "sounds/" + var1.replace(".", "/") + number + ".mp3"; + var7 = "sounds/" + var1.replace(".", "/") + number + ".ogg"; if(var7 != null && var5 > 0.0F) { if(var5 > 1.0F) { var5 = 1.0F; @@ -172,7 +172,7 @@ public class SoundManager { } String var7; - var7 = "sounds/" + var1.replace(".", "/") + number + ".mp3"; + var7 = "sounds/" + var1.replace(".", "/") + number + ".ogg"; if(var7 != null && var5 > 0.0F) { if(var5 > 1.0F) { var5 = 1.0F; @@ -204,7 +204,7 @@ public class SoundManager { } if(loaded && this.options.soundVolume != 0.0F) { - String var4 = "sounds/" + var1.replace(".", "/") + number + ".mp3"; + String var4 = "sounds/" + var1.replace(".", "/") + number + ".ogg"; if(var4 != null) { if(var2 > 1.0F) { var2 = 1.0F;