/* * Copyright 2012-2013 Ivan Gadzhega * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package net.ivang.axonix.main.audio.sound.wrappers; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import java.util.Random; /** * @author Ivan Gadzhega * @since 0.2 */ public class CustomSoundWrapper implements SoundWrapper { private final String path; private final boolean concurrent; private final int gapMin, gapRange; private long lastPlayed; private int gap; private Random random; private Sound sound; private long soundId; public CustomSoundWrapper(String path, boolean concurrent, int gapMin, int gapRange) { this.path = path; this.concurrent = concurrent; this.gapMin = gapMin; this.gapRange = gapRange; if (gapRange != 0) { this.random = new Random(); gap = getRandomGap(); } else { gap = gapMin; } } public void init() { this.sound = Gdx.audio.newSound(Gdx.files.internal(path)); } public long play(float volume) { long newId = -1; if (volume > 0) { long now = System.currentTimeMillis(); if (gap <= 0 || now - lastPlayed > gap) { lastPlayed = now; if (gapRange != 0) gap = getRandomGap(); newId = sound.play(volume); // workaround to avoid clapping on android if (!concurrent) { sound.stop(soundId); soundId = newId; } } } return newId; } //--------------------------------------------------------------------- // Helper methods //--------------------------------------------------------------------- private int getRandomGap() { return random.nextInt(gapRange) + gapMin; } }