public void reset() {
        execute(() ->  {
            if (state == State.PLAYING || state == State.STOPPED || state == State.COMPLETED) {
                if (player == null) {
                    setState(State.NO_SONG, false);
                } else {
                    if (player.isPlaying() && (state == State.COMPLETED || state == State.STOPPED)) {
                        //when we set "COMPLETED" status while player is still playing (when duration is reached)
                        //then it can happen we come here and player is not paused. Thus we ensure this here
                        this.player.pause();
                    }
                    this.player.seekTo(0);
                    this.timePassedBeforeLastStart = 0;
                    this.timeLastStartTimestamp = state == State.PLAYING ? System.currentTimeMillis() : -1;
                    setState(state == State.COMPLETED ? State.STOPPED : state, true);
                }
            }
        });
    }
Represents and manages one audio file or tone
main/src/main/java/cgeo/geocaching/utils/AudioManager.java