/**
* Copyright (C) 2002-2012 The FreeCol Team
*
* This file is part of FreeCol.
*
* FreeCol is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* FreeCol is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FreeCol. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.freecol.client.gui.sound;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioSystem;
import net.sf.freecol.client.ClientOptions;
import net.sf.freecol.common.io.FreeColDataFile;
import net.sf.freecol.common.io.FreeColDirectories;
import net.sf.freecol.common.io.FreeColTcFile;
import net.sf.freecol.common.option.AudioMixerOption;
import net.sf.freecol.common.option.PercentageOption;
import net.sf.freecol.common.resources.ResourceManager;
import net.sf.freecol.util.test.FreeColTestCase;
public class SoundTest extends FreeColTestCase {
private SoundPlayer soundPlayer = null;
@Override
public void setUp() {
ClientOptions clientOptions = new ClientOptions();
final AudioMixerOption amo = (AudioMixerOption) clientOptions.getOption(ClientOptions.AUDIO_MIXER);
final PercentageOption po = (PercentageOption) clientOptions.getOption(ClientOptions.AUDIO_VOLUME);
po.setValue(10); // 10% volume
try {
soundPlayer = new SoundPlayer(amo, po);
} catch (Exception e) {
fail("Could not construct sound player: " + e.getMessage());
}
File baseDirectory = FreeColDirectories.getBaseDirectory();
FreeColDataFile baseData = new FreeColDataFile(baseDirectory);
ResourceManager.setBaseMapping(baseData.getResourceMapping());
}
@Override
public void tearDown() {
soundPlayer = null;
}
private void playSound(String id) {
File file = ResourceManager.getAudio(id);
if (file == null) {
// Can not rely on loading a valid sound resource in the
// test suite as the requisite ogg-support jars may not be
// loaded. However we can insist that the resource was at
// least registered.
assertTrue("Resource " + id + " should be present",
ResourceManager.hasResource(id));
} else {
try {
assertNotNull(AudioSystem.getAudioInputStream(file));
soundPlayer.playOnce(file);
try { // Just play the beginning of the sound to check it works
Thread.sleep(100);
soundPlayer.stop();
Thread.sleep(50);
} catch (InterruptedException e) {}
} catch (Exception e) {
fail("Could not play " + id + ": " + e.getMessage());
}
}
}
public void testSound() {
// these sounds are base resources, and should be enough for a test
playSound("sound.intro.general");
playSound("sound.event.illegalMove");
// other sounds require loading a rule set
}
public void testClassic() {
try {
FreeColTcFile tcData = new FreeColTcFile("classic");
ResourceManager.setTcMapping(tcData.getResourceMapping());
} catch (IOException e) {
fail("Could not load classic ruleset.");
}
playSound("sound.intro.model.nation.english");
playSound("sound.intro.model.nation.dutch");
playSound("sound.intro.model.nation.french");
playSound("sound.intro.model.nation.spanish");
playSound("sound.anthem.model.nation.dutch");
playSound("sound.anthem.model.nation.english");
playSound("sound.anthem.model.nation.french");
playSound("sound.anthem.model.nation.spanish");
playSound("sound.attack.artillery");
playSound("sound.attack.mounted");
playSound("sound.attack.naval");
playSound("sound.event.meet.model.nation.aztec");
playSound("sound.event.buildingComplete");
playSound("sound.event.captureColony");
playSound("sound.event.fountainOfYouth");
playSound("sound.event.loadCargo");
playSound("sound.event.missionEstablished");
playSound("sound.event.sellCargo");
playSound("sound.event.shipSunk");
}
}