< 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 >