< prev index next >
src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java
Print this page
*** 76,109 ****
public SoftAudioPusher pusher = null;
public AudioInputStream jitter_stream = null;
public SourceDataLine sourceDataLine = null;
public volatile long silent_samples = 0;
private int framesize = 0;
! private WeakReference<AudioInputStream> weak_stream_link;
! private AudioFloatConverter converter;
private float[] silentbuffer = null;
! private int samplesize;
public void setInputStream(AudioInputStream stream)
{
this.stream = stream;
}
public int available() throws IOException {
AudioInputStream local_stream = stream;
if(local_stream != null)
return local_stream.available();
return 0;
}
public int read() throws IOException {
byte[] b = new byte[1];
if (read(b) == -1)
return -1;
return b[0] & 0xFF;
}
public int read(byte[] b, int off, int len) throws IOException {
AudioInputStream local_stream = stream;
if(local_stream != null)
return local_stream.read(b, off, len);
else
--- 76,112 ----
public SoftAudioPusher pusher = null;
public AudioInputStream jitter_stream = null;
public SourceDataLine sourceDataLine = null;
public volatile long silent_samples = 0;
private int framesize = 0;
! private final WeakReference<AudioInputStream> weak_stream_link;
! private final AudioFloatConverter converter;
private float[] silentbuffer = null;
! private final int samplesize;
public void setInputStream(AudioInputStream stream)
{
this.stream = stream;
}
+ @Override
public int available() throws IOException {
AudioInputStream local_stream = stream;
if(local_stream != null)
return local_stream.available();
return 0;
}
+ @Override
public int read() throws IOException {
byte[] b = new byte[1];
if (read(b) == -1)
return -1;
return b[0] & 0xFF;
}
+ @Override
public int read(byte[] b, int off, int len) throws IOException {
AudioInputStream local_stream = stream;
if(local_stream != null)
return local_stream.read(b, off, len);
else
*** 121,130 ****
--- 124,134 ----
Runnable runnable = new Runnable()
{
SoftAudioPusher _pusher = pusher;
AudioInputStream _jitter_stream = jitter_stream;
SourceDataLine _sourceDataLine = sourceDataLine;
+ @Override
public void run()
{
_pusher.stop();
if(_jitter_stream != null)
try {
*** 145,165 ****
}
}
public WeakAudioStream(AudioInputStream stream) {
this.stream = stream;
! weak_stream_link = new WeakReference<AudioInputStream>(stream);
converter = AudioFloatConverter.getConverter(stream.getFormat());
samplesize = stream.getFormat().getFrameSize() / stream.getFormat().getChannels();
framesize = stream.getFormat().getFrameSize();
}
public AudioInputStream getAudioInputStream()
{
return new AudioInputStream(this, stream.getFormat(), AudioSystem.NOT_SPECIFIED);
}
public void close() throws IOException
{
AudioInputStream astream = weak_stream_link.get();
if(astream != null)
astream.close();
--- 149,170 ----
}
}
public WeakAudioStream(AudioInputStream stream) {
this.stream = stream;
! weak_stream_link = new WeakReference<>(stream);
converter = AudioFloatConverter.getConverter(stream.getFormat());
samplesize = stream.getFormat().getFrameSize() / stream.getFormat().getChannels();
framesize = stream.getFormat().getFrameSize();
}
public AudioInputStream getAudioInputStream()
{
return new AudioInputStream(this, stream.getFormat(), AudioSystem.NOT_SPECIFIED);
}
+ @Override
public void close() throws IOException
{
AudioInputStream astream = weak_stream_link.get();
if(astream != null)
astream.close();
*** 231,248 ****
private boolean jitter_correction = false;
private SoftMainMixer mainmixer;
private SoftVoice[] voices;
! private Map<String, SoftTuning> tunings
! = new HashMap<String, SoftTuning>();
! private Map<String, SoftInstrument> inslist
! = new HashMap<String, SoftInstrument>();
! private Map<String, ModelInstrument> loadedlist
! = new HashMap<String, ModelInstrument>();
!
! private ArrayList<Receiver> recvslist = new ArrayList<Receiver>();
private void getBuffers(ModelInstrument instrument,
List<ModelByteBuffer> buffers) {
for (ModelPerformer performer : instrument.getPerformers()) {
if (performer.getOscillators() != null) {
--- 236,249 ----
private boolean jitter_correction = false;
private SoftMainMixer mainmixer;
private SoftVoice[] voices;
! private final Map<String, SoftTuning> tunings = new HashMap<>();
! private final Map<String, SoftInstrument> inslist = new HashMap<>();
! private final Map<String, ModelInstrument> loadedlist = new HashMap<>();
! private final ArrayList<Receiver> recvslist = new ArrayList<>();
private void getBuffers(ModelInstrument instrument,
List<ModelByteBuffer> buffers) {
for (ModelPerformer performer : instrument.getPerformers()) {
if (performer.getOscillators() != null) {
*** 262,272 ****
}
private boolean loadSamples(List<ModelInstrument> instruments) {
if (largemode)
return true;
! List<ModelByteBuffer> buffers = new ArrayList<ModelByteBuffer>();
for (ModelInstrument instrument : instruments)
getBuffers(instrument, buffers);
try {
ModelByteBuffer.loadAll(buffers);
} catch (IOException e) {
--- 263,273 ----
}
private boolean loadSamples(List<ModelInstrument> instruments) {
if (largemode)
return true;
! List<ModelByteBuffer> buffers = new ArrayList<>();
for (ModelInstrument instrument : instruments)
getBuffers(instrument, buffers);
try {
ModelByteBuffer.loadAll(buffers);
} catch (IOException e) {
*** 483,510 ****
--- 484,515 ----
tunings.put(t_id, tuning);
}
return tuning;
}
+ @Override
public long getLatency() {
synchronized (control_mutex) {
return latency;
}
}
+ @Override
public AudioFormat getFormat() {
synchronized (control_mutex) {
return format;
}
}
+ @Override
public int getMaxPolyphony() {
synchronized (control_mutex) {
return maxpoly;
}
}
+ @Override
public MidiChannel[] getChannels() {
synchronized (control_mutex) {
// if (external_channels == null) => the synthesizer is not open,
// create 16 proxy channels
*** 523,532 ****
--- 528,538 ----
ret[i] = external_channels[i];
return ret;
}
}
+ @Override
public VoiceStatus[] getVoiceStatus() {
if (!isOpen()) {
VoiceStatus[] tempVoiceStatusArray
= new VoiceStatus[getMaxPolyphony()];
for (int i = 0; i < tempVoiceStatusArray.length; i++) {
*** 557,583 ****
}
return tempVoiceStatusArray;
}
}
public boolean isSoundbankSupported(Soundbank soundbank) {
for (Instrument ins: soundbank.getInstruments())
if (!(ins instanceof ModelInstrument))
return false;
return true;
}
public boolean loadInstrument(Instrument instrument) {
if (instrument == null || (!(instrument instanceof ModelInstrument))) {
throw new IllegalArgumentException("Unsupported instrument: " +
instrument);
}
! List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
instruments.add((ModelInstrument)instrument);
return loadInstruments(instruments);
}
public void unloadInstrument(Instrument instrument) {
if (instrument == null || (!(instrument instanceof ModelInstrument))) {
throw new IllegalArgumentException("Unsupported instrument: " +
instrument);
}
--- 563,592 ----
}
return tempVoiceStatusArray;
}
}
+ @Override
public boolean isSoundbankSupported(Soundbank soundbank) {
for (Instrument ins: soundbank.getInstruments())
if (!(ins instanceof ModelInstrument))
return false;
return true;
}
+ @Override
public boolean loadInstrument(Instrument instrument) {
if (instrument == null || (!(instrument instanceof ModelInstrument))) {
throw new IllegalArgumentException("Unsupported instrument: " +
instrument);
}
! List<ModelInstrument> instruments = new ArrayList<>();
instruments.add((ModelInstrument)instrument);
return loadInstruments(instruments);
}
+ @Override
public void unloadInstrument(Instrument instrument) {
if (instrument == null || (!(instrument instanceof ModelInstrument))) {
throw new IllegalArgumentException("Unsupported instrument: " +
instrument);
}
*** 594,603 ****
--- 603,613 ----
channels[i].allSoundOff();
}
}
}
+ @Override
public boolean remapInstrument(Instrument from, Instrument to) {
if (from == null)
throw new NullPointerException();
if (to == null)
*** 621,639 ****
(ModelInstrument)to, from.getPatch());
return loadInstrument(mfrom);
}
}
public Soundbank getDefaultSoundbank() {
synchronized (SoftSynthesizer.class) {
if (defaultSoundBank != null)
return defaultSoundBank;
! List<PrivilegedAction<InputStream>> actions =
! new ArrayList<PrivilegedAction<InputStream>>();
actions.add(new PrivilegedAction<InputStream>() {
public InputStream run() {
File javahome = new File(System.getProperties()
.getProperty("java.home"));
File libaudio = new File(new File(javahome, "lib"), "audio");
if (libaudio.isDirectory()) {
--- 631,650 ----
(ModelInstrument)to, from.getPatch());
return loadInstrument(mfrom);
}
}
+ @Override
public Soundbank getDefaultSoundbank() {
synchronized (SoftSynthesizer.class) {
if (defaultSoundBank != null)
return defaultSoundBank;
! List<PrivilegedAction<InputStream>> actions = new ArrayList<>();
actions.add(new PrivilegedAction<InputStream>() {
+ @Override
public InputStream run() {
File javahome = new File(System.getProperties()
.getProperty("java.home"));
File libaudio = new File(new File(javahome, "lib"), "audio");
if (libaudio.isDirectory()) {
*** 665,674 ****
--- 676,686 ----
return null;
}
});
actions.add(new PrivilegedAction<InputStream>() {
+ @Override
public InputStream run() {
if (System.getProperties().getProperty("os.name")
.startsWith("Linux")) {
File[] systemSoundFontsDir = new File[] {
*** 699,708 ****
--- 711,721 ----
return null;
}
});
actions.add(new PrivilegedAction<InputStream>() {
+ @Override
public InputStream run() {
if (System.getProperties().getProperty("os.name")
.startsWith("Windows")) {
File gm_dls = new File(System.getenv("SystemRoot")
+ "\\system32\\drivers\\gm.dls");
*** 716,725 ****
--- 729,739 ----
return null;
}
});
actions.add(new PrivilegedAction<InputStream>() {
+ @Override
public InputStream run() {
/*
* Try to load saved generated soundbank
*/
File userhome = new File(System.getProperty("user.home"),
*** 796,814 ****
--- 810,830 ----
}
}
return defaultSoundBank;
}
+ @Override
public Instrument[] getAvailableInstruments() {
Soundbank defsbk = getDefaultSoundbank();
if (defsbk == null)
return new Instrument[0];
Instrument[] inslist_array = defsbk.getInstruments();
Arrays.sort(inslist_array, new ModelInstrumentComparator());
return inslist_array;
}
+ @Override
public Instrument[] getLoadedInstruments() {
if (!isOpen())
return new Instrument[0];
synchronized (control_mutex) {
*** 818,839 ****
Arrays.sort(inslist_array, new ModelInstrumentComparator());
return inslist_array;
}
}
public boolean loadAllInstruments(Soundbank soundbank) {
! List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
for (Instrument ins: soundbank.getInstruments()) {
if (ins == null || !(ins instanceof ModelInstrument)) {
throw new IllegalArgumentException(
"Unsupported instrument: " + ins);
}
instruments.add((ModelInstrument)ins);
}
return loadInstruments(instruments);
}
public void unloadAllInstruments(Soundbank soundbank) {
if (soundbank == null || !isSoundbankSupported(soundbank))
throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
if (!isOpen())
--- 834,857 ----
Arrays.sort(inslist_array, new ModelInstrumentComparator());
return inslist_array;
}
}
+ @Override
public boolean loadAllInstruments(Soundbank soundbank) {
! List<ModelInstrument> instruments = new ArrayList<>();
for (Instrument ins: soundbank.getInstruments()) {
if (ins == null || !(ins instanceof ModelInstrument)) {
throw new IllegalArgumentException(
"Unsupported instrument: " + ins);
}
instruments.add((ModelInstrument)ins);
}
return loadInstruments(instruments);
}
+ @Override
public void unloadAllInstruments(Soundbank soundbank) {
if (soundbank == null || !isSoundbankSupported(soundbank))
throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
if (!isOpen())
*** 844,855 ****
unloadInstrument(ins);
}
}
}
public boolean loadInstruments(Soundbank soundbank, Patch[] patchList) {
! List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
for (Patch patch: patchList) {
Instrument ins = soundbank.getInstrument(patch);
if (ins == null || !(ins instanceof ModelInstrument)) {
throw new IllegalArgumentException(
"Unsupported instrument: " + ins);
--- 862,874 ----
unloadInstrument(ins);
}
}
}
+ @Override
public boolean loadInstruments(Soundbank soundbank, Patch[] patchList) {
! List<ModelInstrument> instruments = new ArrayList<>();
for (Patch patch: patchList) {
Instrument ins = soundbank.getInstrument(patch);
if (ins == null || !(ins instanceof ModelInstrument)) {
throw new IllegalArgumentException(
"Unsupported instrument: " + ins);
*** 857,866 ****
--- 876,886 ----
instruments.add((ModelInstrument)ins);
}
return loadInstruments(instruments);
}
+ @Override
public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
if (soundbank == null || !isSoundbankSupported(soundbank))
throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
if (!isOpen())
*** 872,881 ****
--- 892,902 ----
unloadInstrument(ins);
}
}
}
+ @Override
public MidiDevice.Info getDeviceInfo() {
return info;
}
private Properties getStoredProperties() {
*** 899,911 ****
}
return p;
});
}
public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map<String, Object> info) {
! List<AudioSynthesizerPropertyInfo> list =
! new ArrayList<AudioSynthesizerPropertyInfo>();
AudioSynthesizerPropertyInfo item;
// If info != null or synthesizer is closed
// we return how the synthesizer will be set on next open
--- 920,932 ----
}
return p;
});
}
+ @Override
public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map<String, Object> info) {
! List<AudioSynthesizerPropertyInfo> list = new ArrayList<>();
AudioSynthesizerPropertyInfo item;
// If info != null or synthesizer is closed
// we return how the synthesizer will be set on next open
*** 1056,1075 ****
--- 1077,1098 ----
}
return items;
}
+ @Override
public void open() throws MidiUnavailableException {
if (isOpen()) {
synchronized (control_mutex) {
implicitOpen = false;
}
return;
}
open(null, null);
}
+ @Override
public void open(SourceDataLine line, Map<String, Object> info) throws MidiUnavailableException {
if (isOpen()) {
synchronized (control_mutex) {
implicitOpen = false;
}
*** 1160,1169 ****
--- 1183,1193 ----
throw ex;
}
}
}
+ @Override
public AudioInputStream openStream(AudioFormat targetFormat,
Map<String, Object> info) throws MidiUnavailableException {
if (isOpen())
throw new MidiUnavailableException("Synthesizer is already open");
*** 1241,1250 ****
--- 1265,1275 ----
return mainmixer.getInputStream();
}
}
+ @Override
public void close() {
if (!isOpen())
return;
*** 1299,1361 ****
recvslist.get(recvslist.size() - 1).close();
}
}
public boolean isOpen() {
synchronized (control_mutex) {
return open;
}
}
public long getMicrosecondPosition() {
if (!isOpen())
return 0;
synchronized (control_mutex) {
return mainmixer.getMicrosecondPosition();
}
}
public int getMaxReceivers() {
return -1;
}
public int getMaxTransmitters() {
return 0;
}
public Receiver getReceiver() throws MidiUnavailableException {
synchronized (control_mutex) {
SoftReceiver receiver = new SoftReceiver(this);
receiver.open = open;
recvslist.add(receiver);
return receiver;
}
}
public List<Receiver> getReceivers() {
synchronized (control_mutex) {
! ArrayList<Receiver> recvs = new ArrayList<Receiver>();
recvs.addAll(recvslist);
return recvs;
}
}
public Transmitter getTransmitter() throws MidiUnavailableException {
throw new MidiUnavailableException("No transmitter available");
}
public List<Transmitter> getTransmitters() {
! return new ArrayList<Transmitter>();
}
public Receiver getReceiverReferenceCounting()
throws MidiUnavailableException {
if (!isOpen()) {
open();
--- 1324,1395 ----
recvslist.get(recvslist.size() - 1).close();
}
}
+ @Override
public boolean isOpen() {
synchronized (control_mutex) {
return open;
}
}
+ @Override
public long getMicrosecondPosition() {
if (!isOpen())
return 0;
synchronized (control_mutex) {
return mainmixer.getMicrosecondPosition();
}
}
+ @Override
public int getMaxReceivers() {
return -1;
}
+ @Override
public int getMaxTransmitters() {
return 0;
}
+ @Override
public Receiver getReceiver() throws MidiUnavailableException {
synchronized (control_mutex) {
SoftReceiver receiver = new SoftReceiver(this);
receiver.open = open;
recvslist.add(receiver);
return receiver;
}
}
+ @Override
public List<Receiver> getReceivers() {
synchronized (control_mutex) {
! ArrayList<Receiver> recvs = new ArrayList<>();
recvs.addAll(recvslist);
return recvs;
}
}
+ @Override
public Transmitter getTransmitter() throws MidiUnavailableException {
throw new MidiUnavailableException("No transmitter available");
}
+ @Override
public List<Transmitter> getTransmitters() {
! return new ArrayList<>();
}
+ @Override
public Receiver getReceiverReferenceCounting()
throws MidiUnavailableException {
if (!isOpen()) {
open();
*** 1365,1374 ****
--- 1399,1409 ----
}
return getReceiver();
}
+ @Override
public Transmitter getTransmitterReferenceCounting()
throws MidiUnavailableException {
throw new MidiUnavailableException("No transmitter available");
}
< prev index next >