53 lines
2.0 KiB
Java
53 lines
2.0 KiB
Java
package jace;
|
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
|
import org.junit.Test;
|
|
|
|
import jace.core.SoundMixer;
|
|
import jace.core.SoundMixer.SoundBuffer;
|
|
import jace.lawless.LawlessHacks;
|
|
import jace.lawless.Media;
|
|
|
|
public class SoundTest extends AbstractFXTest {
|
|
@Test
|
|
public void musicDecodeTest() {
|
|
// For every song in the music folder, decode it and print out the duration
|
|
// This is to make sure that the decoding is working properly
|
|
LawlessHacks lawless = Emulator.withComputer(LawlessHacks::new, null);
|
|
for (String score : lawless.scores.keySet()) {
|
|
lawless.changeMusicScore(score);
|
|
for (int track : lawless.scores.get(score).keySet()) {
|
|
System.out.println("Loading score %s, track %d".formatted(score, track));
|
|
Media m = lawless.getAudioTrack(track);
|
|
System.out.println("Duration: " + m.getTotalDuration());
|
|
}
|
|
}
|
|
}
|
|
|
|
//@Test (Only use this to ensure the sound engine produces audible output, it's otherwise annoying to hear all the time)
|
|
public void soundGenerationTest() {
|
|
try {
|
|
System.out.println("Performing sound test...");
|
|
System.out.println("Create mixer");
|
|
SoundMixer mixer = new SoundMixer(null);
|
|
System.out.println("Attach mixer");
|
|
mixer.attach();
|
|
System.out.println("Allocate buffer");
|
|
SoundBuffer buffer = SoundMixer.createBuffer(false);
|
|
System.out.println("Generate sound");
|
|
for (int i = 0; i < 100000; i++) {
|
|
// Gerate a sin wave with a frequency sweep so we can tell if the buffer is being fully processed
|
|
double x = Math.sin(i*i * 0.0001);
|
|
buffer.playSample((short) (Short.MAX_VALUE * x));
|
|
}
|
|
System.out.println("Closing buffer");
|
|
buffer.shutdown();
|
|
System.out.println("Deactivating sound");
|
|
mixer.detach();
|
|
} catch (InterruptedException | ExecutionException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|