Yes, I did notice that the oscillators didn't perform exactly right, particularly at higher frequencies. I attempted to make an adjusted x value function in the parent oscillator class, but it didn't work particularly well. The idea was to adjust the x values so that it would be evenly distributed between periods. It wasn't based on any existing algorithm, I just came up with it on my own, which is probably why it didn't work out as I had hoped (while I have quite a bit of experience in software development at this point, I have no background in audio programming).
But this is just a demo project, so I don't feel too bad about that. I may make some adjustments to the oscillators in the future, but I'm also moving on to another project to make a Kotlin-based audio player that can play Protracker mods (my goal is to get it to play Space Debris correctly). So I'm more likely to spend time on that. Now I just need to learn how to resample. Repository is here, incidentally:
https://github.com/mabersold/kotlin-protracker-demo