jdk/src/java.desktop/share/classes/com/sun/media/sound/SoftSynthesizer.java
author chegar
Sun, 17 Aug 2014 15:54:13 +0100
changeset 25859 3317bb8137f4
parent 24548 jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java@9c007a986347
child 26037 508779ce6619
permissions -rw-r--r--
8054834: Modular Source Code Reviewed-by: alanb, chegar, ihse, mduigou Contributed-by: alan.bateman@oracle.com, alex.buckley@oracle.com, chris.hegarty@oracle.com, erik.joelsson@oracle.com, jonathan.gibbons@oracle.com, karen.kinnear@oracle.com, magnus.ihse.bursie@oracle.com, mandy.chung@oracle.com, mark.reinhold@oracle.com, paul.sandoz@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     1
/*
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
     2
 * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     4
 *
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4385
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4385
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    10
 *
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    15
 * accompanied this code).
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    16
 *
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4385
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4385
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4385
diff changeset
    23
 * questions.
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    24
 */
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    25
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    26
package com.sun.media.sound;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    27
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    28
import java.io.BufferedInputStream;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    29
import java.io.File;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    30
import java.io.FileInputStream;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    31
import java.io.FileOutputStream;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    32
import java.io.IOException;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    33
import java.io.InputStream;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    34
import java.io.OutputStream;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    35
import java.lang.ref.WeakReference;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    36
import java.security.AccessController;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    37
import java.security.PrivilegedAction;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    38
import java.util.ArrayList;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    39
import java.util.Arrays;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    40
import java.util.HashMap;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    41
import java.util.List;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    42
import java.util.Map;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    43
import java.util.Properties;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    44
import java.util.StringTokenizer;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    45
import java.util.prefs.BackingStoreException;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
    46
import java.util.prefs.Preferences;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    47
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    48
import javax.sound.midi.Instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    49
import javax.sound.midi.MidiChannel;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    50
import javax.sound.midi.MidiDevice;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    51
import javax.sound.midi.MidiSystem;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    52
import javax.sound.midi.MidiUnavailableException;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    53
import javax.sound.midi.Patch;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    54
import javax.sound.midi.Receiver;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    55
import javax.sound.midi.Soundbank;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    56
import javax.sound.midi.Transmitter;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    57
import javax.sound.midi.VoiceStatus;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    58
import javax.sound.sampled.AudioFormat;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    59
import javax.sound.sampled.AudioInputStream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    60
import javax.sound.sampled.AudioSystem;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    61
import javax.sound.sampled.LineUnavailableException;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    62
import javax.sound.sampled.SourceDataLine;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    63
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    64
/**
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    65
 * The software synthesizer class.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    66
 *
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    67
 * @author Karl Helgason
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    68
 */
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
    69
public final class SoftSynthesizer implements AudioSynthesizer,
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    70
        ReferenceCountingDevice {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    71
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
    72
    protected static final class WeakAudioStream extends InputStream
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    73
    {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    74
        private volatile AudioInputStream stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    75
        public SoftAudioPusher pusher = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    76
        public AudioInputStream jitter_stream = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    77
        public SourceDataLine sourceDataLine = null;
4385
cf4674d08b51 6833357: Improve time-stamp support in Gervill to reduce jitter
kalli
parents: 2654
diff changeset
    78
        public volatile long silent_samples = 0;
cf4674d08b51 6833357: Improve time-stamp support in Gervill to reduce jitter
kalli
parents: 2654
diff changeset
    79
        private int framesize = 0;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    80
        private WeakReference<AudioInputStream> weak_stream_link;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    81
        private AudioFloatConverter converter;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    82
        private float[] silentbuffer = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    83
        private int samplesize;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    84
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    85
        public void setInputStream(AudioInputStream stream)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    86
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    87
            this.stream = stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    88
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    89
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    90
        public int available() throws IOException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    91
            AudioInputStream local_stream = stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    92
            if(local_stream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    93
                return local_stream.available();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    94
            return 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    95
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    96
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    97
        public int read() throws IOException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    98
             byte[] b = new byte[1];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
    99
             if (read(b) == -1)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   100
                  return -1;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   101
             return b[0] & 0xFF;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   102
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   103
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   104
        public int read(byte[] b, int off, int len) throws IOException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   105
             AudioInputStream local_stream = stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   106
             if(local_stream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   107
                 return local_stream.read(b, off, len);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   108
             else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   109
             {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   110
                 int flen = len / samplesize;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   111
                 if(silentbuffer == null || silentbuffer.length < flen)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   112
                     silentbuffer = new float[flen];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   113
                 converter.toByteArray(silentbuffer, flen, b, off);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   114
4385
cf4674d08b51 6833357: Improve time-stamp support in Gervill to reduce jitter
kalli
parents: 2654
diff changeset
   115
                 silent_samples += (long)((len / framesize));
cf4674d08b51 6833357: Improve time-stamp support in Gervill to reduce jitter
kalli
parents: 2654
diff changeset
   116
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   117
                 if(pusher != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   118
                 if(weak_stream_link.get() == null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   119
                 {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   120
                     Runnable runnable = new Runnable()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   121
                     {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   122
                         SoftAudioPusher _pusher = pusher;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   123
                         AudioInputStream _jitter_stream = jitter_stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   124
                         SourceDataLine _sourceDataLine = sourceDataLine;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   125
                         public void run()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   126
                         {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   127
                             _pusher.stop();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   128
                             if(_jitter_stream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   129
                                try {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   130
                                    _jitter_stream.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   131
                                } catch (IOException e) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   132
                                    e.printStackTrace();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   133
                                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   134
                             if(_sourceDataLine != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   135
                                 _sourceDataLine.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   136
                         }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   137
                     };
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   138
                     pusher = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   139
                     jitter_stream = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   140
                     sourceDataLine = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   141
                     new Thread(runnable).start();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   142
                 }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   143
                 return len;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   144
             }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   145
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   146
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   147
        public WeakAudioStream(AudioInputStream stream) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   148
            this.stream = stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   149
            weak_stream_link = new WeakReference<AudioInputStream>(stream);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   150
            converter = AudioFloatConverter.getConverter(stream.getFormat());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   151
            samplesize = stream.getFormat().getFrameSize() / stream.getFormat().getChannels();
4385
cf4674d08b51 6833357: Improve time-stamp support in Gervill to reduce jitter
kalli
parents: 2654
diff changeset
   152
            framesize = stream.getFormat().getFrameSize();
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   153
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   154
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   155
        public AudioInputStream getAudioInputStream()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   156
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   157
            return new AudioInputStream(this, stream.getFormat(), AudioSystem.NOT_SPECIFIED);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   158
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   159
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   160
        public void close() throws IOException
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   161
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   162
            AudioInputStream astream  = weak_stream_link.get();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   163
            if(astream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   164
                astream.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   165
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   166
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   167
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   168
    private static class Info extends MidiDevice.Info {
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   169
        Info() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   170
            super(INFO_NAME, INFO_VENDOR, INFO_DESCRIPTION, INFO_VERSION);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   171
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   172
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   173
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   174
    static final String INFO_NAME = "Gervill";
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   175
    static final String INFO_VENDOR = "OpenJDK";
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   176
    static final String INFO_DESCRIPTION = "Software MIDI Synthesizer";
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   177
    static final String INFO_VERSION = "1.0";
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   178
    final static MidiDevice.Info info = new Info();
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   179
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   180
    private static SourceDataLine testline = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   181
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   182
    private static Soundbank defaultSoundBank = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   183
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   184
    WeakAudioStream weakstream = null;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   185
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   186
    final Object control_mutex = this;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   187
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   188
    int voiceIDCounter = 0;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   189
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   190
    // 0: default
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   191
    // 1: DLS Voice Allocation
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   192
    int voice_allocation_mode = 0;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   193
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   194
    boolean load_default_soundbank = false;
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   195
    boolean reverb_light = true;
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   196
    boolean reverb_on = true;
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   197
    boolean chorus_on = true;
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   198
    boolean agc_on = true;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   199
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   200
    SoftChannel[] channels;
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   201
    SoftChannelProxy[] external_channels = null;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   202
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   203
    private boolean largemode = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   204
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   205
    // 0: GM Mode off (default)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   206
    // 1: GM Level 1
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   207
    // 2: GM Level 2
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   208
    private int gmmode = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   209
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   210
    private int deviceid = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   211
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   212
    private AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   213
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   214
    private SourceDataLine sourceDataLine = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   215
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   216
    private SoftAudioPusher pusher = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   217
    private AudioInputStream pusher_stream = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   218
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   219
    private float controlrate = 147f;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   220
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   221
    private boolean open = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   222
    private boolean implicitOpen = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   223
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   224
    private String resamplerType = "linear";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   225
    private SoftResampler resampler = new SoftLinearResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   226
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   227
    private int number_of_midi_channels = 16;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   228
    private int maxpoly = 64;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   229
    private long latency = 200000; // 200 msec
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   230
    private boolean jitter_correction = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   231
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   232
    private SoftMainMixer mainmixer;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   233
    private SoftVoice[] voices;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   234
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   235
    private Map<String, SoftTuning> tunings
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   236
            = new HashMap<String, SoftTuning>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   237
    private Map<String, SoftInstrument> inslist
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   238
            = new HashMap<String, SoftInstrument>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   239
    private Map<String, ModelInstrument> loadedlist
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   240
            = new HashMap<String, ModelInstrument>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   241
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   242
    private ArrayList<Receiver> recvslist = new ArrayList<Receiver>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   243
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   244
    private void getBuffers(ModelInstrument instrument,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   245
            List<ModelByteBuffer> buffers) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   246
        for (ModelPerformer performer : instrument.getPerformers()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   247
            if (performer.getOscillators() != null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   248
                for (ModelOscillator osc : performer.getOscillators()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   249
                    if (osc instanceof ModelByteBufferWavetable) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   250
                        ModelByteBufferWavetable w = (ModelByteBufferWavetable)osc;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   251
                        ModelByteBuffer buff = w.getBuffer();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   252
                        if (buff != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   253
                            buffers.add(buff);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   254
                        buff = w.get8BitExtensionBuffer();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   255
                        if (buff != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   256
                            buffers.add(buff);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   257
                    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   258
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   259
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   260
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   261
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   262
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   263
    private boolean loadSamples(List<ModelInstrument> instruments) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   264
        if (largemode)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   265
            return true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   266
        List<ModelByteBuffer> buffers = new ArrayList<ModelByteBuffer>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   267
        for (ModelInstrument instrument : instruments)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   268
            getBuffers(instrument, buffers);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   269
        try {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   270
            ModelByteBuffer.loadAll(buffers);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   271
        } catch (IOException e) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   272
            return false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   273
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   274
        return true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   275
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   276
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   277
    private boolean loadInstruments(List<ModelInstrument> instruments) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   278
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   279
            return false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   280
        if (!loadSamples(instruments))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   281
            return false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   282
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   283
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   284
            if (channels != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   285
                for (SoftChannel c : channels)
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   286
                {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   287
                    c.current_instrument = null;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   288
                    c.current_director = null;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   289
                }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   290
            for (Instrument instrument : instruments) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   291
                String pat = patchToString(instrument.getPatch());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   292
                SoftInstrument softins
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   293
                        = new SoftInstrument((ModelInstrument) instrument);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   294
                inslist.put(pat, softins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   295
                loadedlist.put(pat, (ModelInstrument) instrument);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   296
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   297
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   298
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   299
        return true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   300
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   301
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   302
    private void processPropertyInfo(Map<String, Object> info) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   303
        AudioSynthesizerPropertyInfo[] items = getPropertyInfo(info);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   304
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   305
        String resamplerType = (String)items[0].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   306
        if (resamplerType.equalsIgnoreCase("point"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   307
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   308
            this.resampler = new SoftPointResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   309
            this.resamplerType = "point";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   310
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   311
        else if (resamplerType.equalsIgnoreCase("linear"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   312
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   313
            this.resampler = new SoftLinearResampler2();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   314
            this.resamplerType = "linear";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   315
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   316
        else if (resamplerType.equalsIgnoreCase("linear1"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   317
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   318
            this.resampler = new SoftLinearResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   319
            this.resamplerType = "linear1";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   320
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   321
        else if (resamplerType.equalsIgnoreCase("linear2"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   322
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   323
            this.resampler = new SoftLinearResampler2();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   324
            this.resamplerType = "linear2";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   325
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   326
        else if (resamplerType.equalsIgnoreCase("cubic"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   327
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   328
            this.resampler = new SoftCubicResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   329
            this.resamplerType = "cubic";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   330
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   331
        else if (resamplerType.equalsIgnoreCase("lanczos"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   332
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   333
            this.resampler = new SoftLanczosResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   334
            this.resamplerType = "lanczos";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   335
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   336
        else if (resamplerType.equalsIgnoreCase("sinc"))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   337
        {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   338
            this.resampler = new SoftSincResampler();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   339
            this.resamplerType = "sinc";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   340
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   341
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   342
        setFormat((AudioFormat)items[2].value);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   343
        controlrate = (Float)items[1].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   344
        latency = (Long)items[3].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   345
        deviceid = (Integer)items[4].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   346
        maxpoly = (Integer)items[5].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   347
        reverb_on = (Boolean)items[6].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   348
        chorus_on = (Boolean)items[7].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   349
        agc_on = (Boolean)items[8].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   350
        largemode = (Boolean)items[9].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   351
        number_of_midi_channels = (Integer)items[10].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   352
        jitter_correction = (Boolean)items[11].value;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   353
        reverb_light = (Boolean)items[12].value;
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   354
        load_default_soundbank = (Boolean)items[13].value;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   355
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   356
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   357
    private String patchToString(Patch patch) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   358
        if (patch instanceof ModelPatch && ((ModelPatch) patch).isPercussion())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   359
            return "p." + patch.getProgram() + "." + patch.getBank();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   360
        else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   361
            return patch.getProgram() + "." + patch.getBank();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   362
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   363
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   364
    private void setFormat(AudioFormat format) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   365
        if (format.getChannels() > 2) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   366
            throw new IllegalArgumentException(
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   367
                    "Only mono and stereo audio supported.");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   368
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   369
        if (AudioFloatConverter.getConverter(format) == null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   370
            throw new IllegalArgumentException("Audio format not supported.");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   371
        this.format = format;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   372
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   373
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   374
    void removeReceiver(Receiver recv) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   375
        boolean perform_close = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   376
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   377
            if (recvslist.remove(recv)) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   378
                if (implicitOpen && recvslist.isEmpty())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   379
                    perform_close = true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   380
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   381
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   382
        if (perform_close)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   383
            close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   384
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   385
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   386
    SoftMainMixer getMainMixer() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   387
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   388
            return null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   389
        return mainmixer;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   390
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   391
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   392
    SoftInstrument findInstrument(int program, int bank, int channel) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   393
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   394
        // Add support for GM2 banks 0x78 and 0x79
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   395
        // as specified in DLS 2.2 in Section 1.4.6
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   396
        // which allows using percussion and melodic instruments
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   397
        // on all channels
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   398
        if (bank >> 7 == 0x78 || bank >> 7 == 0x79) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   399
            SoftInstrument current_instrument
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   400
                    = inslist.get(program + "." + bank);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   401
            if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   402
                return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   403
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   404
            String p_plaf;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   405
            if (bank >> 7 == 0x78)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   406
                p_plaf = "p.";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   407
            else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   408
                p_plaf = "";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   409
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   410
            // Instrument not found fallback to MSB:bank, LSB:0
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   411
            current_instrument = inslist.get(p_plaf + program + "."
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   412
                    + ((bank & 128) << 7));
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   413
            if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   414
                return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   415
            // Instrument not found fallback to MSB:0, LSB:bank
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   416
            current_instrument = inslist.get(p_plaf + program + "."
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   417
                    + (bank & 128));
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   418
            if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   419
                return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   420
            // Instrument not found fallback to MSB:0, LSB:0
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   421
            current_instrument = inslist.get(p_plaf + program + ".0");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   422
            if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   423
                return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   424
            // Instrument not found fallback to MSB:0, LSB:0, program=0
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   425
            current_instrument = inslist.get(p_plaf + program + "0.0");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   426
            if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   427
                return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   428
            return null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   429
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   430
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   431
        // Channel 10 uses percussion instruments
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   432
        String p_plaf;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   433
        if (channel == 9)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   434
            p_plaf = "p.";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   435
        else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   436
            p_plaf = "";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   437
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   438
        SoftInstrument current_instrument
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   439
                = inslist.get(p_plaf + program + "." + bank);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   440
        if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   441
            return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   442
        // Instrument not found fallback to MSB:0, LSB:0
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   443
        current_instrument = inslist.get(p_plaf + program + ".0");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   444
        if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   445
            return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   446
        // Instrument not found fallback to MSB:0, LSB:0, program=0
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   447
        current_instrument = inslist.get(p_plaf + "0.0");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   448
        if (current_instrument != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   449
            return current_instrument;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   450
        return null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   451
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   452
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   453
    int getVoiceAllocationMode() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   454
        return voice_allocation_mode;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   455
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   456
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   457
    int getGeneralMidiMode() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   458
        return gmmode;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   459
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   460
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   461
    void setGeneralMidiMode(int gmmode) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   462
        this.gmmode = gmmode;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   463
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   464
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   465
    int getDeviceID() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   466
        return deviceid;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   467
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   468
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   469
    float getControlRate() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   470
        return controlrate;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   471
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   472
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   473
    SoftVoice[] getVoices() {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   474
        return voices;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   475
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   476
18215
b2afd66ce6db 8006328: Improve robustness of sound classes
serb
parents: 6502
diff changeset
   477
    SoftTuning getTuning(Patch patch) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   478
        String t_id = patchToString(patch);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   479
        SoftTuning tuning = tunings.get(t_id);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   480
        if (tuning == null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   481
            tuning = new SoftTuning(patch);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   482
            tunings.put(t_id, tuning);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   483
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   484
        return tuning;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   485
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   486
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   487
    public long getLatency() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   488
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   489
            return latency;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   490
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   491
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   492
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   493
    public AudioFormat getFormat() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   494
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   495
            return format;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   496
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   497
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   498
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   499
    public int getMaxPolyphony() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   500
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   501
            return maxpoly;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   502
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   503
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   504
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   505
    public MidiChannel[] getChannels() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   506
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   507
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   508
            // if (external_channels == null) => the synthesizer is not open,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   509
            // create 16 proxy channels
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   510
            // otherwise external_channels has the same length as channels array
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   511
            if (external_channels == null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   512
                external_channels = new SoftChannelProxy[16];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   513
                for (int i = 0; i < external_channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   514
                    external_channels[i] = new SoftChannelProxy();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   515
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   516
            MidiChannel[] ret;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   517
            if (isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   518
                ret = new MidiChannel[channels.length];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   519
            else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   520
                ret = new MidiChannel[16];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   521
            for (int i = 0; i < ret.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   522
                ret[i] = external_channels[i];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   523
            return ret;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   524
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   525
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   526
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   527
    public VoiceStatus[] getVoiceStatus() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   528
        if (!isOpen()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   529
            VoiceStatus[] tempVoiceStatusArray
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   530
                    = new VoiceStatus[getMaxPolyphony()];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   531
            for (int i = 0; i < tempVoiceStatusArray.length; i++) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   532
                VoiceStatus b = new VoiceStatus();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   533
                b.active = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   534
                b.bank = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   535
                b.channel = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   536
                b.note = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   537
                b.program = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   538
                b.volume = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   539
                tempVoiceStatusArray[i] = b;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   540
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   541
            return tempVoiceStatusArray;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   542
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   543
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   544
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   545
            VoiceStatus[] tempVoiceStatusArray = new VoiceStatus[voices.length];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   546
            for (int i = 0; i < voices.length; i++) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   547
                VoiceStatus a = voices[i];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   548
                VoiceStatus b = new VoiceStatus();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   549
                b.active = a.active;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   550
                b.bank = a.bank;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   551
                b.channel = a.channel;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   552
                b.note = a.note;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   553
                b.program = a.program;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   554
                b.volume = a.volume;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   555
                tempVoiceStatusArray[i] = b;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   556
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   557
            return tempVoiceStatusArray;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   558
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   559
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   560
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   561
    public boolean isSoundbankSupported(Soundbank soundbank) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   562
        for (Instrument ins: soundbank.getInstruments())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   563
            if (!(ins instanceof ModelInstrument))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   564
                return false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   565
        return true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   566
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   567
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   568
    public boolean loadInstrument(Instrument instrument) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   569
        if (instrument == null || (!(instrument instanceof ModelInstrument))) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   570
            throw new IllegalArgumentException("Unsupported instrument: " +
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   571
                    instrument);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   572
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   573
        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   574
        instruments.add((ModelInstrument)instrument);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   575
        return loadInstruments(instruments);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   576
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   577
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   578
    public void unloadInstrument(Instrument instrument) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   579
        if (instrument == null || (!(instrument instanceof ModelInstrument))) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   580
            throw new IllegalArgumentException("Unsupported instrument: " +
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   581
                    instrument);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   582
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   583
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   584
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   585
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   586
        String pat = patchToString(instrument.getPatch());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   587
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   588
            for (SoftChannel c: channels)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   589
                c.current_instrument = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   590
            inslist.remove(pat);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   591
            loadedlist.remove(pat);
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   592
            for (int i = 0; i < channels.length; i++) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   593
                channels[i].allSoundOff();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   594
            }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   595
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   596
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   597
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   598
    public boolean remapInstrument(Instrument from, Instrument to) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   599
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   600
        if (from == null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   601
            throw new NullPointerException();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   602
        if (to == null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   603
            throw new NullPointerException();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   604
        if (!(from instanceof ModelInstrument)) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   605
            throw new IllegalArgumentException("Unsupported instrument: " +
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   606
                    from.toString());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   607
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   608
        if (!(to instanceof ModelInstrument)) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   609
            throw new IllegalArgumentException("Unsupported instrument: " +
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   610
                    to.toString());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   611
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   612
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   613
            return false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   614
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   615
        synchronized (control_mutex) {
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   616
            if (!loadedlist.containsValue(to))
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   617
                throw new IllegalArgumentException("Instrument to is not loaded.");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   618
            unloadInstrument(from);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   619
            ModelMappedInstrument mfrom = new ModelMappedInstrument(
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   620
                    (ModelInstrument)to, from.getPatch());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   621
            return loadInstrument(mfrom);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   622
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   623
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   624
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   625
    public Soundbank getDefaultSoundbank() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   626
        synchronized (SoftSynthesizer.class) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   627
            if (defaultSoundBank != null)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   628
                return defaultSoundBank;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   629
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   630
            List<PrivilegedAction<InputStream>> actions =
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   631
                new ArrayList<PrivilegedAction<InputStream>>();
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   632
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   633
            actions.add(new PrivilegedAction<InputStream>() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   634
                public InputStream run() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   635
                    File javahome = new File(System.getProperties()
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   636
                            .getProperty("java.home"));
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   637
                    File libaudio = new File(new File(javahome, "lib"), "audio");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   638
                    if (libaudio.exists()) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   639
                        File foundfile = null;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   640
                        File[] files = libaudio.listFiles();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   641
                        if (files != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   642
                            for (int i = 0; i < files.length; i++) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   643
                                File file = files[i];
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   644
                                if (file.isFile()) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   645
                                    String lname = file.getName().toLowerCase();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   646
                                    if (lname.endsWith(".sf2")
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   647
                                            || lname.endsWith(".dls")) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   648
                                        if (foundfile == null
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   649
                                                || (file.length() > foundfile
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   650
                                                        .length())) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   651
                                            foundfile = file;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   652
                                        }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   653
                                    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   654
                                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   655
                            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   656
                        }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   657
                        if (foundfile != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   658
                            try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   659
                                return new FileInputStream(foundfile);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   660
                            } catch (IOException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   661
                            }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   662
                        }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   663
                    }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   664
                    return null;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   665
                }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   666
            });
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   667
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   668
            actions.add(new PrivilegedAction<InputStream>() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   669
                public InputStream run() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   670
                    if (System.getProperties().getProperty("os.name")
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   671
                            .startsWith("Windows")) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   672
                        File gm_dls = new File(System.getenv("SystemRoot")
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   673
                                + "\\system32\\drivers\\gm.dls");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   674
                        if (gm_dls.exists()) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   675
                            try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   676
                                return new FileInputStream(gm_dls);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   677
                            } catch (IOException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   678
                            }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   679
                        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   680
                    }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   681
                    return null;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   682
                }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   683
            });
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   684
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   685
            actions.add(new PrivilegedAction<InputStream>() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   686
                public InputStream run() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   687
                    /*
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   688
                     * Try to load saved generated soundbank
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   689
                     */
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   690
                    File userhome = new File(System.getProperty("user.home"),
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   691
                            ".gervill");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   692
                    File emg_soundbank_file = new File(userhome,
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   693
                            "soundbank-emg.sf2");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   694
                    if (emg_soundbank_file.exists()) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   695
                        try {
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   696
                            return new FileInputStream(emg_soundbank_file);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   697
                        } catch (IOException e) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   698
                        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   699
                    }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   700
                    return null;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   701
                }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   702
            });
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   703
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   704
            for (PrivilegedAction<InputStream> action : actions) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   705
                try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   706
                    InputStream is = AccessController.doPrivileged(action);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   707
                    if(is == null) continue;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   708
                    Soundbank sbk;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   709
                    try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   710
                        sbk = MidiSystem.getSoundbank(new BufferedInputStream(is));
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   711
                    } finally {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   712
                        is.close();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   713
                    }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   714
                    if (sbk != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   715
                        defaultSoundBank = sbk;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   716
                        return defaultSoundBank;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   717
                    }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   718
                } catch (Exception e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   719
                }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   720
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   721
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   722
            try {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   723
                /*
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   724
                 * Generate emergency soundbank
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   725
                 */
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   726
                defaultSoundBank = EmergencySoundbank.createSoundbank();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   727
            } catch (Exception e) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   728
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   729
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   730
            if (defaultSoundBank != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   731
                /*
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   732
                 * Save generated soundbank to disk for faster future use.
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   733
                 */
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   734
                OutputStream out = AccessController
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   735
                        .doPrivileged(new PrivilegedAction<OutputStream>() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   736
                            public OutputStream run() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   737
                                try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   738
                                    File userhome = new File(System
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   739
                                            .getProperty("user.home"),
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   740
                                            ".gervill");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   741
                                    if (!userhome.exists())
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   742
                                        userhome.mkdirs();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   743
                                    File emg_soundbank_file = new File(
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   744
                                            userhome, "soundbank-emg.sf2");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   745
                                    if (emg_soundbank_file.exists())
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   746
                                        return null;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   747
                                    return new FileOutputStream(
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   748
                                            emg_soundbank_file);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   749
                                } catch (IOException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   750
                                } catch (SecurityException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   751
                                }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   752
                                return null;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   753
                            }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   754
                        });
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   755
                if (out != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   756
                    try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   757
                        ((SF2Soundbank) defaultSoundBank).save(out);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   758
                        out.close();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   759
                    } catch (IOException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   760
                    }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   761
                }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   762
            }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   763
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   764
        return defaultSoundBank;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   765
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   766
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   767
    public Instrument[] getAvailableInstruments() {
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   768
        Soundbank defsbk = getDefaultSoundbank();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   769
        if (defsbk == null)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   770
            return new Instrument[0];
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   771
        Instrument[] inslist_array = defsbk.getInstruments();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   772
        Arrays.sort(inslist_array, new ModelInstrumentComparator());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   773
        return inslist_array;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   774
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   775
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   776
    public Instrument[] getLoadedInstruments() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   777
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   778
            return new Instrument[0];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   779
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   780
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   781
            ModelInstrument[] inslist_array =
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   782
                    new ModelInstrument[loadedlist.values().size()];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   783
            loadedlist.values().toArray(inslist_array);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   784
            Arrays.sort(inslist_array, new ModelInstrumentComparator());
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   785
            return inslist_array;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   786
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   787
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   788
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   789
    public boolean loadAllInstruments(Soundbank soundbank) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   790
        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   791
        for (Instrument ins: soundbank.getInstruments()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   792
            if (ins == null || !(ins instanceof ModelInstrument)) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   793
                throw new IllegalArgumentException(
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   794
                        "Unsupported instrument: " + ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   795
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   796
            instruments.add((ModelInstrument)ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   797
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   798
        return loadInstruments(instruments);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   799
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   800
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   801
    public void unloadAllInstruments(Soundbank soundbank) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   802
        if (soundbank == null || !isSoundbankSupported(soundbank))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   803
            throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   804
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   805
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   806
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   807
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   808
        for (Instrument ins: soundbank.getInstruments()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   809
            if (ins instanceof ModelInstrument) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   810
                unloadInstrument(ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   811
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   812
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   813
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   814
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   815
    public boolean loadInstruments(Soundbank soundbank, Patch[] patchList) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   816
        List<ModelInstrument> instruments = new ArrayList<ModelInstrument>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   817
        for (Patch patch: patchList) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   818
            Instrument ins = soundbank.getInstrument(patch);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   819
            if (ins == null || !(ins instanceof ModelInstrument)) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   820
                throw new IllegalArgumentException(
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   821
                        "Unsupported instrument: " + ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   822
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   823
            instruments.add((ModelInstrument)ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   824
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   825
        return loadInstruments(instruments);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   826
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   827
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   828
    public void unloadInstruments(Soundbank soundbank, Patch[] patchList) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   829
        if (soundbank == null || !isSoundbankSupported(soundbank))
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   830
            throw new IllegalArgumentException("Unsupported soundbank: " + soundbank);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   831
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   832
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   833
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   834
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   835
        for (Patch pat: patchList) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   836
            Instrument ins = soundbank.getInstrument(pat);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   837
            if (ins instanceof ModelInstrument) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   838
                unloadInstrument(ins);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   839
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   840
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   841
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   842
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   843
    public MidiDevice.Info getDeviceInfo() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   844
        return info;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   845
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   846
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   847
    private Properties getStoredProperties() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   848
        return AccessController
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   849
                .doPrivileged(new PrivilegedAction<Properties>() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   850
                    public Properties run() {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   851
                        Properties p = new Properties();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   852
                        String notePath = "/com/sun/media/sound/softsynthesizer";
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   853
                        try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   854
                            Preferences prefroot = Preferences.userRoot();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   855
                            if (prefroot.nodeExists(notePath)) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   856
                                Preferences prefs = prefroot.node(notePath);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   857
                                String[] prefs_keys = prefs.keys();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   858
                                for (String prefs_key : prefs_keys) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   859
                                    String val = prefs.get(prefs_key, null);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   860
                                    if (val != null)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   861
                                        p.setProperty(prefs_key, val);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   862
                                }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   863
                            }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   864
                        } catch (BackingStoreException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   865
                        } catch (SecurityException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   866
                        }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   867
                        return p;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   868
                    }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   869
                });
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   870
    }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   871
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   872
    public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map<String, Object> info) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   873
        List<AudioSynthesizerPropertyInfo> list =
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   874
                new ArrayList<AudioSynthesizerPropertyInfo>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   875
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   876
        AudioSynthesizerPropertyInfo item;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   877
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   878
        // If info != null or synthesizer is closed
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   879
        //   we return how the synthesizer will be set on next open
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   880
        // If info == null and synthesizer is open
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   881
        //   we return current synthesizer properties.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   882
        boolean o = info == null && open;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   883
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   884
        item = new AudioSynthesizerPropertyInfo("interpolation", o?resamplerType:"linear");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   885
        item.choices = new String[]{"linear", "linear1", "linear2", "cubic",
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   886
                                    "lanczos", "sinc", "point"};
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   887
        item.description = "Interpolation method";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   888
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   889
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   890
        item = new AudioSynthesizerPropertyInfo("control rate", o?controlrate:147f);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   891
        item.description = "Control rate";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   892
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   893
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   894
        item = new AudioSynthesizerPropertyInfo("format",
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   895
                o?format:new AudioFormat(44100, 16, 2, true, false));
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   896
        item.description = "Default audio format";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   897
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   898
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   899
        item = new AudioSynthesizerPropertyInfo("latency", o?latency:120000L);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   900
        item.description = "Default latency";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   901
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   902
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   903
        item = new AudioSynthesizerPropertyInfo("device id", o?deviceid:0);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   904
        item.description = "Device ID for SysEx Messages";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   905
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   906
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   907
        item = new AudioSynthesizerPropertyInfo("max polyphony", o?maxpoly:64);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   908
        item.description = "Maximum polyphony";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   909
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   910
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   911
        item = new AudioSynthesizerPropertyInfo("reverb", o?reverb_on:true);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   912
        item.description = "Turn reverb effect on or off";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   913
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   914
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   915
        item = new AudioSynthesizerPropertyInfo("chorus", o?chorus_on:true);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   916
        item.description = "Turn chorus effect on or off";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   917
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   918
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   919
        item = new AudioSynthesizerPropertyInfo("auto gain control", o?agc_on:true);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   920
        item.description = "Turn auto gain control on or off";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   921
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   922
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   923
        item = new AudioSynthesizerPropertyInfo("large mode", o?largemode:false);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   924
        item.description = "Turn large mode on or off.";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   925
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   926
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   927
        item = new AudioSynthesizerPropertyInfo("midi channels", o?channels.length:16);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   928
        item.description = "Number of midi channels.";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   929
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   930
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   931
        item = new AudioSynthesizerPropertyInfo("jitter correction", o?jitter_correction:true);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   932
        item.description = "Turn jitter correction on or off.";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   933
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   934
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   935
        item = new AudioSynthesizerPropertyInfo("light reverb", o?reverb_light:true);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   936
        item.description = "Turn light reverb mode on or off";
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   937
        list.add(item);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   938
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   939
        item = new AudioSynthesizerPropertyInfo("load default soundbank", o?load_default_soundbank:true);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   940
        item.description = "Enabled/disable loading default soundbank";
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   941
        list.add(item);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   942
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   943
        AudioSynthesizerPropertyInfo[] items;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   944
        items = list.toArray(new AudioSynthesizerPropertyInfo[list.size()]);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
   945
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   946
        Properties storedProperties = getStoredProperties();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   947
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   948
        for (AudioSynthesizerPropertyInfo item2 : items) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   949
            Object v = (info == null) ? null : info.get(item2.name);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   950
            v = (v != null) ? v : storedProperties.getProperty(item2.name);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   951
            if (v != null) {
24548
9c007a986347 8042256: Fix raw and unchecked lint warnings in com.sun.media.sound
darcy
parents: 18215
diff changeset
   952
                Class<?> c = (item2.valueClass);
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   953
                if (c.isInstance(v))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   954
                    item2.value = v;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   955
                else if (v instanceof String) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   956
                    String s = (String) v;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   957
                    if (c == Boolean.class) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   958
                        if (s.equalsIgnoreCase("true"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   959
                            item2.value = Boolean.TRUE;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   960
                        if (s.equalsIgnoreCase("false"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   961
                            item2.value = Boolean.FALSE;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   962
                    } else if (c == AudioFormat.class) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   963
                        int channels = 2;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   964
                        boolean signed = true;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   965
                        boolean bigendian = false;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   966
                        int bits = 16;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   967
                        float sampleRate = 44100f;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   968
                        try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   969
                            StringTokenizer st = new StringTokenizer(s, ", ");
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   970
                            String prevToken = "";
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   971
                            while (st.hasMoreTokens()) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   972
                                String token = st.nextToken().toLowerCase();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   973
                                if (token.equals("mono"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   974
                                    channels = 1;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   975
                                if (token.startsWith("channel"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   976
                                    channels = Integer.parseInt(prevToken);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   977
                                if (token.contains("unsigned"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   978
                                    signed = false;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   979
                                if (token.equals("big-endian"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   980
                                    bigendian = true;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   981
                                if (token.equals("bit"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   982
                                    bits = Integer.parseInt(prevToken);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   983
                                if (token.equals("hz"))
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   984
                                    sampleRate = Float.parseFloat(prevToken);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   985
                                prevToken = token;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   986
                            }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   987
                            item2.value = new AudioFormat(sampleRate, bits,
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   988
                                    channels, signed, bigendian);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   989
                        } catch (NumberFormatException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   990
                        }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   991
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   992
                    } else
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   993
                        try {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   994
                            if (c == Byte.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   995
                                item2.value = Byte.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   996
                            else if (c == Short.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   997
                                item2.value = Short.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   998
                            else if (c == Integer.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
   999
                                item2.value = Integer.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1000
                            else if (c == Long.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1001
                                item2.value = Long.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1002
                            else if (c == Float.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1003
                                item2.value = Float.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1004
                            else if (c == Double.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1005
                                item2.value = Double.valueOf(s);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1006
                        } catch (NumberFormatException e) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1007
                        }
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1008
                } else if (v instanceof Number) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1009
                    Number n = (Number) v;
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1010
                    if (c == Byte.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1011
                        item2.value = Byte.valueOf(n.byteValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1012
                    if (c == Short.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1013
                        item2.value = Short.valueOf(n.shortValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1014
                    if (c == Integer.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1015
                        item2.value = Integer.valueOf(n.intValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1016
                    if (c == Long.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1017
                        item2.value = Long.valueOf(n.longValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1018
                    if (c == Float.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1019
                        item2.value = Float.valueOf(n.floatValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1020
                    if (c == Double.class)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1021
                        item2.value = Double.valueOf(n.doubleValue());
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1022
                }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1023
            }
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1024
        }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1025
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1026
        return items;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1027
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1028
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1029
    public void open() throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1030
        if (isOpen()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1031
            synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1032
                implicitOpen = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1033
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1034
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1035
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1036
        open(null, null);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1037
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1038
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1039
    public void open(SourceDataLine line, Map<String, Object> info) throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1040
        if (isOpen()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1041
            synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1042
                implicitOpen = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1043
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1044
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1045
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1046
        synchronized (control_mutex) {
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1047
            Throwable causeException = null;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1048
            try {
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1049
                if (line != null) {
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1050
                    // can throw IllegalArgumentException
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1051
                    setFormat(line.getFormat());
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1052
                }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1053
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1054
                AudioInputStream ais = openStream(getFormat(), info);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1055
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1056
                weakstream = new WeakAudioStream(ais);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1057
                ais = weakstream.getAudioInputStream();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1058
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1059
                if (line == null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1060
                {
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1061
                    if (testline != null) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1062
                        line = testline;
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1063
                    } else {
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1064
                        // can throw LineUnavailableException,
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1065
                        // IllegalArgumentException, SecurityException
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1066
                        line = AudioSystem.getSourceDataLine(getFormat());
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1067
                    }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1068
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1069
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1070
                double latency = this.latency;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1071
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1072
                if (!line.isOpen()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1073
                    int bufferSize = getFormat().getFrameSize()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1074
                        * (int)(getFormat().getFrameRate() * (latency/1000000f));
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1075
                    // can throw LineUnavailableException,
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1076
                    // IllegalArgumentException, SecurityException
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1077
                    line.open(getFormat(), bufferSize);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1078
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1079
                    // Remember that we opened that line
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1080
                    // so we can close again in SoftSynthesizer.close()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1081
                    sourceDataLine = line;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1082
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1083
                if (!line.isActive())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1084
                    line.start();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1085
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1086
                int controlbuffersize = 512;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1087
                try {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1088
                    controlbuffersize = ais.available();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1089
                } catch (IOException e) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1090
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1091
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1092
                // Tell mixer not fill read buffers fully.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1093
                // This lowers latency, and tells DataPusher
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1094
                // to read in smaller amounts.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1095
                //mainmixer.readfully = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1096
                //pusher = new DataPusher(line, ais);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1097
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1098
                int buffersize = line.getBufferSize();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1099
                buffersize -= buffersize % controlbuffersize;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1100
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1101
                if (buffersize < 3 * controlbuffersize)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1102
                    buffersize = 3 * controlbuffersize;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1103
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1104
                if (jitter_correction) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1105
                    ais = new SoftJitterCorrector(ais, buffersize,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1106
                            controlbuffersize);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1107
                    if(weakstream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1108
                        weakstream.jitter_stream = ais;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1109
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1110
                pusher = new SoftAudioPusher(line, ais, controlbuffersize);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1111
                pusher_stream = ais;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1112
                pusher.start();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1113
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1114
                if(weakstream != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1115
                {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1116
                    weakstream.pusher = pusher;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1117
                    weakstream.sourceDataLine = sourceDataLine;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1118
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1119
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1120
            } catch (LineUnavailableException e) {
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1121
                causeException = e;
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1122
            } catch (IllegalArgumentException e) {
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1123
                causeException = e;
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1124
            } catch (SecurityException e) {
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1125
                causeException = e;
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1126
            }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1127
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1128
            if (causeException != null) {
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1129
                if (isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1130
                    close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1131
                // am: need MidiUnavailableException(Throwable) ctor!
2654
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1132
                MidiUnavailableException ex = new MidiUnavailableException(
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1133
                        "Can not open line");
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1134
                ex.initCause(causeException);
64f93f554db6 6806019: 38 JCK api/javax_sound/midi/ tests fails starting from jdk7 b46
amenkov
parents: 1846
diff changeset
  1135
                throw ex;
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1136
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1137
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1138
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1139
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1140
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1141
    public AudioInputStream openStream(AudioFormat targetFormat,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1142
            Map<String, Object> info) throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1143
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1144
        if (isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1145
            throw new MidiUnavailableException("Synthesizer is already open");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1146
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1147
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1148
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1149
            gmmode = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1150
            voice_allocation_mode = 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1151
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1152
            processPropertyInfo(info);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1153
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1154
            open = true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1155
            implicitOpen = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1156
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1157
            if (targetFormat != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1158
                setFormat(targetFormat);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1159
6502
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1160
            if (load_default_soundbank)
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1161
            {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1162
                Soundbank defbank = getDefaultSoundbank();
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1163
                if (defbank != null) {
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1164
                    loadAllInstruments(defbank);
13b20559a04a 6941027: Gervill update, April 2010
kalli
parents: 5506
diff changeset
  1165
                }
1846
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1166
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1167
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1168
            voices = new SoftVoice[maxpoly];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1169
            for (int i = 0; i < maxpoly; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1170
                voices[i] = new SoftVoice(this);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1171
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1172
            mainmixer = new SoftMainMixer(this);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1173
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1174
            channels = new SoftChannel[number_of_midi_channels];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1175
            for (int i = 0; i < channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1176
                channels[i] = new SoftChannel(this, i);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1177
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1178
            if (external_channels == null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1179
                // Always create external_channels array
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1180
                // with 16 or more channels
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1181
                // so getChannels works correctly
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1182
                // when the synhtesizer is closed.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1183
                if (channels.length < 16)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1184
                    external_channels = new SoftChannelProxy[16];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1185
                else
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1186
                    external_channels = new SoftChannelProxy[channels.length];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1187
                for (int i = 0; i < external_channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1188
                    external_channels[i] = new SoftChannelProxy();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1189
            } else {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1190
                // We must resize external_channels array
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1191
                // but we must also copy the old SoftChannelProxy
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1192
                // into the new one
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1193
                if (channels.length > external_channels.length) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1194
                    SoftChannelProxy[] new_external_channels
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1195
                            = new SoftChannelProxy[channels.length];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1196
                    for (int i = 0; i < external_channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1197
                        new_external_channels[i] = external_channels[i];
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1198
                    for (int i = external_channels.length;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1199
                            i < new_external_channels.length; i++) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1200
                        new_external_channels[i] = new SoftChannelProxy();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1201
                    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1202
                }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1203
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1204
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1205
            for (int i = 0; i < channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1206
                external_channels[i].setChannel(channels[i]);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1207
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1208
            for (SoftVoice voice: getVoices())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1209
                voice.resampler = resampler.openStreamer();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1210
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1211
            for (Receiver recv: getReceivers()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1212
                SoftReceiver srecv = ((SoftReceiver)recv);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1213
                srecv.open = open;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1214
                srecv.mainmixer = mainmixer;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1215
                srecv.midimessages = mainmixer.midimessages;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1216
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1217
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1218
            return mainmixer.getInputStream();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1219
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1220
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1221
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1222
    public void close() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1223
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1224
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1225
            return;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1226
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1227
        SoftAudioPusher pusher_to_be_closed = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1228
        AudioInputStream pusher_stream_to_be_closed = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1229
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1230
            if (pusher != null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1231
                pusher_to_be_closed = pusher;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1232
                pusher_stream_to_be_closed = pusher_stream;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1233
                pusher = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1234
                pusher_stream = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1235
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1236
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1237
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1238
        if (pusher_to_be_closed != null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1239
            // Pusher must not be closed synchronized against control_mutex,
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1240
            // this may result in synchronized conflict between pusher
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1241
            // and current thread.
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1242
            pusher_to_be_closed.stop();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1243
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1244
            try {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1245
                pusher_stream_to_be_closed.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1246
            } catch (IOException e) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1247
                //e.printStackTrace();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1248
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1249
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1250
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1251
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1252
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1253
            if (mainmixer != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1254
                mainmixer.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1255
            open = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1256
            implicitOpen = false;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1257
            mainmixer = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1258
            voices = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1259
            channels = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1260
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1261
            if (external_channels != null)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1262
                for (int i = 0; i < external_channels.length; i++)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1263
                    external_channels[i].setChannel(null);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1264
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1265
            if (sourceDataLine != null) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1266
                sourceDataLine.close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1267
                sourceDataLine = null;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1268
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1269
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1270
            inslist.clear();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1271
            loadedlist.clear();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1272
            tunings.clear();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1273
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1274
            while (recvslist.size() != 0)
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1275
                recvslist.get(recvslist.size() - 1).close();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1276
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1277
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1278
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1279
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1280
    public boolean isOpen() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1281
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1282
            return open;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1283
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1284
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1285
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1286
    public long getMicrosecondPosition() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1287
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1288
        if (!isOpen())
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1289
            return 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1290
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1291
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1292
            return mainmixer.getMicrosecondPosition();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1293
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1294
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1295
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1296
    public int getMaxReceivers() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1297
        return -1;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1298
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1299
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1300
    public int getMaxTransmitters() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1301
        return 0;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1302
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1303
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1304
    public Receiver getReceiver() throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1305
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1306
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1307
            SoftReceiver receiver = new SoftReceiver(this);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1308
            receiver.open = open;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1309
            recvslist.add(receiver);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1310
            return receiver;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1311
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1312
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1313
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1314
    public List<Receiver> getReceivers() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1315
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1316
        synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1317
            ArrayList<Receiver> recvs = new ArrayList<Receiver>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1318
            recvs.addAll(recvslist);
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1319
            return recvs;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1320
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1321
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1322
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1323
    public Transmitter getTransmitter() throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1324
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1325
        throw new MidiUnavailableException("No transmitter available");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1326
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1327
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1328
    public List<Transmitter> getTransmitters() {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1329
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1330
        return new ArrayList<Transmitter>();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1331
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1332
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1333
    public Receiver getReceiverReferenceCounting()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1334
            throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1335
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1336
        if (!isOpen()) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1337
            open();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1338
            synchronized (control_mutex) {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1339
                implicitOpen = true;
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1340
            }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1341
        }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1342
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1343
        return getReceiver();
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1344
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1345
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1346
    public Transmitter getTransmitterReferenceCounting()
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1347
            throws MidiUnavailableException {
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1348
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1349
        throw new MidiUnavailableException("No transmitter available");
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1350
    }
4a53d636e2f4 6702956: OpenJDK: replace encumbered code (software synthesizer)
amenkov
parents:
diff changeset
  1351
}