After switched to MAC, I can't find a bemani emulator for MacOS. I want to write one myself.
I'm trying to make Java play wave audio. Found a sample code online. But the sound doesn't play in run mode. It only plays in debug mode. I found the Clip.drain() method can block the program till the audio data in I/O is empty/played.
import javax.sound.sampled.*;
import java.io.*;
import java.net.*;
public class EntryPoint {
public void playSound() {
try {
// From file
AudioInputStream stream = AudioSystem.getAudioInputStream(new File("/Users/shaotingcai/Documents/USF/cs652/JavaSound/src/me.wav"));
// From URL
//stream = AudioSystem.getAudioInputStream(new URL("http://hostname/audiofile"));
// At present, ALAW and ULAW encodings must be converted
// to PCM_SIGNED before it can be played
AudioFormat format = stream.getFormat();
if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
format = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits()*2,
format.getChannels(),
format.getFrameSize()*2,
format.getFrameRate(),
true); // big endian
stream = AudioSystem.getAudioInputStream(format, stream);
}
// Create the clip
DataLine.Info info = new DataLine.Info(
Clip.class, stream.getFormat(), ((int)stream.getFrameLength()*format.getFrameSize()));
Clip clip = (Clip) AudioSystem.getLine(info);
// This method does not return until the audio file is completely loaded
clip.open(stream);
System.out.println("opened.");
// Start playing
clip.start();
clip.drain();
System.out.println("played");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
EntryPoint main = new EntryPoint();
main.playSound();
}
}