Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (107)
games submitted by our members
Games in WIP (535)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: 1 2 3 [4] 5 6
  ignore  |  Print  
  Need a really simple library for playing sounds and music? Try TinySound.  (Read 55448 times)
0 Members and 1 Guest are viewing this topic.
Offline kuusisto

Senior Member


Medals: 13



« Reply #90 - Posted 2012-08-21 05:46:41 »

Any chance we'll see panning functionality in the future of TinySound?
I suppose that's a possibility if I can find a good resource for the math involved, or if I can figure it out for myself.
Offline StumpyStrust
« Reply #91 - Posted 2012-08-21 18:18:03 »

Woot global sound and ty for the complement.

Another thing I ran into while adding sound to the game was having more then one song. I wanted it so when a song ended the next one would start. But you had no methods that would tell me if a sound has ended its playing. The one method called I think playing() always return true if the sound had been played even if it hit the end.

Offline Sammidysam
« Reply #92 - Posted 2012-08-22 03:20:58 »

(Reply to above post)

You can make your own system for that, considering you can calculate minutes:seconds (that is mainly shown when looking at the length of a song) to milliseconds.  Here is the code of the system that I made.  There are 6 songs, and I just wrote down the millisecond length of all of the songs.  Could it be simpler?  Yes, if TinySound let us know when the song ended, but it's still pretty simple to make your own system to playing a new song every time the previous one ends.  By the way, TestMusic[] has 6 elements and it is a Music variable.

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
   public void startLoadingSound(){
      int song = rand.nextInt(6);
      System.out.println(song);
      TestMusic[song].play(false);
      delay(song);
   }
   private void delay(int song){
        Long delay = getDelayTime(song);
        Timer timer = new Timer();
        timer.schedule(new TimerTask(){
           public void run(){
                addSong(rand.nextInt(6));
           }
        }, delay);
   }
   private Long getDelayTime(int song){
      Long time = 0L;
      if(song == 0)time = 82000L;
      if(song == 1)time = 298000L;
      if(song == 2)time = 313000L;
      if(song == 3)time = 265000L;
      if(song == 4)time = 271000L;
      if(song == 5)time = 102000L;
      return time;
   }
   private void addSong(int song){
      System.out.println(song);
      TestMusic[song].play(false);
      delay(song);
   }
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline StumpyStrust
« Reply #93 - Posted 2012-08-22 18:54:58 »

Yup. I was going to code something like that next but decided not to. Sure you can do everything Tiny does yourself but that would defeat the purpose of a library. I am just saying it would be a nice feature to add.

Offline kuusisto

Senior Member


Medals: 13



« Reply #94 - Posted 2012-09-12 04:27:47 »

Yup. I was going to code something like that next but decided not to. Sure you can do everything Tiny does yourself but that would defeat the purpose of a library. I am just saying it would be a nice feature to add.
I apologize for disappearing again for so long.  You make a good point, so I've added a done() method to the Music interface which will tell you when the Music has finished.  I've also fixed Music to stop "playing" when it's finished, as you mentioned the issue with playing() always returning true if you haven't called stop().  Note that you will have to call rewind() to set a Music back to the beginning.  All of these changes are on the streams_and_redesign branch.  Again, sorry for disappearing.  I've had a lot on my plate.
Offline Ultroman

JGO Knight


Medals: 24
Projects: 1


Snappin' at snizzes since '83


« Reply #95 - Posted 2012-09-13 23:24:49 »

The second you make a panning-system, this will become my main sound-library, and though shall get much praise in my credits Cheesy
Oh, and the ability to enable random pitching within a specific range. I'd love that!

- Jonas
Offline kuusisto

Senior Member


Medals: 13



« Reply #96 - Posted 2012-09-23 01:03:33 »

The second you make a panning-system, this will become my main sound-library, and though shall get much praise in my credits Cheesy
Oh, and the ability to enable random pitching within a specific range. I'd love that!
Well, I didn't add random pitching, but I did add panning and it can be found on the streams_and_redesign branch (I'll eventually merge it to the trunk).  Give it a go and see what you think.  I'm not entirely sure how panning is normally implemented, but you can set a pan value in the range [-1.0,1.0].  0.0 plays normally, whereas a negative or positive value shifts a proportional amount of one channel to the opposite.  More specifically, a value of -0.25 will shift 25% of the right channel to the left channel.  Note that panning to the left doesn't change the gain on the original left channel audio at all.  It only affects how much of the right channel is shifted.  The analogous situation goes for panning right. 
Offline Ultroman

JGO Knight


Medals: 24
Projects: 1


Snappin' at snizzes since '83


« Reply #97 - Posted 2012-09-24 16:44:42 »

That's perfect! Just what I needed!

- Jonas
Offline philfrei
« Reply #98 - Posted 2012-10-08 01:15:03 »

Yo, kuusisto!

You can and should (I think) post you library on this wiki:

http://www.java-gaming.org/topics/java-gaming-resources/26897/view.html

I didn't learn until maybe a week ago that *anyone* can edit these wiki screens. Then, it took me until now to remember I had asked about this in terms of your sound library.

Riven has a list of rules posted on the thread to abide by before posting your library. But I think yours qualifies, now that there are several people using it.

"Greetings my friends! We are all interested in the future, for that is where you and I are going to spend the rest of our lives!" -- The Amazing Criswell
Offline miga

Junior Member


Medals: 2
Projects: 1



« Reply #99 - Posted 2012-10-21 17:01:02 »

On the game I used this library, I credited with your name. If you have a website with this library hosted, I would like to know so I can add a link on my citation.

Thanks.

Miga's Hobby Programming - http://www.migapro.com
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline kuusisto

Senior Member


Medals: 13



« Reply #100 - Posted 2012-10-21 18:28:14 »

You can and should (I think) post you library on this wiki:

http://www.java-gaming.org/topics/java-gaming-resources/26897/view.html
I posted it there a few days ago, but I forgot to thank you for the suggestion.  So, thanks for the suggestion.

On the game I used this library, I credited with your name. If you have a website with this library hosted, I would like to know so I can add a link on my citation.
Cool, thanks.  The license I used doesn't require attribution like this, but I appreciate it.  I don't actually have a web page for TinySound, but you could just link to the repository (https://github.com/finnkuusisto/TinySound) if you want to link it to something.  I should probably think about making a web page.
Offline kuusisto

Senior Member


Medals: 13



« Reply #101 - Posted 2012-10-24 05:48:40 »

On the game I used this library, I credited with your name. If you have a website with this library hosted, I would like to know so I can add a link on my citation.

Thanks.
I've merged in the streams_and_redesign branch and now have a prettier page for TinySound thanks to GitHub Pages.  You can link to this instead if you want.
http://finnkuusisto.github.com/TinySound/
Offline The-Next

Senior Member


Medals: 5
Projects: 1



« Reply #102 - Posted 2013-01-17 05:19:15 »

Hi kuusisto, I've to say that you made a great work with this library. It not only gives just what I wanted and nothing more but it is also so clearly written!! I love it.

My congratulations. We definitely will be using it in Izzy's Revenge.

I have just one comment. In my desktop the library worked OK, but in my laptop I noticed some serious crackling, quite annoying.

I have been checking your code. It seems that in UpdateRunner class, you read data with a 25ms buffer. Then you perform a Thread.sleep(1);

It is know that sleep command in several windows machines totally sucks, in my laptop, sometimes Ihave more than 30 ms sleep after calling Thread.sleep(1);

Increasing maxFramesPerUpdate for storing up to 100ms of data per iteration into audioBuffer worked great! No more crackling, the music became smooth and perfect.

So, if there is not any extra problem, maybe is a good idea for futures updates to increase the default buffer size from 25ms to 100 ms or even more.


Offline nsigma
« Reply #103 - Posted 2013-01-21 12:10:18 »

It is know that sleep command in several windows machines totally sucks, in my laptop, sometimes Ihave more than 30 ms sleep after calling Thread.sleep(1);

Have you tried the approach mentioned here? http://www.java-gaming.org/topics/about-on-my-main-loop/26222/msg/229028/view.html#msg229028

Praxis LIVE - open-source intermedia toolkit and live interactive visual editor
Digital Prisoners - interactive spaces and projections
Offline The-Next

Senior Member


Medals: 5
Projects: 1



« Reply #104 - Posted 2013-01-26 22:17:47 »

Hi again! yes, that maybe would work too, but inside the kuusisto code, UpdateRunner method doesn't need an accurate loop, just a (more or less) regular loop for filling the buffer, so just increasing the buffer size is enough

Also, I've been working some more with this library. I found  (in my opinion) an important limitation. As I can understand, by now, a sound cannot be played twice simultaneously. You need to load different sounds with the source file (waste of memory).

What I did is just add to the SteamMusic/MemMusic/SteamSound/MemSound a new method called getInstance() This method return a new music/sound that shares the source data. This is a quite small code addition:


1  
2  
3  
4  
           
        public MemMusic getInstance(){return new MemMusic(left,right,mixer,lengthSeconds);}

        public MemSound getInstance(){return new MemSound(left,right,mixer,tinysound.TinySound.getSoundID(),lengthSeconds);}



But was very useful for adding environmental sounds when the same sound comes from several different locations

Offline kuusisto

Senior Member


Medals: 13



« Reply #105 - Posted 2013-01-26 22:51:35 »

Sorry I haven't been on in so long.  I'm rapidly approaching a few deadlines in my research, so I've been pretty swamped (probably will be for a while actually).

Also, I've been working some more with this library. I found  (in my opinion) an important limitation. As I can understand, by now, a sound cannot be played twice simultaneously. You need to load different sounds with the source file (waste of memory).
You should be able to play a Sound multiple times simultaneously.  When you call play(), it creates a reference to the sound data and passes it off to the mixer.  Can I ask how you came to this conclusion?  If it really isn't working, it's possible there is a bug.

Increasing maxFramesPerUpdate for storing up to 100ms of data per iteration into audioBuffer worked great! No more crackling, the music became smooth and perfect.
So, if there is not any extra problem, maybe is a good idea for futures updates to increase the default buffer size from 25ms to 100 ms or even more.
If I recall, the reason I had it at 25ms was to reduce latency.  If it buffers up too much audio data there can be some audible lag between the time a sound is 'play()'ed and the time that it actually plays.  It might be a good idea to up the default a little bit, but I'm reluctant to increase it to 100ms.  That said, I'm glad it works so well for you though.  I also think it's really cool that you're using TinySound and have taken enough of an interest to dig in the code!
Offline The-Next

Senior Member


Medals: 5
Projects: 1



« Reply #106 - Posted 2013-01-26 23:25:59 »

Ok, my fault, I just tried it again and it works nice. I dunno why I assumed that. Maybe because I just started using music.


About the delay, 50 ms were also fine for removing the crackling. I didn't noticed any lag (core i5 laptop and core i7 desktop, both java 1.7). Maybe just happens with slower computers or other JVM. Why does it happens? because the computer takes a lot of time filling the whole buffer for the first time? Interesting. I will take a look again at the code.

BTW, as I saw in your page, you are doing your PhD, right? good luck!! I wish you to publish a lot of papers Tongue
Offline kuusisto

Senior Member


Medals: 13



« Reply #107 - Posted 2013-01-27 00:57:19 »

About the delay, 50 ms were also fine for removing the crackling. I didn't noticed any lag (core i5 laptop and core i7 desktop, both java 1.7). Maybe just happens with slower computers or other JVM. Why does it happens? because the computer takes a lot of time filling the whole buffer for the first time? Interesting. I will take a look again at the code.
You're right, it could just happen in slower computers, but it would generally happen if there were ever a fairly large gap between buffering updates.  It's all mixed and sent to one SourceDataLine, so if you buffer 100ms on the line, the next audio played won't actually hit the speakers until that buffer is complete.  I can't recall now if I have designed it so that it recovers from long buffers, which would make a 100ms buffer less of an issue.

BTW, as I saw in your page, you are doing your PhD, right? good luck!! I wish you to publish a lot of papers Tongue
Thanks!  I am working on a PhD, and I guess only time will tell if I can really stick with it.  The whole process can be quite a long haul.
Offline philfrei
« Reply #108 - Posted 2013-01-27 07:14:07 »

Quote
When Java code is executed, it is not immediately compiled.
Instead, when a loop is encountered for the first
time, a few iterations are executed in interpreted mode,
and then only, the code is compiled. This is the HotSpot
feature of the Java Virtual Machine (JVM), which has
been introduced since the release 1.4.

While the speed of compiled Java code is fast enough
for real-time computations [4], the first few iterations that
are executed in interpreted mode can be too slow. As a
result, the computation time can take much more than the
duration of one audio buffer in the first iteration.

From "REAL-TIME, LOW LATENCY AUDIO PROCESSING IN JAVA"
Nicolas Juillerat, Stefan Mueller Arisona, Simon Schubiger-Banz
ETH Zurich
Computer Systems Institute

http://quod.lib.umich.edu/cgi/p/pod/dod-idx?c=icmc;idno=bbp2372.2007.131

A work-around solution is to kick the mixer into gear with a silent tone at an interval of time sufficiently before real-time response is needed, then leave the mixer running for the rest of the game.

P.S. Thanks for making the code for TinySound available on GitHub. I see that what we are doing is pretty similar, in terms of obtaining a SourceDataLine, and that you are getting similar feedback re crackle. Now I can stop stressing about this issue and get on with coding.

"Greetings my friends! We are all interested in the future, for that is where you and I are going to spend the rest of our lives!" -- The Amazing Criswell
Offline Mythalore

Junior Newbie




A Unity3D and Java Game Developer


« Reply #109 - Posted 2013-01-28 22:25:43 »

Hello,

I'm not new to Java but I have shied away from using audio in my games as I could never find a 'fully' reliably and undisputed way of playing and looping sound, efficiently. However, I have recently started writing my own engine (more as a personal project, but I will release it so that it can be used for Ludum Dare) and have finally reached the point of needing audio support. I have been searching around for a suitable method and managed to find 'java.applet.AudioClip' that works fairly well, but my question is: What does TinySound do that makes it superior to 'java.applet.AudioClip' or what are the shortcomings of 'java.applet.AudioClip'?

As an aside it would also be useful to hear anyone's suggestions for how I could approach sound in my engine or whether TinySound would be okay for me to use, from a licence perspective in my engine.

TinySound seems like it could be the best option (if I can use it) but the main thing I'm wondering is whether 'java.applet.AudioClip' will do?

Thanks,
          Sam (a Java sound 'noob')

Sam Richards - A Unity3D and Java Game Developer - http://www.mythalore.com/games. Business contact: sam@mythalore.com.
Offline philfrei
« Reply #110 - Posted 2013-01-29 08:02:12 »

The thing that drove me from AudioClip was the fact that you have no control over the volume. But if it loops, then it is pretty easy to use and costs very little. You might not have a lot of control over things like starting or stopping in the middle of the sound. I don't know. I stopped looking at it as soon as I saw there was no volume controls.

Of course there is javax.audio.sampled.Clip, for the same functionality, but with more control (volume, start & stop points).

But, if you are doing something like laser zaps that overlap, you will probably find TinySound a better choice, and well vetted.

"Greetings my friends! We are all interested in the future, for that is where you and I are going to spend the rest of our lives!" -- The Amazing Criswell
Offline Mythalore

Junior Newbie




A Unity3D and Java Game Developer


« Reply #111 - Posted 2013-01-29 09:33:40 »

Thanks for the help. I think if I was just working on a one off project I would definitely use TinySound, but for an engine it's probably best to just try and write my own system based on javax.audio.sampled.

Cheers,
           Sam

Sam Richards - A Unity3D and Java Game Developer - http://www.mythalore.com/games. Business contact: sam@mythalore.com.
Offline nsigma
« Reply #112 - Posted 2013-01-29 18:40:19 »

What does TinySound do that makes it superior to 'java.applet.AudioClip'

What you've got with TinySound as opposed to java.applet.AudioClip or javax.audio.sampled.Clip is a system that opens a single line to the soundcard, keeps it open, and mixes sounds together in software.  The way javax.audio.sampled.Clip is implemented means that it opens a separate line to the soundcard every time you want to play a sound.  This is OK for occasional sounds in a desktop application, but for anything where you want multiple sounds or rapid triggering then the TinySound approach will work far better.

I think if I was just working on a one off project I would definitely use TinySound, but for an engine it's probably best to just try and write my own system based on javax.audio.sampled.


Why reinvent the wheel?  Using the high-level stuff in javax.audio.sampled is not really suitable for games, and using the low-level stuff requires you to have a good grasp of audio coding or you can get into issues quite easily.

Praxis LIVE - open-source intermedia toolkit and live interactive visual editor
Digital Prisoners - interactive spaces and projections
Offline philfrei
« Reply #113 - Posted 2013-01-29 18:53:12 »

I meant to add a couple lines about the pluses of TinySound, but nsigma beat me to it by a few minutes!

I'll just add that there are some systems (certain flavors of Linux) that seem to have trouble with playing back multiple lines. With javax.sound.sampled, one is usually creating Clips and SourceDataLines that output at the same time (overlapping). A mixer, like the one Kuusisto has built will funnel all the outputs into a single line, allowing the sound to play back correctly on more operating systems.

"Greetings my friends! We are all interested in the future, for that is where you and I are going to spend the rest of our lives!" -- The Amazing Criswell
Offline Longor1996
« Reply #114 - Posted 2013-01-29 20:21:16 »

Hey kuusisto!

Just wanted to thank you for this library!
It's really easy, like: "Write 3 Lines of Code and the sound will play!"

I love this Library, because i love simple things.

- Longor1996

Sorry for my bad English! That's because i am from Germany.
Offline Mythalore

Junior Newbie




A Unity3D and Java Game Developer


« Reply #115 - Posted 2013-01-29 23:44:03 »

Thanks for the clarification everyone. What I'm going to do, based on the most recent replies is to just try to implement TinySound straight into my engine (http://www.mythalore.com/ for more information). I will keep the source intact (within the jar file) and make sure not to imply that the code used is mine. I will probably be making the engine open source from when I release it, near April. Lastly, kuusisto if you have any objections to me packaging the TinySound jar file with my engine please email me at sam@Mythalore.com, as soon as possible. Thank you.

Sam Richards - A Unity3D and Java Game Developer - http://www.mythalore.com/games. Business contact: sam@mythalore.com.
Offline Quarry
« Reply #116 - Posted 2013-03-03 10:50:47 »

The thread has been inactive for a while but I hope that I can resolve this issue. I'm loading oggs for music in my game and the issue is that loading a single ogg ups the memory usage from 30 to 245 megs. Attempting to load more causes OutOfMemoryError

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
import java.util.HashMap;

import kuusisto.tinysound.Music;
import kuusisto.tinysound.Sound;
import kuusisto.tinysound.TinySound;

public class Sounder {

   public static HashMap<String, Sound> sounds = new HashMap<String, Sound>();
   public static HashMap<String, Music> musics = new HashMap<String, Music>();
   public static boolean dead;
   public static final int MUSIC_AMOUNT = 3;
   
   public static void init() {
      TinySound.init();
      TinySound.setGlobalVolume(0.1f);
      sounds.put("pickup", TinySound.loadSound("pickup.wav"));
      musics.put("music0", TinySound.loadMusic("music00.ogg"));
      musics.put("music1", TinySound.loadMusic("music01.ogg"));
      musics.put("music2", TinySound.loadMusic("music02.ogg"));
   }
   
   public static void kill() {
      dead = true;
   }
   
   public static void startSoundtrack() {
      Thread stThread = new Thread(new Runnable() {

         @Override
         public void run() {
            int currentSong = Main.rng.nextInt(MUSIC_AMOUNT);
           
            while (!dead) {
               playMusic("music" + currentSong, 1);
               try {
                  Thread.sleep((int)(1000 * 7.2f * 60));
               } catch (InterruptedException e) {}
               
               currentSong = Main.rng.nextInt(MUSIC_AMOUNT);
               System.out.println("Switched song");
            }
         }
      });
     
      stThread.start();
   }

   public static void playSound(String sound, float volume) {
      Sound snd = sounds.get(sound);
      if (snd != null)
         snd.play(volume);
   }
   
   public static void playMusic(String sound, float volume) {
      Music snd = musics.get(sound);
      if (snd != null)
         snd.play(false, volume);
   }
}
Offline Quarry
« Reply #117 - Posted 2013-03-03 11:01:15 »

I decided on posting this issue on this board as well;

I'm using TinySound for playing wavs and oggs. The thread has been inactive for a while but I hope that I can resolve this issue. I'm loading oggs for music in my game and the issue is that loading a single ogg ups the memory usage from 30 to 245 megs. Attempting to load more causes OutOfMemoryError

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
import java.util.HashMap;

import kuusisto.tinysound.Music;
import kuusisto.tinysound.Sound;
import kuusisto.tinysound.TinySound;

public class Sounder {

   public static HashMap<String, Sound> sounds = new HashMap<String, Sound>();
   public static HashMap<String, Music> musics = new HashMap<String, Music>();
   public static boolean dead;
   public static final int MUSIC_AMOUNT = 3;
   
   public static void init() {
      TinySound.init();
      TinySound.setGlobalVolume(0.1f);
      sounds.put("pickup", TinySound.loadSound("pickup.wav"));
      musics.put("music0", TinySound.loadMusic("music00.ogg"));
      musics.put("music1", TinySound.loadMusic("music01.ogg"));
      musics.put("music2", TinySound.loadMusic("music02.ogg"));
   }
   
   public static void kill() {
      dead = true;
   }
   
   public static void startSoundtrack() {
      Thread stThread = new Thread(new Runnable() {

         @Override
         public void run() {
            int currentSong = Main.rng.nextInt(MUSIC_AMOUNT);
           
            while (!dead) {
               playMusic("music" + currentSong, 1);
               try {
                  Thread.sleep((int)(1000 * 7.2f * 60));
               } catch (InterruptedException e) {}
               
               currentSong = Main.rng.nextInt(MUSIC_AMOUNT);
               System.out.println("Switched song");
            }
         }
      });
     
      stThread.start();
   }

   public static void playSound(String sound, float volume) {
      Sound snd = sounds.get(sound);
      if (snd != null)
         snd.play(volume);
   }
   
   public static void playMusic(String sound, float volume) {
      Music snd = musics.get(sound);
      if (snd != null)
         snd.play(false, volume);
   }
}
Offline StumpyStrust
« Reply #118 - Posted 2013-03-03 11:47:17 »

If I recall, music is loaded into memory where sounds are streamed. Loading a whole song into memory is not bad as long as you only have 1 playing. I recommend playing the songs as sound files instead of music as they should be streamed. Most games stream music. I think SC2 supports up to 128 channels which mean 128 sounds playing at once. Or you can turn it down to 16.

Offline Quarry
« Reply #119 - Posted 2013-03-03 12:20:24 »

That is not the issue, the issue is songs taking way too much space. 3 6-minute songs take up 400 megs (noticed when I increased heap space) and I find it ridiculous

If it's what's normal what can I do to stream music. I'm using LWJGL so I could use OpenAL but setting it up on my own will take very long time and I can't really find any frameworks to help me with ogg
Pages: 1 2 3 [4] 5 6
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

E.R. Fleming (19 views)
2014-07-29 03:07:13

E.R. Fleming (7 views)
2014-07-29 03:06:25

pw (39 views)
2014-07-24 01:59:36

Riven (39 views)
2014-07-23 21:16:32

Riven (26 views)
2014-07-23 21:07:15

Riven (28 views)
2014-07-23 20:56:16

ctomni231 (59 views)
2014-07-18 06:55:21

Zero Volt (50 views)
2014-07-17 23:47:54

danieldean (42 views)
2014-07-17 23:41:23

MustardPeter (44 views)
2014-07-16 23:30:00
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!