Ignore:
Timestamp:
Feb 1, 2017, 10:38:41 AM (4 years ago)
Author:
Juanma
Message:

Updated to 3.2.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • jclic/trunk/fuentes/debian/patches/audio_VIA_soundcards.patch

    r116 r3466  
    1 Description: <short summary of the patch>
    2  TODO: Put a short summary on the line above and replace this paragraph
    3  with a longer explanation of this change. Complete the meta-information
    4  with other relevant fields (see below for details). To make it easier, the
    5  information below has been extracted from the changelog. Adjust it or drop
    6  it.
    7  .
    8  jclic (0.2.1.0-1) unstable; urgency=low
    9  .
    10    * New upstream version
    11    * Fixed bashism in jclic launcher (Closes: #581114)
    12    * Switch to dpkg-source 3.0 (quilt) format
    13    * debian/control: bumped standards version to 3.8.4
    14    * debian/control: added quilt build dependency
    15    * fix detection of PulseAudio and remote DISPLAY, thanks again to
    16      Mario Izquierdo for his hints (Closes: #576465)
    17 Author: José L. Redrejo Rodríguez <jredrejo@debian.org>
    18 Bug-Debian: http://bugs.debian.org/576465
    19 Bug-Debian: http://bugs.debian.org/581114
    20 
    21 ---
    22 The information above should follow the Patch Tagging Guidelines, please
    23 checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here
    24 are templates for supplementary fields that you might want to add:
    25 
    26 Origin: <vendor|upstream|other>, <url of original patch>
    27 Bug: <url in upstream bugtracker>
    28 Bug-Debian: http://bugs.debian.org/<bugnumber>
    29 Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
    30 Forwarded: <no|not-needed|url proving that it has been forwarded>
    31 Reviewed-By: <name and email of someone who approved the patch>
    32 Last-Update: <YYYY-MM-DD>
    33 
    34 --- jclic-0.2.1.0.orig/src/player/edu/xtec/jclic/SingleInstanceJFrame.java
    35 +++ jclic-0.2.1.0/src/player/edu/xtec/jclic/SingleInstanceJFrame.java
    36 @@ -96,6 +96,7 @@ public class SingleInstanceJFrame extend
    37                      result=args[i];
    38              }
    39          }
    40 +               options.needViaHack();
    41          return result;
    42      }
    43              
    44 --- jclic-0.2.1.0.orig/src/core/edu/xtec/jclic/media/JavaSoundAudioPlayer.java
    45 +++ jclic-0.2.1.0/src/core/edu/xtec/jclic/media/JavaSoundAudioPlayer.java
     1--- a/src/core/edu/xtec/jclic/media/JavaSoundAudioPlayer.java
     2+++ b/src/core/edu/xtec/jclic/media/JavaSoundAudioPlayer.java
     3@@ -6,7 +6,7 @@
     4  * JClic - Authoring and playing system for educational activities
     5  *
     6  * Copyright (C) 2000 - 2005 Francesc Busquets & Departament
     7- * d'Educacio de la Generalitat de Catalunya                                       
     8+ * d'Educacio de la Generalitat de Catalunya
     9  *
     10  * This program is free software; you can redistribute it and/or modify
     11  * it under the terms of the GNU General Public License as published by
    4612@@ -22,6 +22,7 @@
    4713 package edu.xtec.jclic.media;
     
    5218 import edu.xtec.util.StreamIO;
    5319 import java.io.ByteArrayInputStream;
    54 @@ -33,11 +34,17 @@ import javax.sound.sampled.AudioInputStr
     20@@ -33,10 +34,14 @@
    5521 import javax.sound.sampled.AudioSystem;
    5622 import javax.sound.sampled.Clip;
     
    5925+import javax.sound.sampled.LineListener;
    6026+import javax.sound.sampled.LineEvent;
    61  import javax.sound.sampled.Mixer;
    6227 import javax.sound.sampled.SourceDataLine;
    6328 import javax.sound.sampled.UnsupportedAudioFileException;
     
    6530 import org.tritonus.applet.AppletVorbisSPIWorkaround;
    6631+import edu.xtec.util.Options;
    67 +
    68 +
    6932 
    7033 /**
    7134  *
    72 @@ -46,11 +53,16 @@ import org.tritonus.applet.AppletVorbisS
     35@@ -44,36 +49,45 @@
     36  * @version 13.08.28
     37  */
    7338 public class JavaSoundAudioPlayer implements AudioPlayer{
    74      
     39-   
     40+
    7541     private Clip clip;
    7642-    protected AudioInputStream ais;
    77 +
    78 +    protected AudioInputStream ais = null;
     43+    protected AudioInputStream ais=null;
    7944     protected boolean isMpeg;
    8045     protected boolean isOgg;
    8146     protected boolean isWav;
    8247-   
    83 +       private MediaBag mb;
     48+
     49+    private MediaBag mb;
    8450+    private String mediaFileName;
    85 +       private Options options;
    86 +       private PlayThread playThread;
     51+    private Options options;
     52+    private PlayThread playThread;
    8753+
    8854     static final int INTERNAL_BUFFER_SIZE=1024;
    8955     static final int CHECK_BUFFER_SIZE=0x60;
    9056     static final int BIT_SAMPLE_SIZE=16;
    91 @@ -61,20 +73,27 @@ public class JavaSoundAudioPlayer implem
    92      }
    93          
     57     static final boolean BIG_ENDIAN=true;
     58-   
     59+
     60     /** Creates a new instance of JavaSoundAudioPlayer */
     61     public JavaSoundAudioPlayer() {
     62     }
     63-       
     64+
    9465     public boolean setDataSource(Object source) throws Exception{
    9566-       
    9667+        this.options = options;
    9768         close();
    98 +        //System.out.println("JavaSoundAudioPlayer: setDataSource " + source );
    99          
     69-       
     70+
    10071         InputStream is=null;
    10172         javax.sound.sampled.AudioFileFormat m_audioFileFormat=null;
    10273 
    10374         if(source instanceof ExtendedByteArrayInputStream){
    104 +               this.mediaFileName=((ExtendedByteArrayInputStream)source).getName();
     75+            this.mediaFileName=((ExtendedByteArrayInputStream)source).getName();
    10576             is=checkInputStream((InputStream)source, ((ExtendedByteArrayInputStream)source).getName());
    106 +            //System.out.println("JavaSoundAudioPlayer: setDataSource " + this.mediaFileName );
    10777         }
    10878         else if(source instanceof InputStream){
    109 -            is=checkInputStream((InputStream)source, null);
    110 +               this.mediaFileName=null;
     79             is=checkInputStream((InputStream)source, null);
     80+            this.mediaFileName=null;
    11181+            is=checkInputStream((InputStream)source, this.mediaFileName);
    112 +            //System.out.println("JavaSoundAudioPlayer: setDataSource " + this.mediaFileName );
    11382         }
    11483         else if(source instanceof File){
    115 +               this.mediaFileName=((File)source).getName();
     84+            this.mediaFileName=((File)source).getName();
    11685             is=checkInputStream(new java.io.FileInputStream((File)source), ((File)source).getName());
    117 +            //System.out.println("JavaSoundAudioPlayer: setDataSource " + this.mediaFileName );
    11886         }
    11987         else{
    120              java.net.URL url=null;
    121 @@ -84,7 +103,9 @@ public class JavaSoundAudioPlayer implem
     88@@ -84,10 +98,11 @@
    12289                 url=new java.net.URL((String)source);
    12390             }
    12491             if(url!=null){
    125 +               this.mediaFileName=source.toString();
     92+                this.mediaFileName=source.toString();
    12693                 is=checkInputStream(url.openStream(), source.toString());
    127 +                //System.out.println("JavaSoundAudioPlayer: setDataSource " + this.mediaFileName );
    12894             }
    12995         }
    130          
    131 @@ -146,45 +167,130 @@ public class JavaSoundAudioPlayer implem
     96-       
     97+
     98         if(is!=null){
     99             if(isMpeg || (!isWav && !isOgg)){
     100                 try {
     101@@ -105,7 +120,7 @@
     102             if(isOgg || (!isMpeg && !isWav)){
     103                 try {
     104                     m_audioFileFormat = AppletVorbisSPIWorkaround.getAudioFileFormat(is);
     105-                    ais = AppletVorbisSPIWorkaround.getAudioInputStream(is);           
     106+                    ais = AppletVorbisSPIWorkaround.getAudioInputStream(is);
     107                     isOgg=true;
     108                 }
     109                 catch (IOException ex) {
     110@@ -113,14 +128,14 @@
     111                 }
     112                 catch (UnsupportedAudioFileException ex) {
     113                     isOgg=false;
     114-                }
     115+                }
     116             }
     117             if(isWav || (!isMpeg && !isOgg)){
     118                 m_audioFileFormat = AudioSystem.getAudioFileFormat(is);
     119-                ais = AudioSystem.getAudioInputStream(is);               
     120+                ais = AudioSystem.getAudioInputStream(is);
     121             }
     122         }
     123-       
     124+
     125         if(ais!=null){
     126             AudioFormat af=ais.getFormat();
     127             DataLine.Info info=new DataLine.Info(SourceDataLine.class, af, INTERNAL_BUFFER_SIZE);
     128@@ -133,66 +148,148 @@
     129                 sourceFormat.getChannels(),
     130                 sourceFormat.getChannels() * (BIT_SAMPLE_SIZE / 8),
     131                 sourceFormat.getSampleRate(),
     132-                //sourceFormat.getFrameRate(),
     133+                //sourceFormat.getFrameRate(),
     134                 BIG_ENDIAN);
     135-               
     136+
     137                 if(isMpeg)
     138                     ais = AppletMpegSPIWorkaround.getAudioInputStream(targetFormat, ais);
     139-                else if (isOgg)
     140+                else if (isOgg)
     141                     ais = AppletVorbisSPIWorkaround.getAudioInputStream(targetFormat, ais);
     142                 else
     143-                    ais = AudioSystem.getAudioInputStream(targetFormat, ais);               
     144-            }           
     145+                    ais = AudioSystem.getAudioInputStream(targetFormat, ais);
     146+            }
    132147         }
    133148         return ais!=null;
    134149     }
    135 +
    136 +   private void getAudioInputStream() throws Exception{       
    137 +        if(ais==null){
    138 +               //System.out.println("getAudioInputStream: " + mediaFileName + " mb " + mb);
    139 +            JavaSoundAudioPlayer jsap=new JavaSoundAudioPlayer();
    140 +            jsap.setDataSource(ResourceManager.getResourceAsByteArray(mediaFileName));
    141 +            ais=jsap.ais;
    142 +            if(ais==null)
    143 +                throw new Exception("Unable to open audio data!");
    144 +        }
    145 +
    146 +    }
    147      
     150-   
     151+
     152+       private void getAudioInputStream() throws Exception{
     153+               if(ais==null){
     154+                   //System.out.println("getAudioInputStream: " + mediaFileName + " mb " + mb);
     155+               JavaSoundAudioPlayer jsap=new JavaSoundAudioPlayer();
     156+               jsap.setDataSource(ResourceManager.getResourceAsByteArray(mediaFileName));
     157+               ais=jsap.ais;
     158+               if(ais==null)
     159+               throw new Exception("Unable to open audio data!");
     160+            }
     161+       }
     162+
    148163     public Clip getClip() throws Exception{
    149164-        if(clip==null && ais!=null){
     
    151166-        }
    152167-        return clip;
    153 +               if (!Options.CLOSE_STREAMS.booleanValue()) {
    154 +                       if(clip==null && ais!=null){
    155 +                        clip = (Clip)AudioSystem.getLine(new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE));
    156 +                       }
    157 +                       return clip;
    158 +               } else {
    159 +                       //System.out.println("getClip() with closestreams " + Options.CLOSE_STREAMS.booleanValue());
    160 +                       if (ais !=null) close();
    161 +                       if (ais == null) getAudioInputStream();
    162 +                       else return null;
    163 +
    164 +                       DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE);
    165 +                       if((clip==null && ais!=null)){
    166 +               clip = (Clip)AudioSystem.getLine(info);
    167 +                               clip.addLineListener(new LineListener(){
    168 +                        public void update(LineEvent event){
    169 +                                               //System.out.println("LineListener " + event.getType() );
    170 +
    171 +                                               if(event.getType() == LineEvent.Type.CLOSE){
    172 +                                               }
    173 +                        if(event.getType() == LineEvent.Type.STOP){
    174 +                                                       clip.stop();
    175 +                                                       close();
    176 +                        }
    177 +                                               if(event.getType() == LineEvent.Type.OPEN){
    178 +                                                       if(clip!=null && clip.isRunning()) {
    179 +                               clip.stop();
    180 +                                                       }
    181 +                                               }
    182 +                      }
    183 +                });
    184 +                       return clip;
    185 +                       }
    186 +               }
    187 +               return null;
    188      }
    189      
     168+           if (!Options.CLOSE_STREAMS.booleanValue()) {
     169+               if(clip==null && ais!=null){
     170+                   clip = (Clip)AudioSystem.getLine(new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE));
     171+                }
     172+                return clip;
     173+          } else {
     174+              //System.out.println("getClip() with closestreams " + Options.CLOSE_STREAMS.booleanValue());
     175+               if (ais !=null) close();
     176+               if (ais == null) getAudioInputStream();
     177+               else return null;
     178+
     179+               DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE);
     180+               if((clip==null && ais!=null)){
     181+                  clip = (Clip)AudioSystem.getLine(info);
     182+                   clip.addLineListener(new LineListener(){
     183+                  public void update(LineEvent event){
     184+                        //System.out.println("LineListener " + event.getType() );
     185+
     186+                       if(event.getType() == LineEvent.Type.CLOSE){
     187+                       }
     188+                       if(event.getType() == LineEvent.Type.STOP){
     189+                           clip.stop();
     190+                           close();
     191+                       }
     192+                       if(event.getType() == LineEvent.Type.OPEN){
     193+                          if(clip!=null && clip.isRunning()) {
     194+                              clip.stop();
     195+                          }
     196+                      }
     197+                    }
     198+                });
     199+            return clip;
     200+         }
     201+     }
     202+     return null;
     203     }
     204-   
     205+
    190206     public void realize(String fileName, MediaBag mediaBag) throws Exception{
    191207-        if(fileName!=null)
    192 +        if(fileName!=null) {
     208+        if(fileName!=null){
    193209             setDataSource(mediaBag.getMediaDataSource(fileName));
    194210-        if(ais!=null && getClip()!=null){
    195211-            clip.open(ais);
     212+                       this.mediaFileName=fileName;
     213+        }
     214+        this.mb=mediaBag;
     215+        if (!Options.CLOSE_STREAMS.booleanValue()) {
     216+               if(ais!=null && getClip()!=null){
     217+                   clip.open(ais);
     218+            }
     219         }
     220     }
     221-   
     222+
     223 
     224     // Modified to avoid unexpected exceptions like
     225     // "IllegalStateException: line already closed"
     226     // launched by org.classpath.icedtea.pulseaudio.PulseAudioClip.close
     227     public void close(){
     228-        if(clip!=null && clip.isOpen()){
     229-            if(clip.isRunning())
     230-                clip.stop();
     231-            clip.close();
    196232-        }
    197 +                       this.mediaFileName=fileName;
    198 +               }
    199 +               this.mb=mediaBag;
    200 +               if (!Options.CLOSE_STREAMS.booleanValue()) {
    201 +               if(ais!=null && getClip()!=null){
    202 +                  clip.open(ais);
    203 +                       }
    204 +               }
    205      }
    206      
    207      public void close(){
    208 -        if(clip!=null){
    209 -            clip.close();
    210 -            clip=null;
    211 -        }
     233-        clip=null;
    212234-        ais=null;
    213 +               if (!Options.CLOSE_STREAMS.booleanValue()) {
    214 +               if(clip!=null){
    215 +               clip.close();
    216 +               clip=null;
    217 +               }
    218 +                       ais=null;
    219 +               } else {
    220 +                       try {
    221 +                       if(clip!=null){
    222 +                                       //System.out.println("close() clip");
    223 +                       clip.close();
    224 +                       clip=null;
    225 +                       }
    226 +                               if(ais!=null){
    227 +                                       //System.out.println("close() ais");
    228 +                                       ais.close();
    229 +                               ais=null;
    230 +                       }
    231 +                       } catch(java.io.IOException ex){
    232 +               System.err.println("close(): close error");
    233 +               }
    234 +               }
    235      }
    236      
     235-    }
     236-   
     237+               if (!Options.CLOSE_STREAMS.booleanValue()) {
     238+               if(clip!=null){
     239+                   clip.close();
     240+                clip=null;
     241+            }
     242+            ais=null;
     243+        } else {
     244+               try {
     245+                   if(clip!=null){
     246+                       //System.out.println("close() clip");
     247+                    clip.close();
     248+                    clip=null;
     249+                }
     250+                if(ais!=null){
     251+                      //System.out.println("close() ais");
     252+                   ais.close();
     253+                   ais=null;
     254+                }
     255+             } catch(java.io.IOException ex){
     256+                    System.err.println("close(): close error");
     257+             }
     258+         }
     259+       }
     260+
    237261     public void play(){
    238262         try{
     
    241265-                clip.setFramePosition(0);
    242266-                clip.start();
    243 -            }
    244 +                       if (!Options.CLOSE_STREAMS.booleanValue()) {
    245 +               stop();
    246 +               if(getClip()!=null){
    247 +                   clip.setFramePosition(0);
    248 +                   clip.start();
    249 +                       }
    250 +                       } else {
    251 +                               if(playThread==null){
    252 +                               playThread=new PlayThread();
    253 +                               playThread.start();
    254 +                               }
    255 +                       }
     267+               if (!Options.CLOSE_STREAMS.booleanValue()) {
     268+                   stop();
     269+                   if(getClip()!=null){
     270+                       clip.setFramePosition(0);
     271+                    clip.start();
     272+                }
     273+            } else {
     274+                   if(playThread==null){
     275+                      playThread=new PlayThread();
     276+                   playThread.start();
     277+               }
     278             }
    256279         } catch(Exception ex){
    257280             System.err.println("Error playing sound:\n"+ex);
    258281         }
    259282     }
    260      
     283-   
     284+
    261285     public void stop(){
    262286-        if(clip!=null && clip.isActive())
    263287-            clip.stop();
    264288+               if (!Options.CLOSE_STREAMS.booleanValue()) {
    265 +               if(clip!=null && clip.isActive())
    266 +                       clip.stop();
    267 +               } else {
    268 +                       if(playThread!=null){
    269 +                               if(playThread.isAlive()){
    270 +                                       playThread.running=false;
    271 +                                       while(playThread!=null){
    272 +                                               Thread.currentThread().yield();
    273 +                                       }
    274 +                               } else{
    275 +                                       playThread=null;
    276 +                               }
    277 +                       }
    278 +               }
    279      }
    280      
     289+               if(clip!=null && clip.isActive())
     290+                   clip.stop();
     291+        } else {
     292+               if(playThread!=null){
     293+                   if(playThread.isAlive()){
     294+                       playThread.running=false;
     295+                    while(playThread!=null){
     296+                           Thread.currentThread().yield();
     297+                    }
     298+                } else{
     299+                       playThread=null;
     300+                }
     301+            }
     302+        }
     303     }
     304-   
     305+
    281306     protected InputStream checkInputStream(InputStream is, String name) throws Exception{
    282 @@ -225,5 +331,79 @@ public class JavaSoundAudioPlayer implem
     307         String s = (name==null ? null : name.toLowerCase());
     308         if(s!=null){
     309@@ -203,13 +300,13 @@
     310             else if(s.endsWith(".mp3"))
     311                 isMpeg=true;
     312         }
     313-               
     314+
     315         if(s==null || isWav){
     316             byte[] data;
     317             if(!is.markSupported()){
     318                 data=StreamIO.readInputStream(is);
     319                 is=new ByteArrayInputStream(data);
     320-            }           
     321+            }
     322             is.mark(CHECK_BUFFER_SIZE);
     323             byte[] b=new byte[CHECK_BUFFER_SIZE];
     324             is.read(b);
     325@@ -230,5 +327,76 @@
    283326             }
    284327         }
    285328         return is;
    286329-    }       
    287 +    }   
    288 +
    289 +   class PlayThread extends Thread {
    290 +       
    291 +        public boolean running;
    292 +       private Clip clip2 = null;
    293 +       
    294 +        public PlayThread() throws Exception{
    295 +               //System.out.println("PlayThread() with closestreams " + Options.CLOSE_STREAMS.booleanValue());
    296 +               if (ais !=null) close();
    297 +               if (ais == null) getAudioInputStream();
    298 +               
    299 +               DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE);
    300 +               if((clip2==null && ais!=null)){
    301 +                   clip2 = (Clip)AudioSystem.getLine(info);
    302 +                       clip2.addLineListener(new LineListener(){
    303 +                               public void update(LineEvent event){
    304 +                                       //System.out.println("LineListener " +event.getType() );
    305 +
    306 +                                       if(event.getType() == LineEvent.Type.CLOSE){
    307 +                                       }
    308 +                           if(event.getType() == LineEvent.Type.STOP){
    309 +                                               clip2.stop();
    310 +                                               close2();
    311 +                                               playThread=null;
    312 +                                               running=false;
    313 +                           }
    314 +                                       if(event.getType() == LineEvent.Type.OPEN){
    315 +                                                       if(clip2!=null && clip2.isRunning()) {
    316 +                                        clip2.stop();
    317 +                                                       }
    318 +                                       }
    319 +                         }
    320 +                       });
    321 +                       }
     330+    }
     331+    class PlayThread extends Thread {
     332+
     333+         public boolean running;
     334+         private Clip clip2 = null;
     335+
     336+         public PlayThread() throws Exception{
     337+            //System.out.println("PlayThread() with closestreams " + Options.CLOSE_STREAMS.booleanValue());
     338+             if (ais !=null) close();
     339+             if (ais == null) getAudioInputStream();
     340+
     341+             DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat(), INTERNAL_BUFFER_SIZE);
     342+             if((clip2==null && ais!=null)){
     343+                   clip2 = (Clip)AudioSystem.getLine(info);
     344+                clip2.addLineListener(new LineListener(){
     345+                   public void update(LineEvent event){
     346+                           //System.out.println("LineListener " +event.getType() );
     347+                        if(event.getType() == LineEvent.Type.CLOSE){
     348+                        }
     349+                        if(event.getType() == LineEvent.Type.STOP){
     350+                              clip2.stop();
     351+                           close2();
     352+                           playThread=null;
     353+                           running=false;
     354+                        }
     355+                        if(event.getType() == LineEvent.Type.OPEN){
     356+                            if(clip2!=null && clip2.isRunning()) {
     357+                                clip2.stop();
     358+                            }
     359+                        }
     360+                    }
     361+                });
     362+            }
     363+       }
     364+
     365+       public void close2(){
     366+               try {
     367+               if(clip2!=null){
     368+                       //System.out.println("close2() clip");
     369+                clip2.close();
     370+                clip2=null;
     371+            }
     372+            if(ais!=null){
     373+                   //System.out.println("close2() ais");
     374+                ais.close();
     375+                ais=null;
     376+             }
     377+        } catch(java.io.IOException ex){
     378+               System.err.println("close2(): close error");
    322379+        }
    323 +
    324 +        public void close2(){
    325 +               try {
    326 +                       if(clip2!=null){
    327 +                                       //System.out.println("close2() clip");
    328 +                               clip2.close();
    329 +                               clip2=null;
    330 +                       }
    331 +                       if(ais!=null){
    332 +                                       //System.out.println("close2() ais");
    333 +                               ais.close();
    334 +                               ais=null;
    335 +                       }
    336 +               } catch(java.io.IOException ex){
    337 +                       System.err.println("close2(): close error");
    338 +               }
    339 +               }
    340 +       
    341 +        public void run(){
    342 +               try{
    343 +               if(clip2!=null) {
    344 +                       running=true;
    345 +                       clip2.stop();
    346 +                                       
    347 +                       if (!clip2.isOpen()) {
    348 +                               if(ais!=null){
    349 +                                       clip2.open(ais);
    350 +                                       }
    351 +                       }
    352 +                       clip2.setFramePosition(0);
    353 +                       clip2.start();
    354 +                       Thread.currentThread().yield();
    355 +               }
    356 +               } catch(Exception ex){
    357 +                       System.err.println("Error playing sound:\n"+ex);
    358 +               }
     380+    }
     381+
     382+    public void run(){
     383+           try{
     384+               if(clip2!=null) {
     385+                  running=true;
     386+               clip2.stop();
     387+
     388+               if (!clip2.isOpen()) {
     389+                      if(ais!=null){
     390+                          clip2.open(ais);
     391+                                       }
     392+                   }
     393+               clip2.setFramePosition(0);
     394+               clip2.start();
     395+               Thread.currentThread().yield();
     396+           }
     397+       } catch(Exception ex){
     398+              System.err.println("Error playing sound:\n"+ex);
     399+       }
     400+    }
     401+    }
     402 }
     403--- a/src/player/edu/xtec/jclic/SingleInstanceJFrame.java
     404+++ b/src/player/edu/xtec/jclic/SingleInstanceJFrame.java
     405@@ -97,6 +97,7 @@
     406                     result=arg;
     407             }
     408         }
     409+       options.needViaHack();
     410         return result;
     411     }
     412             
     413@@ -230,17 +231,22 @@
     414     
     415     /** Exit the Application */
     416     private void exitForm(java.awt.event.WindowEvent evt) {
     417-        if(socketThread!=null)
     418-            socketThread.stopSocketThread();
     419-        if(rc!=null){
     420-            rc.end();
     421-            rc=null;
     422+       try
     423+        {
     424+           if(socketThread!=null)
     425+                socketThread.stopSocketThread();
     426+                if(rc!=null){
     427+                    rc.end();
     428+                    rc=null;
     429+                }
     430+                while(socketThread!=null){
     431+                    Thread.currentThread().yield();
     432+                }
     433         }
     434-        while(socketThread!=null){
     435-            Thread.yield();
     436-        }       
     437-        System.exit(0);
     438-    }
     439+        catch(Exception ex){
     440+                System.exit(0);
    359441+        }
    360 +       }
    361 +
    362  }
    363 --- jclic-0.2.1.0.orig/src/core/edu/xtec/jclic/media/JavaSoundAudioBuffer.java
    364 +++ jclic-0.2.1.0/src/core/edu/xtec/jclic/media/JavaSoundAudioBuffer.java
    365 @@ -32,6 +32,8 @@ import java.util.Timer;
     442+ }
     443     
     444     protected boolean checkOtherInstance(int port){
     445         boolean result=false;
     446--- a/src/core/edu/xtec/jclic/media/JavaSoundAudioBuffer.java
     447+++ b/src/core/edu/xtec/jclic/media/JavaSoundAudioBuffer.java
     448@@ -25,6 +25,7 @@
     449 import java.util.ArrayList;
     450 import java.util.Timer;
    366451 import java.util.TimerTask;
    367  import java.util.Vector;
    368  
    369452+import edu.xtec.util.Options;
    370 +
    371  /**
    372   * This class extends {@link AudioBuffer} using the javax.sound.sampled package.
    373   * @author Francesc Busquets (fbusquets@xtec.net)
    374 @@ -171,7 +173,12 @@ public class JavaSoundAudioBuffer extend
     453 import javax.sound.sampled.AudioFormat;
     454 import javax.sound.sampled.AudioSystem;
     455 import javax.sound.sampled.Line.Info;
     456@@ -171,8 +172,14 @@
    375457         
    376458         // build m_sourceLine
    377459         dli=new javax.sound.sampled.DataLine.Info(SourceDataLine.class, m_targetLine.getFormat());
    378460-        m_sourceLine=(SourceDataLine)AudioSystem.getLine(dli);
    379 +               if (Options.CLOSE_STREAMS.booleanValue()) {
    380 +                       //System.out.println("JavaSoundAudioBuffer: Default mixer " + (SourceDataLine)AudioSystem.getSourceDataLine(m_targetLine.getFormat(), AudioSystem.getMixer(null).getMixerInfo()));
    381 +                       m_sourceLine=(SourceDataLine)AudioSystem.getSourceDataLine(m_targetLine.getFormat(), AudioSystem.getMixer(null).getMixerInfo());
    382 +               } else {
    383 +               m_sourceLine=(SourceDataLine)AudioSystem.getLine(dli);
    384 +               }
    385          m_sourceLine.open();
     461-        m_sourceLine.open();
     462+        if (Options.CLOSE_STREAMS.booleanValue()) {
     463+            //System.out.println("JavaSoundAudioBuffer: Default mixer " + (SourceDataLine)AudioSystem.getSourceDataLine(m_targetLine.getFormat(), AudioSystem.getMixer(null).     getMixerInfo()));
     464+            m_sourceLine=(SourceDataLine)AudioSystem.getSourceDataLine(m_targetLine.getFormat(), AudioSystem.getMixer(null).getMixerInfo());
     465+        } else {
     466+            m_sourceLine=(SourceDataLine)AudioSystem.getLine(dli);
     467+        }
     468+
     469+       m_sourceLine.open();
    386470         initialized=true;
    387471     }
    388 @@ -269,6 +276,7 @@ public class JavaSoundAudioBuffer extend
    389          public void run(){
    390              running=true;
    391              try{
    392 +                       //System.out.println("JavaSoundAudioBuffer: playing dataline");
    393                  m_sourceLine.start();
    394                  int l=m_sourceLine.getBufferSize()/2;               
    395                  int p=0;
    396 @@ -279,12 +287,13 @@ public class JavaSoundAudioBuffer extend
    397                      remainingData-=k;
    398                      Thread.currentThread().yield();
    399                  }
    400 +                       //System.out.println("JavaSoundAudioBuffer: end dataline");
    401              } catch(Exception ex){
    402                  System.err.println("JavaSound playing error:\n"+ex);
    403              }
     472         
     473@@ -287,6 +294,7 @@
    404474             m_sourceLine.drain();
    405475             m_sourceLine.stop();
    406 -            //m_sourceLine.close();
    407 +            if (Options.CLOSE_STREAMS.booleanValue()) m_sourceLine.close();
     476             //m_sourceLine.close();
     477+           if (Options.CLOSE_STREAMS.booleanValue()) m_sourceLine.close();
    408478             playThread=null;
    409479             running=false;
    410480         }
    411 --- jclic-0.2.1.0.orig/src/core/edu/xtec/jclic/media/JavaSoundActiveMediaPlayer.java
    412 +++ jclic-0.2.1.0/src/core/edu/xtec/jclic/media/JavaSoundActiveMediaPlayer.java
    413 @@ -32,6 +32,7 @@ import javax.sound.midi.MidiSystem;
     481--- a/src/core/edu/xtec/jclic/media/JavaSoundActiveMediaPlayer.java
     482+++ b/src/core/edu/xtec/jclic/media/JavaSoundActiveMediaPlayer.java
     483@@ -30,6 +30,7 @@
     484 import javax.sound.midi.MidiSystem;
    414485 import javax.sound.sampled.*;
    415  import javax.sound.sampled.UnsupportedAudioFileException;
    416486 import javax.swing.Timer;
    417487+import edu.xtec.util.Options;
     
    419489 /**
    420490  *
    421 @@ -112,9 +113,12 @@ public class JavaSoundActiveMediaPlayer
     491@@ -108,11 +109,13 @@
     492                 if(midi){
     493                     if(sequencer==null)
    422494                         sequencer=MidiSystem.getSequencer();
    423                  }
    424                  else{
     495-                }
     496-                else{
    425497-                    if(clip!=null && !clip.isOpen()){
    426498-                        clip.open();
    427499-                    }
    428 +                                       if (!Options.CLOSE_STREAMS.booleanValue()) {
    429 +                                               //System.out.println("JavaSoundActiveMediaPlayer: Playing wav");
    430 +                       if(clip!=null && !clip.isOpen()){
    431 +                          clip.open();
    432 +                       }
    433 +                                       }
     500+                }else{
     501+                  if (!Options.CLOSE_STREAMS.booleanValue()) {
     502+                       //System.out.println("JavaSoundActiveMediaPlayer: Playing wav");
     503+                       if(clip!=null && !clip.isOpen()){
     504+                           clip.open();
     505+                       }
     506+                   }
    434507                 }
    435508             } catch(Exception e){
    436509                 System.err.println("Error realizing media \""+mc.mediaFileName+"\"\n"+e);
    437 @@ -136,20 +140,31 @@ public class JavaSoundActiveMediaPlayer
    438                          if(!sequencer.isOpen())
    439                              sequencer.open();
    440                          midiIs.reset();
    441 +                                               //System.out.println("JavaSoundActiveMediaPlayer: Playing midi");
    442                          sequencer.setSequence(midiIs);
    443                          sequencer.stop();
    444                          setTimeRanges();
     510@@ -141,8 +144,17 @@
    445511                         sequencer.start();
    446512                     }
     
    448514-                    if(!clip.isOpen())
    449515-                        realize();
    450 +                                       if (Options.CLOSE_STREAMS.booleanValue()) {
    451 +                                               //System.out.println("JavaSoundActiveMediaPlayer: open clip");
    452 +                                               clip.stop();
    453 +                                               if(clip!=null) {
    454 +                                                       if(!clip.isOpen())
    455 +                                                               clip.open();
    456 +                                               }
    457 +                                       } else {
    458 +                       if(!clip.isOpen())
    459 +                               realize();
    460 +                                       }
     516+                    if (Options.CLOSE_STREAMS.booleanValue()) {
     517+                        //System.out.println("JavaSoundActiveMediaPlayer: open clip");
     518+                        clip.stop();
     519+                        if(clip!=null) {
     520+                            if(!clip.isOpen())
     521+                                clip.open();
     522+                        }
     523+                    } else {
     524+                        if(!clip.isOpen())
     525+                            realize();
     526+                    }
    461527                     setTimeRanges();
    462528                     attachVisualComponent();
    463529                     if(mc.loop){
    464                          clip.loop(Clip.LOOP_CONTINUOUSLY);
    465                      }
    466                      else{
    467 +                                               //System.out.println("JavaSoundActiveMediaPlayer: clip playnow");
    468                          clip.start();
    469                          if(timer!=null)
    470                              timer.start();                   
    471 --- jclic-0.2.1.0.orig/src/core/edu/xtec/jclic/media/FalseClip.java
    472 +++ jclic-0.2.1.0/src/core/edu/xtec/jclic/media/FalseClip.java
    473 @@ -28,6 +28,9 @@ import javax.sound.sampled.AudioSystem;
     530--- a/src/core/edu/xtec/jclic/media/FalseClip.java
     531+++ b/src/core/edu/xtec/jclic/media/FalseClip.java
     532@@ -27,6 +27,7 @@
     533 import javax.sound.sampled.AudioSystem;
    474534 import javax.sound.sampled.DataLine;
    475535 import javax.sound.sampled.SourceDataLine;
    476  
    477536+import edu.xtec.util.Options;
    478 +
    479 +
     537 
    480538 /**
    481539  *
    482   * @author Francesc Busquets (fbusquets@xtec.net)
    483 @@ -54,6 +57,7 @@ public class FalseClip implements Pseudo
    484      
    485      private AudioInputStream getAudioInputStream() throws Exception{       
    486          if(ais==null){
    487 +                       //System.out.println("FalseClip: creating clip " + mediaFileName);
    488              JavaSoundAudioPlayer jsap=new JavaSoundAudioPlayer();
    489              jsap.setDataSource(mb.getMediaDataSource(mediaFileName));
    490              ais=jsap.ais;
    491 @@ -133,9 +137,12 @@ public class FalseClip implements Pseudo
     540@@ -134,9 +135,12 @@
    492541             running=false;
    493542             getAudioInputStream();
    494543             DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
    495544-            line = (SourceDataLine)AudioSystem.getLine(info);
    496 +               //System.out.println("FalseClip: Default mixer " + (SourceDataLine)AudioSystem.getSourceDataLine(af, AudioSystem.getMixer(null).getMixerInfo()));
    497 +                       if (Options.CLOSE_STREAMS.booleanValue()) line = (SourceDataLine)AudioSystem.getSourceDataLine(af, AudioSystem.getMixer(null).getMixerInfo());
    498 +                       else line = (SourceDataLine)AudioSystem.getLine(info);
    499 +           
     545+            //System.out.println("FalseClip: Default mixer " + (SourceDataLine)AudioSystem.getSourceDataLine(af, AudioSystem.getMixer(null).getMixerInfo()));
     546+            if (Options.CLOSE_STREAMS.booleanValue()) line = (SourceDataLine)AudioSystem.getSourceDataLine(af, AudioSystem.getMixer(null).getMixerInfo());
     547+            else line = (SourceDataLine)AudioSystem.getLine(info);
     548+
    500549             if(line!=null)
    501550-                line.open(af);
    502 +                if (!Options.CLOSE_STREAMS.booleanValue()) line.open(af);
     551+               if (!Options.CLOSE_STREAMS.booleanValue()) line.open(af);
    503552         }
    504553         
    505          public void run(){
    506 @@ -143,6 +150,7 @@ public class FalseClip implements Pseudo
     554         @Override
     555@@ -145,6 +149,7 @@
    507556                 running=true;
    508557                 int nBytesRead = 0;
    509558                 try{
    510 +                       if (Options.CLOSE_STREAMS.booleanValue()) line.open(af);
     559+                   if (Options.CLOSE_STREAMS.booleanValue()) line.open(af);
    511560                     line.start();
    512561                     while (running && nBytesRead >=0) {
    513562                         nBytesRead = ais.read(buf, 0, buf.length);
    514 @@ -155,6 +163,9 @@ public class FalseClip implements Pseudo
     563@@ -157,6 +162,9 @@
    515564                         line.drain();
    516565                     else
    517566                         line.stop();
    518 +                               } catch(javax.sound.sampled.LineUnavailableException ex){
    519 +                       System.err.println("JavaSound playing error:\n"+ex);
    520 +                       
     567+                        } catch(javax.sound.sampled.LineUnavailableException ex){
     568+                           System.err.println("JavaSound playing error:\n"+ex);
     569+
    521570                 } catch(Exception ex){
    522571                     System.err.println("JavaSound playing error:\n"+ex);
    523572                 }
    524 --- jclic-0.2.1.0.orig/src/core/edu/xtec/jclic/media/JMFActiveMediaPlayer.java
    525 +++ jclic-0.2.1.0/src/core/edu/xtec/jclic/media/JMFActiveMediaPlayer.java
    526 @@ -31,7 +31,9 @@ import java.io.ByteArrayInputStream;
    527  import java.io.InputStream;
    528  import javax.sound.midi.MidiSystem;
    529  import javax.sound.midi.Sequencer;
    530 -
    531 +//import javax.sound.midi.MidiDevice;
    532 +//import javax.sound.midi.Synthesizer;
    533 +//import edu.xtec.util.Options;
    534  /**
    535   *
    536   * @author Francesc Busquets (fbusquets@xtec.net)
    537 @@ -98,8 +100,29 @@ public class JMFActiveMediaPlayer extend
     573--- a/src/core/edu/xtec/jclic/media/JMFActiveMediaPlayer.java
     574+++ b/src/core/edu/xtec/jclic/media/JMFActiveMediaPlayer.java
     575@@ -99,8 +99,9 @@
    538576         if(!useAudioBuffer){
    539577             try{
    540578                 if(midi){
    541579-                    if(sequencer==null)
    542 -                        sequencer=MidiSystem.getSequencer();
    543580+                    if(sequencer==null) {
    544 +                        /*ClassLoader.getSystemClassLoader().loadClass("com.sun.media.sound.RealTimeSequencer");
    545 +                                               MidiDevice.Info[] devices = MidiSystem.getMidiDeviceInfo();
    546 +                                               if (devices.length == 0) {
    547 +                                                       System.out.println("No MIDI devices found");
    548 +                                               } else {
    549 +                                                       MidiDevice device;
    550 +                                                       for (MidiDevice.Info dev : devices) {
    551 +                                                       device = MidiSystem.getMidiDevice(dev);
    552 +                                                       if (device instanceof Sequencer) {
    553 +                                                               if (!(device.isOpen())) {
    554 +                                                                       device.open();
    555 +                                                               }
    556 +                                                               sequencer = (Sequencer) device;
    557 +                                                               //break;
    558 +                                                               }
    559 +                                                       //} else if (device instanceof Synthesizer) {
    560 +                                                       //      Synthesizer synthesizer = (Synthesizer) device;
    561 +                                                       //      synthesizer.open();
    562 +                                                       //}
    563 +                                                       }*/
    564 +                               sequencer=MidiSystem.getSequencer();
    565 +                                               }
     581                         sequencer=MidiSystem.getSequencer();
     582+                    }
    566583                 }
    567584                 else{
    568585                     if(player==null && dataSource!=null){
    569 @@ -128,6 +151,7 @@ public class JMFActiveMediaPlayer extend
    570                          if(!sequencer.isOpen())
    571                              sequencer.open();
    572                          midiIs.reset();
    573 +                                               //System.out.println("JMFActiveMediaPlayer: playing midi");
    574                          sequencer.setSequence(midiIs);
    575                          sequencer.stop();
    576                          setTimeRanges();
    577 --- jclic-0.2.1.0.orig/src/utilities/edu/xtec/util/Messages.java
    578 +++ jclic-0.2.1.0/src/utilities/edu/xtec/util/Messages.java
    579 @@ -108,11 +108,17 @@ public class Messages {
    580          Messages msg=(Messages)options.get(MESSAGES);
    581          if(msg==null){
    582              String language=(String)options.get(LANGUAGE);
    583 +           //System.out.println("language getMessages: " + language);
    584              if(language==null){
    585                  JOptionPane pane=new JOptionPane("Please select your language:", JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    586                  //pane.setSelectionValues(DESCRIPTIVE_LANGUAGE_CODES);
    587                  pane.setSelectionValues(getDescriptiveLanguageCodes(null));
    588                  pane.setWantsInput(true);
    589 +               //String systemlanguage=Locale.getDefault().getLanguage();
    590 +               //System.out.println("System Language: " + systemlanguage);
    591 +               //String selectedlang=(systemlanguage.equals("qc")) ? "qcv" : systemlanguage;
    592 +               //System.out.println("Selected Language: " + systemlanguage);
    593 +                //String initialSelection=getDescriptiveLanguageCode(selectedlang);
    594                  String initialSelection=getDescriptiveLanguageCode(Locale.getDefault().getLanguage());
    595                  pane.setInitialSelectionValue(initialSelection);                               
    596                  showDlg((Component)options.get(Options.MAIN_PARENT_COMPONENT), pane, "Language selecion");
    597 @@ -134,6 +140,9 @@ public class Messages {
    598      
    599      public void init(String bundle, String language, String country, String variant) {
    600          setLocale(language, country, variant);
    601 +       //System.out.println("language: " +language);
    602 +       //System.out.println("country: " + country);
    603 +       //System.out.println("variant: "+ variant);
    604          addBundle(bundle);
    605          addBundle(BASIC_BUNDLE);
    606          getDlgButtons(true);
    607 @@ -658,8 +667,10 @@ public class Messages {
    608      public static final HashMap ISO_639_2_CODES=new HashMap();
    609      static{
    610          ISO_639_2_CODES.put("ast","asturianu");
    611 -    }
    612 +        ISO_639_2_CODES.put("qc","valencià");
    613  
    614 +    }
    615 +
    616      public static String getDescriptiveLanguageCode(String languageCode){
    617          String result=null;
    618          if(languageCode!=null){
    619 @@ -669,6 +680,7 @@ public class Messages {
    620                 result=lx.getDisplayName(Locale.getDefault());
    621              }
    622              result=result+" ("+languageCode+")";
    623 +           //System.out.println("Resultado language: " + result);
    624          }
    625          return result;
    626      }
    627 --- jclic-0.2.1.0.orig/src/utilities/edu/xtec/util/Options.java
    628 +++ jclic-0.2.1.0/src/utilities/edu/xtec/util/Options.java
    629 @@ -27,6 +27,8 @@ import java.awt.Component;
    630  import java.applet.Applet;
     586--- a/src/utilities/edu/xtec/util/Messages.java
     587+++ b/src/utilities/edu/xtec/util/Messages.java
     588@@ -113,7 +113,16 @@
     589         //pane.setSelectionValues(DESCRIPTIVE_LANGUAGE_CODES);
     590         pane.setSelectionValues(getDescriptiveLanguageCodes(null));
     591         pane.setWantsInput(true);
     592-        String initialSelection = getDescriptiveLanguageCode(Locale.getDefault().getLanguage());
     593+        String systemlanguage=Locale.getDefault().getLanguage();
     594+        if (System.getenv("LANG").contains("valenci"))
     595+        {
     596+            System.out.println(" [ Valencian ] ");
     597+            systemlanguage="qcv";
     598+        } else {
     599+            System.out.println(" [ LANG ] ");
     600+        }
     601+        String initialSelection=getDescriptiveLanguageCode(systemlanguage);
     602+
     603         pane.setInitialSelectionValue(initialSelection);
     604         showDlg((Component) options.get(Options.MAIN_PARENT_COMPONENT), pane, "Language selecion");
     605         String sel = (String) pane.getInputValue();
     606@@ -681,6 +690,7 @@
     607   static {
     608     ISO_639_2_CODES.put("ast", "asturianu");
     609     ISO_639_2_CODES.put("vec", "vèneto");
     610+    ISO_639_2_CODES.put("qcv","valenci\u00E0");
     611   }
     612 
     613   public static String getDescriptiveLanguageCode(String languageCode) {
     614--- a/src/utilities/edu/xtec/util/Options.java
     615+++ b/src/utilities/edu/xtec/util/Options.java
     616@@ -28,6 +28,8 @@
    631617 import java.util.Iterator;
     618 import java.util.Map;
    632619 import java.util.Properties;
    633620+import javax.sound.sampled.AudioSystem;
     
    636623 /**
    637624  *
    638 @@ -34,7 +36,8 @@ import java.util.Properties;
    639   * @version 1.0
     625@@ -35,7 +37,9 @@
     626  * @version 13.09.17
    640627  */
    641  public class Options extends HashMap {
    642 -   
     628 public class Options extends HashMap<String,Object> {
     629-   
     630+
    643631+    public static Boolean CLOSE_STREAMS=null;
    644632+    public static String CLOSESTREAMS="closestreams";
    645633     public static final String TRUE="true", FALSE="false";
    646      public static final Boolean BTRUE=new Boolean(true), BFALSE=new Boolean(false);   
     634     public static final Boolean BTRUE=true, BFALSE=false;   
    647635     public static final String MAC="Mac", WIN="Windows",
    648 @@ -87,7 +90,25 @@ public class Options extends HashMap {
    649              put(ARCH64BIT, new Boolean(true));
    650      }
     636@@ -87,7 +91,25 @@
     637         if("64".equals(s))
     638             put(ARCH64BIT, true);
     639     }
     640-   
     641+
     642+    public void needViaHack(){
     643+        if (CLOSE_STREAMS == null) {
     644+            if (containsKey(CLOSESTREAMS)) CLOSE_STREAMS=new Boolean(getBoolean(CLOSESTREAMS));
     645+            else {
     646+                put(CLOSESTREAMS, "false");
     647+                Mixer.Info[] mixers = AudioSystem.getMixerInfo();
     648+                for(int i = 0; i < mixers.length; ++i) {
     649+                    //System.out.println(mixers[i].getDescription());
     650+                    if (mixers[i].getDescription().indexOf("8237") > 0 || mixers[i].getDescription().indexOf("8235") > 0 || mixers[i].getDescription().indexOf("VT1708")  > 0 || mixers[i].getDescription().indexOf("8233") > 0) {
     651+                       put(CLOSESTREAMS, "true");
     652+                       break;
     653+                   }
     654+               }
     655+               CLOSE_STREAMS=new Boolean(getBoolean(CLOSESTREAMS));
     656+           }
     657+        }
     658+    //if (CLOSE_STREAMS.booleanValue()) System.out.println("Options: CLOSESTREAMS="+ CLOSE_STREAMS);
     659+    }
    651660     
    652 -   
    653 +    public void needViaHack(){
    654 +               if (CLOSE_STREAMS == null) {
    655 +                       if (containsKey(CLOSESTREAMS)) CLOSE_STREAMS=new Boolean(getBoolean(CLOSESTREAMS));
    656 +                       else {
    657 +                               put(CLOSESTREAMS, "false");
    658 +                               Mixer.Info[] mixers = AudioSystem.getMixerInfo();
    659 +                               for(int i = 0; i < mixers.length; ++i) {
    660 +                                       //System.out.println(mixers[i].getDescription());
    661 +                                       if (mixers[i].getDescription().indexOf("8237") > 0 || mixers[i].getDescription().indexOf("8235") > 0 || mixers[i].getDescription().indexOf("VT1708") > 0 || mixers[i].getDescription().indexOf("8233") > 0) {
    662 +                                       put(CLOSESTREAMS, "true");
    663 +                                       break;
    664 +                                       }
    665 +                               }
    666 +                               CLOSE_STREAMS=new Boolean(getBoolean(CLOSESTREAMS));
    667 +                       }
    668 +               }
    669 +               //if (CLOSE_STREAMS.booleanValue()) System.out.println("Options: CLOSESTREAMS="+ CLOSE_STREAMS);
    670 +       }
    671 +
    672661     public Properties toProperties(){
    673662         Properties prop=new Properties();
    674          Iterator it=keySet().iterator();
Note: See TracChangeset for help on using the changeset viewer.