/[svn]/jsampler/trunk/src/org/jsampler/JSUtils.java
ViewVC logotype

Diff of /jsampler/trunk/src/org/jsampler/JSUtils.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1915 by iliev, Thu Jun 11 09:35:29 2009 UTC revision 1916 by iliev, Fri Jun 12 01:22:41 2009 UTC
# Line 27  import java.io.ByteArrayOutputStream; Line 27  import java.io.ByteArrayOutputStream;
27  import java.io.File;  import java.io.File;
28  import java.text.DateFormat;  import java.text.DateFormat;
29  import java.util.logging.Level;  import java.util.logging.Level;
30    import java.util.zip.GZIPOutputStream;
31    
32  import org.jsampler.view.JSChannel;  import org.jsampler.view.JSChannel;
33  import org.jsampler.view.JSChannelsPane;  import org.jsampler.view.JSChannelsPane;
# Line 40  import org.linuxsampler.lscp.MidiPort; Line 41  import org.linuxsampler.lscp.MidiPort;
41  import org.linuxsampler.lscp.Parameter;  import org.linuxsampler.lscp.Parameter;
42  import org.linuxsampler.lscp.SamplerChannel;  import org.linuxsampler.lscp.SamplerChannel;
43    
44    import org.w3c.dom.Document;
45    import org.w3c.dom.Element;
46    
47  import static org.jsampler.CC.preferences;  import static org.jsampler.CC.preferences;
48  import static org.jsampler.JSI18n.i18n;  import static org.jsampler.JSI18n.i18n;
49    
# Line 305  public class JSUtils { Line 309  public class JSUtils {
309                  return s;                  return s;
310          }          }
311    
312            public static byte[]
313            exportInstrMapsToRGD() {
314                    Document doc = DOMUtils.createEmptyDocument();
315    
316                    Element rgd = doc.createElement("rosegarden-data");
317                    rgd.setAttribute("version", "1.7.2");
318                    doc.appendChild(rgd);
319    
320                    Element studio = doc.createElement("studio");
321                    studio.setAttribute("thrufilter", "0");
322                    studio.setAttribute("recordfilter", "0");
323                    rgd.appendChild(studio);
324    
325                    MidiInstrumentMap[] maps = CC.getSamplerModel().getMidiInstrumentMaps();
326                    for(int i = 0; i < maps.length; i++) {
327                            Element dev = doc.createElement("device");
328                            dev.setAttribute("id", String.valueOf(i));
329                            dev.setAttribute("name", "LinuxSampler: " + maps[i].getName());
330                            dev.setAttribute("type", "midi");
331                            studio.appendChild(dev);
332    
333                            Element el = doc.createElement("librarian");
334                            el.setAttribute("name", "Grigor Iliev");
335                            el.setAttribute("email", "grigor@grigoriliev.com");
336                            dev.appendChild(el);
337    
338                            exportInstrumentsToRGD(maps[i], dev);
339                    }
340    
341                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
342                    DOMUtils.writeObject(doc, baos);
343    
344                    // Hack to insert the file name in the archive
345                    byte[] data2 = null;
346                    try {
347                            ByteArrayOutputStream baos2 = new ByteArrayOutputStream();
348                            GZIPOutputStream gzos = new GZIPOutputStream(baos2);
349                            gzos.write(baos.toByteArray());
350                            gzos.finish();
351                            byte[] data = baos2.toByteArray();
352                            data[3] = 8; // File name
353                            byte[] fn = "x-rosegarden-device".getBytes("US-ASCII");
354                            int fnsize = fn.length;
355                            data2 = new byte[data.length + fnsize + 1];
356                            
357                            for(int i = 0; i < 10; i++) data2[i] = data[i];
358                            for(int i = 0; i < fnsize; i++) data2[i + 10] = fn[i];
359                            data2[10 + fnsize] = 0;
360                            for(int i = 10; i < data.length; i++) data2[i + fnsize + 1] = data[i];
361                            
362                    } catch(Exception e) {
363                            e.printStackTrace();
364                    }
365                    //////////////
366    
367                    return data2;
368            }
369    
370            private static void
371            exportInstrumentsToRGD(MidiInstrumentMap map, Element el) {
372                    int bank = -1;
373                    int bnkOffset = preferences().getIntProperty(JSPrefs.FIRST_MIDI_BANK_NUMBER);
374                    Element elBank = null;
375    
376                    for(MidiInstrument i : map.getAllMidiInstruments()) {
377                            int newBank = i.getInfo().getMidiBank();
378                            if(newBank != bank) {
379                                    bank = newBank;
380                                    elBank = el.getOwnerDocument().createElement("bank");
381                                    elBank.setAttribute("name", "Bank " + (bank + bnkOffset));
382                                    elBank.setAttribute("msb", String.valueOf((bank >> 7) & 0x7f));
383                                    elBank.setAttribute("lsb", String.valueOf(bank & 0x7f));
384                                    el.appendChild(elBank);
385                            }
386    
387                            Element elProgram = el.getOwnerDocument().createElement("program");
388                            elProgram.setAttribute("id", String.valueOf(i.getInfo().getMidiProgram()));
389                            elProgram.setAttribute("name", i.getName());
390    
391                            elBank.appendChild(elProgram);
392                    }
393            }
394    
395          public static String          public static String
396          exportSessionToLscpScript() {          exportSessionToLscpScript() {
397                  CC.getSamplerModel().setModified(false);                  CC.getSamplerModel().setModified(false);

Legend:
Removed from v.1915  
changed lines
  Added in v.1916

  ViewVC Help
Powered by ViewVC