Code Monkey home page Code Monkey logo

opsu's Introduction

opsu! is an unofficial open-source client for the rhythm game osu!, written in Java using Slick2D and LWJGL (wrappers around OpenGL and OpenAL).

opsu! runs on Windows, OS X, and Linux. A libGDX port also supports Android devices.

Getting Started

Get a copy of opsu! from the releases page. APK releases can be found here.

Java Setup

The Java Runtime Environment (JRE) 7 or higher must be installed in order to run opsu!. The download page is located here.

Beatmaps

opsu! requires "beatmaps" to run, which contain the songs and gameplay data. These can be downloaded directly through opsu! in the downloads menu, or manually from the osu! website (requires registration) and mirror sites like Bloodcat. Place any manually downloaded beatmaps (in .osz format) in the Import/ directory for opsu! to unpack them automatically.

If osu! is installed, opsu! will attempt to read beatmaps from the osu! installation location. The beatmap directory can also be changed by setting the "BeatmapDirectory" value in the generated configuration file.

First Run

opsu! will parse all beatmaps when launched, which can take a while for the first time. If no beatmaps are found, the game will prompt you to download some to get started.

Game settings can be changed in the options menu, accessed by clicking the "Other Options" button in the song menu. The "Music Offset" value will likely need to be adjusted initially, or whenever hit objects are out of sync with the music.

Directory Structure

The following files and folders will be created by opsu! as needed:

  • .opsu.cfg: The configuration file. Most (but not all) of the settings can be changed through the options menu.
  • .opsu.db: The beatmap cache database.
  • .opsu_scores.db: The scores and player database.
  • .opsu.log: The error log. All critical errors displayed in-game are also logged to this file, and other warnings not shown are logged as well.
  • Songs/: The beatmap directory (not used if an osu! installation is detected). The parser searches all of its subdirectories for .osu files to load.
  • Skins/: The skins directory. Each skin must be placed in a folder within this directory. Any game resource (in res/) can be skinned by placing a file with the same name in a skin folder. Skins can be selected in the options menu.
  • Replays/: The replay directory. Replays of each completed game are saved as .osr files, and can be viewed at a later time or shared with others.
  • Import/: The import directory. All beatmap packs (.osz) and skin packs (.osk) are unpacked to the proper location. All replays (.osr) are moved to the replay directory, and their scores saved to the scores database.
  • Screenshots/: The screenshot directory. Screenshots can be taken by pressing the F12 key.
  • Natives/: The native libraries directory.
  • Temp/: The temporary files directory. Deleted when opsu! exits.

Building

opsu! is distributed as both a Maven and Gradle project.

Maven

Maven builds are built to the target directory.

  • To run the project, execute the Maven goal compile.
  • To create a single executable jar, execute the Maven goal package -Djar. This will compile a jar to target/opsu-${version}.jar with the libraries, resources and natives packed inside the jar.
    • Setting the "XDG" property (-DXDG=true) will make the application use XDG folders under Unix-like operating systems.
    • Setting the "exclude" property to "ffmpeg" (-Dexclude=ffmpeg) will exclude FFmpeg shared libraries from the jar.

Gradle

Gradle builds are built to the build directory.

  • To run the project, execute the Gradle task run.
  • To create a single executable jar, execute the Gradle task jar. This will compile a jar to build/libs/opsu-${version}.jar with the libraries, resources and natives packed inside the jar.
    • Setting the "XDG" property (-PXDG=true) will make the application use XDG folders under Unix-like operating systems.
    • Setting the "excludeFFmpeg" property (-PexcludeFFmpeg) will exclude FFmpeg shared libraries from the jar.

Contributing

See the contributing guidelines.

Credits

This software was created by Jeffrey Han (@itdelatrisu). All game concepts and designs are based on work by osu! developer Dean Herbert (@ppy). Other credits can be found here.

License

This software is licensed under GNU GPL version 3. You can find the full text of the license here.

opsu's People

Contributors

azhao12345 avatar bhampl avatar bigpet avatar darktigrus avatar haringat avatar iceblade112 avatar itdelatrisu avatar lucki avatar lyonlancer5 avatar mad-s avatar pizzalovers007 avatar scoreunder avatar szunti avatar tillerino avatar tpenguinltg avatar yugecin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opsu's Issues

Can't move the .jar ?

Hi there !
So i got a problem with your jar (just testing for now, because i don't really understand how to compile & edit the code for now, since i've never worked before in this type of java)
So i launched your .jar in download folder first to test it, then it creates everything needed to run it properly, and actually it run properly.
But when i try to launch the .jar from anywhere else (a folder on my desktop for example) i got this issue :
"** Uncaught Exception! **
java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
at org.sqlite.core.NativeDB._open(Native Method)
at org.sqlite.core.DB.open(DB.java:161)
at org.sqlite.core.CoreConnection.open(CoreConnection.java:145)
at org.sqlite.core.CoreConnection.(CoreConnection.java:66)
at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:21)
at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:23)
at org.sqlite.SQLiteConnection.(SQLiteConnection.java:45)
at org.sqlite.JDBC.createConnection(JDBC.java:114)
at org.sqlite.JDBC.connect(JDBC.java:88)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at itdelatrisu.opsu.db.DBController.createConnection(DBController.java:65)
at itdelatrisu.opsu.db.OsuDB.init(OsuDB.java:74)
at itdelatrisu.opsu.db.DBController.init(DBController.java:46)
at itdelatrisu.opsu.Opsu.main(Opsu.java:138)
"

I've also try to download the release, again, but same problem appear.
Also, if someway you can tell me how can i edit & compile to help you, it would be awesome.
I'm working mainly in C#, or web langages, but i think i'll handle java ^^ Just need to know how to run that x)

Game sounds fail to load, causing a crash

c at suzu in ~/Downloads/opsu
% cat .opsu.log
Tue Jul 08 11:35:06 NZST 2014 ERROR:Failed to load file 'combobreak.wav'.
Tue Jul 08 11:35:06 NZST 2014 ERROR:line with format PCM_UNSIGNED 11025.0 Hz, 8 bit, mono, 1 bytes/frame,  not supported.
javax.sound.sampled.LineUnavailableException: line with format PCM_UNSIGNED 11025.0 Hz, 8 bit, mono, 1 bytes/frame,  not supported.
    at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:513)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1304)
    at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:121)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1085)
    at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1175)
    at itdelatrisu.opsu.SoundController.loadClip(SoundController.java:158)
    at itdelatrisu.opsu.SoundController.init(SoundController.java:174)
    at itdelatrisu.opsu.states.Splash$1.run(Splash.java:137)
[several repeats of the above error for each sound file]

Tue Jul 08 11:36:52 NZST 2014 ERROR:** Uncaught Exception! **
Tue Jul 08 11:36:52 NZST 2014 ERROR:null
java.lang.NullPointerException
    at itdelatrisu.opsu.SoundController.playClip(SoundController.java:223)
    at itdelatrisu.opsu.SoundController.playSound(SoundController.java:247)
    at itdelatrisu.opsu.states.MainMenu.mousePressed(MainMenu.java:317)
    at org.newdawn.slick.state.StateBasedGame.mousePressed(StateBasedGame.java:499)
    at org.newdawn.slick.Input.poll(Input.java:1217)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:641)
    at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:149)
c at suzu in ~/Downloads/opsu
% java -version 
java version "1.7.0_60"
OpenJDK Runtime Environment (IcedTea 2.5.0) (Arch Linux build 7.u60_2.5.0-2-x86_64)
OpenJDK 64-Bit Server VM (build 24.60-b09, mixed mode)

The NullPointerException occurs when clicking on the opsu! star on the main menu, causing the game to crash (probably because it's trying to play a sound even though it failed to load?)

ArrayIndexOutOfBoundsException on funky sliders

(Extra note: this beatmap is designed to be weird anyway, but it may be reproducible on normal maps...)
Affected beatmap: LeaF - Evanescent [Aspire]

The error message:

Sat Apr 11 22:55:35 SGT 2015 ERROR:Failed to create slider at index 161:
362,224,29985,2,0,B|362:298|362:298|362:294|362:294|362:301|362:301|362:298|362:298|362:305|362:305|362:301|362:301|362:308|362:308|362:305|362:305|362:312|362:312|362:308|362:308|362:316|362:316|362:312|362:312|362:319|362:319|362:316|362:316|362:323|362:323|362:319|362:319|362:327|362:327|362:323|362:323|362:330|362:330|362:327|362:327|362:334|362:334|362:330|362:330|362:337|362:337|362:334|362:334|362:341|362:341|362:337|362:337|362:345|362:345|362:341|362:341|362:348|362:348|362:345|362:345|362:352|362:352|362:348|362:348|362:356|362:356|362:352|362:352|362:356,1,225.00002
Sat Apr 11 22:55:35 SGT 2015 ERROR:0
java.lang.ArrayIndexOutOfBoundsException: 0
    at itdelatrisu.opsu.objects.curves.LinearBezier.<init>(LinearBezier.java:105)
    at itdelatrisu.opsu.objects.Slider.updatePosition(Slider.java:463)
    at itdelatrisu.opsu.objects.Slider.<init>(Slider.java:146)
    at itdelatrisu.opsu.states.Game.enter(Game.java:1074)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)
Sat Apr 11 22:55:44 SGT 2015 ERROR:Failed to create slider at index 195:
154,165,37406,86,0,B|151:162|151:162|156:167|156:167|156:162|156:162|151:167|151:167|154:162|154:162|156:165|156:165|154:167|154:167|151:165|151:165,10,37.5,2|2|2|2|2|2|2|2|2|2|2,0:3|0:3|0:3|0:3|0:3|0:3|0:3|0:3|0:3|0:3|0:3,0:3:0:0:
Sat Apr 11 22:55:44 SGT 2015 ERROR:0
java.lang.ArrayIndexOutOfBoundsException: 0
    at itdelatrisu.opsu.objects.curves.LinearBezier.<init>(LinearBezier.java:105)
    at itdelatrisu.opsu.objects.Slider.updatePosition(Slider.java:463)
    at itdelatrisu.opsu.objects.Slider.<init>(Slider.java:146)
    at itdelatrisu.opsu.states.Game.enter(Game.java:1074)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)
Sat Apr 11 22:55:44 SGT 2015 ERROR:Failed to create slider at index 424:
256,304,75459,6,0,B|256:241|256:241|256:246|256:246|256:234|256:234|256:237|256:237|256:224|256:224|256:229|256:229|256:214|256:214|256:224|256:224|256:210|256:210|256:215|256:215|256:188,1,168.75,2|0,0:0|0:0,0:0:0:0:
Sat Apr 11 22:55:44 SGT 2015 ERROR:0
java.lang.ArrayIndexOutOfBoundsException: 0
    at itdelatrisu.opsu.objects.curves.LinearBezier.<init>(LinearBezier.java:121)
    at itdelatrisu.opsu.objects.Slider.updatePosition(Slider.java:463)
    at itdelatrisu.opsu.objects.Slider.<init>(Slider.java:146)
    at itdelatrisu.opsu.states.Game.enter(Game.java:1074)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)
Sat Apr 11 22:55:45 SGT 2015 ERROR:Failed to create slider at index 745:
256,192,124880,54,0,B|255:192|255:192|257:192|257:192|254:192,2,5.625,0|0|2,0:0|0:0|0:0,0:0:0:0:
Sat Apr 11 22:55:45 SGT 2015 ERROR:0
java.lang.ArrayIndexOutOfBoundsException: 0
    at itdelatrisu.opsu.objects.curves.LinearBezier.<init>(LinearBezier.java:94)
    at itdelatrisu.opsu.objects.Slider.updatePosition(Slider.java:463)
    at itdelatrisu.opsu.objects.Slider.<init>(Slider.java:146)
    at itdelatrisu.opsu.states.Game.enter(Game.java:1074)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)

General improvements to opsu! to match upstream game (osu!)

I have assigned myself to this issue (no ETA on when it can be done for now)
Checklist:

  • Split updateAndRender to use org.lwjgl.Display.update() and org.lwjgl.Display.sync(FPS) to ensure use of offscreen buffer to remove dependency of high fps (superseded from #40) (UPDATE: game choppy has been fixed, marking this as completed for now, but the development is still underway)
  • Attempt to match the gameplay logic with osu! as closely as possible
  • Fix scoring issue with opsu! displaying more score than osu! (screenshots will be added later for comparison)
  • Remove dependency to FPS completely for all animations in opsu! (related to checklist 1)
  • Allow usage of skin.ini to allow more skin customizations (focuses more on skin versions, currently in progress)

Unrelated to osu! features
Package Java Runtime Environment with opsu! to allow running on machines without JRE (scrapped because of non-portability issues, requiring three separate builds)

Any other osu! related things (that I can't think of for now) that is missing in opsu! , please post here! (I will try to make it as long I have the time and ability to do it, currently getting used to Maven goals and LWJGL APIs)

Things that I will not do (due to certain reasons)

  • Online capability

Things that I will not do (because of ability issues)

  • Implement DirectX (sounds like a herculean task for a non-Windows runtime)

@itdelatrisu: can you put me to the assignee and (optional) set milestone to 1.0 maybe?

Game.update() failure.

Version: 0.7.0
Build date: 2015-03-09 00:40
Stack trace:

org.newdawn.slick.SlickException: Game.update() failure.
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:708)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:165)
Caused by: java.lang.NullPointerException
    at itdelatrisu.opsu.db.ScoreDB.getMapSetScores(ScoreDB.java:241)
    at itdelatrisu.opsu.states.SongMenu.setFocus(SongMenu.java:1177)
    at itdelatrisu.opsu.states.SongMenu.enter(SongMenu.java:923)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    ... 3 more

Failed to load file 'count2s.wav'.

Version: 0.9.0
Build date: 2015-05-17 19:41
OS: Linux (i386)
JRE: 1.7.0_79
Error: Failed to load file 'count2s.wav'.
Stack trace:

java.lang.IllegalArgumentException: Invalid format
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    at itdelatrisu.opsu.audio.MultiClip.getClip(MultiClip.java:164)
    at itdelatrisu.opsu.audio.MultiClip.<init>(MultiClip.java:94)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:117)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:90)
    at itdelatrisu.opsu.audio.SoundController.init(SoundController.java:207)
    at itdelatrisu.opsu.states.Splash$1.run(Splash.java:109)

Adding ikvm compatibility

I think it would be nice to add IKVM compatibility, this would allow opsu to run on more systems (like Windows RT). Although this may fail as opsu requires OpenGL, right?

** Uncaught Exception! **

Version: 0.7.0
Build date: 2015-03-08 21:49
Error: ** Uncaught Exception! **
Stack trace:

java.lang.NullPointerException
    at itdelatrisu.opsu.db.OsuDB.setStatementFields(OsuDB.java:309)
    at itdelatrisu.opsu.db.OsuDB.insert(OsuDB.java:250)
    at itdelatrisu.opsu.OsuParser.parseDirectories(OsuParser.java:184)
    at itdelatrisu.opsu.OsuParser.parseAllFiles(OsuParser.java:78)
    at itdelatrisu.opsu.states.Splash$1.run(Splash.java:106)

[feature request] Some gameplay-related tweaks

For now on all opsu! variants, whenever a song reach the breaks, the healthbar, combo and the scores (300, 100, 50, miss, geki, katu) are hidden immediately.

My proposed idea is only hide the combo numbers and healthbar but keep other remaining ones as is (let them fade itself)

Also, if possible, put the notes in front of the spinner (since new osu! skins with versions 2.0+ have notes in front of the spinner even if the spinner is yet to complete)

And i also notice something: All 300, 100, 50, miss, geki and katu seems to have a color tint from the slider colors because those are behind the hit lighting (osu! have those scores in front of hit lighting)...

Ability to disable self-update

I don't know, how other projects handle this, but as I have this packaged (opsu and opsu-git), the game loads itself in the working-directory, which isn't useful at all. (restart spams the working dir, often your home. The next manual start loads the old version from the system.)

First a switch like the XDG-switch came into my mind, but maybe there's another better way I'm not aware of.

Database Error

Whenever i try to start opsu! i get an uncaught sql-exception of this or a similar kind:
Sun Apr 12 21:22:27 CEST 2015 ERROR:** Uncaught Exception! **
Sun Apr 12 21:22:27 CEST 2015 ERROR:org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
at org.sqlite.core.NativeDB._open(Native Method)
at org.sqlite.core.DB.open(DB.java:161)
at org.sqlite.core.CoreConnection.open(CoreConnection.java:145)
at org.sqlite.core.CoreConnection.(CoreConnection.java:66)
at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:21)
at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:23)
at org.sqlite.SQLiteConnection.(SQLiteConnection.java:45)
at org.sqlite.JDBC.createConnection(JDBC.java:114)
at org.sqlite.JDBC.connect(JDBC.java:88)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at itdelatrisu.opsu.db.DBController.createConnection(DBController.java:65)
at itdelatrisu.opsu.db.OsuDB.init(OsuDB.java:74)
at itdelatrisu.opsu.db.DBController.init(DBController.java:46)
at itdelatrisu.opsu.Opsu.main(Opsu.java:138)

I reinstalled java allready and got no other sql-application running whatsoever. I didn't look at the sourcecode, but from the looks the library for sqlite is broken or plainly not compatible on my end...

Launching on mac, path errors

localhost:~ User$ java /Users/User/opsu-0.3.2.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: /Users/User/opsu-0/3/2/jar
Caused by: java.lang.ClassNotFoundException: .Users.User.opsu-0.3.2.jar
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

I think this may be an error because of the / that are used instead of \ on *NIX systems.

Failed to load file 'combobreak.wav'.

Version: 0.9.0
Build date: 2015-05-17 19:41
OS: Linux (i386)
JRE: 1.7.0_79
Error: Failed to load file 'combobreak.wav'.
Stack trace:

java.lang.IllegalArgumentException: Invalid format
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    at itdelatrisu.opsu.audio.MultiClip.getClip(MultiClip.java:164)
    at itdelatrisu.opsu.audio.MultiClip.<init>(MultiClip.java:94)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:117)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:90)
    at itdelatrisu.opsu.audio.SoundController.init(SoundController.java:207)
    at itdelatrisu.opsu.states.Splash$1.run(Splash.java:109)

Stuttering while switching from 2x to .5x Playback rate

I just downloaded the 0.9.0 build to see how the playback rate changes are looking and I've come across some stuttering when changing from 2x to .5 rate.
I tried it out with every frame limiter, with Auto mod and own replays, suttering in every case.
Cannot surely tell if it's just a problem on my end but I just wanted to let you know. It's nothing too bad I assume, it's just something I noticed.

Also, a short Video to demonstrate the issue : https://youtu.be/nQbPZMsfcv4

Inaccurate track position in OpenALStreamPlayer

OpenALStreamPlayer.getPosition() returns track positions that are up to 20ms off (on my machine). This is pretty obvious if you call MusicController.getPosition() in a while loop and take the difference of the return values: an interval is skipped on a fairly regular basis. This is probably causing some of the unpredictable gameplay inaccuracies.

Here's the relevant code:

    public float getPosition() {
        float playedTime = ((float) playedPos / (float) sampleSize) / sampleRate;
        float timePosition = playedTime + (getTime() - lastUpdateTime) / 1000f;
        return timePosition;
    }

I don't really know how to approach this, so any help would be greatly appreciated.

Exporting replay call seems to be quite expensive

(tried this on opsu-android though, close this if you think this is more on opsu-android issue rather than opsu!, just wondering though :P)

On opsu!, exporting replays is rather speedy (no hiccups whatsoever)
But on opsu-android (especially really underpowered processors such as Intel Atom Z2520, common on Asus phones), exporting replays to disk uses quite a lot of CPU processing.

It is not very noticeable on PC (there's some huge CPU spikes for about a second) but due to their running nature of Android, this seems to cause some issues with performance since the replay will be exported immediately after the ranking screen is dismissed.

My rough guess is from the lag I got during gameplay, the thread priority of the export replay is as high as the song playing (song stutters for the duration of the export, usually about 5-10 seconds)

Game.render() failure.

(Was updating the map database after downloading about 6 maps in a row)

Version: 0.8.0
Build date: 2015-03-20 04:45
OS: Windows 8.1 (amd64)
JRE: 1.8.0_31
Stack trace:

org.newdawn.slick.SlickException: Game.render() failure.
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:730)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)
Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at itdelatrisu.opsu.downloads.DownloadList.getNode(DownloadList.java:61)
    at itdelatrisu.opsu.states.DownloadsMenu.render(DownloadsMenu.java:303)
    at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:727)
    ... 3 more

Unable to run 0.6.0

Sun Feb 22 18:10:07 AEDT 2015 ERROR:Could not connect to score database.
Sun Feb 22 18:10:07 AEDT 2015 ERROR:Error opening connection
java.sql.SQLException: Error opening connection
at org.sqlite.core.CoreConnection.open(CoreConnection.java:140)
at org.sqlite.core.CoreConnection.(CoreConnection.java:66)
at org.sqlite.jdbc3.JDBC3Connection.(JDBC3Connection.java:21)
at org.sqlite.jdbc4.JDBC4Connection.(JDBC4Connection.java:23)
at org.sqlite.SQLiteConnection.(SQLiteConnection.java:45)
at org.sqlite.JDBC.createConnection(JDBC.java:114)
at org.sqlite.JDBC.connect(JDBC.java:88)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at itdelatrisu.opsu.ScoreDB.init(ScoreDB.java:66)
at itdelatrisu.opsu.Opsu.main(Opsu.java:136)
Caused by: java.lang.NullPointerException
at org.sqlite.SQLiteJDBCLoader.extractAndLoadLibraryFile(SQLiteJDBCLoader.java:165)
at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:249)
at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:65)
at org.sqlite.core.NativeDB.load(NativeDB.java:53)
at org.sqlite.core.CoreConnection.open(CoreConnection.java:136)
... 10 more
Sun Feb 22 18:10:15 AEDT 2015 ERROR:** Uncaught Exception! **
Sun Feb 22 18:10:15 AEDT 2015 ERROR:null
java.lang.NullPointerException
at itdelatrisu.opsu.ScoreDB.createDatabase(ScoreDB.java:107)
at itdelatrisu.opsu.ScoreDB.init(ScoreDB.java:73)
at itdelatrisu.opsu.Opsu.main(Opsu.java:136)

Save beatmaps/config etc. XDG-conform

Currently all is stored in the working directory.

"$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used. "

"$XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used."

Pls read this carefully:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Failed to prepare score statements.

Version: 0.7.0
Build date: 2015-03-09 00:40
Error: Failed to prepare score statements.
Stack trace:

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (table scores has 18 columns but 17 values were supplied)
    at org.sqlite.core.DB.newSQLException(DB.java:890)
    at org.sqlite.core.DB.newSQLException(DB.java:901)
    at org.sqlite.core.DB.throwex(DB.java:868)
    at org.sqlite.core.NativeDB.prepare(Native Method)
    at org.sqlite.core.DB.prepare(DB.java:211)
    at org.sqlite.core.CorePreparedStatement.<init>(CorePreparedStatement.java:40)
    at org.sqlite.jdbc3.JDBC3PreparedStatement.<init>(JDBC3PreparedStatement.java:29)
    at org.sqlite.jdbc4.JDBC4PreparedStatement.<init>(JDBC4PreparedStatement.java:18)
    at org.sqlite.jdbc4.JDBC4Connection.prepareStatement(JDBC4Connection.java:47)
    at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:251)
    at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:223)
    at itdelatrisu.opsu.db.ScoreDB.init(ScoreDB.java:71)
    at itdelatrisu.opsu.db.DBController.init(DBController.java:47)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:138)

File not found: 'virtual'

The latest commit (4eaf0b6) have the following errors in opsu!.log:

    Fri Apr 10 09:20:22 SGT 2015 ERROR:File not found: 'virtual'
    Fri Apr 10 09:20:22 SGT 2015 ERROR:File not found: 'virtual'
    Fri Apr 10 09:20:22 SGT 2015 ERROR:File not found: 'virtual'
    Fri Apr 10 09:21:15 SGT 2015 ERROR:File not found: 'virtual'
    Fri Apr 10 09:21:15 SGT 2015 ERROR:File not found: 'virtual'

This happens when loading maps from my osu! folder (contains ~30k of maps)

[question] Some questions about skinning

I'm going to make a tutorial for converting skins from osu to opsu and making opsu-specific elements, and I have some questions:

  1. I noticed that the logo is skinnable. Do you mind if skin makers change it?
  2. Is deleting the META-INF necessary? I know it varies between applications.
  3. Is there going to be a major skin breakage in the recent future? I plan to keep the tutorial updated, but there's no point in making it now if it won't be valid in a week.
  4. Does opsu load SD images when it can't find an HD image and you set "Load HD images" to Yes?
  5. Any requests to skinners/users using custom skins?

[enhancement] Reverse the sliderball values rather than turning the ball direction

On sliders with reverse, the sliderball is set to turn 180 degrees when they return.
On the opsu! implementation:
Before reverse:
b0=>b1=>b2...=>bX where X is the largest value of the sliderb* number.
After reverse
But when it reverses, it uses the bX<=...b2<=b1<=b0 and the ball is turned back to the direction of the starting position.

The original osu! implementation uses this direction:
Before reverse:
b0=>b1=>b2...=>bX
After reverse:
b0<=b1<=b2...<=bX

Error while creating game container.

Version: 0.7.0
Build date: 2015-03-09 00:40
Error: Error while creating game container.
Stack trace:

org.newdawn.slick.SlickException: Failed to initialise the LWJGL display
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:378)
    at itdelatrisu.opsu.Container.start(Container.java:64)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:165)

UnsatisfiedLinkError with SQLite on ArchLinux

Here is what I get on ArchLinux with sqlite 3.8.8 (tried 3.8.7 as well, same error):

** Uncaught Exception! **
java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
    at org.sqlite.core.NativeDB._open(Native Method)
    at org.sqlite.core.DB.open(DB.java:161)
    at org.sqlite.core.CoreConnection.open(CoreConnection.java:145)
    at org.sqlite.core.CoreConnection.<init>(CoreConnection.java:66)
    at org.sqlite.jdbc3.JDBC3Connection.<init>(JDBC3Connection.java:21)
    at org.sqlite.jdbc4.JDBC4Connection.<init>(JDBC4Connection.java:23)
    at org.sqlite.SQLiteConnection.<init>(SQLiteConnection.java:45)
    at org.sqlite.JDBC.createConnection(JDBC.java:114)
    at org.sqlite.JDBC.connect(JDBC.java:88)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)
    at itdelatrisu.opsu.ScoreDB.init(ScoreDB.java:63)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:145)

I tried installing some "javasqlite" package, as well as switching to java 8 - with no effect.

Visible Cursor

When a beatmap is loading after you click on it in the song menu, the mouse arrow becomes visible and stays visible until it is moved out of the window and back in.
Version: 0.7.0
Affects: OSX 10.10 + jdk1.8.0_31/jdk1.7.0_75

Spinners gets harder to clear if the fps is higher

On 60 fps, the spinner is almost osu! like clear.
But on 240 fps, the spinner is really hard to clear (especially on short spinners)

I also have added the replays since it appears to be affecting replays too
The map played is Primastella - Koigokoro [iyasine's Hard]
First play with 120 fps
Second play with 240 fps

On 1st play, I manage to get a Clear with 2000 score (idk how to call it)
But on 2nd play, I only manage to get a 100 (not even a clear)

However, showing the replays on different fps (120 fps replay on 240 fps or 240 fps replay at 120 fps) doesn't affect the spinner in any way.

Can't place jar inside a folder with ! character at the end

Example: e:\games\opsu!\

If you do that you get this in log when trying to start opsu!:
Sat Jul 19 18:59:38 GMT+07:00 2014 ERROR:Unable to determine Slick build number
Sat Jul 19 18:59:38 GMT+07:00 2014 ERROR:Resource not found: icon16.png
java.lang.RuntimeException: Resource not found: icon16.png
at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69)
at org.newdawn.slick.AppGameContainer.setIcons(AppGameContainer.java:527)
at itdelatrisu.opsu.Opsu.main(Opsu.java:147)
Sat Jul 19 18:59:38 GMT+07:00 2014 ERROR:Error while creating game container.
Sat Jul 19 18:59:38 GMT+07:00 2014 ERROR:Failed to set the icon
org.newdawn.slick.SlickException: Failed to set the icon
at org.newdawn.slick.AppGameContainer.setIcons(AppGameContainer.java:530)
at itdelatrisu.opsu.Opsu.main(Opsu.java:147)

Intermittant visual jitter during gameplay

During a play, the graphics jitters for a short while (about 5-10 seconds) and then it smooths out.
The FPS value did not drop during the jitter.
It seems to be happening before a slider or a very dense streams (>150 bpm)

opsu directly fails the fifth simultanous beatmap download.

Like the title said the fifth simultanous beatmap download I'm trying to create fails instantly. No waiting list, no timeout error, nothing, just fails instantly.

opsu 7.0, java 1.7.0_76 (Oracle JRE, not openjdk), Lubuntu 14.04

Screenshot here.
screenshot_20150312_224043

After one of the downloads complete (that means it drops to 3 simultanous downloads), I can create another download that works again.

Anything that causes this?

Failed to load file '/preview/217134.mp3'.

Version: 0.8.0
Build date: 2015-03-20 04:45
OS: Linux (amd64)
JRE: 1.8.0_45-internal
Error: Failed to load file '/preview/217134.mp3'.
Stack trace:

java.lang.IllegalArgumentException: Invalid format
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    at itdelatrisu.opsu.audio.MultiClip.getClip(MultiClip.java:164)
    at itdelatrisu.opsu.audio.MultiClip.<init>(MultiClip.java:94)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:118)
    at itdelatrisu.opsu.audio.SoundController.playTrack(SoundController.java:336)
    at itdelatrisu.opsu.states.DownloadsMenu$2.run(DownloadsMenu.java:488)

[Suggestion] Fade game objects in and out

Figuring out where everything goes is a pain when they appear just a second (or so) before you have to click the objects.
You (or someone else) should try to make objects fade in and out.

Failed to load file '/preview/163126.mp3'.

Version: 0.8.0
Build date: 2015-03-20 04:45
OS: Linux (amd64)
JRE: 1.7.0_75
Error: Failed to load file '/preview/163126.mp3'.
Stack trace:

java.lang.IllegalArgumentException: Invalid format
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    at itdelatrisu.opsu.audio.MultiClip.getClip(MultiClip.java:164)
    at itdelatrisu.opsu.audio.MultiClip.<init>(MultiClip.java:94)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:118)
    at itdelatrisu.opsu.audio.SoundController.playTrack(SoundController.java:336)
    at itdelatrisu.opsu.states.DownloadsMenu$2.run(DownloadsMenu.java:488)

Song keeps repeating itself on main menu

As the title explains, if the song ended, instead of playing the next random song, it just repeats the same song over and over again.

Just found this from fluddokt's opsu-android but i think it also happens at opsu! as well (since it have almost the same code).

Will update after i have access to my laptop to double confirm this.

Could not play track

I've a problem with this Beatmap, all others seems fine so far, or I haven't found one with similar error.
When clicking on it, a error-window pops in front containing this:

Could not play track 'Nightcore - Where Is The Love.mp3'.
java.lang.RuntimeException: Resource not found: /home/lucki/.local/share/opsu/Songs/19882 Baracuda - Where Is The Love (Nightcore Mix)/Nightcore - Where Is The Love.mp3
    at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69)
    at org.newdawn.slick.openal.OpenALStreamPlayer.initStreams(OpenALStreamPlayer.java:149)
    at org.newdawn.slick.openal.OpenALStreamPlayer.play(OpenALStreamPlayer.java:196)
    at org.newdawn.slick.openal.StreamSound.playAsMusic(StreamSound.java:46)
    at org.newdawn.slick.Music.startMusic(Music.java:314)
    at org.newdawn.slick.Music.loop(Music.java:291)
    at org.newdawn.slick.Music.loop(Music.java:264)
    at itdelatrisu.opsu.audio.MusicController.playAt(MusicController.java:136)
    at itdelatrisu.opsu.audio.MusicController.loadTrack(MusicController.java:119)
    at itdelatrisu.opsu.audio.MusicController.access$000(MusicController.java:42)
    at itdelatrisu.opsu.audio.MusicController$1.run(MusicController.java:86)
Sat Mar 07 13:37:32 CET 2015 WARN:OpenALStreamPlayer: setPosition: failed to skip.

Edit: Holding F2 gives me a second and third Song with error:

Could not play track 'Electric Six - Gay Bar.mp3'.
java.lang.RuntimeException: Resource not found: /home/lucki/.local/share/opsu/Songs/9550 Electric Six - Gay Bar/Electric Six - Gay Bar.mp3
    at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69)
    at org.newdawn.slick.openal.OpenALStreamPlayer.initStreams(OpenALStreamPlayer.java:149)
    at org.newdawn.slick.openal.OpenALStreamPlayer.play(OpenALStreamPlayer.java:196)
    at org.newdawn.slick.openal.StreamSound.playAsMusic(StreamSound.java:46)
    at org.newdawn.slick.Music.startMusic(Music.java:314)
    at org.newdawn.slick.Music.loop(Music.java:291)
    at org.newdawn.slick.Music.loop(Music.java:264)
    at itdelatrisu.opsu.audio.MusicController.playAt(MusicController.java:136)
    at itdelatrisu.opsu.audio.MusicController.loadTrack(MusicController.java:119)
    at itdelatrisu.opsu.audio.MusicController.access$000(MusicController.java:42)
    at itdelatrisu.opsu.audio.MusicController$1.run(MusicController.java:86)

Sat Mar 07 13:39:23 CET 2015 ERROR:Input does not appear to be an Ogg bitstream.
Sat Mar 07 13:39:23 CET 2015 ERROR:Could not play track 'track10.ogg'.
Sat Mar 07 13:39:23 CET 2015 ERROR:null
Could not play track 'track10.ogg'.
java.lang.NullPointerException
    at java.lang.System.arraycopy(Native Method)
    at com.jcraft.jogg.SyncState.buffer(SyncState.java:66)
    at org.newdawn.slick.openal.OggInputStream.getPageAndPacket(OggInputStream.java:145)
    at org.newdawn.slick.openal.OggInputStream.readPCM(OggInputStream.java:294)
    at org.newdawn.slick.openal.OggInputStream.read(OggInputStream.java:446)
    at org.newdawn.slick.openal.OggInputStream.read(OggInputStream.java:475)
    at org.newdawn.slick.openal.OggInputStream.read(OggInputStream.java:498)
    at org.newdawn.slick.openal.OpenALStreamPlayer.stream(OpenALStreamPlayer.java:276)
    at org.newdawn.slick.openal.OpenALStreamPlayer.startPlayback(OpenALStreamPlayer.java:364)
    at org.newdawn.slick.openal.OpenALStreamPlayer.play(OpenALStreamPlayer.java:202)
    at org.newdawn.slick.openal.StreamSound.playAsMusic(StreamSound.java:46)
    at org.newdawn.slick.Music.startMusic(Music.java:314)
    at org.newdawn.slick.Music.loop(Music.java:291)
    at org.newdawn.slick.Music.loop(Music.java:264)
    at itdelatrisu.opsu.audio.MusicController.playAt(MusicController.java:136)
    at itdelatrisu.opsu.audio.MusicController.loadTrack(MusicController.java:119)
    at itdelatrisu.opsu.audio.MusicController.access$000(MusicController.java:42)
    at itdelatrisu.opsu.audio.MusicController$1.run(MusicController.java:86)

** Uncaught Exception! **

Version: 0.8.0
Build date: 2015-03-20 04:45
OS: Windows 7 (amd64)
JRE: 1.8.0_45
Error: ** Uncaught Exception! **
Stack trace:

java.lang.ArrayIndexOutOfBoundsException: 10
    at org.newdawn.slick.Input.poll(Input.java:1314)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:680)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)

Game.update() failure.

Version: 0.7.0
Build date: 2015-03-19 08:44
Stack trace:

org.newdawn.slick.SlickException: Game.update() failure.
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:708)
    at itdelatrisu.opsu.Container.gameLoop(Container.java:93)
    at itdelatrisu.opsu.Container.start(Container.java:67)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:165)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
    at itdelatrisu.opsu.objects.curves.LinearBezier.<init>(LinearBezier.java:141)
    at itdelatrisu.opsu.objects.Slider.<init>(Slider.java:141)
    at itdelatrisu.opsu.states.Game.enter(Game.java:756)
    at org.newdawn.slick.state.StateBasedGame.update(StateBasedGame.java:248)
    at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:702)
    ... 3 more

Spinner skins long loading time

Some skins for the spinner takes long time to load, so that the spinning-time is almost over when the spinner appears on screen.

** Uncaught Exception! **

Version: 0.7.0
Build date: 2015-03-09 00:40
Error: ** Uncaught Exception! **
Stack trace:

java.lang.NullPointerException
    at itdelatrisu.opsu.db.ScoreDB.closeConnection(ScoreDB.java:286)
    at itdelatrisu.opsu.db.DBController.closeConnections(DBController.java:55)
    at itdelatrisu.opsu.Opsu.close(Opsu.java:227)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:169)

Long startup

With lots of beatmaps, opsu takes really long time to start.
Right now with 2200 different songs (6200 Beatmaps) in /Songs/, opsu needs about 30 seconds to start, according to it's own ingame-timer.

Minimized opsu! "stops" the music

(invalid this if this is intended)
As the title says, minimizing opsu! will stop the background music (including when moving the window as well if not fullscreen)
Affects builds 0.6.0 till latest commit
Last version without this issue: 0.5.0

** Uncaught Exception! ** when running "mvn package" on OSX

Version: 0.9.0
Build date: 2015-06-03 19:54
OS: Mac OS X (x86_64)
JRE: 1.8.0_31
Error: ** Uncaught Exception! **
Stack trace:

java.lang.UnsatisfiedLinkError: Can't load library: /Users/jyip/dev/opsu/./target/natives/liblwjgl.dylib
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1825)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1083)
    at org.lwjgl.Sys$1.run(Sys.java:70)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
    at org.lwjgl.Sys.loadLibrary(Sys.java:95)
    at org.lwjgl.Sys.<clinit>(Sys.java:112)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
    at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
    at itdelatrisu.opsu.Opsu.main(Opsu.java:161)

Infinite Song Reload Dialog

After completed download of a beatmap using the in-game downloader, if f5 is pressed and the refresh dialog pops up, clicking either cancel or refresh button results in another popup after the refresh/current dialog closes. Using keyboard 1/2/esc will not result in a repeat dialog.
Ubuntu 14.04 + OpenJDK 1.7.0_75

Failed to load file '/preview/278395.mp3'.

Version: 0.8.0
Build date: 2015-03-20 04:45
OS: Linux (amd64)
JRE: 1.7.0_75
Error: Failed to load file '/preview/278395.mp3'.
Stack trace:

java.lang.IllegalArgumentException: Invalid format
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
    at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
    at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
    at itdelatrisu.opsu.audio.MultiClip.getClip(MultiClip.java:164)
    at itdelatrisu.opsu.audio.MultiClip.<init>(MultiClip.java:94)
    at itdelatrisu.opsu.audio.SoundController.loadClip(SoundController.java:118)
    at itdelatrisu.opsu.audio.SoundController.playTrack(SoundController.java:336)
    at itdelatrisu.opsu.states.DownloadsMenu$2.run(DownloadsMenu.java:488)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.