The past few months have been interesting for me, to say the least. For a computer science research project I was working on for school, I successfully created my own software synthesis library for Java after some mild research and pulling my hair out. Now my goal is to not only refine the library and add new features (right now it's only basic tone generation, envelope generators, LFO, and sample playback with linear interpolation to change pitch), but develop a tracker that uses my library. I also plan to program some audio effects classes such as reverb, filtering, distortion, etc.
I started out using the Java platform's included libraries (JSwing for GUI, SourceDataLine for audio, etc.) to develop the tracker. That was very stupid of me.
I think the biggest problem I came across was since I'm still a somewhat novice programmer, I think the concept of thread synchronization was hard to grasp. The program obviously required multithreading, and the threads went massively out of sync. Also, audio latency was reaaaallly bad with my pitiful attempt at a software mixer.
So I restarted, this time deciding to use the game library LibGDX to develop the GUI. It's working a lot more smoothly and it looks much nicer so far. One big plus of using LibGDX is audio latency is low, I get to use OpenGL for rendering, and BitmapFonts! I don't have to use FontMetrics anymore to position text correctly. One downside I guess is that I'm learning to use a new library as I program my tracker. Also, I'm not a graphics guy, I'm a programmer and musician, so the interface is kind of minimalist at the moment, and I'm using keyboard shortcuts for input right now like ST3 and IT did instead of mouse controls.
Attached is a teaser screenshot.