summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
commit449aab3c465bbbf66d221fac3d7ea559f1720357 (patch)
tree6843cc40c88250a132acac701271f1504cd2df04 /libs/pbd
parent9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (diff)
rollback to 3428, before the mysterious removal of libs/* at 3431/3432
git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/.cvsignore5
-rw-r--r--libs/pbd/AUTHORS0
-rw-r--r--libs/pbd/COPYING340
-rw-r--r--libs/pbd/ChangeLog10
-rw-r--r--libs/pbd/NEWS0
-rw-r--r--libs/pbd/README0
-rw-r--r--libs/pbd/SConscript80
-rw-r--r--libs/pbd/base_ui.cc108
-rw-r--r--libs/pbd/basename.cc32
-rw-r--r--libs/pbd/boost-debug/shared_ptr.hpp491
-rw-r--r--libs/pbd/command.cc29
-rw-r--r--libs/pbd/controllable.cc118
-rw-r--r--libs/pbd/convert.cc301
-rw-r--r--libs/pbd/dmalloc.cc102
-rw-r--r--libs/pbd/enumwriter.cc273
-rw-r--r--libs/pbd/error.cc26
-rw-r--r--libs/pbd/file_utils.cc126
-rw-r--r--libs/pbd/filesystem.cc201
-rw-r--r--libs/pbd/filesystem_paths.cc61
-rw-r--r--libs/pbd/fpu.cc97
-rw-r--r--libs/pbd/gettext.h82
-rw-r--r--libs/pbd/i18n.h11
-rw-r--r--libs/pbd/id.cc89
-rw-r--r--libs/pbd/libpbd.pc.in11
-rw-r--r--libs/pbd/libpbd.spec.in70
-rw-r--r--libs/pbd/macosx/English.lproj/InfoPlist.stringsbin0 -> 136 bytes
-rw-r--r--libs/pbd/macosx/Info.plist26
-rw-r--r--libs/pbd/macosx/pbd.xcodeproj/project.pbxproj634
-rw-r--r--libs/pbd/macosx/pbd_Prefix.pch4
-rw-r--r--libs/pbd/macosx/version.cc3
-rw-r--r--libs/pbd/macosx/version.h7
-rw-r--r--libs/pbd/mountpoint.cc159
-rw-r--r--libs/pbd/pathscanner.cc204
-rw-r--r--libs/pbd/pbd/.DS_Storebin0 -> 6148 bytes
-rw-r--r--libs/pbd/pbd/.cvsignore1
-rw-r--r--libs/pbd/pbd/abstract_ui.cc149
-rw-r--r--libs/pbd/pbd/abstract_ui.h78
-rw-r--r--libs/pbd/pbd/base_ui.h65
-rw-r--r--libs/pbd/pbd/basename.h32
-rw-r--r--libs/pbd/pbd/command.h49
-rw-r--r--libs/pbd/pbd/compose.h393
-rw-r--r--libs/pbd/pbd/controllable.h92
-rw-r--r--libs/pbd/pbd/convert.h54
-rw-r--r--libs/pbd/pbd/crossthread.h57
-rw-r--r--libs/pbd/pbd/destructible.h47
-rw-r--r--libs/pbd/pbd/enumwriter.h77
-rw-r--r--libs/pbd/pbd/error.h31
-rw-r--r--libs/pbd/pbd/failed_constructor.h30
-rw-r--r--libs/pbd/pbd/fastlog.h40
-rw-r--r--libs/pbd/pbd/file_utils.h99
-rw-r--r--libs/pbd/pbd/filesystem.h202
-rw-r--r--libs/pbd/pbd/filesystem_paths.h36
-rw-r--r--libs/pbd/pbd/forkexec.h28
-rw-r--r--libs/pbd/pbd/fpu.h31
-rw-r--r--libs/pbd/pbd/functor_command.h121
-rw-r--r--libs/pbd/pbd/id.h67
-rw-r--r--libs/pbd/pbd/mathfix.h33
-rw-r--r--libs/pbd/pbd/memento_command.h101
-rw-r--r--libs/pbd/pbd/mountpoint.h27
-rw-r--r--libs/pbd/pbd/pathscanner.h85
-rw-r--r--libs/pbd/pbd/pool.h74
-rw-r--r--libs/pbd/pbd/pthread_utils.h42
-rw-r--r--libs/pbd/pbd/rcu.h165
-rw-r--r--libs/pbd/pbd/receiver.h49
-rw-r--r--libs/pbd/pbd/replace_all.h27
-rw-r--r--libs/pbd/pbd/ringbuffer.h281
-rw-r--r--libs/pbd/pbd/ringbufferNPT.h274
-rw-r--r--libs/pbd/pbd/search_path.h183
-rw-r--r--libs/pbd/pbd/selectable.h101
-rw-r--r--libs/pbd/pbd/shiva.h138
-rw-r--r--libs/pbd/pbd/shortpath.h27
-rw-r--r--libs/pbd/pbd/stacktrace.h114
-rw-r--r--libs/pbd/pbd/stateful.h63
-rw-r--r--libs/pbd/pbd/statefuldestructible.h44
-rw-r--r--libs/pbd/pbd/stl_delete.h88
-rw-r--r--libs/pbd/pbd/stl_functors.h92
-rw-r--r--libs/pbd/pbd/strsplit.h30
-rw-r--r--libs/pbd/pbd/textreceiver.h43
-rw-r--r--libs/pbd/pbd/thrown_error.h38
-rw-r--r--libs/pbd/pbd/tokenizer.h90
-rw-r--r--libs/pbd/pbd/touchable.h88
-rw-r--r--libs/pbd/pbd/transmitter.h109
-rw-r--r--libs/pbd/pbd/undo.h108
-rw-r--r--libs/pbd/pbd/unknown_type.h11
-rw-r--r--libs/pbd/pbd/whitespace.h33
-rw-r--r--libs/pbd/pbd/xml++.h158
-rw-r--r--libs/pbd/pool.cc145
-rw-r--r--libs/pbd/pthread_utils.cc147
-rw-r--r--libs/pbd/receiver.cc58
-rw-r--r--libs/pbd/search_path.cc152
-rw-r--r--libs/pbd/shortpath.cc75
-rw-r--r--libs/pbd/stacktrace.cc72
-rw-r--r--libs/pbd/stateful.cc148
-rw-r--r--libs/pbd/strreplace.cc38
-rw-r--r--libs/pbd/strsplit.cc99
-rw-r--r--libs/pbd/tests/Makefile6
-rwxr-xr-xlibs/pbd/tests/ProtoolsPatchFile.midnam11756
-rw-r--r--libs/pbd/tests/RosegardenPatchFile.xml519
-rw-r--r--libs/pbd/tests/TestSession.ardour3392
-rw-r--r--libs/pbd/tests/xpath.cc98
-rw-r--r--libs/pbd/textreceiver.cc66
-rw-r--r--libs/pbd/transmitter.cc115
-rw-r--r--libs/pbd/undo.cc293
-rw-r--r--libs/pbd/whitespace.cc80
-rw-r--r--libs/pbd/xml++.cc590
105 files changed, 26044 insertions, 0 deletions
diff --git a/libs/pbd/.cvsignore b/libs/pbd/.cvsignore
new file mode 100644
index 0000000000..e9a15e81e9
--- /dev/null
+++ b/libs/pbd/.cvsignore
@@ -0,0 +1,5 @@
+libpbd.pc
+libpbd.spec
+version.cc
+*.os
+*.dylib
diff --git a/libs/pbd/AUTHORS b/libs/pbd/AUTHORS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/libs/pbd/AUTHORS
diff --git a/libs/pbd/COPYING b/libs/pbd/COPYING
new file mode 100644
index 0000000000..d60c31a97a
--- /dev/null
+++ b/libs/pbd/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/libs/pbd/ChangeLog b/libs/pbd/ChangeLog
new file mode 100644
index 0000000000..59e92915ba
--- /dev/null
+++ b/libs/pbd/ChangeLog
@@ -0,0 +1,10 @@
+2005-12-02 Taybin Rutkin <taybin@earthlink.net>
+ * libpbd now allocates warning, info, error, and fatal itself.
+ * Incremented version to 3.1.
+
+2005-04-01 Taybin Rutkin <taybin@earthlink.net>
+ * Updated to support sigc++-2.0.
+ * Incremented version to 3.0.0.
+
+2004-08-04 Taybin Rutkin <taybin@earthlink.net>
+ * Added support for gcc-3.4
diff --git a/libs/pbd/NEWS b/libs/pbd/NEWS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/libs/pbd/NEWS
diff --git a/libs/pbd/README b/libs/pbd/README
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/libs/pbd/README
diff --git a/libs/pbd/SConscript b/libs/pbd/SConscript
new file mode 100644
index 0000000000..87173f0874
--- /dev/null
+++ b/libs/pbd/SConscript
@@ -0,0 +1,80 @@
+# -*- python -*-
+
+import os
+import os.path
+import glob
+
+Import('env libraries i18n install_prefix')
+
+pbd = env.Copy()
+
+domain = 'libpbd'
+
+pbd.Append(DOMAIN=domain,MAJOR=4,MINOR=1,MICRO=0)
+pbd.Append(CXXFLAGS="-DPACKAGE=\\\"" + domain + "\\\"")
+pbd.Append(CXXFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
+pbd.Append(CXXFLAGS="-DLIBSIGC_DISABLE_DEPRECATED")
+pbd.Append(PACKAGE=domain)
+pbd.Append(POTFILE=domain + '.pot')
+
+pbd_files = Split("""
+basename.cc
+base_ui.cc
+command.cc
+convert.cc
+controllable.cc
+enumwriter.cc
+dmalloc.cc
+error.cc
+filesystem.cc
+filesystem_paths.cc
+file_utils.cc
+fpu.cc
+id.cc
+mountpoint.cc
+pathscanner.cc
+pool.cc
+pthread_utils.cc
+receiver.cc
+search_path.cc
+shortpath.cc
+stacktrace.cc
+stateful.cc
+strreplace.cc
+strsplit.cc
+textreceiver.cc
+transmitter.cc
+undo.cc
+version.cc
+whitespace.cc
+xml++.cc
+""")
+
+conf = Configure(pbd)
+if conf.CheckFunc('getmntent'):
+ conf.env.Append(CCFLAGS="-DHAVE_GETMNTENT")
+pbd = conf.Finish()
+
+pbd.Merge ([ libraries['sigc2'],
+ libraries['xml'],
+ libraries['glibmm2'],
+ libraries['glib2'] ])
+
+pbd.VersionBuild(['version.cc','pbd/version.h'], [])
+
+libpbd = pbd.SharedLibrary('pbd', pbd_files)
+Default(libpbd)
+
+mount_env = Environment(CCFLAGS='-DTEST_MOUNTPOINT -Ilibs/pbd')
+mount_env.Program('mountpoint', 'mountpoint.cc')
+
+if env['NLS']:
+ i18n (pbd, pbd_files, env)
+
+env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour3'), libpbd))
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript', 'i18n.h', 'gettext.h', 'pbd/abstract_ui.cc' ] +
+ pbd_files +
+ glob.glob('po/*.po') +
+ glob.glob('pbd/*.h')))
diff --git a/libs/pbd/base_ui.cc b/libs/pbd/base_ui.cc
new file mode 100644
index 0000000000..94d039ba86
--- /dev/null
+++ b/libs/pbd/base_ui.cc
@@ -0,0 +1,108 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <cstring>
+#include <stdint.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include <pbd/base_ui.h>
+#include <pbd/error.h>
+#include <pbd/compose.h>
+#include <pbd/failed_constructor.h>
+
+#include "i18n.h"
+
+using namespace std;
+using namespace PBD;
+
+uint32_t BaseUI::rt_bit = 1;
+BaseUI::RequestType BaseUI::CallSlot = BaseUI::new_request_type();
+
+BaseUI::BaseUI (string str, bool with_signal_pipe)
+ : _name (str)
+{
+ /* odd pseudo-singleton semantics */
+
+ base_ui_instance = this;
+
+ signal_pipe[0] = -1;
+ signal_pipe[1] = -1;
+
+ if (with_signal_pipe) {
+ if (setup_signal_pipe ()) {
+ throw failed_constructor ();
+ }
+ }
+}
+
+BaseUI::~BaseUI()
+{
+ if (signal_pipe[0] >= 0) {
+ close (signal_pipe[0]);
+ }
+
+ if (signal_pipe[1] >= 0) {
+ close (signal_pipe[1]);
+ }
+}
+
+BaseUI::RequestType
+BaseUI::new_request_type ()
+{
+ RequestType rt;
+
+ /* XXX catch out-of-range */
+
+ rt = RequestType (rt_bit);
+ rt_bit <<= 1;
+
+ return rt;
+}
+
+int
+BaseUI::setup_signal_pipe ()
+{
+ /* setup the pipe that other threads send us notifications/requests
+ through.
+ */
+
+ if (pipe (signal_pipe)) {
+ error << string_compose (_("%1-UI: cannot create error signal pipe (%2)"), _name, std::strerror (errno))
+ << endmsg;
+
+ return -1;
+ }
+
+ if (fcntl (signal_pipe[0], F_SETFL, O_NONBLOCK)) {
+ error << string_compose (_("%1-UI: cannot set O_NONBLOCK on signal read pipe (%2)"), _name, std::strerror (errno))
+ << endmsg;
+ return -1;
+ }
+
+ if (fcntl (signal_pipe[1], F_SETFL, O_NONBLOCK)) {
+ error << string_compose (_("%1-UI: cannot set O_NONBLOCK on signal write pipe (%2)"), _name, std::strerror (errno))
+ << endmsg;
+ return -1;
+ }
+
+ return 0;
+}
+
diff --git a/libs/pbd/basename.cc b/libs/pbd/basename.cc
new file mode 100644
index 0000000000..0b631f4249
--- /dev/null
+++ b/libs/pbd/basename.cc
@@ -0,0 +1,32 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/basename.h>
+#include <glibmm/miscutils.h>
+
+using Glib::ustring;
+
+ustring
+PBD::basename_nosuffix (ustring str)
+{
+ ustring base = Glib::path_get_basename (str);
+
+ return base.substr (0, base.find_last_of ('.'));
+
+}
diff --git a/libs/pbd/boost-debug/shared_ptr.hpp b/libs/pbd/boost-debug/shared_ptr.hpp
new file mode 100644
index 0000000000..506d11bde5
--- /dev/null
+++ b/libs/pbd/boost-debug/shared_ptr.hpp
@@ -0,0 +1,491 @@
+#define DEBUG_SHARED_PTR
+#ifndef DEBUG_SHARED_PTR
+
+#include <boost/shared_ptr.hpp>
+
+#else
+
+#include <pbd/stacktrace.h>
+
+#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
+#define BOOST_SHARED_PTR_HPP_INCLUDED
+
+//
+// shared_ptr.hpp
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002, 2003 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/smart_ptr/shared_ptr.htm for documentation.
+//
+
+#include <pbd/stacktrace.h>
+
+#include <boost/config.hpp> // for broken compiler workarounds
+
+#if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+#include <boost/detail/shared_ptr_nmt.hpp>
+#else
+
+#include <boost/assert.hpp>
+#include <boost/checked_delete.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/detail/shared_count.hpp>
+#include <boost/detail/workaround.hpp>
+
+#include <memory> // for std::auto_ptr
+#include <algorithm> // for std::swap
+#include <functional> // for std::less
+#include <typeinfo> // for std::bad_cast
+#include <iosfwd> // for std::basic_ostream
+
+#ifdef BOOST_MSVC // moved here to work around VC++ compiler crash
+# pragma warning(push)
+# pragma warning(disable:4284) // odd return type for operator->
+#endif
+
+namespace boost
+{
+
+template<class T> class weak_ptr;
+template<class T> class enable_shared_from_this;
+
+namespace detail
+{
+
+struct static_cast_tag {};
+struct const_cast_tag {};
+struct dynamic_cast_tag {};
+struct polymorphic_cast_tag {};
+
+template<class T> struct shared_ptr_traits
+{
+ typedef T & reference;
+};
+
+template<> struct shared_ptr_traits<void>
+{
+ typedef void reference;
+};
+
+#if !defined(BOOST_NO_CV_VOID_SPECIALIZATIONS)
+
+template<> struct shared_ptr_traits<void const>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void volatile>
+{
+ typedef void reference;
+};
+
+template<> struct shared_ptr_traits<void const volatile>
+{
+ typedef void reference;
+};
+
+#endif
+
+// enable_shared_from_this support
+
+template<class T, class Y> void sp_enable_shared_from_this( shared_count const & pn, boost::enable_shared_from_this<T> const * pe, Y const * px )
+{
+ if(pe != 0) pe->_internal_weak_this._internal_assign(const_cast<Y*>(px), pn);
+}
+
+inline void sp_enable_shared_from_this( shared_count const & /*pn*/, ... )
+{
+}
+
+} // namespace detail
+
+
+//
+// shared_ptr
+//
+// An enhanced relative of scoped_ptr with reference counted copy semantics.
+// The object pointed to is deleted when the last shared_ptr pointing to it
+// is destroyed or reset.
+//
+
+template<class T> class shared_ptr
+{
+private:
+
+ // Borland 5.5.1 specific workaround
+ typedef shared_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+ typedef T value_type;
+ typedef T * pointer;
+ typedef typename detail::shared_ptr_traits<T>::reference reference;
+
+ shared_ptr(): px(0), pn() // never throws in 1.30+
+ {
+ }
+
+ template<class Y>
+ explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
+ {
+ detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+ //
+ // Requirements: D's copy constructor must not throw
+ //
+ // shared_ptr will release p by calling d(p)
+ //
+
+ template<class Y, class D> shared_ptr(Y * p, D d): px(p), pn(p, d)
+ {
+ detail::sp_enable_shared_from_this( pn, p, p );
+ }
+
+// generated copy constructor, assignment, destructor are fine...
+
+// except that Borland C++ has a bug, and g++ with -Wsynth warns
+#if defined(__BORLANDC__) || defined(__GNUC__)
+
+ shared_ptr & operator=(shared_ptr const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+ template<class Y>
+ explicit shared_ptr(weak_ptr<Y> const & r): pn(r.pn) // may throw
+ {
+ // it is now safe to copy r.px, as pn(r.pn) did not throw
+ px = r.px;
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r): px(r.px), pn(r.pn) // never throws
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::static_cast_tag): px(static_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::const_cast_tag): px(const_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::dynamic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0) // need to allocate new counter -- the cast failed
+ {
+ pn = detail::shared_count();
+ }
+ }
+
+ template<class Y>
+ shared_ptr(shared_ptr<Y> const & r, detail::polymorphic_cast_tag): px(dynamic_cast<element_type *>(r.px)), pn(r.pn)
+ {
+ if(px == 0)
+ {
+ boost::throw_exception(std::bad_cast());
+ }
+ }
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ explicit shared_ptr(std::auto_ptr<Y> & r): px(r.get()), pn()
+ {
+ Y * tmp = r.get();
+ pn = detail::shared_count(r);
+ detail::sp_enable_shared_from_this( pn, tmp, tmp );
+ }
+
+#endif
+
+#if !defined(BOOST_MSVC) || (BOOST_MSVC > 1200)
+
+ template<class Y>
+ shared_ptr & operator=(shared_ptr<Y> const & r) // never throws
+ {
+ px = r.px;
+ pn = r.pn; // shared_count::op= doesn't throw
+ return *this;
+ }
+
+#endif
+
+#ifndef BOOST_NO_AUTO_PTR
+
+ template<class Y>
+ shared_ptr & operator=(std::auto_ptr<Y> & r)
+ {
+ this_type(r).swap(*this);
+ return *this;
+ }
+
+#endif
+
+ void reset() // never throws in 1.30+
+ {
+ this_type().swap(*this);
+ }
+
+ template<class Y> void reset(Y * p) // Y must be complete
+ {
+ BOOST_ASSERT(p == 0 || p != px); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ template<class Y, class D> void reset(Y * p, D d)
+ {
+ this_type(p, d).swap(*this);
+ }
+
+ reference operator* () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return *px;
+ }
+
+ T * operator-> () const // never throws
+ {
+ BOOST_ASSERT(px != 0);
+ return px;
+ }
+
+ T * get() const // never throws
+ {
+ return px;
+ }
+
+ // implicit conversion to "bool"
+
+#if defined(__SUNPRO_CC) && BOOST_WORKAROUND(__SUNPRO_CC, <= 0x530)
+
+ operator bool () const
+ {
+ return px != 0;
+ }
+
+#elif \
+ ( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, < 0x3200) ) || \
+ ( defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 304) )
+
+ typedef T * (this_type::*unspecified_bool_type)() const;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::get;
+ }
+
+#else
+
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return px == 0? 0: &this_type::px;
+ }
+
+#endif
+
+ // operator! is redundant, but some compilers need it
+
+ bool operator! () const // never throws
+ {
+ return px == 0;
+ }
+
+ bool unique() const // never throws
+ {
+ return pn.unique();
+ }
+
+ long use_count() const // never throws
+ {
+ return pn.use_count();
+ }
+
+ void swap(shared_ptr<T> & other) // never throws
+ {
+ std::swap(px, other.px);
+ pn.swap(other.pn);
+ }
+
+ template<class Y> bool _internal_less(shared_ptr<Y> const & rhs) const
+ {
+ return pn < rhs.pn;
+ }
+
+ void * _internal_get_deleter(std::type_info const & ti) const
+ {
+ return pn.get_deleter(ti);
+ }
+
+// Tasteless as this may seem, making all members public allows member templates
+// to work in the absence of member template friends. (Matthew Langston)
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+private:
+
+ template<class Y> friend class shared_ptr;
+ template<class Y> friend class weak_ptr;
+
+#endif
+
+ T * px; // contained pointer
+ detail::shared_count pn; // reference counter
+ typename PBD::thing_with_backtrace<T> bt; // backtrace
+
+}; // shared_ptr
+
+template<class T, class U> inline bool operator==(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() == b.get();
+}
+
+template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a.get() != b.get();
+}
+
+#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96
+
+// Resolve the ambiguity between our op!= and the one in rel_ops
+
+template<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b)
+{
+ return a.get() != b.get();
+}
+
+#endif
+
+template<class T, class U> inline bool operator<(shared_ptr<T> const & a, shared_ptr<U> const & b)
+{
+ return a._internal_less(b);
+}
+
+template<class T> inline void swap(shared_ptr<T> & a, shared_ptr<T> & b)
+{
+ a.swap(b);
+}
+
+template<class T, class U> shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> const_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::const_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> dynamic_pointer_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::dynamic_cast_tag());
+}
+
+// shared_*_cast names are deprecated. Use *_pointer_cast instead.
+
+template<class T, class U> shared_ptr<T> shared_static_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::static_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_dynamic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::dynamic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_cast(shared_ptr<U> const & r)
+{
+ return shared_ptr<T>(r, detail::polymorphic_cast_tag());
+}
+
+template<class T, class U> shared_ptr<T> shared_polymorphic_downcast(shared_ptr<U> const & r)
+{
+ BOOST_ASSERT(dynamic_cast<T *>(r.get()) == r.get());
+ return shared_static_cast<T>(r);
+}
+
+// get_pointer() enables boost::mem_fn to recognize shared_ptr
+
+template<class T> inline T * get_pointer(shared_ptr<T> const & p)
+{
+ return p.get();
+}
+
+// operator<<
+
+#if defined(__GNUC__) && (__GNUC__ < 3)
+
+template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
+{
+ os << p.get();
+ return os;
+}
+
+#else
+
+# if defined(BOOST_MSVC) && BOOST_WORKAROUND(BOOST_MSVC, <= 1200 && __SGI_STL_PORT)
+// MSVC6 has problems finding std::basic_ostream through the using declaration in namespace _STL
+using std::basic_ostream;
+template<class E, class T, class Y> basic_ostream<E, T> & operator<< (basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# else
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
+# endif
+{
+ os << p.get();
+ return os;
+}
+
+#endif
+
+// get_deleter (experimental)
+
+#if ( defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) ) || \
+ ( defined(__EDG_VERSION__) && BOOST_WORKAROUND(__EDG_VERSION__, <= 238) ) || \
+ ( defined(__HP_aCC) && BOOST_WORKAROUND(__HP_aCC, <= 33500) )
+
+// g++ 2.9x doesn't allow static_cast<X const *>(void *)
+// apparently EDG 2.38 and HP aCC A.03.35 also don't accept it
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ void const * q = p._internal_get_deleter(typeid(D));
+ return const_cast<D *>(static_cast<D const *>(q));
+}
+
+#else
+
+template<class D, class T> D * get_deleter(shared_ptr<T> const & p)
+{
+ return static_cast<D *>(p._internal_get_deleter(typeid(D)));
+}
+
+#endif
+
+} // namespace boost
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+#endif // #if defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(BOOST_MSVC6_MEMBER_TEMPLATES)
+
+#endif // #ifndef BOOST_SHARED_PTR_HPP_INCLUDED
+
+#endif // #ifndef DEBUG_SHARED_PTR
diff --git a/libs/pbd/command.cc b/libs/pbd/command.cc
new file mode 100644
index 0000000000..011534a662
--- /dev/null
+++ b/libs/pbd/command.cc
@@ -0,0 +1,29 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/command.h>
+#include <pbd/xml++.h>
+
+
+XMLNode &Command::get_state()
+{
+ XMLNode *node = new XMLNode ("Command");
+ node->add_content("WARNING: Somebody forgot to subclass Command.");
+ return *node;
+}
diff --git a/libs/pbd/controllable.cc b/libs/pbd/controllable.cc
new file mode 100644
index 0000000000..c15b7a8cf2
--- /dev/null
+++ b/libs/pbd/controllable.cc
@@ -0,0 +1,118 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/controllable.h>
+#include <pbd/xml++.h>
+#include <pbd/error.h>
+
+#include "i18n.h"
+
+using namespace PBD;
+
+sigc::signal<void,Controllable*> Controllable::Destroyed;
+sigc::signal<bool,Controllable*> Controllable::StartLearning;
+sigc::signal<void,Controllable*> Controllable::StopLearning;
+sigc::signal<void,Controllable*,int,int> Controllable::CreateBinding;
+sigc::signal<void,Controllable*> Controllable::DeleteBinding;
+
+Glib::Mutex* Controllable::registry_lock = 0;
+Controllable::Controllables Controllable::registry;
+
+Controllable::Controllable (std::string name)
+ : _name (name)
+{
+ if (registry_lock == 0) {
+ registry_lock = new Glib::Mutex;
+ }
+
+ add ();
+}
+
+void
+Controllable::add ()
+{
+ Glib::Mutex::Lock lm (*registry_lock);
+ registry.insert (this);
+ this->GoingAway.connect (mem_fun (this, &Controllable::remove));
+}
+
+void
+Controllable::remove ()
+{
+ Glib::Mutex::Lock lm (*registry_lock);
+ for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
+ if ((*i) == this) {
+ registry.erase (i);
+ break;
+ }
+ }
+}
+
+Controllable*
+Controllable::by_id (const ID& id)
+{
+ Glib::Mutex::Lock lm (*registry_lock);
+
+ for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
+ if ((*i)->id() == id) {
+ return (*i);
+ }
+ }
+ return 0;
+}
+
+
+Controllable*
+Controllable::by_name (const std::string& str)
+{
+ Glib::Mutex::Lock lm (*registry_lock);
+
+ for (Controllables::iterator i = registry.begin(); i != registry.end(); ++i) {
+ if ((*i)->_name == str) {
+ return (*i);
+ }
+ }
+ return 0;
+}
+
+XMLNode&
+Controllable::get_state ()
+{
+ XMLNode* node = new XMLNode (X_("controllable"));
+ char buf[64];
+
+ node->add_property (X_("name"), _name); // not reloaded from XML state, just there to look at
+ _id.print (buf, sizeof (buf));
+ node->add_property (X_("id"), buf);
+ return *node;
+}
+
+int
+Controllable::set_state (const XMLNode& node)
+{
+ const XMLProperty* prop = node.property (X_("id"));
+
+ if (prop) {
+ _id = prop->value();
+ return 0;
+ } else {
+ error << _("Controllable state node has no ID property") << endmsg;
+ return -1;
+ }
+}
diff --git a/libs/pbd/convert.cc b/libs/pbd/convert.cc
new file mode 100644
index 0000000000..fc84bbad5e
--- /dev/null
+++ b/libs/pbd/convert.cc
@@ -0,0 +1,301 @@
+/*
+ Copyright (C) 2006 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <cmath>
+#include <stdint.h>
+#include <stdlib.h>
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+#include <inttypes.h>
+
+#include "pbd/convert.h"
+
+#include "i18n.h"
+
+using std::string;
+using std::vector;
+using Glib::ustring;
+
+namespace PBD {
+
+string
+short_version (string orig, string::size_type target_length)
+{
+ /* this tries to create a recognizable abbreviation
+ of "orig" by removing characters until we meet
+ a certain target length.
+
+ note that we deliberately leave digits in the result
+ without modification.
+ */
+
+
+ string::size_type pos;
+
+ /* remove white-space and punctuation, starting at end */
+
+ while (orig.length() > target_length) {
+ if ((pos = orig.find_last_of (_("\"\n\t ,<.>/?:;'[{}]~`!@#$%^&*()_-+="))) == string::npos) {
+ break;
+ }
+ orig.replace (pos, 1, "");
+ }
+
+ /* remove lower-case vowels, starting at end */
+
+ while (orig.length() > target_length) {
+ if ((pos = orig.find_last_of (_("aeiou"))) == string::npos) {
+ break;
+ }
+ orig.replace (pos, 1, "");
+ }
+
+ /* remove upper-case vowels, starting at end */
+
+ while (orig.length() > target_length) {
+ if ((pos = orig.find_last_of (_("AEIOU"))) == string::npos) {
+ break;
+ }
+ orig.replace (pos, 1, "");
+ }
+
+ /* remove lower-case consonants, starting at end */
+
+ while (orig.length() > target_length) {
+ if ((pos = orig.find_last_of (_("bcdfghjklmnpqrtvwxyz"))) == string::npos) {
+ break;
+ }
+ orig.replace (pos, 1, "");
+ }
+
+ /* remove upper-case consonants, starting at end */
+
+ while (orig.length() > target_length) {
+ if ((pos = orig.find_last_of (_("BCDFGHJKLMNPQRTVWXYZ"))) == string::npos) {
+ break;
+ }
+ orig.replace (pos, 1, "");
+ }
+
+ /* whatever the length is now, use it */
+
+ return orig;
+}
+
+int
+atoi (const string& s)
+{
+ return ::atoi (s.c_str());
+}
+
+double
+atof (const string& s)
+{
+ return ::atof (s.c_str());
+}
+
+vector<string>
+internationalize (const char *package_name, const char **array)
+{
+ vector<string> v;
+
+ for (uint32_t i = 0; array[i]; ++i) {
+ v.push_back (dgettext(package_name, array[i]));
+ }
+
+ return v;
+}
+
+static int32_t
+int_from_hex (char hic, char loc)
+{
+ int hi; /* hi byte */
+ int lo; /* low byte */
+
+ hi = (int) hic;
+
+ if( ('0'<=hi) && (hi<='9') ) {
+ hi -= '0';
+ } else if( ('a'<= hi) && (hi<= 'f') ) {
+ hi -= ('a'-10);
+ } else if( ('A'<=hi) && (hi<='F') ) {
+ hi -= ('A'-10);
+ }
+
+ lo = (int) loc;
+
+ if( ('0'<=lo) && (lo<='9') ) {
+ lo -= '0';
+ } else if( ('a'<=lo) && (lo<='f') ) {
+ lo -= ('a'-10);
+ } else if( ('A'<=lo) && (lo<='F') ) {
+ lo -= ('A'-10);
+ }
+
+ return lo + (16 * hi);
+}
+
+void
+url_decode (string& url)
+{
+ string::iterator last;
+ string::iterator next;
+
+ for (string::iterator i = url.begin(); i != url.end(); ++i) {
+ if ((*i) == '+') {
+ *i = ' ';
+ }
+ }
+
+ if (url.length() <= 3) {
+ return;
+ }
+
+ last = url.end();
+
+ --last; /* points at last char */
+ --last; /* points at last char - 1 */
+
+ for (string::iterator i = url.begin(); i != last; ) {
+
+ if (*i == '%') {
+
+ next = i;
+
+ url.erase (i);
+
+ i = next;
+ ++next;
+
+ if (isxdigit (*i) && isxdigit (*next)) {
+ /* replace first digit with char */
+ *i = int_from_hex (*i,*next);
+ ++i; /* points at 2nd of 2 digits */
+ url.erase (i);
+ }
+ } else {
+ ++i;
+ }
+ }
+}
+
+void
+url_decode (ustring& url)
+{
+ ustring::iterator last;
+ ustring::iterator next;
+
+ for (ustring::iterator i = url.begin(); i != url.end(); ++i) {
+ if ((*i) == '+') {
+ next = i;
+ ++next;
+ url.replace (i, next, 1, ' ');
+ }
+ }
+
+ if (url.length() <= 3) {
+ return;
+ }
+
+ last = url.end();
+
+ --last; /* points at last char */
+ --last; /* points at last char - 1 */
+
+ for (ustring::iterator i = url.begin(); i != last; ) {
+
+ if (*i == '%') {
+
+ next = i;
+
+ url.erase (i);
+
+ i = next;
+ ++next;
+
+ if (isxdigit (*i) && isxdigit (*next)) {
+ /* replace first digit with char */
+ url.replace (i, next, 1, (gunichar) int_from_hex (*i,*next));
+ ++i; /* points at 2nd of 2 digits */
+ url.erase (i);
+ }
+ } else {
+ ++i;
+ }
+ }
+}
+
+#if 0
+string
+length2string (const int32_t frames, const float sample_rate)
+{
+ int32_t secs = (int32_t) (frames / sample_rate);
+ int32_t hrs = secs / 3600;
+ secs -= (hrs * 3600);
+ int32_t mins = secs / 60;
+ secs -= (mins * 60);
+
+ int32_t total_secs = (hrs * 3600) + (mins * 60) + secs;
+ int32_t frames_remaining = (int) floor (frames - (total_secs * sample_rate));
+ float fractional_secs = (float) frames_remaining / sample_rate;
+
+ char duration_str[32];
+ sprintf (duration_str, "%02" PRIi32 ":%02" PRIi32 ":%05.2f", hrs, mins, (float) secs + fractional_secs);
+
+ return duration_str;
+}
+#endif
+
+string
+length2string (const int64_t frames, const double sample_rate)
+{
+ int64_t secs = (int64_t) floor (frames / sample_rate);
+ int64_t hrs = secs / 3600LL;
+ secs -= (hrs * 3600LL);
+ int64_t mins = secs / 60LL;
+ secs -= (mins * 60LL);
+
+ int64_t total_secs = (hrs * 3600LL) + (mins * 60LL) + secs;
+ int64_t frames_remaining = (int64_t) floor (frames - (total_secs * sample_rate));
+ float fractional_secs = (float) frames_remaining / sample_rate;
+
+ char duration_str[64];
+ sprintf (duration_str, "%02" PRIi64 ":%02" PRIi64 ":%05.2f", hrs, mins, (float) secs + fractional_secs);
+
+ return duration_str;
+}
+static bool
+chars_equal_ignore_case(char x, char y)
+{
+ static std::locale loc;
+ return toupper(x, loc) == toupper(y, loc);
+}
+
+bool
+strings_equal_ignore_case (const string& a, const string& b)
+{
+ if (a.length() == b.length()) {
+ return std::equal (a.begin(), a.end(), b.begin(), chars_equal_ignore_case);
+ }
+ return false;
+}
+
+
+} // namespace PBD
diff --git a/libs/pbd/dmalloc.cc b/libs/pbd/dmalloc.cc
new file mode 100644
index 0000000000..0e730946c8
--- /dev/null
+++ b/libs/pbd/dmalloc.cc
@@ -0,0 +1,102 @@
+/*
+ * file that facilitates C++ program debugging.
+ *
+ * Copyright 1995 by Gray Watson
+ *
+ * This file is part of the dmalloc package.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * NON-COMMERCIAL purpose and without fee is hereby granted, provided
+ * that the above copyright notice and this permission notice appear
+ * in all copies, and that the name of Gray Watson not be used in
+ * advertising or publicity pertaining to distribution of the document
+ * or software without specific, written prior permission.
+ *
+ * Please see the PERMISSIONS file or contact the author for information
+ * about commercial licenses.
+ *
+ * Gray Watson makes no representations about the suitability of the
+ * software described herein for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * The author may be contacted via http://www.letters.com/~gray/
+ *
+ * $Id$
+ */
+
+/*
+ * This file is used to effectively redirect new to the more familiar
+ * malloc and delete to the more familiar free so they can be debugged
+ * with the debug malloc library.. They also give the known error
+ * behavior, too.
+ *
+ * Compile and link this in with the C++ program you want to debug.
+ *
+ * NOTE: I am not a C++ hacker so feedback in the form of other hints
+ * and ideas for C++ users would be much appreciated.
+ */
+
+#ifdef DEBUG_MALLOC
+
+extern "C" {
+#include <stdlib.h>
+#include <dmalloc.h>
+#include "/usr/local/src/dmalloc-4.1.2/return.h"
+}
+
+/*
+ * An overload function for the C++ new.
+ */
+void *
+operator new(size_t size)
+{
+ char *file;
+ GET_RET_ADDR(file);
+
+ /* handle correct C++ semantics for an alloc of size 0 */
+
+ if (size == 0) size = 1;
+
+ return _malloc_leap(file, 0, size);
+}
+
+/*
+ * An overload function for the C++ new[].
+ */
+void *
+operator new[](size_t size)
+{
+ char *file;
+ GET_RET_ADDR(file);
+
+ /* handle correct C++ semantics for an alloc of size 0 */
+
+ if (size == 0) size = 1;
+
+ return _malloc_leap(file, 0, size);
+}
+
+/*
+ * An overload function for the C++ delete.
+ */
+void
+operator delete(void *pnt)
+{
+ char *file;
+ GET_RET_ADDR(file);
+ _free_leap(file, 0, pnt);
+}
+
+/*
+ * An overload function for the C++ delete[]. Thanks to Jens Krinke
+ * <j.krinke@gmx.de>
+ */
+void
+operator delete[](void *pnt)
+{
+ char *file;
+ GET_RET_ADDR(file);
+ _free_leap(file, 0, pnt);
+}
+
+#endif
diff --git a/libs/pbd/enumwriter.cc b/libs/pbd/enumwriter.cc
new file mode 100644
index 0000000000..7674410ec9
--- /dev/null
+++ b/libs/pbd/enumwriter.cc
@@ -0,0 +1,273 @@
+/*
+ Copyright (C) 2006 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <ctype.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <pbd/enumwriter.h>
+#include <pbd/error.h>
+#include <pbd/compose.h>
+
+using namespace std;
+using namespace PBD;
+
+#include "i18n.h"
+
+EnumWriter* EnumWriter::_instance = 0;
+map<string,string> EnumWriter::hack_table;
+
+static int
+nocase_cmp(const string & s1, const string& s2)
+{
+ string::const_iterator it1 = s1.begin();
+ string::const_iterator it2 = s2.begin();
+
+ while ((it1 != s1.end()) && (it2 != s2.end())) {
+ if(::toupper(*it1) != ::toupper(*it2)) {//letters differ?
+ // return -1 to indicate 'smaller than', 1 otherwise
+ return (::toupper(*it1) < ::toupper(*it2)) ? -1 : 1;
+ }
+
+ ++it1;
+ ++it2;
+ }
+
+ string::size_type size1 = s1.size();
+ string::size_type size2 = s2.size();
+
+ //return -1,0 or 1 according to strings' lengths
+
+ if (size1 == size2) {
+ return 0;
+ }
+
+ return (size1 < size2) ? -1 : 1;
+}
+
+EnumWriter::EnumWriter ()
+{
+ if (_instance == 0) {
+ _instance = this;
+ }
+}
+
+EnumWriter::~EnumWriter ()
+{
+}
+
+void
+EnumWriter::register_distinct (string type, vector<int> v, vector<string> s)
+{
+ pair<string,EnumRegistration> newpair;
+ pair<Registry::iterator,bool> result;
+
+ newpair.first = type;
+ newpair.second = EnumRegistration (v, s, false);
+
+ result = registry.insert (newpair);
+
+ if (!result.second) {
+ warning << string_compose (_("enum type \"%1\" already registered with the enum writer"), type) << endmsg;
+ }
+}
+
+void
+EnumWriter::register_bits (string type, vector<int> v, vector<string> s)
+{
+ pair<string,EnumRegistration> newpair;
+ pair<Registry::iterator,bool> result;
+
+ newpair.first = type;
+ newpair.second = EnumRegistration (v, s, true);
+
+ result = registry.insert (newpair);
+
+ if (!result.second) {
+ warning << _("enum type \"%1\" already registered with the enum writer") << endmsg;
+ }
+}
+
+string
+EnumWriter::write (string type, int value)
+{
+ Registry::iterator x = registry.find (type);
+
+ if (x == registry.end()) {
+ error << string_compose (_("EnumWriter: unknown enumeration type \"%1\""), type) << endmsg;
+ throw unknown_enumeration();
+ }
+
+ if (x->second.bitwise) {
+ return write_bits (x->second, value);
+ } else {
+ return write_distinct (x->second, value);
+ }
+}
+
+int
+EnumWriter::read (string type, string value)
+{
+ Registry::iterator x = registry.find (type);
+
+ if (x == registry.end()) {
+ error << string_compose (_("EnumWriter: unknown enumeration type \"%1\""), type) << endmsg;
+ throw unknown_enumeration();
+ }
+
+ if (x->second.bitwise) {
+ return read_bits (x->second, value);
+ } else {
+ return read_distinct (x->second, value);
+ }
+}
+
+string
+EnumWriter::write_bits (EnumRegistration& er, int value)
+{
+ vector<int>::iterator i;
+ vector<string>::iterator s;
+ string result;
+
+ for (i = er.values.begin(), s = er.names.begin(); i != er.values.end(); ++i, ++s) {
+ if (value & (*i)) {
+ if (!result.empty()) {
+ result += ',';
+ }
+ result += (*s);
+ }
+ }
+
+ return result;
+}
+
+string
+EnumWriter::write_distinct (EnumRegistration& er, int value)
+{
+ vector<int>::iterator i;
+ vector<string>::iterator s;
+
+ for (i = er.values.begin(), s = er.names.begin(); i != er.values.end(); ++i, ++s) {
+ if (value == (*i)) {
+ return (*s);
+ }
+ }
+
+ return string();
+}
+
+int
+EnumWriter::read_bits (EnumRegistration& er, string str)
+{
+ vector<int>::iterator i;
+ vector<string>::iterator s;
+ int result = 0;
+ bool found = false;
+ string::size_type comma;
+
+ /* catch old-style hex numerics */
+
+ if (str.length() > 2 && str[0] == '0' && str[1] == 'x') {
+ return strtol (str.c_str(), (char **) 0, 16);
+ }
+
+ /* catch old style dec numerics */
+
+ if (strspn (str.c_str(), "0123456789") == str.length()) {
+ return strtol (str.c_str(), (char **) 0, 10);
+ }
+
+ do {
+
+ comma = str.find_first_of (',');
+ string segment = str.substr (0, comma);
+
+ for (i = er.values.begin(), s = er.names.begin(); i != er.values.end(); ++i, ++s) {
+ if (segment == *s || nocase_cmp (segment, *s) == 0) {
+ result |= (*i);
+ found = true;
+ }
+ }
+
+ if (comma == string::npos) {
+ break;
+ }
+
+ str = str.substr (comma+1);
+
+ } while (true);
+
+ if (!found) {
+ throw unknown_enumeration();
+ }
+
+ return result;
+}
+
+int
+EnumWriter::read_distinct (EnumRegistration& er, string str)
+{
+ vector<int>::iterator i;
+ vector<string>::iterator s;
+
+ /* catch old-style hex numerics */
+
+ if (str.length() > 2 && str[0] == '0' && str[1] == 'x') {
+ return strtol (str.c_str(), (char **) 0, 16);
+ }
+
+ /* catch old style dec numerics */
+
+ if (strspn (str.c_str(), "0123456789") == str.length()) {
+ return strtol (str.c_str(), (char **) 0, 10);
+ }
+
+ for (i = er.values.begin(), s = er.names.begin(); i != er.values.end(); ++i, ++s) {
+ if (str == (*s) || nocase_cmp (str, *s) == 0) {
+ return (*i);
+ }
+ }
+
+ /* failed to find it as-is. check to see if there a hack for the name we're looking up */
+
+ map<string,string>::iterator x;
+
+ if ((x = hack_table.find (str)) != hack_table.end()) {
+
+ cerr << "found hack for " << str << " = " << x->second << endl;
+
+ str = x->second;
+
+ for (i = er.values.begin(), s = er.names.begin(); i != er.values.end(); ++i, ++s) {
+ if (str == (*s) || nocase_cmp (str, *s) == 0) {
+ return (*i);
+ }
+ }
+ }
+
+ throw unknown_enumeration();
+}
+
+void
+EnumWriter::add_to_hack_table (string str, string hacked)
+{
+ hack_table[str] = hacked;
+}
diff --git a/libs/pbd/error.cc b/libs/pbd/error.cc
new file mode 100644
index 0000000000..f3568d0877
--- /dev/null
+++ b/libs/pbd/error.cc
@@ -0,0 +1,26 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/error.h>
+
+Transmitter PBD::error (Transmitter::Error);
+Transmitter PBD::info (Transmitter::Info);
+Transmitter PBD::fatal (Transmitter::Fatal);
+Transmitter PBD::warning (Transmitter::Warning);
+
diff --git a/libs/pbd/file_utils.cc b/libs/pbd/file_utils.cc
new file mode 100644
index 0000000000..f8dfe269c5
--- /dev/null
+++ b/libs/pbd/file_utils.cc
@@ -0,0 +1,126 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <algorithm>
+
+#include <glibmm/fileutils.h>
+#include <glibmm/pattern.h>
+
+#include <pbd/compose.h>
+#include <pbd/file_utils.h>
+
+#include <pbd/error.h>
+
+namespace PBD {
+
+void
+get_files_in_directory (const sys::path& directory_path, vector<string>& result)
+{
+ if (!is_directory(directory_path)) return;
+
+ try
+ {
+ Glib::Dir dir(directory_path.to_string());
+ std::copy(dir.begin(), dir.end(), std::back_inserter(result));
+ }
+ catch (Glib::FileError& err)
+ {
+ warning << err.what() << endmsg;
+ }
+}
+
+void
+find_matching_files_in_directory (const sys::path& directory,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result)
+{
+ vector<string> tmp_files;
+
+ get_files_in_directory (directory, tmp_files);
+
+ for (vector<string>::iterator file_iter = tmp_files.begin();
+ file_iter != tmp_files.end();
+ ++file_iter)
+ {
+ if (!pattern.match(*file_iter)) continue;
+
+ sys::path full_path(directory);
+ full_path /= *file_iter;
+
+ result.push_back(full_path);
+ }
+}
+
+void
+find_matching_files_in_directories (const vector<sys::path>& paths,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result)
+{
+ for (vector<sys::path>::const_iterator path_iter = paths.begin();
+ path_iter != paths.end();
+ ++path_iter)
+ {
+ find_matching_files_in_directory (*path_iter, pattern, result);
+ }
+}
+
+void
+find_matching_files_in_search_path (const SearchPath& search_path,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result)
+{
+ vector<sys::path> dirs;
+ std::copy(search_path.begin(), search_path.end(), std::back_inserter(dirs));
+ find_matching_files_in_directories (dirs, pattern, result);
+}
+
+bool
+find_file_in_search_path(const SearchPath& search_path,
+ const string& filename,
+ sys::path& result)
+{
+ vector<sys::path> tmp;
+ Glib::PatternSpec tmp_pattern(filename);
+
+ find_matching_files_in_search_path (search_path, tmp_pattern, tmp);
+
+ if (tmp.size() == 0)
+ {
+ return false;
+ }
+
+#if 0
+ if (tmp.size() != 1)
+ {
+ info << string_compose
+ (
+ "Found more than one file matching %1 in search path %2",
+ filename,
+ search_path.to_string ()
+ )
+ << endmsg;
+ }
+#endif
+
+ result = tmp.front();
+
+ return true;
+}
+
+} // namespace PBD
diff --git a/libs/pbd/filesystem.cc b/libs/pbd/filesystem.cc
new file mode 100644
index 0000000000..84d18cfcd2
--- /dev/null
+++ b/libs/pbd/filesystem.cc
@@ -0,0 +1,201 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include <cerrno>
+#include <fstream>
+
+#include <glibmm/fileutils.h>
+#include <glibmm/miscutils.h>
+
+#include <pbd/filesystem.h>
+#include <pbd/error.h>
+#include <pbd/compose.h>
+
+#include "i18n.h"
+
+namespace PBD {
+
+namespace sys {
+
+path&
+path::operator/=(const path& rhs)
+{
+ m_path = Glib::build_filename(m_path, rhs.m_path);
+ return *this;
+}
+
+path&
+path::operator/=(const string& rhs)
+{
+ m_path = Glib::build_filename(m_path, rhs);
+ return *this;
+}
+
+path&
+path::operator/=(const char* rhs)
+{
+ m_path = Glib::build_filename(m_path, rhs);
+ return *this;
+}
+
+string
+path::leaf () const
+{
+ return Glib::path_get_basename(m_path);
+}
+
+path
+path::branch_path () const
+{
+ string dir = Glib::path_get_dirname (m_path);
+
+ /*
+ * glib returns "." to signify that the path
+ * has no directory components(branch path)
+ * whereas boost::filesystem returns an empty
+ * string
+ */
+ if(dir == ".")
+ {
+ return "";
+ }
+ return dir;
+}
+
+bool
+exists (const path & p)
+{
+ return Glib::file_test (p.to_string(), Glib::FILE_TEST_EXISTS);
+}
+
+bool
+is_directory (const path & p)
+{
+ return Glib::file_test (p.to_string(), Glib::FILE_TEST_IS_DIR);
+}
+
+bool
+create_directory(const path & p)
+{
+ if(is_directory(p)) return false;
+
+ int error = g_mkdir (p.to_string().c_str(), S_IRWXU|S_IRWXG|S_IRWXO);
+
+ if(error == -1)
+ {
+ throw filesystem_error(g_strerror(errno), errno);
+ }
+ return true;
+}
+
+bool
+create_directories(const path & p)
+{
+ if(is_directory(p)) return false;
+
+ int error = g_mkdir_with_parents (p.to_string().c_str(), S_IRWXU|S_IRWXG|S_IRWXO);
+
+ if(error == -1)
+ {
+ throw filesystem_error(g_strerror(errno), errno);
+ }
+ return true;
+}
+
+bool
+remove(const path & p)
+{
+ if(!exists(p)) return false;
+
+ int error = g_unlink (p.to_string().c_str());
+
+ if(error == -1)
+ {
+ throw filesystem_error(g_strerror(errno), errno);
+ }
+ return true;
+}
+
+void
+rename (const path & from_path, const path & to_path)
+{
+ // g_rename is a macro that evaluates to ::rename on
+ // POSIX systems, without the global namespace qualifier
+ // it would evaluate to a recursive call(if it compiled)
+ if ( ::g_rename( from_path.to_string().c_str(),
+ to_path.to_string().c_str() ) == -1 )
+ {
+ throw filesystem_error(g_strerror(errno), errno);
+ }
+}
+
+// XXX character encoding.
+void
+copy_file(const path & from_path, const path & to_path)
+{
+ std::ifstream in(from_path.to_string().c_str());
+ std::ofstream out(to_path.to_string().c_str());
+
+ if (!in || !out) {
+ throw filesystem_error(string_compose(_("Could not open files %1 and %2 for copying"),
+ from_path.to_string(), to_path.to_string()));
+ }
+
+ out << in.rdbuf();
+
+ if (!in || !out) {
+ remove (to_path);
+ throw filesystem_error(string_compose(_("Could not copy existing file %1 to %2"),
+ from_path.to_string(), to_path.to_string()));
+ }
+}
+
+string
+basename (const path & p)
+{
+ string base(p.leaf());
+
+ string::size_type n = base.rfind ('.');
+
+ return base.substr (0, n);
+}
+
+string
+extension (const path & p)
+{
+ string base(p.leaf());
+
+ string::size_type n = base.rfind ('.');
+
+ if (n != string::npos)
+ {
+ return base.substr(n);
+ }
+
+ return string();
+
+}
+
+} // namespace sys
+
+} // namespace PBD
diff --git a/libs/pbd/filesystem_paths.cc b/libs/pbd/filesystem_paths.cc
new file mode 100644
index 0000000000..6846cb5aa5
--- /dev/null
+++ b/libs/pbd/filesystem_paths.cc
@@ -0,0 +1,61 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include <glib.h>
+
+#include <pbd/filesystem_paths.h>
+
+namespace PBD {
+
+vector<sys::path>
+system_data_directories ()
+{
+ vector<sys::path> tmp;
+ const char * const * dirs;
+
+ dirs = g_get_system_data_dirs ();
+
+ if (dirs == NULL) return tmp;
+
+ for (int i = 0; dirs[i] != NULL; ++i)
+ {
+ tmp.push_back(dirs[i]);
+ }
+
+ return tmp;
+}
+
+vector<sys::path>
+system_config_directories ()
+{
+ vector<sys::path> tmp;
+ const char * const * dirs;
+
+ dirs = g_get_system_config_dirs ();
+
+ if (dirs == NULL) return tmp;
+
+ for (int i = 0; dirs[i] != NULL; ++i)
+ {
+ tmp.push_back(dirs[i]);
+ }
+
+ return tmp;
+}
+
+} // namespace PBD
diff --git a/libs/pbd/fpu.cc b/libs/pbd/fpu.cc
new file mode 100644
index 0000000000..f6850a57dc
--- /dev/null
+++ b/libs/pbd/fpu.cc
@@ -0,0 +1,97 @@
+#define _XOPEN_SOURCE 600
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <pbd/fpu.h>
+#include <pbd/error.h>
+
+#include "i18n.h"
+
+using namespace PBD;
+using namespace std;
+
+FPU::FPU ()
+{
+ unsigned long cpuflags = 0;
+
+ _flags = Flags (0);
+
+#ifndef ARCH_X86
+ return;
+#endif
+
+#ifndef USE_X86_64_ASM
+ asm volatile (
+ "mov $1, %%eax\n"
+ "pushl %%ebx\n"
+ "cpuid\n"
+ "movl %%edx, %0\n"
+ "popl %%ebx\n"
+ : "=r" (cpuflags)
+ :
+ : "%eax", "%ecx", "%edx", "memory"
+ );
+
+#else
+
+ asm volatile (
+ "pushq %%rbx\n"
+ "movq $1, %%rax\n"
+ "cpuid\n"
+ "movq %%rdx, %0\n"
+ "popq %%rbx\n"
+ : "=r" (cpuflags)
+ :
+ : "%rax", "%rcx", "%rdx", "memory"
+ );
+
+#endif /* USE_X86_64_ASM */
+
+ if (cpuflags & (1<<25)) {
+ _flags = Flags (_flags | (HasSSE|HasFlushToZero));
+ }
+
+ if (cpuflags & (1<<26)) {
+ _flags = Flags (_flags | HasSSE2);
+ }
+
+ if (cpuflags & (1 << 24)) {
+
+ char* fxbuf = 0;
+
+#ifdef NO_POSIX_MEMALIGN
+ if ((fxbuf = (char *) malloc(512)) == 0)
+#else
+ if (posix_memalign ((void**)&fxbuf, 16, 512))
+#endif
+ {
+ error << _("cannot allocate 16 byte aligned buffer for h/w feature detection") << endmsg;
+ } else {
+
+ asm volatile (
+ "fxsave (%0)"
+ :
+ : "r" (fxbuf)
+ : "memory"
+ );
+
+ uint32_t mxcsr_mask = *((uint32_t*) &fxbuf[28]);
+
+ /* if the mask is zero, set its default value (from intel specs) */
+
+ if (mxcsr_mask == 0) {
+ mxcsr_mask = 0xffbf;
+ }
+
+ if (mxcsr_mask & (1<<6)) {
+ _flags = Flags (_flags | HasDenormalsAreZero);
+ }
+
+ free (fxbuf);
+ }
+ }
+}
+
+FPU::~FPU ()
+{
+}
diff --git a/libs/pbd/gettext.h b/libs/pbd/gettext.h
new file mode 100644
index 0000000000..339c74ffe7
--- /dev/null
+++ b/libs/pbd/gettext.h
@@ -0,0 +1,82 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+
+/* other headers may have included libintl.h */
+
+# undef gettext
+# undef dgettext
+# undef dcgettext
+# undef ngettext
+# undef dngettext
+# undef dcngettext
+# undef textdomain
+# undef bindtextdomain
+# undef bind_textdomain_codeset
+
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/libs/pbd/i18n.h b/libs/pbd/i18n.h
new file mode 100644
index 0000000000..7c79d2eb53
--- /dev/null
+++ b/libs/pbd/i18n.h
@@ -0,0 +1,11 @@
+#ifndef __i18n_h__
+#define __i18n_h__
+
+#include <pbd/compose.h>
+#include "gettext.h"
+
+#define _(Text) dgettext (PACKAGE, Text)
+#define N_(Text) gettext_noop (Text)
+#define X_(Text) (Text)
+
+#endif // __i18n_h__
diff --git a/libs/pbd/id.cc b/libs/pbd/id.cc
new file mode 100644
index 0000000000..642243a36a
--- /dev/null
+++ b/libs/pbd/id.cc
@@ -0,0 +1,89 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <ostream>
+#include <iostream>
+#include <stdio.h>
+
+#ifndef __STDC_FORMAT_MACROS
+#define __STDC_FORMAT_MACROS
+#endif
+#include <inttypes.h>
+
+#include <pbd/id.h>
+#include <string>
+
+using namespace std;
+using namespace PBD;
+
+Glib::Mutex* ID::counter_lock = 0;
+uint64_t ID::_counter = 0;
+
+void
+ID::init ()
+{
+ counter_lock = new Glib::Mutex;
+}
+
+ID::ID ()
+{
+ Glib::Mutex::Lock lm (*counter_lock);
+ _id = _counter++;
+}
+
+ID::ID (string str)
+{
+ string_assign (str);
+}
+
+int
+ID::string_assign (string str)
+{
+ return sscanf (str.c_str(), "%" PRIu64, &_id) != 0;
+}
+
+void
+ID::print (char* buf, uint32_t bufsize) const
+{
+ snprintf (buf, bufsize, "%" PRIu64, _id);
+}
+
+string ID::to_s() const
+{
+ char buf[32]; // see print()
+ print(buf, sizeof (buf));
+ return string(buf);
+}
+
+ID&
+ID::operator= (string str)
+{
+ string_assign (str);
+ return *this;
+}
+
+ostream&
+operator<< (ostream& ostr, const ID& _id)
+{
+ char buf[32];
+ _id.print (buf, sizeof (buf));
+ ostr << buf;
+ return ostr;
+}
+
diff --git a/libs/pbd/libpbd.pc.in b/libs/pbd/libpbd.pc.in
new file mode 100644
index 0000000000..14d0208845
--- /dev/null
+++ b/libs/pbd/libpbd.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/pbd
+
+Name: libpbd
+Version: @VERSION@
+Description: libpbd, a library of useful, generic C++ objects
+Requires:
+Libs: -L${libdir} -lpbd @NON_PKG_LIBS@
+Cflags: -I${includedir} @NON_PKG_CFLAGS@
diff --git a/libs/pbd/libpbd.spec.in b/libs/pbd/libpbd.spec.in
new file mode 100644
index 0000000000..d50622d638
--- /dev/null
+++ b/libs/pbd/libpbd.spec.in
@@ -0,0 +1,70 @@
+Summary: A general purpose programming library
+%define lib_name pbd
+Name: lib%{lib_name}
+Version: @VERSION@
+Release: 2
+Copyright: GPL
+Source: .
+Url: http://www.quasimodo.org
+Vendor: Paul Davis <paul@linuxaudiosystems.com>
+Packager: jfm3 <jfm3@acm.org>
+Group: System Environment/Libraries
+Prefix: %{_prefix}
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+
+%description
+
+This library implements a number of programming utilities used by Paul
+Davis (formerly Paul Barton-Davis, hence the name). It is used in
+some of his Open Source software projects. See
+http://ardour.sf.net/ for examples.
+
+%prep
+%setup -q
+
+%build
+CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" ./configure $ARCH_FLAGS --prefix=%{prefix}
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d -m 755 $RPM_BUILD_ROOT%{prefix}/{{include,lib}/%{lib_name}}
+make install INSTALL="%(which install) -p" prefix=$RPM_BUILD_ROOT%{prefix}
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc README AUTHORS NEWS COPYING*
+%{prefix}/lib/libpbd.so*
+
+%package devel
+Summary: A general purpose programming library -- developer version.
+Group: System Environment/Libraries
+
+%description devel
+
+This library implements a number of programming utilities used by Paul
+Davis (formerly Paul Barton-Davis, hence the name). It is used in
+some of his Open Source software projects. See
+http://ardour.sf.net/ for examples.
+
+This package holds static libraries and headers needed by developers
+who wish to use libpbd in their programs.
+
+%files devel
+%defattr(-,root,root)
+%{prefix}/include/pbd/*
+%{prefix}/lib/libpbd.a
+%{prefix}/lib/libpbd.la
+%{prefix}/bin/pbd-config
+%{prefix}/share/aclocal/pbd.m4
+%{prefix}/share/aclocal/unique_args.m4
+
diff --git a/libs/pbd/macosx/English.lproj/InfoPlist.strings b/libs/pbd/macosx/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..d8479018a9
--- /dev/null
+++ b/libs/pbd/macosx/English.lproj/InfoPlist.strings
Binary files differ
diff --git a/libs/pbd/macosx/Info.plist b/libs/pbd/macosx/Info.plist
new file mode 100644
index 0000000000..0c31617fd2
--- /dev/null
+++ b/libs/pbd/macosx/Info.plist
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>pbd</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>com.apple.carbonframeworktemplate</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.01</string>
+ <key>CSResourcesFileMapped</key>
+ <true/>
+</dict>
+</plist>
diff --git a/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..535d16b8a2
--- /dev/null
+++ b/libs/pbd/macosx/pbd.xcodeproj/project.pbxproj
@@ -0,0 +1,634 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 42;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120270B8A34AB00AF661E /* base_ui.cc */; };
+ 694120700B8A34AB00AF661E /* basename.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120280B8A34AB00AF661E /* basename.cc */; };
+ 694120710B8A34AB00AF661E /* command.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120290B8A34AB00AF661E /* command.cc */; };
+ 694120720B8A34AB00AF661E /* controllable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202A0B8A34AB00AF661E /* controllable.cc */; };
+ 694120730B8A34AB00AF661E /* convert.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202B0B8A34AB00AF661E /* convert.cc */; };
+ 694120740B8A34AB00AF661E /* copyfile.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202C0B8A34AB00AF661E /* copyfile.cc */; };
+ 694120750B8A34AB00AF661E /* dmalloc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202D0B8A34AB00AF661E /* dmalloc.cc */; };
+ 694120760B8A34AB00AF661E /* enumwriter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202E0B8A34AB00AF661E /* enumwriter.cc */; };
+ 694120770B8A34AB00AF661E /* error.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941202F0B8A34AB00AF661E /* error.cc */; };
+ 694120780B8A34AB00AF661E /* gettext.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120300B8A34AB00AF661E /* gettext.h */; settings = {ATTRIBUTES = (); }; };
+ 694120790B8A34AB00AF661E /* i18n.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120310B8A34AB00AF661E /* i18n.h */; settings = {ATTRIBUTES = (); }; };
+ 6941207A0B8A34AB00AF661E /* id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120320B8A34AB00AF661E /* id.cc */; };
+ 6941207B0B8A34AB00AF661E /* mountpoint.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120330B8A34AB00AF661E /* mountpoint.cc */; };
+ 6941207C0B8A34AB00AF661E /* path.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120340B8A34AB00AF661E /* path.cc */; };
+ 6941207D0B8A34AB00AF661E /* pathscanner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120350B8A34AB00AF661E /* pathscanner.cc */; };
+ 6941207F0B8A34AB00AF661E /* abstract_ui.cc in Headers */ = {isa = PBXBuildFile; fileRef = 694120380B8A34AB00AF661E /* abstract_ui.cc */; };
+ 694120800B8A34AB00AF661E /* abstract_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120390B8A34AB00AF661E /* abstract_ui.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120810B8A34AB00AF661E /* base_ui.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203A0B8A34AB00AF661E /* base_ui.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120820B8A34AB00AF661E /* basename.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203B0B8A34AB00AF661E /* basename.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120830B8A34AB00AF661E /* command.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203C0B8A34AB00AF661E /* command.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120840B8A34AB00AF661E /* compose.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203D0B8A34AB00AF661E /* compose.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120850B8A34AB00AF661E /* controllable.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203E0B8A34AB00AF661E /* controllable.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120860B8A34AB00AF661E /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941203F0B8A34AB00AF661E /* convert.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120870B8A34AB00AF661E /* copyfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120400B8A34AB00AF661E /* copyfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120880B8A34AB00AF661E /* crossthread.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120410B8A34AB00AF661E /* crossthread.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120890B8A34AB00AF661E /* destructible.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120420B8A34AB00AF661E /* destructible.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208A0B8A34AB00AF661E /* enumwriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120430B8A34AB00AF661E /* enumwriter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208B0B8A34AB00AF661E /* error.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120440B8A34AB00AF661E /* error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208C0B8A34AB00AF661E /* failed_constructor.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120450B8A34AB00AF661E /* failed_constructor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208D0B8A34AB00AF661E /* fastlog.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120460B8A34AB00AF661E /* fastlog.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208E0B8A34AB00AF661E /* forkexec.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120470B8A34AB00AF661E /* forkexec.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941208F0B8A34AB00AF661E /* id.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120480B8A34AB00AF661E /* id.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120900B8A34AB00AF661E /* mathfix.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120490B8A34AB00AF661E /* mathfix.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120910B8A34AB00AF661E /* memento_command.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204A0B8A34AB00AF661E /* memento_command.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120920B8A34AB00AF661E /* mountpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204B0B8A34AB00AF661E /* mountpoint.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120930B8A34AB00AF661E /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204C0B8A34AB00AF661E /* path.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120940B8A34AB00AF661E /* pathscanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204D0B8A34AB00AF661E /* pathscanner.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120950B8A34AB00AF661E /* pool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204E0B8A34AB00AF661E /* pool.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120960B8A34AB00AF661E /* pthread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941204F0B8A34AB00AF661E /* pthread_utils.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120970B8A34AB00AF661E /* rcu.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120500B8A34AB00AF661E /* rcu.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120980B8A34AB00AF661E /* receiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120510B8A34AB00AF661E /* receiver.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120990B8A34AB00AF661E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120520B8A34AB00AF661E /* ringbuffer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209A0B8A34AB00AF661E /* ringbufferNPT.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120530B8A34AB00AF661E /* ringbufferNPT.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209B0B8A34AB00AF661E /* selectable.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120540B8A34AB00AF661E /* selectable.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209C0B8A34AB00AF661E /* shiva.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120550B8A34AB00AF661E /* shiva.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209D0B8A34AB00AF661E /* stacktrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120560B8A34AB00AF661E /* stacktrace.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209E0B8A34AB00AF661E /* stateful.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120570B8A34AB00AF661E /* stateful.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6941209F0B8A34AB00AF661E /* statefuldestructible.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120580B8A34AB00AF661E /* statefuldestructible.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A00B8A34AB00AF661E /* stl_delete.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120590B8A34AB00AF661E /* stl_delete.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A10B8A34AB00AF661E /* stl_functors.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205A0B8A34AB00AF661E /* stl_functors.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A20B8A34AB00AF661E /* strsplit.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205B0B8A34AB00AF661E /* strsplit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A30B8A34AB00AF661E /* textreceiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205C0B8A34AB00AF661E /* textreceiver.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A40B8A34AB00AF661E /* thrown_error.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205D0B8A34AB00AF661E /* thrown_error.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A50B8A34AB00AF661E /* tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205E0B8A34AB00AF661E /* tokenizer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A60B8A34AB00AF661E /* touchable.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941205F0B8A34AB00AF661E /* touchable.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A70B8A34AB00AF661E /* transmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120600B8A34AB00AF661E /* transmitter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A80B8A34AB00AF661E /* undo.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120610B8A34AB00AF661E /* undo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120A90B8A34AB00AF661E /* whitespace.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120620B8A34AB00AF661E /* whitespace.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120AA0B8A34AB00AF661E /* xml++.h in Headers */ = {isa = PBXBuildFile; fileRef = 694120630B8A34AB00AF661E /* xml++.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 694120AB0B8A34AB00AF661E /* pool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120640B8A34AB00AF661E /* pool.cc */; };
+ 694120AC0B8A34AB00AF661E /* pthread_utils.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120650B8A34AB00AF661E /* pthread_utils.cc */; };
+ 694120AD0B8A34AB00AF661E /* receiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120660B8A34AB00AF661E /* receiver.cc */; };
+ 694120AE0B8A34AB00AF661E /* stacktrace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120670B8A34AB00AF661E /* stacktrace.cc */; };
+ 694120AF0B8A34AB00AF661E /* stateful.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120680B8A34AB00AF661E /* stateful.cc */; };
+ 694120B00B8A34AB00AF661E /* strsplit.cc in Sources */ = {isa = PBXBuildFile; fileRef = 694120690B8A34AB00AF661E /* strsplit.cc */; };
+ 694120B10B8A34AB00AF661E /* textreceiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206A0B8A34AB00AF661E /* textreceiver.cc */; };
+ 694120B20B8A34AB00AF661E /* transmitter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206B0B8A34AB00AF661E /* transmitter.cc */; };
+ 694120B30B8A34AB00AF661E /* undo.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206C0B8A34AB00AF661E /* undo.cc */; };
+ 694120B40B8A34AB00AF661E /* whitespace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206D0B8A34AB00AF661E /* whitespace.cc */; };
+ 694120B50B8A34AB00AF661E /* xml++.cc in Sources */ = {isa = PBXBuildFile; fileRef = 6941206E0B8A34AB00AF661E /* xml++.cc */; };
+ 694120D40B8A36A200AF661E /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 694120D30B8A36A200AF661E /* libxml2.dylib */; };
+ 694191980B97CD950083505E /* glibmm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 694191950B97CD950083505E /* glibmm.framework */; };
+ 694191990B97CD950083505E /* sigc.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 694191960B97CD950083505E /* sigc.framework */; };
+ 69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C63C140B9369CB00BC0BCA /* strreplace.cc */; };
+ 69C63C190B9369DE00BC0BCA /* replace_all.h in Headers */ = {isa = PBXBuildFile; fileRef = 69C63C180B9369DE00BC0BCA /* replace_all.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C63C290B936A6E00BC0BCA /* version.cc */; };
+ 69C63C2C0B936A6E00BC0BCA /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 69C63C2A0B936A6E00BC0BCA /* version.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 69CD7FED0B97CDD50049ED98 /* glib in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FE90B97CDD50049ED98 /* glib */; };
+ 69CD7FEE0B97CDD50049ED98 /* gmodule in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEA0B97CDD50049ED98 /* gmodule */; };
+ 69CD7FEF0B97CDD50049ED98 /* gobject in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEB0B97CDD50049ED98 /* gobject */; };
+ 69CD7FF00B97CDD50049ED98 /* gthread in Frameworks */ = {isa = PBXBuildFile; fileRef = 69CD7FEC0B97CDD50049ED98 /* gthread */; };
+ 8D07F2BE0486CC7A007CD1D0 /* pbd_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */; settings = {ATTRIBUTES = (); }; };
+ 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+ 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbd_Prefix.pch; sourceTree = "<group>"; };
+ 694120270B8A34AB00AF661E /* base_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = base_ui.cc; path = ../base_ui.cc; sourceTree = SOURCE_ROOT; };
+ 694120280B8A34AB00AF661E /* basename.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = basename.cc; path = ../basename.cc; sourceTree = SOURCE_ROOT; };
+ 694120290B8A34AB00AF661E /* command.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = command.cc; path = ../command.cc; sourceTree = SOURCE_ROOT; };
+ 6941202A0B8A34AB00AF661E /* controllable.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = controllable.cc; path = ../controllable.cc; sourceTree = SOURCE_ROOT; };
+ 6941202B0B8A34AB00AF661E /* convert.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = convert.cc; path = ../convert.cc; sourceTree = SOURCE_ROOT; };
+ 6941202C0B8A34AB00AF661E /* copyfile.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = copyfile.cc; path = ../copyfile.cc; sourceTree = SOURCE_ROOT; };
+ 6941202D0B8A34AB00AF661E /* dmalloc.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = dmalloc.cc; path = ../dmalloc.cc; sourceTree = SOURCE_ROOT; };
+ 6941202E0B8A34AB00AF661E /* enumwriter.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = enumwriter.cc; path = ../enumwriter.cc; sourceTree = SOURCE_ROOT; };
+ 6941202F0B8A34AB00AF661E /* error.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = error.cc; path = ../error.cc; sourceTree = SOURCE_ROOT; };
+ 694120300B8A34AB00AF661E /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = gettext.h; path = ../gettext.h; sourceTree = SOURCE_ROOT; };
+ 694120310B8A34AB00AF661E /* i18n.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = i18n.h; path = ../i18n.h; sourceTree = SOURCE_ROOT; };
+ 694120320B8A34AB00AF661E /* id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = id.cc; path = ../id.cc; sourceTree = SOURCE_ROOT; };
+ 694120330B8A34AB00AF661E /* mountpoint.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = mountpoint.cc; path = ../mountpoint.cc; sourceTree = SOURCE_ROOT; };
+ 694120340B8A34AB00AF661E /* path.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = path.cc; path = ../path.cc; sourceTree = SOURCE_ROOT; };
+ 694120350B8A34AB00AF661E /* pathscanner.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pathscanner.cc; path = ../pathscanner.cc; sourceTree = SOURCE_ROOT; };
+ 694120380B8A34AB00AF661E /* abstract_ui.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = abstract_ui.cc; sourceTree = "<group>"; };
+ 694120390B8A34AB00AF661E /* abstract_ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = abstract_ui.h; sourceTree = "<group>"; };
+ 6941203A0B8A34AB00AF661E /* base_ui.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = base_ui.h; sourceTree = "<group>"; };
+ 6941203B0B8A34AB00AF661E /* basename.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = basename.h; sourceTree = "<group>"; };
+ 6941203C0B8A34AB00AF661E /* command.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = command.h; sourceTree = "<group>"; };
+ 6941203D0B8A34AB00AF661E /* compose.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = compose.h; sourceTree = "<group>"; };
+ 6941203E0B8A34AB00AF661E /* controllable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = controllable.h; sourceTree = "<group>"; };
+ 6941203F0B8A34AB00AF661E /* convert.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = "<group>"; };
+ 694120400B8A34AB00AF661E /* copyfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = copyfile.h; sourceTree = "<group>"; };
+ 694120410B8A34AB00AF661E /* crossthread.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = crossthread.h; sourceTree = "<group>"; };
+ 694120420B8A34AB00AF661E /* destructible.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = destructible.h; sourceTree = "<group>"; };
+ 694120430B8A34AB00AF661E /* enumwriter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = enumwriter.h; sourceTree = "<group>"; };
+ 694120440B8A34AB00AF661E /* error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = "<group>"; };
+ 694120450B8A34AB00AF661E /* failed_constructor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = failed_constructor.h; sourceTree = "<group>"; };
+ 694120460B8A34AB00AF661E /* fastlog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = fastlog.h; sourceTree = "<group>"; };
+ 694120470B8A34AB00AF661E /* forkexec.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = forkexec.h; sourceTree = "<group>"; };
+ 694120480B8A34AB00AF661E /* id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = id.h; sourceTree = "<group>"; };
+ 694120490B8A34AB00AF661E /* mathfix.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mathfix.h; sourceTree = "<group>"; };
+ 6941204A0B8A34AB00AF661E /* memento_command.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = memento_command.h; sourceTree = "<group>"; };
+ 6941204B0B8A34AB00AF661E /* mountpoint.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = mountpoint.h; sourceTree = "<group>"; };
+ 6941204C0B8A34AB00AF661E /* path.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = "<group>"; };
+ 6941204D0B8A34AB00AF661E /* pathscanner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pathscanner.h; sourceTree = "<group>"; };
+ 6941204E0B8A34AB00AF661E /* pool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pool.h; sourceTree = "<group>"; };
+ 6941204F0B8A34AB00AF661E /* pthread_utils.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = pthread_utils.h; sourceTree = "<group>"; };
+ 694120500B8A34AB00AF661E /* rcu.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = rcu.h; sourceTree = "<group>"; };
+ 694120510B8A34AB00AF661E /* receiver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = receiver.h; sourceTree = "<group>"; };
+ 694120520B8A34AB00AF661E /* ringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = "<group>"; };
+ 694120530B8A34AB00AF661E /* ringbufferNPT.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ringbufferNPT.h; sourceTree = "<group>"; };
+ 694120540B8A34AB00AF661E /* selectable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = selectable.h; sourceTree = "<group>"; };
+ 694120550B8A34AB00AF661E /* shiva.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = shiva.h; sourceTree = "<group>"; };
+ 694120560B8A34AB00AF661E /* stacktrace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stacktrace.h; sourceTree = "<group>"; };
+ 694120570B8A34AB00AF661E /* stateful.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stateful.h; sourceTree = "<group>"; };
+ 694120580B8A34AB00AF661E /* statefuldestructible.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = statefuldestructible.h; sourceTree = "<group>"; };
+ 694120590B8A34AB00AF661E /* stl_delete.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stl_delete.h; sourceTree = "<group>"; };
+ 6941205A0B8A34AB00AF661E /* stl_functors.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = stl_functors.h; sourceTree = "<group>"; };
+ 6941205B0B8A34AB00AF661E /* strsplit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = strsplit.h; sourceTree = "<group>"; };
+ 6941205C0B8A34AB00AF661E /* textreceiver.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = textreceiver.h; sourceTree = "<group>"; };
+ 6941205D0B8A34AB00AF661E /* thrown_error.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = thrown_error.h; sourceTree = "<group>"; };
+ 6941205E0B8A34AB00AF661E /* tokenizer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = tokenizer.h; sourceTree = "<group>"; };
+ 6941205F0B8A34AB00AF661E /* touchable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = touchable.h; sourceTree = "<group>"; };
+ 694120600B8A34AB00AF661E /* transmitter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = transmitter.h; sourceTree = "<group>"; };
+ 694120610B8A34AB00AF661E /* undo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = undo.h; sourceTree = "<group>"; };
+ 694120620B8A34AB00AF661E /* whitespace.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = whitespace.h; sourceTree = "<group>"; };
+ 694120630B8A34AB00AF661E /* xml++.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "xml++.h"; sourceTree = "<group>"; };
+ 694120640B8A34AB00AF661E /* pool.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pool.cc; path = ../pool.cc; sourceTree = SOURCE_ROOT; };
+ 694120650B8A34AB00AF661E /* pthread_utils.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = pthread_utils.cc; path = ../pthread_utils.cc; sourceTree = SOURCE_ROOT; };
+ 694120660B8A34AB00AF661E /* receiver.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = receiver.cc; path = ../receiver.cc; sourceTree = SOURCE_ROOT; };
+ 694120670B8A34AB00AF661E /* stacktrace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stacktrace.cc; path = ../stacktrace.cc; sourceTree = SOURCE_ROOT; };
+ 694120680B8A34AB00AF661E /* stateful.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = stateful.cc; path = ../stateful.cc; sourceTree = SOURCE_ROOT; };
+ 694120690B8A34AB00AF661E /* strsplit.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = strsplit.cc; path = ../strsplit.cc; sourceTree = SOURCE_ROOT; };
+ 6941206A0B8A34AB00AF661E /* textreceiver.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = textreceiver.cc; path = ../textreceiver.cc; sourceTree = SOURCE_ROOT; };
+ 6941206B0B8A34AB00AF661E /* transmitter.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = transmitter.cc; path = ../transmitter.cc; sourceTree = SOURCE_ROOT; };
+ 6941206C0B8A34AB00AF661E /* undo.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = undo.cc; path = ../undo.cc; sourceTree = SOURCE_ROOT; };
+ 6941206D0B8A34AB00AF661E /* whitespace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = whitespace.cc; path = ../whitespace.cc; sourceTree = SOURCE_ROOT; };
+ 6941206E0B8A34AB00AF661E /* xml++.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = "xml++.cc"; path = "../xml++.cc"; sourceTree = SOURCE_ROOT; };
+ 694120D30B8A36A200AF661E /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = /usr/lib/libxml2.dylib; sourceTree = "<absolute>"; };
+ 694191950B97CD950083505E /* glibmm.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = glibmm.framework; path = /Library/Frameworks/glibmm.framework; sourceTree = "<absolute>"; };
+ 694191960B97CD950083505E /* sigc.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = sigc.framework; path = /Library/Frameworks/sigc.framework; sourceTree = "<absolute>"; };
+ 69C63C140B9369CB00BC0BCA /* strreplace.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = strreplace.cc; path = ../strreplace.cc; sourceTree = SOURCE_ROOT; };
+ 69C63C180B9369DE00BC0BCA /* replace_all.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = replace_all.h; sourceTree = "<group>"; };
+ 69C63C290B936A6E00BC0BCA /* version.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = version.cc; sourceTree = "<group>"; };
+ 69C63C2A0B936A6E00BC0BCA /* version.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
+ 69CD7FE90B97CDD50049ED98 /* glib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = glib; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/glib; sourceTree = "<absolute>"; };
+ 69CD7FEA0B97CDD50049ED98 /* gmodule */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gmodule; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gmodule; sourceTree = "<absolute>"; };
+ 69CD7FEB0B97CDD50049ED98 /* gobject */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gobject; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gobject; sourceTree = "<absolute>"; };
+ 69CD7FEC0B97CDD50049ED98 /* gthread */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = gthread; path = /Library/Frameworks/GLib.framework/Versions/2.12.3/Libraries/gthread; sourceTree = "<absolute>"; };
+ 8D07F2C70486CC7A007CD1D0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
+ 8D07F2C80486CC7A007CD1D0 /* pbd.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = pbd.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D07F2C30486CC7A007CD1D0 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 694120D40B8A36A200AF661E /* libxml2.dylib in Frameworks */,
+ 694191980B97CD950083505E /* glibmm.framework in Frameworks */,
+ 694191990B97CD950083505E /* sigc.framework in Frameworks */,
+ 69CD7FED0B97CDD50049ED98 /* glib in Frameworks */,
+ 69CD7FEE0B97CDD50049ED98 /* gmodule in Frameworks */,
+ 69CD7FEF0B97CDD50049ED98 /* gobject in Frameworks */,
+ 69CD7FF00B97CDD50049ED98 /* gthread in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DDFF38A45A11DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D07F2C80486CC7A007CD1D0 /* pbd.framework */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* pbd */ = {
+ isa = PBXGroup;
+ children = (
+ 69C63C290B936A6E00BC0BCA /* version.cc */,
+ 69C63C2A0B936A6E00BC0BCA /* version.h */,
+ 08FB77ACFE841707C02AAC07 /* Source */,
+ 089C1665FE841158C02AAC07 /* Resources */,
+ 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ );
+ name = pbd;
+ sourceTree = "<group>";
+ };
+ 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 69CD7FE90B97CDD50049ED98 /* glib */,
+ 69CD7FEA0B97CDD50049ED98 /* gmodule */,
+ 69CD7FEB0B97CDD50049ED98 /* gobject */,
+ 69CD7FEC0B97CDD50049ED98 /* gthread */,
+ 694191950B97CD950083505E /* glibmm.framework */,
+ 694191960B97CD950083505E /* sigc.framework */,
+ 694120D30B8A36A200AF661E /* libxml2.dylib */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "<group>";
+ };
+ 089C1665FE841158C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D07F2C70486CC7A007CD1D0 /* Info.plist */,
+ 089C1666FE841158C02AAC07 /* InfoPlist.strings */,
+ );
+ name = Resources;
+ sourceTree = "<group>";
+ };
+ 08FB77ACFE841707C02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 69C63C140B9369CB00BC0BCA /* strreplace.cc */,
+ 694120270B8A34AB00AF661E /* base_ui.cc */,
+ 694120280B8A34AB00AF661E /* basename.cc */,
+ 694120290B8A34AB00AF661E /* command.cc */,
+ 6941202A0B8A34AB00AF661E /* controllable.cc */,
+ 6941202B0B8A34AB00AF661E /* convert.cc */,
+ 6941202C0B8A34AB00AF661E /* copyfile.cc */,
+ 6941202D0B8A34AB00AF661E /* dmalloc.cc */,
+ 6941202E0B8A34AB00AF661E /* enumwriter.cc */,
+ 6941202F0B8A34AB00AF661E /* error.cc */,
+ 694120300B8A34AB00AF661E /* gettext.h */,
+ 694120310B8A34AB00AF661E /* i18n.h */,
+ 694120320B8A34AB00AF661E /* id.cc */,
+ 694120330B8A34AB00AF661E /* mountpoint.cc */,
+ 694120340B8A34AB00AF661E /* path.cc */,
+ 694120350B8A34AB00AF661E /* pathscanner.cc */,
+ 694120360B8A34AB00AF661E /* pbd */,
+ 694120640B8A34AB00AF661E /* pool.cc */,
+ 694120650B8A34AB00AF661E /* pthread_utils.cc */,
+ 694120660B8A34AB00AF661E /* receiver.cc */,
+ 694120670B8A34AB00AF661E /* stacktrace.cc */,
+ 694120680B8A34AB00AF661E /* stateful.cc */,
+ 694120690B8A34AB00AF661E /* strsplit.cc */,
+ 6941206A0B8A34AB00AF661E /* textreceiver.cc */,
+ 6941206B0B8A34AB00AF661E /* transmitter.cc */,
+ 6941206C0B8A34AB00AF661E /* undo.cc */,
+ 6941206D0B8A34AB00AF661E /* whitespace.cc */,
+ 6941206E0B8A34AB00AF661E /* xml++.cc */,
+ 32BAE0B70371A74B00C91783 /* pbd_Prefix.pch */,
+ );
+ name = Source;
+ sourceTree = "<group>";
+ };
+ 694120360B8A34AB00AF661E /* pbd */ = {
+ isa = PBXGroup;
+ children = (
+ 69C63C180B9369DE00BC0BCA /* replace_all.h */,
+ 694120380B8A34AB00AF661E /* abstract_ui.cc */,
+ 694120390B8A34AB00AF661E /* abstract_ui.h */,
+ 6941203A0B8A34AB00AF661E /* base_ui.h */,
+ 6941203B0B8A34AB00AF661E /* basename.h */,
+ 6941203C0B8A34AB00AF661E /* command.h */,
+ 6941203D0B8A34AB00AF661E /* compose.h */,
+ 6941203E0B8A34AB00AF661E /* controllable.h */,
+ 6941203F0B8A34AB00AF661E /* convert.h */,
+ 694120400B8A34AB00AF661E /* copyfile.h */,
+ 694120410B8A34AB00AF661E /* crossthread.h */,
+ 694120420B8A34AB00AF661E /* destructible.h */,
+ 694120430B8A34AB00AF661E /* enumwriter.h */,
+ 694120440B8A34AB00AF661E /* error.h */,
+ 694120450B8A34AB00AF661E /* failed_constructor.h */,
+ 694120460B8A34AB00AF661E /* fastlog.h */,
+ 694120470B8A34AB00AF661E /* forkexec.h */,
+ 694120480B8A34AB00AF661E /* id.h */,
+ 694120490B8A34AB00AF661E /* mathfix.h */,
+ 6941204A0B8A34AB00AF661E /* memento_command.h */,
+ 6941204B0B8A34AB00AF661E /* mountpoint.h */,
+ 6941204C0B8A34AB00AF661E /* path.h */,
+ 6941204D0B8A34AB00AF661E /* pathscanner.h */,
+ 6941204E0B8A34AB00AF661E /* pool.h */,
+ 6941204F0B8A34AB00AF661E /* pthread_utils.h */,
+ 694120500B8A34AB00AF661E /* rcu.h */,
+ 694120510B8A34AB00AF661E /* receiver.h */,
+ 694120520B8A34AB00AF661E /* ringbuffer.h */,
+ 694120530B8A34AB00AF661E /* ringbufferNPT.h */,
+ 694120540B8A34AB00AF661E /* selectable.h */,
+ 694120550B8A34AB00AF661E /* shiva.h */,
+ 694120560B8A34AB00AF661E /* stacktrace.h */,
+ 694120570B8A34AB00AF661E /* stateful.h */,
+ 694120580B8A34AB00AF661E /* statefuldestructible.h */,
+ 694120590B8A34AB00AF661E /* stl_delete.h */,
+ 6941205A0B8A34AB00AF661E /* stl_functors.h */,
+ 6941205B0B8A34AB00AF661E /* strsplit.h */,
+ 6941205C0B8A34AB00AF661E /* textreceiver.h */,
+ 6941205D0B8A34AB00AF661E /* thrown_error.h */,
+ 6941205E0B8A34AB00AF661E /* tokenizer.h */,
+ 6941205F0B8A34AB00AF661E /* touchable.h */,
+ 694120600B8A34AB00AF661E /* transmitter.h */,
+ 694120610B8A34AB00AF661E /* undo.h */,
+ 694120620B8A34AB00AF661E /* whitespace.h */,
+ 694120630B8A34AB00AF661E /* xml++.h */,
+ );
+ name = pbd;
+ path = ../pbd;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 8D07F2BD0486CC7A007CD1D0 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 69C63C2C0B936A6E00BC0BCA /* version.h in Headers */,
+ 69C63C190B9369DE00BC0BCA /* replace_all.h in Headers */,
+ 8D07F2BE0486CC7A007CD1D0 /* pbd_Prefix.pch in Headers */,
+ 6941207F0B8A34AB00AF661E /* abstract_ui.cc in Headers */,
+ 694120780B8A34AB00AF661E /* gettext.h in Headers */,
+ 694120790B8A34AB00AF661E /* i18n.h in Headers */,
+ 694120800B8A34AB00AF661E /* abstract_ui.h in Headers */,
+ 694120810B8A34AB00AF661E /* base_ui.h in Headers */,
+ 694120820B8A34AB00AF661E /* basename.h in Headers */,
+ 694120830B8A34AB00AF661E /* command.h in Headers */,
+ 694120840B8A34AB00AF661E /* compose.h in Headers */,
+ 694120850B8A34AB00AF661E /* controllable.h in Headers */,
+ 694120860B8A34AB00AF661E /* convert.h in Headers */,
+ 694120870B8A34AB00AF661E /* copyfile.h in Headers */,
+ 694120880B8A34AB00AF661E /* crossthread.h in Headers */,
+ 694120890B8A34AB00AF661E /* destructible.h in Headers */,
+ 6941208A0B8A34AB00AF661E /* enumwriter.h in Headers */,
+ 6941208B0B8A34AB00AF661E /* error.h in Headers */,
+ 6941208C0B8A34AB00AF661E /* failed_constructor.h in Headers */,
+ 6941208D0B8A34AB00AF661E /* fastlog.h in Headers */,
+ 6941208E0B8A34AB00AF661E /* forkexec.h in Headers */,
+ 6941208F0B8A34AB00AF661E /* id.h in Headers */,
+ 694120900B8A34AB00AF661E /* mathfix.h in Headers */,
+ 694120910B8A34AB00AF661E /* memento_command.h in Headers */,
+ 694120920B8A34AB00AF661E /* mountpoint.h in Headers */,
+ 694120930B8A34AB00AF661E /* path.h in Headers */,
+ 694120940B8A34AB00AF661E /* pathscanner.h in Headers */,
+ 694120950B8A34AB00AF661E /* pool.h in Headers */,
+ 694120960B8A34AB00AF661E /* pthread_utils.h in Headers */,
+ 694120970B8A34AB00AF661E /* rcu.h in Headers */,
+ 694120980B8A34AB00AF661E /* receiver.h in Headers */,
+ 694120990B8A34AB00AF661E /* ringbuffer.h in Headers */,
+ 6941209A0B8A34AB00AF661E /* ringbufferNPT.h in Headers */,
+ 6941209B0B8A34AB00AF661E /* selectable.h in Headers */,
+ 6941209C0B8A34AB00AF661E /* shiva.h in Headers */,
+ 6941209D0B8A34AB00AF661E /* stacktrace.h in Headers */,
+ 6941209E0B8A34AB00AF661E /* stateful.h in Headers */,
+ 6941209F0B8A34AB00AF661E /* statefuldestructible.h in Headers */,
+ 694120A00B8A34AB00AF661E /* stl_delete.h in Headers */,
+ 694120A10B8A34AB00AF661E /* stl_functors.h in Headers */,
+ 694120A20B8A34AB00AF661E /* strsplit.h in Headers */,
+ 694120A30B8A34AB00AF661E /* textreceiver.h in Headers */,
+ 694120A40B8A34AB00AF661E /* thrown_error.h in Headers */,
+ 694120A50B8A34AB00AF661E /* tokenizer.h in Headers */,
+ 694120A60B8A34AB00AF661E /* touchable.h in Headers */,
+ 694120A70B8A34AB00AF661E /* transmitter.h in Headers */,
+ 694120A80B8A34AB00AF661E /* undo.h in Headers */,
+ 694120A90B8A34AB00AF661E /* whitespace.h in Headers */,
+ 694120AA0B8A34AB00AF661E /* xml++.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 8D07F2BC0486CC7A007CD1D0 /* pbd */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "pbd" */;
+ buildPhases = (
+ 8D07F2BD0486CC7A007CD1D0 /* Headers */,
+ 8D07F2BF0486CC7A007CD1D0 /* Resources */,
+ 8D07F2C10486CC7A007CD1D0 /* Sources */,
+ 8D07F2C30486CC7A007CD1D0 /* Frameworks */,
+ 8D07F2C50486CC7A007CD1D0 /* Rez */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = pbd;
+ productInstallPath = "$(HOME)/Library/Frameworks";
+ productName = pbd;
+ productReference = 8D07F2C80486CC7A007CD1D0 /* pbd.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */;
+ hasScannedForEncodings = 1;
+ mainGroup = 0867D691FE84028FC02AAC07 /* pbd */;
+ productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D07F2BC0486CC7A007CD1D0 /* pbd */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D07F2BF0486CC7A007CD1D0 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D07F2C00486CC7A007CD1D0 /* InfoPlist.strings in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 8D07F2C50486CC7A007CD1D0 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D07F2C10486CC7A007CD1D0 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 69C63C2B0B936A6E00BC0BCA /* version.cc in Sources */,
+ 6941206F0B8A34AB00AF661E /* base_ui.cc in Sources */,
+ 69C63C150B9369CB00BC0BCA /* strreplace.cc in Sources */,
+ 694120700B8A34AB00AF661E /* basename.cc in Sources */,
+ 694120710B8A34AB00AF661E /* command.cc in Sources */,
+ 694120720B8A34AB00AF661E /* controllable.cc in Sources */,
+ 694120730B8A34AB00AF661E /* convert.cc in Sources */,
+ 694120740B8A34AB00AF661E /* copyfile.cc in Sources */,
+ 694120750B8A34AB00AF661E /* dmalloc.cc in Sources */,
+ 694120760B8A34AB00AF661E /* enumwriter.cc in Sources */,
+ 694120770B8A34AB00AF661E /* error.cc in Sources */,
+ 6941207A0B8A34AB00AF661E /* id.cc in Sources */,
+ 6941207B0B8A34AB00AF661E /* mountpoint.cc in Sources */,
+ 6941207C0B8A34AB00AF661E /* path.cc in Sources */,
+ 6941207D0B8A34AB00AF661E /* pathscanner.cc in Sources */,
+ 694120AB0B8A34AB00AF661E /* pool.cc in Sources */,
+ 694120AC0B8A34AB00AF661E /* pthread_utils.cc in Sources */,
+ 694120AD0B8A34AB00AF661E /* receiver.cc in Sources */,
+ 694120AE0B8A34AB00AF661E /* stacktrace.cc in Sources */,
+ 694120AF0B8A34AB00AF661E /* stateful.cc in Sources */,
+ 694120B00B8A34AB00AF661E /* strsplit.cc in Sources */,
+ 694120B10B8A34AB00AF661E /* textreceiver.cc in Sources */,
+ 694120B20B8A34AB00AF661E /* transmitter.cc in Sources */,
+ 694120B30B8A34AB00AF661E /* undo.cc in Sources */,
+ 694120B40B8A34AB00AF661E /* whitespace.cc in Sources */,
+ 694120B50B8A34AB00AF661E /* xml++.cc in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C1667FE841158C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 4FADC24408B4156D00ABE55E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = (
+ ppc,
+ i386,
+ );
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ FRAMEWORK_VERSION = A;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = pbd_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "@executable_path/../Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\"";
+ LIBRARY_STYLE = DYNAMIC;
+ MACH_O_TYPE = mh_dylib;
+ PRODUCT_NAME = pbd;
+ WRAPPER_EXTENSION = framework;
+ };
+ name = Release;
+ };
+ 4FADC24808B4156D00ABE55E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = (
+ "$(NATIVE_ARCH)",
+ ppc,
+ );
+ GCC_FAST_OBJC_DISPATCH = NO;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_STRICT_ALIASING = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ /usr/include/libxml2,
+ /Library/Frameworks/GLib.framework/Headers,
+ /Library/Frameworks/glibmm.framework/Headers,
+ /Library/Frameworks/sigc.framework/Headers,
+ );
+ INSTALL_PATH = "@executable_path/../Frameworks";
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ };
+ name = Release;
+ };
+ 69C9AF150B97A83A0097DE90 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(NATIVE_ARCH)";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = stabs;
+ GCC_FAST_OBJC_DISPATCH = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ /usr/include/libxml2,
+ /Library/Frameworks/GLib.framework/Headers,
+ /Library/Frameworks/glibmm.framework/Headers,
+ /Library/Frameworks/sigc.framework/Headers,
+ );
+ INSTALL_PATH = "@executable_path/../Frameworks";
+ PREBINDING = NO;
+ SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk;
+ STRIP_INSTALLED_PRODUCT = NO;
+ };
+ name = Debug;
+ };
+ 69C9AF160B97A83A0097DE90 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = i386;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ FRAMEWORK_VERSION = A;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = pbd_Prefix.pch;
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "@executable_path/../Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
+ "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
+ );
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\"";
+ LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(LOCAL_LIBRARY_DIR)/Frameworks/GLib.framework/Versions/2.12.3/Libraries\"";
+ LIBRARY_STYLE = DYNAMIC;
+ MACH_O_TYPE = mh_dylib;
+ PRODUCT_NAME = pbd;
+ WRAPPER_EXTENSION = framework;
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 4FADC24208B4156D00ABE55E /* Build configuration list for PBXNativeTarget "pbd" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4FADC24408B4156D00ABE55E /* Release */,
+ 69C9AF160B97A83A0097DE90 /* Debug */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4FADC24608B4156D00ABE55E /* Build configuration list for PBXProject "pbd" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4FADC24808B4156D00ABE55E /* Release */,
+ 69C9AF150B97A83A0097DE90 /* Debug */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
diff --git a/libs/pbd/macosx/pbd_Prefix.pch b/libs/pbd/macosx/pbd_Prefix.pch
new file mode 100644
index 0000000000..a774fac593
--- /dev/null
+++ b/libs/pbd/macosx/pbd_Prefix.pch
@@ -0,0 +1,4 @@
+//
+// Prefix header for all source files of the 'pbd' target in the 'pbd' project.
+//
+
diff --git a/libs/pbd/macosx/version.cc b/libs/pbd/macosx/version.cc
new file mode 100644
index 0000000000..61a94f6fc9
--- /dev/null
+++ b/libs/pbd/macosx/version.cc
@@ -0,0 +1,3 @@
+int libpbd_major_version = 4;
+int libpbd_minor_version = 1;
+int libpbd_micro_version = 0;
diff --git a/libs/pbd/macosx/version.h b/libs/pbd/macosx/version.h
new file mode 100644
index 0000000000..ec6c854141
--- /dev/null
+++ b/libs/pbd/macosx/version.h
@@ -0,0 +1,7 @@
+#ifndef __libpbd_version_h__
+#define __libpbd_version_h__
+extern const char* libpbd_revision;
+extern int libpbd_major_version;
+extern int libpbd_minor_version;
+extern int libpbd_micro_version;
+#endif /* __libpbd_version_h__ */
diff --git a/libs/pbd/mountpoint.cc b/libs/pbd/mountpoint.cc
new file mode 100644
index 0000000000..acc549890a
--- /dev/null
+++ b/libs/pbd/mountpoint.cc
@@ -0,0 +1,159 @@
+/*
+ Copyright (C) 2002 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <limits.h>
+
+#include <pbd/mountpoint.h>
+
+using std::string;
+
+#if HAVE_GETMNTENT
+#include <mntent.h>
+
+struct mntent_sorter {
+ bool operator() (const mntent *a, const mntent *b) {
+ return strcmp (a->mnt_dir, b->mnt_dir);
+ }
+};
+
+string
+mountpoint (string path)
+{
+ FILE *mntf;
+ mntent *mnt;
+ unsigned int maxmatch = 0;
+ unsigned int matchlen;
+ const char *cpath = path.c_str();
+ char best[PATH_MAX+1];
+
+ if ((mntf = setmntent ("/etc/mtab", "r")) == 0) {
+ return "";
+ }
+
+ best[0] = '\0';
+
+ while ((mnt = getmntent (mntf))) {
+ unsigned int n;
+
+ n = 0;
+ matchlen = 0;
+
+ /* note: strcmp's semantics are not
+ strict enough to use for this.
+ */
+
+ while (cpath[n] && mnt->mnt_dir[n]) {
+ if (cpath[n] != mnt->mnt_dir[n]) {
+ break;
+ }
+ matchlen++;
+ n++;
+ }
+
+ if (cpath[matchlen] == '\0') {
+
+ endmntent (mntf);
+ return mnt->mnt_dir;
+
+ } else {
+
+ if (matchlen > maxmatch) {
+ snprintf (best, sizeof(best), "%s", mnt->mnt_dir);
+ maxmatch = matchlen;
+ }
+ }
+ }
+
+ endmntent (mntf);
+
+ return best;
+}
+
+#else // !HAVE_GETMNTENT
+
+#include <sys/param.h>
+#include <sys/ucred.h>
+#include <sys/mount.h>
+
+string
+mountpoint (string path)
+{
+ struct statfs *mntbufp = 0;
+ int count;
+ unsigned int maxmatch = 0;
+ unsigned int matchlen;
+ const char *cpath = path.c_str();
+ char best[PATH_MAX+1];
+
+ if ((count = getmntinfo(&mntbufp, MNT_NOWAIT)) == 0) {
+ free(mntbufp);
+ return "\0";
+ }
+
+ best[0] = '\0';
+
+ for (int i = 0; i < count; ++i) {
+ unsigned int n = 0;
+ matchlen = 0;
+
+ /* note: strcmp's semantics are not
+ strict enough to use for this.
+ */
+
+ while (cpath[n] && mntbufp[i].f_mntonname[n]) {
+ if (cpath[n] != mntbufp[i].f_mntonname[n]) {
+ break;
+ }
+ matchlen++;
+ n++;
+ }
+
+ if (cpath[matchlen] == '\0') {
+ snprintf(best, sizeof(best), "%s", mntbufp[i].f_mntonname);
+ free(mntbufp);
+ return best;
+
+ } else {
+
+ if (matchlen > maxmatch) {
+ snprintf (best, sizeof(best), "%s", mntbufp[i].f_mntonname);
+ maxmatch = matchlen;
+ }
+ }
+ }
+
+ free(mntbufp);
+
+ return best;
+}
+#endif // HAVE_GETMNTENT
+
+#ifdef TEST_MOUNTPOINT
+
+main (int argc, char *argv[])
+{
+ printf ("mp of %s = %s\n", argv[1], mountpoint (argv[1]).c_str());
+ exit (0);
+}
+
+#endif // TEST_MOUNTPOINT
diff --git a/libs/pbd/pathscanner.cc b/libs/pbd/pathscanner.cc
new file mode 100644
index 0000000000..eb913cc910
--- /dev/null
+++ b/libs/pbd/pathscanner.cc
@@ -0,0 +1,204 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <cstring>
+#include <cstdlib>
+#include <cstdio>
+#include <vector>
+#include <dirent.h>
+
+#include <pbd/error.h>
+#include <pbd/pathscanner.h>
+#include <pbd/stl_delete.h>
+
+using namespace PBD;
+
+vector<string *> *
+PathScanner::operator() (const string &dirpath, const string &regexp,
+ bool match_fullpath, bool return_fullpath,
+ long limit)
+
+{
+ int err;
+ char msg[256];
+
+ if ((err = regcomp (&compiled_pattern, regexp.c_str(),
+ REG_EXTENDED|REG_NOSUB))) {
+
+ regerror (err, &compiled_pattern,
+ msg, sizeof (msg));
+
+ error << "Cannot compile soundfile regexp for use ("
+ << msg
+ << ")"
+ << endmsg;
+
+ return 0;
+ }
+
+ return run_scan (dirpath, &PathScanner::regexp_filter,
+ (bool (*)(const string &, void *)) 0,
+ 0,
+ match_fullpath,
+ return_fullpath,
+ limit);
+}
+
+vector<string *> *
+PathScanner::run_scan (const string &dirpath,
+ bool (PathScanner::*memberfilter)(const string &),
+ bool (*filter)(const string &, void *),
+ void *arg,
+ bool match_fullpath, bool return_fullpath,
+ long limit)
+
+{
+ vector<string *> *result = 0;
+ DIR *dir;
+ struct dirent *finfo;
+ char *pathcopy = strdup (dirpath.c_str());
+ char *thisdir;
+ char fullpath[PATH_MAX+1];
+ string search_str;
+ string *newstr;
+ long nfound = 0;
+
+ if ((thisdir = strtok (pathcopy, ":")) == 0 ||
+ strlen (thisdir) == 0) {
+ free (pathcopy);
+ return 0;
+ }
+
+ result = new vector<string *>;
+
+ do {
+
+ if ((dir = opendir (thisdir)) == 0) {
+ continue;
+ }
+
+ while ((finfo = readdir (dir)) != 0) {
+
+ snprintf (fullpath, sizeof(fullpath), "%s/%s",
+ thisdir, finfo->d_name);
+
+ if (match_fullpath) {
+ search_str = fullpath;
+ } else {
+ search_str = finfo->d_name;
+ }
+
+ /* handle either type of function ptr */
+
+ if (memberfilter) {
+ if (!(this->*memberfilter)(search_str)) {
+ continue;
+ }
+ } else {
+ if (!filter(search_str, arg)) {
+ continue;
+ }
+ }
+
+ if (return_fullpath) {
+ newstr = new string (fullpath);
+ } else {
+ newstr = new string (finfo->d_name);
+ }
+
+ result->push_back (newstr);
+ nfound++;
+ }
+
+ closedir (dir);
+
+ } while ((limit < 0 || (nfound < limit)) && (thisdir = strtok (0, ":")));
+
+ free (pathcopy);
+ return result;
+}
+
+string *
+PathScanner::find_first (const string &dirpath,
+ const string &regexp,
+ bool match_fullpath,
+ bool return_fullpath)
+{
+ vector<string *> *res;
+ string *ret;
+ int err;
+ char msg[256];
+
+ if ((err = regcomp (&compiled_pattern, regexp.c_str(),
+ REG_EXTENDED|REG_NOSUB))) {
+
+ regerror (err, &compiled_pattern,
+ msg, sizeof (msg));
+
+ error << "Cannot compile soundfile regexp for use (" << msg << ")" << endmsg;
+
+
+ return 0;
+ }
+
+ res = run_scan (dirpath,
+ &PathScanner::regexp_filter,
+ (bool (*)(const string &, void *)) 0,
+ 0,
+ match_fullpath,
+ return_fullpath,
+ 1);
+
+ if (res->size() == 0) {
+ ret = 0;
+ } else {
+ ret = res->front();
+ }
+ vector_delete (res);
+ delete res;
+ return ret;
+}
+
+string *
+PathScanner::find_first (const string &dirpath,
+ bool (*filter)(const string &, void *),
+ void *arg,
+ bool match_fullpath,
+ bool return_fullpath)
+{
+ vector<string *> *res;
+ string *ret;
+
+ res = run_scan (dirpath,
+ (bool (PathScanner::*)(const string &)) 0,
+ filter,
+ 0,
+ match_fullpath,
+ return_fullpath, 1);
+
+ if (res->size() == 0) {
+ ret = 0;
+ } else {
+ ret = res->front();
+ }
+ vector_delete (res);
+ delete res;
+ return ret;
+}
diff --git a/libs/pbd/pbd/.DS_Store b/libs/pbd/pbd/.DS_Store
new file mode 100644
index 0000000000..5008ddfcf5
--- /dev/null
+++ b/libs/pbd/pbd/.DS_Store
Binary files differ
diff --git a/libs/pbd/pbd/.cvsignore b/libs/pbd/pbd/.cvsignore
new file mode 100644
index 0000000000..67020331ba
--- /dev/null
+++ b/libs/pbd/pbd/.cvsignore
@@ -0,0 +1 @@
+version.h
diff --git a/libs/pbd/pbd/abstract_ui.cc b/libs/pbd/pbd/abstract_ui.cc
new file mode 100644
index 0000000000..97f19e1fe5
--- /dev/null
+++ b/libs/pbd/pbd/abstract_ui.cc
@@ -0,0 +1,149 @@
+#include <unistd.h>
+
+#include <pbd/abstract_ui.h>
+#include <pbd/pthread_utils.h>
+#include <pbd/failed_constructor.h>
+
+#include "i18n.h"
+
+using namespace std;
+
+template <typename RequestObject>
+AbstractUI<RequestObject>::AbstractUI (string name, bool with_signal_pipes)
+ : BaseUI (name, with_signal_pipes)
+{
+ if (pthread_key_create (&thread_request_buffer_key, 0)) {
+ cerr << _("cannot create thread request buffer key") << endl;
+ throw failed_constructor();
+ }
+
+ PBD::ThreadCreated.connect (mem_fun (*this, &AbstractUI<RequestObject>::register_thread));
+ PBD::ThreadCreatedWithRequestSize.connect (mem_fun (*this, &AbstractUI<RequestObject>::register_thread_with_request_count));
+}
+
+template <typename RequestObject> void
+AbstractUI<RequestObject>::register_thread (pthread_t thread_id, string name)
+{
+ register_thread_with_request_count (thread_id, name, 256);
+}
+
+template <typename RequestObject> void
+AbstractUI<RequestObject>::register_thread_with_request_count (pthread_t thread_id, string thread_name, uint32_t num_requests)
+{
+ RequestBuffer* b = new RequestBuffer (num_requests);
+
+ {
+ Glib::Mutex::Lock lm (request_buffer_map_lock);
+ request_buffers[thread_id] = b;
+ }
+
+ pthread_setspecific (thread_request_buffer_key, b);
+}
+
+template <typename RequestObject> RequestObject*
+AbstractUI<RequestObject>::get_request (RequestType rt)
+{
+ RequestBuffer* rbuf = static_cast<RequestBuffer*>(pthread_getspecific (thread_request_buffer_key));
+
+ if (rbuf == 0) {
+ /* Cannot happen, but if it does we can't use the error reporting mechanism */
+ cerr << _("programming error: ")
+ << string_compose ("no %1-UI request buffer found for thread %2", name(), pthread_name())
+ << endl;
+ abort ();
+ }
+
+ RequestBufferVector vec;
+ vec.buf[0] = 0;
+ vec.buf[1] = 0;
+
+ rbuf->get_write_vector (&vec);
+
+ if (vec.len[0] == 0) {
+ if (vec.len[1] == 0) {
+ cerr << string_compose ("no space in %1-UI request buffer for thread %2", name(), pthread_name())
+ << endl;
+ return 0;
+ } else {
+ vec.buf[1]->type = rt;
+ return vec.buf[1];
+ }
+ } else {
+ vec.buf[0]->type = rt;
+ return vec.buf[0];
+ }
+}
+
+template <typename RequestObject> void
+AbstractUI<RequestObject>::handle_ui_requests ()
+{
+ RequestBufferMapIterator i;
+
+ request_buffer_map_lock.lock ();
+
+ for (i = request_buffers.begin(); i != request_buffers.end(); ++i) {
+
+ RequestBufferVector vec;
+
+ while (true) {
+
+ /* we must process requests 1 by 1 because
+ the request may run a recursive main
+ event loop that will itself call
+ handle_ui_requests. when we return
+ from the request handler, we cannot
+ expect that the state of queued requests
+ is even remotely consistent with
+ the condition before we called it.
+ */
+
+ i->second->get_read_vector (&vec);
+
+ if (vec.len[0] == 0) {
+ break;
+ } else {
+ request_buffer_map_lock.unlock ();
+ do_request (vec.buf[0]);
+ request_buffer_map_lock.lock ();
+ i->second->increment_read_ptr (1);
+ }
+ }
+ }
+
+ request_buffer_map_lock.unlock ();
+}
+
+template <typename RequestObject> void
+AbstractUI<RequestObject>::send_request (RequestObject *req)
+{
+ if (base_instance() == 0) {
+ return; /* XXX is this the right thing to do ? */
+ }
+
+ if (caller_is_ui_thread()) {
+ // cerr << "GUI thread sent request " << req << " type = " << req->type << endl;
+ do_request (req);
+ } else {
+ RequestBuffer* rbuf = static_cast<RequestBuffer*> (pthread_getspecific (thread_request_buffer_key));
+
+ if (rbuf == 0) {
+ /* can't use the error system to report this, because this
+ thread isn't registered!
+ */
+ cerr << _("programming error: ")
+ << string_compose ("AbstractUI::send_request() called from %1 (%2), but no request buffer exists for that thread", name(), pthread_name())
+ << endl;
+ abort ();
+ }
+
+ // cerr << "thread " << pthread_self() << " sent request " << req << " type = " << req->type << endl;
+
+ rbuf->increment_write_ptr (1);
+
+ if (signal_pipe[1] >= 0) {
+ const char c = 0;
+ write (signal_pipe[1], &c, 1);
+ }
+ }
+}
+
diff --git a/libs/pbd/pbd/abstract_ui.h b/libs/pbd/pbd/abstract_ui.h
new file mode 100644
index 0000000000..88c27aa0bc
--- /dev/null
+++ b/libs/pbd/pbd/abstract_ui.h
@@ -0,0 +1,78 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_abstract_ui_h__
+#define __pbd_abstract_ui_h__
+
+#include <map>
+#include <string>
+#include <pthread.h>
+
+#include <sigc++/sigc++.h>
+
+#include <glibmm/thread.h>
+
+#include <pbd/receiver.h>
+#include <pbd/ringbufferNPT.h>
+#include <pbd/base_ui.h>
+
+class Touchable;
+
+template <class RequestObject>
+class AbstractUI : public BaseUI
+{
+ public:
+ AbstractUI (std::string name, bool with_signal_pipe);
+ virtual ~AbstractUI() {}
+
+ virtual bool caller_is_ui_thread() = 0;
+
+ void call_slot (sigc::slot<void> el_slot) {
+ RequestObject *req = get_request (BaseUI::CallSlot);
+
+ if (req == 0) {
+ return;
+ }
+
+ req->slot = el_slot;
+ send_request (req);
+ }
+
+ void register_thread (pthread_t, std::string);
+ void register_thread_with_request_count (pthread_t, std::string, uint32_t num_requests);
+
+ protected:
+ typedef RingBufferNPT<RequestObject> RequestBuffer;
+ typedef typename RequestBuffer::rw_vector RequestBufferVector;
+ typedef typename std::map<pthread_t,RequestBuffer*>::iterator RequestBufferMapIterator;
+
+ Glib::Mutex request_buffer_map_lock;
+ typedef std::map<pthread_t,RequestBuffer*> RequestBufferMap;
+ RequestBufferMap request_buffers;
+ pthread_key_t thread_request_buffer_key;
+ RequestObject* get_request (RequestType);
+ void handle_ui_requests ();
+ void send_request (RequestObject *);
+
+ virtual void do_request (RequestObject *) = 0;
+};
+
+#endif /* __pbd_abstract_ui_h__ */
+
+
diff --git a/libs/pbd/pbd/base_ui.h b/libs/pbd/pbd/base_ui.h
new file mode 100644
index 0000000000..0928512841
--- /dev/null
+++ b/libs/pbd/pbd/base_ui.h
@@ -0,0 +1,65 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_base_ui_h__
+#define __pbd_base_ui_h__
+
+#include <string>
+#include <stdint.h>
+
+#include <sigc++/slot.h>
+#include <sigc++/trackable.h>
+
+class BaseUI : virtual public sigc::trackable {
+ public:
+ BaseUI (std::string name, bool with_signal_pipes);
+ virtual ~BaseUI();
+
+ BaseUI* base_instance() { return base_ui_instance; }
+
+ std::string name() const { return _name; }
+
+ bool ok() const { return _ok; }
+
+ enum RequestType {
+ range_guarantee = ~0
+ };
+
+ struct BaseRequestObject {
+ RequestType type;
+ sigc::slot<void> the_slot;
+ };
+
+ static RequestType new_request_type();
+ static RequestType CallSlot;
+
+ protected:
+ int signal_pipe[2];
+ bool _ok;
+
+ private:
+ std::string _name;
+ BaseUI* base_ui_instance;
+
+ static uint32_t rt_bit;
+
+ int setup_signal_pipe ();
+};
+
+#endif /* __pbd_base_ui_h__ */
diff --git a/libs/pbd/pbd/basename.h b/libs/pbd/pbd/basename.h
new file mode 100644
index 0000000000..f13c3840dc
--- /dev/null
+++ b/libs/pbd/pbd/basename.h
@@ -0,0 +1,32 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __stupid_basename_h__
+#define __stupid_basename_h__
+
+#include <glibmm/ustring.h>
+
+namespace PBD
+{
+
+Glib::ustring basename_nosuffix (Glib::ustring);
+
+}
+
+#endif // __stupid_basename_h__
diff --git a/libs/pbd/pbd/command.h b/libs/pbd/pbd/command.h
new file mode 100644
index 0000000000..a66485bc0d
--- /dev/null
+++ b/libs/pbd/pbd/command.h
@@ -0,0 +1,49 @@
+/*
+ Copyright (C) 2006 Paul Davis
+ Author: Hans Fugal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __lib_pbd_command_h__
+#define __lib_pbd_command_h__
+
+#include <pbd/statefuldestructible.h>
+
+class Command : public PBD::StatefulDestructible
+{
+public:
+ virtual ~Command() {}
+
+ virtual void operator() () = 0;
+
+ void set_name (const std::string& str) { _name = str; }
+ const std::string& name() const { return _name; }
+
+ virtual void undo() = 0;
+ virtual void redo() { (*this)(); }
+
+ virtual XMLNode &get_state();
+ virtual int set_state(const XMLNode&) { /* noop */ return 0; }
+
+protected:
+ Command() {}
+ Command(const std::string& name) : _name(name) {}
+
+ std::string _name;
+};
+
+#endif // __lib_pbd_command_h_
diff --git a/libs/pbd/pbd/compose.h b/libs/pbd/pbd/compose.h
new file mode 100644
index 0000000000..0df9519aaf
--- /dev/null
+++ b/libs/pbd/pbd/compose.h
@@ -0,0 +1,393 @@
+/* Defines String::compose(fmt, arg...) for easy, i18n-friendly
+ * composition of strings.
+ *
+ * Version 1.0.
+ *
+ * Copyright (c) 2002 Ole Laursen <olau@hardworking.dk>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA.
+ */
+
+//
+// Basic usage is like
+//
+// std::cout << String::compose("This is a %1x%2 matrix.", rows, cols);
+//
+// See http://www.cs.auc.dk/~olau/compose/ or the included README.compose for
+// more details.
+//
+
+#ifndef STRING_COMPOSE_H
+#define STRING_COMPOSE_H
+
+#include <sstream>
+#include <string>
+#include <list>
+#include <map> // for multimap
+
+namespace StringPrivate
+{
+ // the actual composition class - using string::compose is cleaner, so we
+ // hide it here
+ class Composition
+ {
+ public:
+ // initialize and prepare format string on the form "text %1 text %2 etc."
+ explicit Composition(std::string fmt);
+
+ // supply an replacement argument starting from %1
+ template <typename T>
+ Composition &arg(const T &obj);
+
+ // compose and return string
+ std::string str() const;
+
+ private:
+ std::ostringstream os;
+ int arg_no;
+
+ // we store the output as a list - when the output string is requested, the
+ // list is concatenated to a string; this way we can keep iterators into
+ // the list instead of into a string where they're possibly invalidated on
+ // inserting a specification string
+ typedef std::list<std::string> output_list;
+ output_list output;
+
+ // the initial parse of the format string fills in the specification map
+ // with positions for each of the various %?s
+ typedef std::multimap<int, output_list::iterator> specification_map;
+ specification_map specs;
+ };
+
+ // helper for converting spec string numbers
+ inline int char_to_int(char c)
+ {
+ switch (c) {
+ case '0': return 0;
+ case '1': return 1;
+ case '2': return 2;
+ case '3': return 3;
+ case '4': return 4;
+ case '5': return 5;
+ case '6': return 6;
+ case '7': return 7;
+ case '8': return 8;
+ case '9': return 9;
+ default: return -1000;
+ }
+ }
+
+ inline bool is_number(int n)
+ {
+ switch (n) {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ return true;
+
+ default:
+ return false;
+ }
+ }
+
+
+ // implementation of class Composition
+ template <typename T>
+ inline Composition &Composition::arg(const T &obj)
+ {
+ os << obj;
+
+ std::string rep = os.str();
+
+ if (!rep.empty()) { // manipulators don't produce output
+ for (specification_map::const_iterator i = specs.lower_bound(arg_no),
+ end = specs.upper_bound(arg_no); i != end; ++i) {
+ output_list::iterator pos = i->second;
+ ++pos;
+
+ output.insert(pos, rep);
+ }
+
+ os.str(std::string());
+ //os.clear();
+ ++arg_no;
+ }
+
+ return *this;
+ }
+
+ inline Composition::Composition(std::string fmt)
+ : arg_no(1)
+ {
+ std::string::size_type b = 0, i = 0;
+
+ // fill in output with the strings between the %1 %2 %3 etc. and
+ // fill in specs with the positions
+ while (i < fmt.length()) {
+ if (fmt[i] == '%' && i + 1 < fmt.length()) {
+ if (fmt[i + 1] == '%') { // catch %%
+ fmt.replace(i, 2, "%");
+ ++i;
+ }
+ else if (is_number(fmt[i + 1])) { // aha! a spec!
+ // save string
+ output.push_back(fmt.substr(b, i - b));
+
+ int n = 1; // number of digits
+ int spec_no = 0;
+
+ do {
+ spec_no += char_to_int(fmt[i + n]);
+ spec_no *= 10;
+ ++n;
+ } while (i + n < fmt.length() && is_number(fmt[i + n]));
+
+ spec_no /= 10;
+ output_list::iterator pos = output.end();
+ --pos; // safe since we have just inserted a string>
+
+ specs.insert(specification_map::value_type(spec_no, pos));
+
+ // jump over spec string
+ i += n;
+ b = i;
+ }
+ else
+ ++i;
+ }
+ else
+ ++i;
+ }
+
+ if (i - b > 0) // add the rest of the string
+ output.push_back(fmt.substr(b, i - b));
+ }
+
+ inline std::string Composition::str() const
+ {
+ // assemble string
+ std::string str;
+
+ for (output_list::const_iterator i = output.begin(), end = output.end();
+ i != end; ++i)
+ str += *i;
+
+ return str;
+ }
+}
+
+// now for the real thing(s)
+//namespace PBD
+//{
+ // a series of functions which accept a format string on the form "text %1
+ // more %2 less %3" and a number of templated parameters and spits out the
+ // composited string
+ template <typename T1>
+ inline std::string string_compose(const std::string &fmt, const T1 &o1)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1);
+ return c.str();
+ }
+
+ template <typename T1, typename T2>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10,
+ typename T11>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10, const T11 &o11)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10).arg(o11);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10,
+ typename T11, typename T12>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10, const T11 &o11, const T12 &o12)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10).arg(o11).arg(o12);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10,
+ typename T11, typename T12, typename T13>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10, const T11 &o11, const T12 &o12,
+ const T13 &o13)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10).arg(o11).arg(o12).arg(o13);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10,
+ typename T11, typename T12, typename T13, typename T14>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10, const T11 &o11, const T12 &o12,
+ const T13 &o13, const T14 &o14)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10).arg(o11).arg(o12).arg(o13).arg(o14);
+ return c.str();
+ }
+
+ template <typename T1, typename T2, typename T3, typename T4, typename T5,
+ typename T6, typename T7, typename T8, typename T9, typename T10,
+ typename T11, typename T12, typename T13, typename T14,
+ typename T15>
+ inline std::string string_compose(const std::string &fmt,
+ const T1 &o1, const T2 &o2, const T3 &o3,
+ const T4 &o4, const T5 &o5, const T6 &o6,
+ const T7 &o7, const T8 &o8, const T9 &o9,
+ const T10 &o10, const T11 &o11, const T12 &o12,
+ const T13 &o13, const T14 &o14, const T15 &o15)
+ {
+ StringPrivate::Composition c(fmt);
+ c.arg(o1).arg(o2).arg(o3).arg(o4).arg(o5).arg(o6).arg(o7).arg(o8).arg(o9)
+ .arg(o10).arg(o11).arg(o12).arg(o13).arg(o14).arg(o15);
+ return c.str();
+ }
+//}
+
+
+#endif // STRING_COMPOSE_H
diff --git a/libs/pbd/pbd/controllable.h b/libs/pbd/pbd/controllable.h
new file mode 100644
index 0000000000..dbb23fdff4
--- /dev/null
+++ b/libs/pbd/pbd/controllable.h
@@ -0,0 +1,92 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_controllable_h__
+#define __pbd_controllable_h__
+
+#include <string>
+#include <set>
+
+#include <sigc++/trackable.h>
+#include <sigc++/signal.h>
+
+#include <pbd/statefuldestructible.h>
+
+class XMLNode;
+
+namespace PBD {
+
+class Controllable : public PBD::StatefulDestructible {
+ public:
+ Controllable (std::string name);
+ virtual ~Controllable() { Destroyed (this); }
+
+ virtual void set_value (float) = 0;
+ virtual float get_value (void) const = 0;
+
+ virtual bool can_send_feedback() const { return true; }
+
+ sigc::signal<void> LearningFinished;
+ static sigc::signal<void,PBD::Controllable*,int,int> CreateBinding;
+ static sigc::signal<void,PBD::Controllable*> DeleteBinding;
+
+ static sigc::signal<bool,PBD::Controllable*> StartLearning;
+ static sigc::signal<void,PBD::Controllable*> StopLearning;
+
+ static sigc::signal<void,Controllable*> Destroyed;
+
+ sigc::signal<void> Changed;
+
+ int set_state (const XMLNode&);
+ XMLNode& get_state ();
+
+ std::string name() const { return _name; }
+
+ static Controllable* by_id (const PBD::ID&);
+ static Controllable* by_name (const std::string&);
+
+ private:
+ std::string _name;
+
+ void add ();
+ void remove ();
+
+ typedef std::set<PBD::Controllable*> Controllables;
+ static Glib::Mutex* registry_lock;
+ static Controllables registry;
+};
+
+/* a utility class for the occasions when you need but do not have
+ a Controllable
+*/
+
+class IgnorableControllable : public Controllable
+{
+ public:
+ IgnorableControllable () : PBD::Controllable ("ignoreMe") {}
+ ~IgnorableControllable () {}
+
+ void set_value (float v){}
+ float get_value () const { return 0.0; }
+ bool can_send_feedback () const { return false; }
+};
+
+}
+
+#endif /* __pbd_controllable_h__ */
diff --git a/libs/pbd/pbd/convert.h b/libs/pbd/pbd/convert.h
new file mode 100644
index 0000000000..83cd285098
--- /dev/null
+++ b/libs/pbd/pbd/convert.h
@@ -0,0 +1,54 @@
+/*
+ Copyright (C) 2002 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_convert_h__
+#define __pbd_convert_h__
+
+#include <string>
+#include <vector>
+#include <sstream>
+#include <iostream>
+#include <glibmm/ustring.h>
+
+namespace PBD {
+
+std::string short_version (std::string, std::string::size_type target_length);
+
+int atoi (const std::string&);
+double atof (const std::string&);
+void url_decode (std::string&);
+void url_decode (Glib::ustring&);
+
+// std::string length2string (const int32_t frames, const float sample_rate);
+std::string length2string (const int64_t frames, const double sample_rate);
+
+std::vector<std::string> internationalize (const char *, const char **);
+bool strings_equal_ignore_case (const std::string& a, const std::string& b);
+
+template <class T> std::string
+to_string (T t, std::ios_base & (*f)(std::ios_base&))
+{
+ std::ostringstream oss;
+ oss << f << t;
+ return oss.str();
+}
+
+} //namespace PBD
+
+#endif /* __pbd_convert_h__ */
diff --git a/libs/pbd/pbd/crossthread.h b/libs/pbd/pbd/crossthread.h
new file mode 100644
index 0000000000..b815cfd319
--- /dev/null
+++ b/libs/pbd/pbd/crossthread.h
@@ -0,0 +1,57 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd__crossthread_h__
+#define __pbd__crossthread_h__
+
+#include <pbd/abstract_ui.h>
+#include <sigc++/sigc++.h>
+#include <pthread.h>
+
+template<class RequestType>
+void
+call_slot_from_thread_or_dispatch_it (pthread_t thread_id, AbstractUI<RequestType>& ui, sigc::slot<void> theSlot)
+{
+ /* when called, this function will determine whether the calling thread
+ is the same as thread specified by the first argument. if it is,
+ the we execute the slot. if not, we ask the interface given by the second
+ argument to call the slot.
+ */
+
+ if (pthread_self() == thread_id) {
+ theSlot ();
+ } else {
+ ui.call_slot (theSlot);
+ }
+}
+
+template<class RequestType>
+sigc::slot<void>
+crossthread_safe (pthread_t thread_id, AbstractUI<RequestType>& ui, sigc::slot<void> theSlot)
+{
+ /* this function returns a slot that will ensure that theSlot is either
+ called by the specified thread or passed to the interface via
+ AbstractUI::call_slot().
+ */
+
+ return sigc::bind (sigc::ptr_fun (call_slot_from_thread_or_dispatch_it<RequestType>),
+ thread_id, ui, theSlot);
+}
+
+#endif /* __pbd__crossthread_h__ */
diff --git a/libs/pbd/pbd/destructible.h b/libs/pbd/pbd/destructible.h
new file mode 100644
index 0000000000..827feb8fe5
--- /dev/null
+++ b/libs/pbd/pbd/destructible.h
@@ -0,0 +1,47 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_destructible_h__
+#define __pbd_destructible_h__
+
+#include <sigc++/signal.h>
+
+namespace PBD {
+
+/* be very very careful using this class. it does not inherit from sigc::trackable and thus
+ should only be used in multiple-inheritance situations involving another type
+ that does inherit from sigc::trackable (or sigc::trackable itself)
+*/
+
+class ThingWithGoingAway {
+ public:
+ virtual ~ThingWithGoingAway () {}
+ sigc::signal<void> GoingAway;
+};
+
+class Destructible : public sigc::trackable, public ThingWithGoingAway {
+ public:
+ virtual ~Destructible () {}
+ void drop_references () const { GoingAway(); }
+
+};
+
+}
+
+#endif /* __pbd_destructible_h__ */
diff --git a/libs/pbd/pbd/enumwriter.h b/libs/pbd/pbd/enumwriter.h
new file mode 100644
index 0000000000..f53388f3cc
--- /dev/null
+++ b/libs/pbd/pbd/enumwriter.h
@@ -0,0 +1,77 @@
+/*
+ Copyright (C) 2006 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <map>
+#include <string>
+#include <vector>
+#include <exception>
+
+
+namespace PBD {
+
+class unknown_enumeration : public std::exception {
+ public:
+ virtual const char *what() const throw() { return "unknown enumerator in PBD::EnumWriter"; }
+};
+
+class EnumWriter {
+ public:
+ EnumWriter ();
+ ~EnumWriter ();
+
+ static EnumWriter& instance() { return *_instance; }
+
+ void register_distinct (std::string type, std::vector<int>, std::vector<std::string>);
+ void register_bits (std::string type, std::vector<int>, std::vector<std::string>);
+
+ std::string write (std::string type, int value);
+ int read (std::string type, std::string value);
+
+ void add_to_hack_table (std::string str, std::string hacked_str);
+
+ private:
+ struct EnumRegistration {
+ std::vector<int> values;
+ std::vector<std::string> names;
+ bool bitwise;
+
+ EnumRegistration() {}
+ EnumRegistration (std::vector<int>& v, std::vector<std::string>& s, bool b)
+ : values (v), names (s), bitwise (b) {}
+ };
+
+ typedef std::map<std::string, EnumRegistration> Registry;
+ Registry registry;
+
+ std::string write_bits (EnumRegistration&, int value);
+ std::string write_distinct (EnumRegistration&, int value);
+
+ int read_bits (EnumRegistration&, std::string value);
+ int read_distinct (EnumRegistration&, std::string value);
+
+ static EnumWriter* _instance;
+ static std::map<std::string,std::string> hack_table;
+};
+
+}
+
+#define enum_2_string(e) (PBD::EnumWriter::instance().write (typeid(e).name(), e))
+#define string_2_enum(str,e) (PBD::EnumWriter::instance().read (typeid(e).name(), (str)))
+
diff --git a/libs/pbd/pbd/error.h b/libs/pbd/pbd/error.h
new file mode 100644
index 0000000000..58842d68eb
--- /dev/null
+++ b/libs/pbd/pbd/error.h
@@ -0,0 +1,31 @@
+/*
+ Copyright (C) 1998-2006 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+#ifndef __libpbd_error_h__
+#define __libpbd_error_h__
+
+#include "transmitter.h"
+
+namespace PBD {
+ extern Transmitter error;
+ extern Transmitter info;
+ extern Transmitter warning;
+ extern Transmitter fatal;
+}
+
+#endif // __libpbd_error_h__
diff --git a/libs/pbd/pbd/failed_constructor.h b/libs/pbd/pbd/failed_constructor.h
new file mode 100644
index 0000000000..b13964e355
--- /dev/null
+++ b/libs/pbd/pbd/failed_constructor.h
@@ -0,0 +1,30 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_failed_constructor_h__
+#define __pbd_failed_constructor_h__
+
+#include <exception>
+
+class failed_constructor : public std::exception {
+ public:
+ virtual const char *what() const throw() { return "failed constructor"; }
+};
+
+#endif /* __pbd_failed_constructor_h__ */
diff --git a/libs/pbd/pbd/fastlog.h b/libs/pbd/pbd/fastlog.h
new file mode 100644
index 0000000000..4269705a44
--- /dev/null
+++ b/libs/pbd/pbd/fastlog.h
@@ -0,0 +1,40 @@
+/* Copyright unknown. Code by Laurent de Soras <laurent@ohmforce.com>.
+ */
+
+#ifndef __pbd_fastlog_h__
+#define __pbd_fastlog_h__
+
+#include <math.h> /* for HUGE_VAL */
+
+static inline float fast_log2 (float val)
+{
+ /* don't use reinterpret_cast<> because that prevents this
+ from being used by pure C code (for example, GnomeCanvasItems)
+ */
+ union {float f; int i;} t;
+ t.f = val;
+ int * const exp_ptr = &t.i;
+ int x = *exp_ptr;
+ const int log_2 = ((x >> 23) & 255) - 128;
+ x &= ~(255 << 23);
+ x += 127 << 23;
+ *exp_ptr = x;
+
+ val = ((-1.0f/3) * t.f + 2) * t.f - 2.0f/3;
+
+ return (val + log_2);
+}
+
+static inline float fast_log (const float val)
+{
+ return (fast_log2 (val) * 0.69314718f);
+}
+
+static inline float fast_log10 (const float val)
+{
+ return fast_log2(val) / 3.312500f;
+}
+
+static inline float minus_infinity() { return -HUGE_VAL; }
+
+#endif /* __pbd_fastlog_h__ */
diff --git a/libs/pbd/pbd/file_utils.h b/libs/pbd/pbd/file_utils.h
new file mode 100644
index 0000000000..a9832ce720
--- /dev/null
+++ b/libs/pbd/pbd/file_utils.h
@@ -0,0 +1,99 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef PBD_FILE_UTILS_INCLUDED
+#define PBD_FILE_UTILS_INCLUDED
+
+#include <string>
+#include <vector>
+
+#include <glibmm/pattern.h>
+
+#include <pbd/search_path.h>
+
+namespace PBD {
+
+using std::string;
+using std::vector;
+
+/**
+ * Get a list of files in a directory.
+ * @note You must join path with result to get the absolute path
+ * to the file.
+ *
+ * @param path An Absolute path to a directory
+ * @param result A vector of filenames.
+ */
+void
+get_files_in_directory (const sys::path& path,
+ vector<string>& result);
+
+/**
+ * Takes a directory path and returns all the files in the directory
+ * matching a particular pattern.
+ *
+ * @param directory A directory path
+ * @param pattern A Glib::PatternSpec used to match the files.
+ * @param result A vector in which to place the resulting matches.
+ */
+void
+find_matching_files_in_directory (const sys::path& directory,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result);
+
+/**
+ * Takes a number of directory paths and returns all the files matching
+ * a particular pattern.
+ *
+ * @param paths A vector containing the Absolute paths
+ * @param pattern A Glib::PatternSpec used to match the files
+ * @param result A vector in which to place the resulting matches.
+ */
+void
+find_matching_files_in_directories (const vector<sys::path>& directory_paths,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result);
+
+/**
+ * Takes a SearchPath and puts a list of all the files in the search path
+ * that match pattern into the result vector.
+ *
+ * @param search_path A SearchPath
+ * @param pattern A Glib::PatternSpec used to match the files
+ * @param result A vector in which to place the resulting matches.
+ */
+void
+find_matching_files_in_search_path (const SearchPath& search_path,
+ const Glib::PatternSpec& pattern,
+ vector<sys::path>& result);
+
+/**
+ * Takes a search path and a file name and place the full path
+ * to that file in result if it is found within the search path.
+ *
+ * @return true If file is found within the search path.
+ */
+bool
+find_file_in_search_path (const SearchPath& search_path,
+ const string& filename,
+ sys::path& result);
+
+} // namespace PBD
+
+#endif
diff --git a/libs/pbd/pbd/filesystem.h b/libs/pbd/pbd/filesystem.h
new file mode 100644
index 0000000000..2d21a3fafc
--- /dev/null
+++ b/libs/pbd/pbd/filesystem.h
@@ -0,0 +1,202 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/**
+ * @namespace PBD::sys
+ *
+ * The API in this file is intended to be as close as possible to the
+ * boost::filesystem API but implementing only the subset of it that is required
+ * by ardour using the glib/glibmm file utility functions in the implementation.
+ *
+ * More information about boost::filesystem and the TR2 proposal at
+ *
+ * http://www.boost.org/libs/filesystem/doc/tr2_proposal.html
+ *
+ * Hopefully the boost::filesystem API will pass TR2 review etc and become part
+ * of the C++ standard and this code can be removed, or we just end up using
+ * the boost filesystem library when it matures a bit more.
+ *
+ * My reasons for writing this thin wrapper instead of using glib directly or
+ * using boost::filesystem immediately are:
+ *
+ * - Using sys::path instead of strings and Glib::build_filename is more
+ * convenient, terse and forces correct platform agnostic path building.
+ *
+ * - Using boost::filesystem on windows would mean converting between any UTF-8
+ * encoded strings(such as when selecting a file/directory in the gtk file
+ * chooser) and the native file encoding (UTF-16). It would take some time
+ * and testing to find out when this is required and the glib functions already
+ * do this if necessary.
+ *
+ * - Using exceptions to indicate errors is more likely to uncover situations
+ * where error conditions are being silently ignored(I've already encounted
+ * a few examples of this in the ardour code).
+ *
+ * - Many of the glib file utility functions are not wrapped by glibmm so this
+ * also provides what I think is a better API.
+ *
+ * - Using boost::filesystem directly means another library dependence and would
+ * require more testing on windows because of the character encoding issue.
+ *
+ * - The boost::filesystem API changes a bit as part of the TR2 review process etc.
+ */
+
+#ifndef __filesystem_h__
+#define __filesystem_h__
+
+#include <stdexcept>
+#include <string>
+
+namespace PBD {
+
+namespace sys {
+
+using std::string;
+
+class path
+{
+public:
+ path() : m_path("") { }
+ path(const path & p) : m_path(p.m_path) { }
+ path(const string & s) : m_path(s) { }
+ path(const char* s) : m_path(s) { }
+
+ path& operator=(const path& p) { m_path = p.m_path; return *this;}
+ path& operator=(const string& s) { m_path = s; return *this; }
+ path& operator=(const char* s) { m_path = s; return *this; }
+
+ path& operator/=(const path& rhs);
+ path& operator/=(const string& s);
+ path& operator/=(const char* s);
+
+ const string to_string() const { return m_path; }
+
+ /**
+ * @return the last component of the path, if the path refers to
+ * a file then it will be the entire filename including any extension.
+ */
+ string leaf() const;
+
+ /**
+ * @returns the directory component of a path without any trailing
+ * path separator or an empty string if the path has no directory
+ * component(branch path).
+ */
+ path branch_path () const;
+
+private:
+
+ string m_path;
+};
+
+class filesystem_error : public std::runtime_error
+{
+ const int m_error_code;
+
+public:
+ explicit filesystem_error(const std::string & what, int error_code=0)
+ : std::runtime_error(what), m_error_code(error_code) { }
+
+ int system_error() const { return m_error_code; }
+};
+
+inline path operator/ (const path& lhs, const path& rhs)
+{ return path(lhs) /= rhs; }
+
+/// @return true if path at p exists
+bool exists(const path & p);
+
+/// @return true if path at p is a directory.
+bool is_directory(const path & p);
+
+/**
+ * Attempt to create a directory at p as if by the glib function g_mkdir
+ * with a second argument of S_IRWXU|S_IRWXG|S_IRWXO
+ *
+ * @throw filesystem_error if mkdir fails for any other reason other than
+ * the directory already exists.
+ *
+ * @return true If the directory p was created, otherwise false
+ *
+ * @post is_directory(p)
+ */
+bool create_directory(const path & p);
+
+/**
+ * Attempt to create a directory at p as if by the glib function
+ * g_mkdir_with_parents with a second argument of S_IRWXU|S_IRWXG|S_IRWXO
+ *
+ * @throw filesystem_error if g_mkdir_with_parents fails for any other
+ * reason other than the directory already exists.
+ *
+ * @return true If the directory at p was created, otherwise false
+ *
+ * @post is_directory(p)
+ */
+bool create_directories(const path & p);
+
+/**
+ * Attempt to delete the file at path p as if by the glib function
+ * g_unlink.
+ *
+ * @return true if file existed prior to removing it, false if file
+ * at p did not exist.
+ *
+ * @throw filesystem_error if removing the file failed for any other
+ * reason other than the file did not exist.
+ */
+bool remove(const path & p);
+
+/**
+ * Renames from_path to to_path as if by the glib function g_rename.
+ */
+void rename (const path& from_path, const path& to_path);
+
+/**
+ * Attempt to copy the contents of the file from_path to a new file
+ * at path to_path.
+ *
+ * @throw filesystem_error if from_path.empty() || to_path.empty() ||
+ * !exists(from_path) || !is_regular(from_path) || exists(to_path)
+ */
+void copy_file(const path & from_path, const path & to_path);
+
+/**
+ * @return The substring of the filename component of the path, starting
+ * at the beginning of the filename up to but not including the last dot.
+ *
+ * boost::filesystem::path::basename differs from g_path_get_basename and
+ * ::basename and most other forms of basename in that it removes the
+ * extension from the filename if the filename has one.
+ */
+string basename (const path& p);
+
+/**
+ * @return If the filename contains a dot, return a substring of the
+ * filename starting the rightmost dot to the end of the string, otherwise
+ * an empty string.
+ *
+ * @param p a file path.
+ */
+string extension (const path& p);
+
+} // namespace sys
+
+} // namespace PBD
+
+#endif
diff --git a/libs/pbd/pbd/filesystem_paths.h b/libs/pbd/pbd/filesystem_paths.h
new file mode 100644
index 0000000000..4e09c6ec4b
--- /dev/null
+++ b/libs/pbd/pbd/filesystem_paths.h
@@ -0,0 +1,36 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef PBD_FILESYSTEM_PATHS_INCLUDED
+#define PBD_FILESYSTEM_PATHS_INCLUDED
+
+#include <vector>
+
+#include <pbd/filesystem.h>
+
+namespace PBD {
+
+ using std::vector;
+
+ vector<sys::path> system_data_directories ();
+
+ vector<sys::path> system_config_directories ();
+
+} // namespace PBD
+
+#endif
diff --git a/libs/pbd/pbd/forkexec.h b/libs/pbd/pbd/forkexec.h
new file mode 100644
index 0000000000..236cffa301
--- /dev/null
+++ b/libs/pbd/pbd/forkexec.h
@@ -0,0 +1,28 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __forkexec_h__
+#define __forkexec_h__
+
+#include <unistd.h>
+
+pid_t forkexec(char **argv, char **envp, int outpipe[2], int inpipe[2]);
+pid_t forkexec_cmd(char *cmd, char **envp, int outpipe[2], int inpipe[2]);
+
+#endif // __forkexec_h__
diff --git a/libs/pbd/pbd/fpu.h b/libs/pbd/pbd/fpu.h
new file mode 100644
index 0000000000..617dcdf3da
--- /dev/null
+++ b/libs/pbd/pbd/fpu.h
@@ -0,0 +1,31 @@
+#ifndef __pbd_fpu_h__
+#define __pbd_fpu_h__
+
+namespace PBD {
+
+
+class FPU {
+ private:
+ enum Flags {
+ HasFlushToZero = 0x1,
+ HasDenormalsAreZero = 0x2,
+ HasSSE = 0x4,
+ HasSSE2 = 0x8
+ };
+
+ public:
+ FPU ();
+ ~FPU ();
+
+ bool has_flush_to_zero () const { return _flags & HasFlushToZero; }
+ bool has_denormals_are_zero () const { return _flags & HasDenormalsAreZero; }
+ bool has_sse () const { return _flags & HasSSE; }
+ bool has_sse2 () const { return _flags & HasSSE2; }
+
+ private:
+ Flags _flags;
+};
+
+}
+
+#endif /* __pbd_fpu_h__ */
diff --git a/libs/pbd/pbd/functor_command.h b/libs/pbd/pbd/functor_command.h
new file mode 100644
index 0000000000..e335f4418e
--- /dev/null
+++ b/libs/pbd/pbd/functor_command.h
@@ -0,0 +1,121 @@
+/*
+ Copyright (C) 2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __lib_pbd_functor_command_h__
+#define __lib_pbd_functor_command_h__
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <map>
+
+#include <pbd/xml++.h>
+#include <pbd/shiva.h>
+#include <pbd/command.h>
+#include <pbd/failed_constructor.h>
+
+/** This command class is initialized
+ */
+
+namespace PBD {
+
+template <class obj_type, class arg_type>
+class FunctorCommand : public Command
+{
+ private:
+ typedef void (obj_type::*functor_type)(arg_type);
+ typedef std::map< std::string, functor_type > FunctorMap;
+ typedef typename FunctorMap::iterator FunctorMapIterator;
+
+ public:
+ FunctorCommand(
+ std::string functor,
+ obj_type object,
+ arg_type b,
+ arg_type a
+ ) : functor_name(functor),
+ object(object),
+ before(b),
+ after(a)
+ {
+ method = find_functor(functor);
+
+ /* catch destruction of the object */
+ new PBD::Shiva< obj_type, FunctorCommand<obj_type, arg_type> > (object, *this);
+ }
+
+ ~FunctorCommand() {
+ GoingAway();
+ }
+
+ void operator() () {
+ (object.*method) (after);
+ }
+
+ void undo() {
+ (object.*method) (before);
+ }
+
+ virtual XMLNode &get_state() {
+ std::stringstream ss;
+
+ XMLNode *node = new XMLNode("FunctorCommand");
+ node->add_property("functor", functor_name);
+ ss << before;
+ node->add_property("before", ss.str());
+ ss.clear ();
+ ss << after;
+ node->add_property("after", ss.str());
+
+ return *node;
+ }
+
+ static void register_functor(std::string name, functor_type f) {
+ functor_map[name] = f;
+ }
+
+ private:
+ static functor_type find_functor(std::string name) {
+ FunctorMapIterator iter;
+
+ if((iter = functor_map.find(name)) == functor_map.end()) {
+ throw failed_constructor();
+ }
+
+ return iter->second;
+ }
+
+ protected:
+ std::string functor_name;
+ obj_type &object;
+ arg_type before;
+ arg_type after;
+ functor_type method;
+ static FunctorMap functor_map;
+};
+
+// static initialization of functor_map...
+template <class obj_type, class arg_type>
+typename FunctorCommand<obj_type, arg_type>::FunctorMap
+FunctorCommand<obj_type, arg_type>::functor_map;
+
+};
+
+#endif // __lib_pbd_functor_command_h__
+
diff --git a/libs/pbd/pbd/id.h b/libs/pbd/pbd/id.h
new file mode 100644
index 0000000000..3f87a65e0d
--- /dev/null
+++ b/libs/pbd/pbd/id.h
@@ -0,0 +1,67 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_id_h__
+#define __pbd_id_h__
+
+#include <stdint.h>
+#include <string>
+
+#include <glibmm/thread.h>
+
+namespace PBD {
+
+class ID {
+ public:
+ ID ();
+ ID (std::string);
+
+ bool operator== (const ID& other) const {
+ return _id == other._id;
+ }
+
+ bool operator!= (const ID& other) const {
+ return _id != other._id;
+ }
+
+ ID& operator= (std::string);
+
+ bool operator< (const ID& other) const {
+ return _id < other._id;
+ }
+
+ void print (char* buf, uint32_t bufsize) const;
+ std::string to_s() const;
+
+ static uint64_t counter() { return _counter; }
+ static void init_counter (uint64_t val) { _counter = val; }
+ static void init ();
+
+ private:
+ uint64_t _id;
+ int string_assign (std::string);
+
+ static Glib::Mutex* counter_lock;
+ static uint64_t _counter;
+};
+
+}
+std::ostream& operator<< (std::ostream& ostr, const PBD::ID&);
+
+#endif /* __pbd_id_h__ */
diff --git a/libs/pbd/pbd/mathfix.h b/libs/pbd/pbd/mathfix.h
new file mode 100644
index 0000000000..fd0468905f
--- /dev/null
+++ b/libs/pbd/pbd/mathfix.h
@@ -0,0 +1,33 @@
+/*
+ Copyright (C) 2005 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_mathfix_h__
+#define __pbd_mathfix_h__
+
+/* this is necessary to support older releases of OSX where
+ they moved around some of the standard math functions
+*/
+
+#ifdef __APPLE__
+#define powf pow
+#define sqrtf sqrt
+#endif
+
+
+#endif
diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h
new file mode 100644
index 0000000000..fdc7527dc6
--- /dev/null
+++ b/libs/pbd/pbd/memento_command.h
@@ -0,0 +1,101 @@
+/*
+ Copyright (C) 2006 Paul Davis
+ Author: Hans Fugal
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __lib_pbd_memento_command_h__
+#define __lib_pbd_memento_command_h__
+
+#include <iostream>
+
+#include <pbd/command.h>
+#include <pbd/stacktrace.h>
+#include <pbd/xml++.h>
+#include <pbd/shiva.h>
+
+#include <sigc++/slot.h>
+#include <typeinfo>
+
+/** This command class is initialized with before and after mementos
+ * (from Stateful::get_state()), so undo becomes restoring the before
+ * memento, and redo is restoring the after memento.
+ */
+template <class obj_T>
+class MementoCommand : public Command
+{
+public:
+ MementoCommand(obj_T &object, XMLNode *before, XMLNode *after)
+ : obj(object), before(before), after(after)
+ {
+ /* catch destruction of the object */
+ new PBD::Shiva<obj_T,MementoCommand<obj_T> > (object, *this);
+ }
+
+ ~MementoCommand ()
+ {
+ GoingAway(); /* EMIT SIGNAL */
+
+ if (before)
+ delete before;
+
+ if (after)
+ delete after;
+ }
+
+ void operator() ()
+ {
+ if (after)
+ obj.set_state(*after);
+ }
+
+ void undo()
+ {
+ if (before)
+ obj.set_state(*before);
+ }
+
+ virtual XMLNode &get_state()
+ {
+ string name;
+ if (before && after)
+ name = "MementoCommand";
+ else if (before)
+ name = "MementoUndoCommand";
+ else
+ name = "MementoRedoCommand";
+
+ XMLNode *node = new XMLNode(name);
+
+ node->add_property("obj_id", obj.id().to_s());
+ node->add_property("type_name", typeid(obj).name());
+
+ if (before)
+ node->add_child_copy(*before);
+
+ if (after)
+ node->add_child_copy(*after);
+
+ return *node;
+ }
+
+protected:
+ obj_T &obj;
+ XMLNode *before, *after;
+};
+
+#endif // __lib_pbd_memento_h__
diff --git a/libs/pbd/pbd/mountpoint.h b/libs/pbd/pbd/mountpoint.h
new file mode 100644
index 0000000000..e0ec1be7f9
--- /dev/null
+++ b/libs/pbd/pbd/mountpoint.h
@@ -0,0 +1,27 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_mountpoint_h__
+#define __pbd_mountpoint_h__
+
+#include <string>
+
+std::string mountpoint (std::string path);
+
+#endif // __pbd_mountpoint_h__
diff --git a/libs/pbd/pbd/pathscanner.h b/libs/pbd/pbd/pathscanner.h
new file mode 100644
index 0000000000..0a48d4d949
--- /dev/null
+++ b/libs/pbd/pbd/pathscanner.h
@@ -0,0 +1,85 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libmisc_pathscanner_h__
+#define __libmisc_pathscanner_h__
+
+#include <vector>
+#include <string>
+#include <regex.h>
+
+using std::string;
+using std::vector;
+
+class PathScanner
+
+{
+ public:
+ vector<string *> *operator() (const string &dirpath,
+ bool (*filter)(const string &, void *arg),
+ void *arg,
+ bool match_fullpath = true,
+ bool return_fullpath = true,
+ long limit = -1) {
+ return run_scan (dirpath,
+ (bool (PathScanner::*)(const string &)) 0,
+ filter,
+ arg,
+ match_fullpath,
+ return_fullpath,
+ limit);
+ }
+
+ vector<string *> *operator() (const string &dirpath,
+ const string &regexp,
+ bool match_fullpath = true,
+ bool return_fullpath = true,
+ long limit = -1);
+
+
+ string *find_first (const string &dirpath,
+ const string &regexp,
+ bool match_fullpath = true,
+ bool return_fullpath = true);
+
+ string *find_first (const string &dirpath,
+ bool (*filter)(const string &, void *),
+ void *arg,
+ bool match_fullpath = true,
+ bool return_fullpath = true);
+
+ private:
+ regex_t compiled_pattern;
+
+ bool regexp_filter (const string &str) {
+ return regexec (&compiled_pattern, str.c_str(), 0, 0, 0) == 0;
+ }
+
+ vector<string *> *run_scan (const string &dirpath,
+ bool (PathScanner::*mfilter) (const string &),
+ bool (*filter)(const string &, void *),
+ void *arg,
+ bool match_fullpath,
+ bool return_fullpath,
+ long limit);
+
+
+};
+
+#endif // __libmisc_pathscanner_h__
diff --git a/libs/pbd/pbd/pool.h b/libs/pbd/pbd/pool.h
new file mode 100644
index 0000000000..d604680ae2
--- /dev/null
+++ b/libs/pbd/pbd/pool.h
@@ -0,0 +1,74 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __qm_pool_h__
+#define __qm_pool_h__
+
+#include <vector>
+#include <string>
+
+#include <glibmm/thread.h>
+
+#include <pbd/ringbuffer.h>
+
+class Pool
+{
+ public:
+ Pool (std::string name, unsigned long item_size, unsigned long nitems);
+ virtual ~Pool ();
+
+ virtual void *alloc ();
+ virtual void release (void *);
+
+ std::string name() const { return _name; }
+
+ private:
+ RingBuffer<void*>* free_list;
+ std::string _name;
+ void *block;
+};
+
+class SingleAllocMultiReleasePool : public Pool
+{
+ public:
+ SingleAllocMultiReleasePool (std::string name, unsigned long item_size, unsigned long nitems);
+ ~SingleAllocMultiReleasePool ();
+
+ virtual void *alloc ();
+ virtual void release (void *);
+
+ private:
+ Glib::Mutex* m_lock;
+};
+
+
+class MultiAllocSingleReleasePool : public Pool
+{
+ public:
+ MultiAllocSingleReleasePool (std::string name, unsigned long item_size, unsigned long nitems);
+ ~MultiAllocSingleReleasePool ();
+
+ virtual void *alloc ();
+ virtual void release (void *);
+
+ private:
+ Glib::Mutex* m_lock;
+};
+
+#endif // __qm_pool_h__
diff --git a/libs/pbd/pbd/pthread_utils.h b/libs/pbd/pbd/pthread_utils.h
new file mode 100644
index 0000000000..9fa6ba4ce4
--- /dev/null
+++ b/libs/pbd/pbd/pthread_utils.h
@@ -0,0 +1,42 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_pthread_utils__
+#define __pbd_pthread_utils__
+
+#include <pthread.h>
+#include <signal.h>
+#include <string>
+#include <stdint.h>
+
+#include <sigc++/sigc++.h>
+
+int pthread_create_and_store (std::string name, pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg);
+void pthread_cancel_one (pthread_t thread);
+void pthread_kill_all (int signum);
+void pthread_cancel_all ();
+void pthread_exit_pbd (void* status);
+std::string pthread_name ();
+
+namespace PBD {
+ extern sigc::signal<void,pthread_t,std::string> ThreadCreated;
+ extern sigc::signal<void,pthread_t,std::string,uint32_t> ThreadCreatedWithRequestSize;
+}
+
+#endif /* __pbd_pthread_utils__ */
diff --git a/libs/pbd/pbd/rcu.h b/libs/pbd/pbd/rcu.h
new file mode 100644
index 0000000000..8b8f693e7e
--- /dev/null
+++ b/libs/pbd/pbd/rcu.h
@@ -0,0 +1,165 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_rcu_h__
+#define __pbd_rcu_h__
+
+#include "boost/shared_ptr.hpp"
+#include "glibmm/thread.h"
+
+#include <list>
+
+template<class T>
+class RCUManager
+{
+ public:
+
+ RCUManager (T* new_rcu_value) {
+ x.m_rcu_value = new boost::shared_ptr<T> (new_rcu_value);
+ }
+
+ virtual ~RCUManager() { delete x.m_rcu_value; }
+
+ boost::shared_ptr<T> reader () const { return *((boost::shared_ptr<T> *) g_atomic_pointer_get (&x.gptr)); }
+
+ virtual boost::shared_ptr<T> write_copy () = 0;
+ virtual bool update (boost::shared_ptr<T> new_value) = 0;
+
+ protected:
+ union {
+ boost::shared_ptr<T>* m_rcu_value;
+ mutable volatile gpointer gptr;
+ } x;
+};
+
+
+template<class T>
+class SerializedRCUManager : public RCUManager<T>
+{
+public:
+
+ SerializedRCUManager(T* new_rcu_value)
+ : RCUManager<T>(new_rcu_value)
+ {
+
+ }
+
+ boost::shared_ptr<T> write_copy ()
+ {
+ m_lock.lock();
+
+ // clean out any dead wood
+
+ typename std::list<boost::shared_ptr<T> >::iterator i;
+
+ for (i = m_dead_wood.begin(); i != m_dead_wood.end(); ) {
+ if ((*i).use_count() == 1) {
+ i = m_dead_wood.erase (i);
+ } else {
+ ++i;
+ }
+ }
+
+ // store the current
+
+ current_write_old = RCUManager<T>::x.m_rcu_value;
+
+ boost::shared_ptr<T> new_copy (new T(**current_write_old));
+
+ return new_copy;
+ }
+
+ bool update (boost::shared_ptr<T> new_value)
+ {
+ // we hold the lock at this point effectively blocking
+ // other writers.
+
+ boost::shared_ptr<T>* new_spp = new boost::shared_ptr<T> (new_value);
+
+ // update, checking that nobody beat us to it
+
+ bool ret = g_atomic_pointer_compare_and_exchange (&RCUManager<T>::x.gptr,
+ (gpointer) current_write_old,
+ (gpointer) new_spp);
+
+ if (ret) {
+
+ // successful update : put the old value into dead_wood,
+
+ m_dead_wood.push_back (*current_write_old);
+
+ // now delete it - this gets rid of the shared_ptr<T> but
+ // because dead_wood contains another shared_ptr<T> that
+ // references the same T, the underlying object lives on
+
+ delete current_write_old;
+ }
+
+ m_lock.unlock();
+
+ return ret;
+ }
+
+ void flush () {
+ Glib::Mutex::Lock lm (m_lock);
+ m_dead_wood.clear ();
+ }
+
+private:
+ Glib::Mutex m_lock;
+ boost::shared_ptr<T>* current_write_old;
+ std::list<boost::shared_ptr<T> > m_dead_wood;
+};
+
+template<class T>
+class RCUWriter
+{
+public:
+
+ RCUWriter(RCUManager<T>& manager)
+ : m_manager(manager)
+ {
+ m_copy = m_manager.write_copy();
+ }
+
+ ~RCUWriter()
+ {
+ // we can check here that the refcount of m_copy is 1
+
+ if(m_copy.use_count() == 1) {
+ m_manager.update(m_copy);
+ } else {
+
+ // critical error.
+ }
+
+ }
+
+ // or operator boost::shared_ptr<T> ();
+ boost::shared_ptr<T> get_copy() { return m_copy; }
+
+private:
+
+ RCUManager<T>& m_manager;
+
+ // preferably this holds a pointer to T
+ boost::shared_ptr<T> m_copy;
+};
+
+#endif /* __pbd_rcu_h__ */
diff --git a/libs/pbd/pbd/receiver.h b/libs/pbd/pbd/receiver.h
new file mode 100644
index 0000000000..93192ce787
--- /dev/null
+++ b/libs/pbd/pbd/receiver.h
@@ -0,0 +1,49 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libmisc_receiver_h__
+#define __libmisc_receiver_h__
+
+#include <vector>
+
+#include <sigc++/sigc++.h>
+
+#include "transmitter.h"
+
+using std::vector;
+
+class strstream;
+
+class Receiver : virtual public sigc::trackable
+{
+ public:
+ Receiver ();
+ virtual ~Receiver ();
+
+ void listen_to (Transmitter &);
+ void hangup ();
+
+ protected:
+ virtual void receive (Transmitter::Channel, const char *) = 0;
+
+ private:
+ vector<sigc::connection *> connections;
+};
+
+#endif // __libmisc_receiver_h__
diff --git a/libs/pbd/pbd/replace_all.h b/libs/pbd/pbd/replace_all.h
new file mode 100644
index 0000000000..3bc465d89f
--- /dev/null
+++ b/libs/pbd/pbd/replace_all.h
@@ -0,0 +1,27 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_replace_all_h__
+#define __pbd_replace_all_h__
+
+#include <string>
+
+int replace_all (std::string& str, const std::string& target, const std::string& replacement);
+
+#endif // __pbd_replace_all_h__
diff --git a/libs/pbd/pbd/ringbuffer.h b/libs/pbd/pbd/ringbuffer.h
new file mode 100644
index 0000000000..3502bed21b
--- /dev/null
+++ b/libs/pbd/pbd/ringbuffer.h
@@ -0,0 +1,281 @@
+/*
+ Copyright (C) 2000 Paul Davis & Benno Senoner
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef ringbuffer_h
+#define ringbuffer_h
+
+#include <cstring>
+#include <glib.h>
+
+template<class T>
+class RingBuffer
+{
+ public:
+ RingBuffer (guint sz) {
+// size = ffs(sz); /* find first [bit] set is a single inlined assembly instruction. But it looks like the API rounds up so... */
+ guint power_of_two;
+ for (power_of_two = 1; 1U<<power_of_two < sz; power_of_two++);
+ size = 1<<power_of_two;
+ size_mask = size;
+ size_mask -= 1;
+ buf = new T[size];
+ reset ();
+
+ };
+
+ virtual ~RingBuffer() {
+ delete [] buf;
+ }
+
+ void reset () {
+ /* !!! NOT THREAD SAFE !!! */
+ g_atomic_int_set (&write_idx, 0);
+ g_atomic_int_set (&read_idx, 0);
+ }
+
+ void set (guint r, guint w) {
+ /* !!! NOT THREAD SAFE !!! */
+ g_atomic_int_set (&write_idx, w);
+ g_atomic_int_set (&read_idx, r);
+ }
+
+ guint read (T *dest, guint cnt);
+ guint write (T *src, guint cnt);
+
+ struct rw_vector {
+ T *buf[2];
+ guint len[2];
+ };
+
+ void get_read_vector (rw_vector *);
+ void get_write_vector (rw_vector *);
+
+ void decrement_read_idx (guint cnt) {
+ g_atomic_int_set (&read_idx, (g_atomic_int_get(&read_idx) - cnt) & size_mask);
+ }
+
+ void increment_read_idx (guint cnt) {
+ g_atomic_int_set (&read_idx, (g_atomic_int_get(&read_idx) + cnt) & size_mask);
+ }
+
+ void increment_write_idx (guint cnt) {
+ g_atomic_int_set (&write_idx, (g_atomic_int_get(&write_idx) + cnt) & size_mask);
+ }
+
+ guint write_space () {
+ guint w, r;
+
+ w = g_atomic_int_get (&write_idx);
+ r = g_atomic_int_get (&read_idx);
+
+ if (w > r) {
+ return ((r - w + size) & size_mask) - 1;
+ } else if (w < r) {
+ return (r - w) - 1;
+ } else {
+ return size - 1;
+ }
+ }
+
+ guint read_space () {
+ guint w, r;
+
+ w = g_atomic_int_get (&write_idx);
+ r = g_atomic_int_get (&read_idx);
+
+ if (w > r) {
+ return w - r;
+ } else {
+ return (w - r + size) & size_mask;
+ }
+ }
+
+ T *buffer () { return buf; }
+ guint get_write_idx () const { return g_atomic_int_get (&write_idx); }
+ guint get_read_idx () const { return g_atomic_int_get (&read_idx); }
+ guint bufsize () const { return size; }
+
+ protected:
+ T *buf;
+ guint size;
+ mutable gint write_idx;
+ mutable gint read_idx;
+ guint size_mask;
+};
+
+template<class T> guint
+RingBuffer<T>::read (T *dest, guint cnt)
+{
+ guint free_cnt;
+ guint cnt2;
+ guint to_read;
+ guint n1, n2;
+ guint priv_read_idx;
+
+ priv_read_idx=g_atomic_int_get(&read_idx);
+
+ if ((free_cnt = read_space ()) == 0) {
+ return 0;
+ }
+
+ to_read = cnt > free_cnt ? free_cnt : cnt;
+
+ cnt2 = priv_read_idx + to_read;
+
+ if (cnt2 > size) {
+ n1 = size - priv_read_idx;
+ n2 = cnt2 & size_mask;
+ } else {
+ n1 = to_read;
+ n2 = 0;
+ }
+
+ memcpy (dest, &buf[priv_read_idx], n1 * sizeof (T));
+ priv_read_idx = (priv_read_idx + n1) & size_mask;
+
+ if (n2) {
+ memcpy (dest+n1, buf, n2 * sizeof (T));
+ priv_read_idx = n2;
+ }
+
+ g_atomic_int_set(&read_idx, priv_read_idx);
+ return to_read;
+}
+
+template<class T> guint
+RingBuffer<T>::write (T *src, guint cnt)
+
+{
+ guint free_cnt;
+ guint cnt2;
+ guint to_write;
+ guint n1, n2;
+ guint priv_write_idx;
+
+ priv_write_idx=g_atomic_int_get(&write_idx);
+
+ if ((free_cnt = write_space ()) == 0) {
+ return 0;
+ }
+
+ to_write = cnt > free_cnt ? free_cnt : cnt;
+
+ cnt2 = priv_write_idx + to_write;
+
+ if (cnt2 > size) {
+ n1 = size - priv_write_idx;
+ n2 = cnt2 & size_mask;
+ } else {
+ n1 = to_write;
+ n2 = 0;
+ }
+
+ memcpy (&buf[priv_write_idx], src, n1 * sizeof (T));
+ priv_write_idx = (priv_write_idx + n1) & size_mask;
+
+ if (n2) {
+ memcpy (buf, src+n1, n2 * sizeof (T));
+ priv_write_idx = n2;
+ }
+
+ g_atomic_int_set(&write_idx, priv_write_idx);
+ return to_write;
+}
+
+template<class T> void
+RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
+
+{
+ guint free_cnt;
+ guint cnt2;
+ guint w, r;
+
+ w = g_atomic_int_get (&write_idx);
+ r = g_atomic_int_get (&read_idx);
+
+ if (w > r) {
+ free_cnt = w - r;
+ } else {
+ free_cnt = (w - r + size) & size_mask;
+ }
+
+ cnt2 = r + free_cnt;
+
+ if (cnt2 > size) {
+ /* Two part vector: the rest of the buffer after the
+ current write ptr, plus some from the start of
+ the buffer.
+ */
+
+ vec->buf[0] = &buf[r];
+ vec->len[0] = size - r;
+ vec->buf[1] = buf;
+ vec->len[1] = cnt2 & size_mask;
+
+ } else {
+
+ /* Single part vector: just the rest of the buffer */
+
+ vec->buf[0] = &buf[r];
+ vec->len[0] = free_cnt;
+ vec->len[1] = 0;
+ }
+}
+
+template<class T> void
+RingBuffer<T>::get_write_vector (RingBuffer<T>::rw_vector *vec)
+
+{
+ guint free_cnt;
+ guint cnt2;
+ guint w, r;
+
+ w = g_atomic_int_get (&write_idx);
+ r = g_atomic_int_get (&read_idx);
+
+ if (w > r) {
+ free_cnt = ((r - w + size) & size_mask) - 1;
+ } else if (w < r) {
+ free_cnt = (r - w) - 1;
+ } else {
+ free_cnt = size - 1;
+ }
+
+ cnt2 = w + free_cnt;
+
+ if (cnt2 > size) {
+
+ /* Two part vector: the rest of the buffer after the
+ current write ptr, plus some from the start of
+ the buffer.
+ */
+
+ vec->buf[0] = &buf[w];
+ vec->len[0] = size - w;
+ vec->buf[1] = buf;
+ vec->len[1] = cnt2 & size_mask;
+ } else {
+ vec->buf[0] = &buf[w];
+ vec->len[0] = free_cnt;
+ vec->len[1] = 0;
+ }
+}
+
+
+#endif /* __ringbuffer_h__ */
diff --git a/libs/pbd/pbd/ringbufferNPT.h b/libs/pbd/pbd/ringbufferNPT.h
new file mode 100644
index 0000000000..9db09098d6
--- /dev/null
+++ b/libs/pbd/pbd/ringbufferNPT.h
@@ -0,0 +1,274 @@
+/*
+ Copyright (C) 2000 Paul Davis & Benno Senoner
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef ringbuffer_npt_h
+#define ringbuffer_npt_h
+
+//#include <sys/mman.h>
+
+#include <glib.h>
+
+/* ringbuffer class where the element size is not required to be a power of two */
+
+template<class T>
+class RingBufferNPT
+{
+ public:
+ RingBufferNPT (size_t sz) {
+ size = sz;
+ buf = new T[size];
+ reset ();
+
+ };
+
+ virtual ~RingBufferNPT() {
+ delete [] buf;
+ }
+
+ void reset () {
+ /* !!! NOT THREAD SAFE !!! */
+ g_atomic_int_set (&write_ptr, 0);
+ g_atomic_int_set (&read_ptr, 0);
+ }
+
+ void set (size_t r, size_t w) {
+ /* !!! NOT THREAD SAFE !!! */
+ g_atomic_int_set (&write_ptr, w);
+ g_atomic_int_set (&read_ptr, r);
+ }
+
+ size_t read (T *dest, size_t cnt);
+ size_t write (T *src, size_t cnt);
+
+ struct rw_vector {
+ T *buf[2];
+ size_t len[2];
+ };
+
+ void get_read_vector (rw_vector *);
+ void get_write_vector (rw_vector *);
+
+ void decrement_read_ptr (size_t cnt) {
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) - cnt) % size);
+ }
+
+ void increment_read_ptr (size_t cnt) {
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) + cnt) % size);
+ }
+
+ void increment_write_ptr (size_t cnt) {
+ g_atomic_int_set (&write_ptr, (g_atomic_int_get(&write_ptr) + cnt) % size);
+ }
+
+ size_t write_space () {
+ size_t w, r;
+
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
+
+ if (w > r) {
+ return ((r - w + size) % size) - 1;
+ } else if (w < r) {
+ return (r - w) - 1;
+ } else {
+ return size - 1;
+ }
+ }
+
+ size_t read_space () {
+ size_t w, r;
+
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
+
+ if (w > r) {
+ return w - r;
+ } else {
+ return (w - r + size) % size;
+ }
+ }
+
+ T *buffer () { return buf; }
+ size_t get_write_ptr () const { return g_atomic_int_get (&write_ptr); }
+ size_t get_read_ptr () const { return g_atomic_int_get (&read_ptr); }
+ size_t bufsize () const { return size; }
+
+ protected:
+ T *buf;
+ size_t size;
+ mutable gint write_ptr;
+ mutable gint read_ptr;
+};
+
+template<class T> size_t
+RingBufferNPT<T>::read (T *dest, size_t cnt)
+{
+ size_t free_cnt;
+ size_t cnt2;
+ size_t to_read;
+ size_t n1, n2;
+ size_t priv_read_ptr;
+
+ priv_read_ptr=g_atomic_int_get(&read_ptr);
+
+ if ((free_cnt = read_space ()) == 0) {
+ return 0;
+ }
+
+ to_read = cnt > free_cnt ? free_cnt : cnt;
+
+ cnt2 = priv_read_ptr + to_read;
+
+ if (cnt2 > size) {
+ n1 = size - priv_read_ptr;
+ n2 = cnt2 % size;
+ } else {
+ n1 = to_read;
+ n2 = 0;
+ }
+
+ memcpy (dest, &buf[priv_read_ptr], n1 * sizeof (T));
+ priv_read_ptr = (priv_read_ptr + n1) % size;
+
+ if (n2) {
+ memcpy (dest+n1, buf, n2 * sizeof (T));
+ priv_read_ptr = n2;
+ }
+
+ g_atomic_int_set(&read_ptr, priv_read_ptr);
+ return to_read;
+}
+
+template<class T> size_t
+RingBufferNPT<T>::write (T *src, size_t cnt)
+{
+ size_t free_cnt;
+ size_t cnt2;
+ size_t to_write;
+ size_t n1, n2;
+ size_t priv_write_ptr;
+
+ priv_write_ptr=g_atomic_int_get(&write_ptr);
+
+ if ((free_cnt = write_space ()) == 0) {
+ return 0;
+ }
+
+ to_write = cnt > free_cnt ? free_cnt : cnt;
+
+ cnt2 = priv_write_ptr + to_write;
+
+ if (cnt2 > size) {
+ n1 = size - priv_write_ptr;
+ n2 = cnt2 % size;
+ } else {
+ n1 = to_write;
+ n2 = 0;
+ }
+
+ memcpy (&buf[priv_write_ptr], src, n1 * sizeof (T));
+ priv_write_ptr = (priv_write_ptr + n1) % size;
+
+ if (n2) {
+ memcpy (buf, src+n1, n2 * sizeof (T));
+ priv_write_ptr = n2;
+ }
+
+ g_atomic_int_set(&write_ptr, priv_write_ptr);
+ return to_write;
+}
+
+template<class T> void
+RingBufferNPT<T>::get_read_vector (RingBufferNPT<T>::rw_vector *vec)
+{
+ size_t free_cnt;
+ size_t cnt2;
+ size_t w, r;
+
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
+
+ if (w > r) {
+ free_cnt = w - r;
+ } else {
+ free_cnt = (w - r + size) % size;
+ }
+
+ cnt2 = r + free_cnt;
+
+ if (cnt2 > size) {
+ /* Two part vector: the rest of the buffer after the
+ current write ptr, plus some from the start of
+ the buffer.
+ */
+
+ vec->buf[0] = &buf[r];
+ vec->len[0] = size - r;
+ vec->buf[1] = buf;
+ vec->len[1] = cnt2 % size;
+
+ } else {
+
+ /* Single part vector: just the rest of the buffer */
+
+ vec->buf[0] = &buf[r];
+ vec->len[0] = free_cnt;
+ vec->len[1] = 0;
+ }
+}
+
+template<class T> void
+RingBufferNPT<T>::get_write_vector (RingBufferNPT<T>::rw_vector *vec)
+{
+ size_t free_cnt;
+ size_t cnt2;
+ size_t w, r;
+
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
+
+ if (w > r) {
+ free_cnt = ((r - w + size) % size) - 1;
+ } else if (w < r) {
+ free_cnt = (r - w) - 1;
+ } else {
+ free_cnt = size - 1;
+ }
+
+ cnt2 = w + free_cnt;
+
+ if (cnt2 > size) {
+
+ /* Two part vector: the rest of the buffer after the
+ current write ptr, plus some from the start of
+ the buffer.
+ */
+
+ vec->buf[0] = &buf[w];
+ vec->len[0] = size - w;
+ vec->buf[1] = buf;
+ vec->len[1] = cnt2 % size;
+ } else {
+ vec->buf[0] = &buf[w];
+ vec->len[0] = free_cnt;
+ vec->len[1] = 0;
+ }
+}
+
+#endif /* __ringbuffer_npt_h__ */
diff --git a/libs/pbd/pbd/search_path.h b/libs/pbd/pbd/search_path.h
new file mode 100644
index 0000000000..3b10d4a319
--- /dev/null
+++ b/libs/pbd/pbd/search_path.h
@@ -0,0 +1,183 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef PBD_SEARCH_PATH_INCLUDED
+#define PBD_SEARCH_PATH_INCLUDED
+
+#include <string>
+#include <vector>
+
+#include <pbd/filesystem.h>
+
+namespace PBD {
+
+using std::string;
+using std::vector;
+
+/**
+ * @class The SearchPath class is a helper class for getting a
+ * vector of paths contained in a search path string where a
+ * "search path string" contains absolute directory paths
+ * separated by a colon(:) or a semi-colon(;) on windows.
+ *
+ * The SearchPath class does not test whether the paths exist
+ * or are directories. It is basically just a container.
+ */
+class SearchPath {
+public:
+
+ typedef std::vector<sys::path>::iterator iterator;
+ typedef std::vector<sys::path>::const_iterator const_iterator;
+
+public:
+
+ /**
+ * Create an empty SearchPath.
+ */
+ SearchPath ();
+
+ /**
+ * Initialize SearchPath from a string where the string contains
+ * one or more absolute paths to directories which are delimited
+ * by a path separation character. The path delimeter is a
+ * colon(:) on unix and a semi-colon(;) on windows.
+ *
+ * Each path contained in the search path may or may not resolve to
+ * an existing directory in the filesystem.
+ *
+ * @param search_path A path string.
+ */
+ SearchPath (const string& search_path);
+
+ /**
+ * Initialize SearchPath from a sys::path.
+ *
+ * @param directory_path A directory path.
+ */
+ SearchPath (const sys::path& directory_path);
+
+ /**
+ * Initialize SearchPath from a vector of paths that may or may
+ * not exist.
+ *
+ * @param path A path.
+ */
+ SearchPath (const vector<sys::path>& paths);
+
+ /**
+ * The copy constructor does what you would expect and copies the
+ * vector of paths contained by the SearchPath.
+ */
+ SearchPath (const SearchPath& search_path);
+
+ /**
+ * Indicate whether there are any directory paths in m_dirs.
+ *
+ * If SearchPath is initialized with an empty string as the
+ * result of for instance the contents of an unset environment
+ * variable.
+ *
+ * @return true if there are any paths in m_paths.
+ */
+ operator void* () const { return (void*)!m_dirs.empty(); }
+
+ /**
+ * @return a read/write iterator that points to the first
+ * path in the SearchPath. Iteration is done in ordinary
+ * element order.
+ */
+ iterator begin () { return m_dirs.begin(); }
+
+ /**
+ * @return A read-only (constant) iterator that points to the
+ * first path in the SearchPath.
+ */
+ const_iterator begin () const { return m_dirs.begin(); }
+
+ /**
+ * @return A read/write iterator that points one past the last
+ * path in the SearchPath.
+ */
+ iterator end () { return m_dirs.end(); }
+
+ /**
+ * @return A read-only (constant) iterator that points one past
+ * the last path in the SearchPath.
+ */
+ const_iterator end () const { return m_dirs.end(); }
+
+ /**
+ * @return a search path string.
+ *
+ * The string that is returned contains the platform specific
+ * path separator.
+ */
+ const string to_string () const;
+
+ /**
+ * Assignment of another SearchPath to this.
+ */
+ SearchPath& operator= (const SearchPath& spath);
+
+ /**
+ * Add all the directories in path to this.
+ */
+ SearchPath& operator+= (const SearchPath& spath);
+
+ /**
+ * Add another directory path to the search path.
+ */
+ SearchPath& operator+= (const sys::path& directory_path);
+
+ /**
+ * Concatenate another SearchPath onto this.
+ */
+ SearchPath& operator+ (const SearchPath& other);
+
+ /**
+ * Add another path to the search path.
+ */
+ SearchPath& operator+ (const sys::path& directory_path);
+
+ /**
+ * Add a sub-directory to each path in the search path.
+ * @param subdir The directory name, it should not contain
+ * any path separating tokens.
+ */
+ SearchPath& add_subdirectory_to_paths (const string& subdir);
+
+ /**
+ * Add a sub-directory to each path in the search path.
+ * @see add_subdirectory_to_paths
+ */
+ SearchPath& operator/= (const string& subdir);
+
+protected:
+
+ void add_directory (const sys::path& directory_path);
+
+ void add_directories (const vector<sys::path>& paths);
+
+ vector<sys::path> m_dirs;
+
+};
+
+} // namespace PBD
+
+#endif
diff --git a/libs/pbd/pbd/selectable.h b/libs/pbd/pbd/selectable.h
new file mode 100644
index 0000000000..85f3e79ab0
--- /dev/null
+++ b/libs/pbd/pbd/selectable.h
@@ -0,0 +1,101 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __selectable_h__
+#define __selectable_h__
+
+#include <list>
+#include <string>
+#include <stdio.h>
+
+#include <sigc++/sigc++.h>
+
+#include <sys/types.h>
+
+namespace Select {
+ enum Condition {
+ Readable = 0x1,
+ Writable = 0x2,
+ Exception = 0x4
+ };
+
+class Selectable : public sigc::trackable
+
+{
+ public:
+ Selectable (int fd);
+ Selectable (const std::string &, int flags, int mode = 0);
+ Selectable (FILE *);
+ ~Selectable ();
+
+ sigc::signal<void,Selectable *,Select::Condition> readable;
+ sigc::signal<void,Selectable *,Select::Condition> writable;
+ sigc::signal<void,Selectable *,Select::Condition> exceptioned;
+
+ int fd() { return _fd; }
+ bool ok() { return _ok; }
+
+ protected:
+ void selected (unsigned int condition);
+ int condition;
+ int _fd;
+
+ friend class Selector;
+
+ private:
+ enum {
+ fromFD,
+ fromPath,
+ fromFILE
+ };
+
+ bool _ok;
+ int _type;
+ std::string path;
+};
+
+class Selector {
+ private:
+ int post_select (fd_set *, fd_set *, fd_set *);
+ int _max_fd;
+
+ typedef std::list<Selectable *> Selectables;
+ Selectables selectables;
+ pthread_mutex_t list_lock;
+
+ static bool use_list_lock;
+
+ public:
+ Selector ();
+
+ void multithreaded (bool yn) {
+ use_list_lock = yn;
+ }
+
+ void add (int condition, Selectable *s);
+ void remove (Selectable *);
+ int select (unsigned long usecs);
+};
+
+
+
+} /* namespace */
+
+
+#endif // __selectable_h__
diff --git a/libs/pbd/pbd/shiva.h b/libs/pbd/pbd/shiva.h
new file mode 100644
index 0000000000..2e53ff65f5
--- /dev/null
+++ b/libs/pbd/pbd/shiva.h
@@ -0,0 +1,138 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_shiva_h__
+#define __pbd_shiva_h__
+
+#include <sigc++/sigc++.h>
+
+namespace PBD {
+
+/* named after the Hindu god Shiva, The Destroyer */
+
+template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
+class Shiva {
+ public:
+ Shiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver) {
+
+ /* if the emitter goes away, destroy the receiver */
+
+ _connection = emitter.GoingAway.connect
+ (sigc::bind (sigc::mem_fun
+ (*this, &Shiva<ObjectWithGoingAway,ObjectToBeDestroyed>::destroy),
+ &receiver));
+ }
+
+ ~Shiva() {
+ forget ();
+ }
+
+ private:
+ sigc::connection _connection;
+
+ void destroy (ObjectToBeDestroyed* obj) {
+ delete obj;
+ forget ();
+ }
+
+ void forget () {
+ _connection.disconnect ();
+ }
+
+};
+
+template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
+class ProxyShiva {
+ public:
+ ProxyShiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver, void (*callback)(ObjectToBeDestroyed*, ObjectWithGoingAway*)) {
+
+ /* if the emitter goes away, destroy the receiver */
+
+ _callback = callback;
+ _callback_argument1 = &receiver;
+ _callback_argument2 = &emitter;
+
+ _connection = emitter.GoingAway.connect
+ (sigc::bind (sigc::mem_fun
+ (*this, &ProxyShiva<ObjectWithGoingAway,ObjectToBeDestroyed>::destroy),
+ &receiver));
+ }
+
+ ~ProxyShiva() {
+ forget ();
+ }
+
+ private:
+ sigc::connection _connection;
+ void (*_callback) (ObjectToBeDestroyed*, ObjectWithGoingAway*);
+ ObjectToBeDestroyed* _callback_argument1;
+ ObjectWithGoingAway* _callback_argument2;
+
+ void destroy (ObjectToBeDestroyed* obj) {
+ /* callback must destroy obj if appropriate, not done here */
+ _callback (obj, _callback_argument2);
+ forget ();
+ }
+
+ void forget () {
+ _connection.disconnect ();
+ }
+};
+
+template<typename ObjectWithGoingAway, typename ObjectToBeDestroyed>
+class PairedShiva {
+ public:
+ PairedShiva (ObjectWithGoingAway& emitter, ObjectToBeDestroyed& receiver) {
+
+ /* if the emitter goes away, destroy the receiver */
+
+ _connection1 = emitter.GoingAway.connect
+ (sigc::bind (sigc::mem_fun
+ (*this, &PairedShiva<ObjectWithGoingAway,ObjectToBeDestroyed>::destroy),
+ &receiver));
+
+ /* if the receiver goes away, forget all this nonsense */
+
+ _connection2 = receiver.GoingAway.connect
+ (sigc::mem_fun (*this, &PairedShiva<ObjectWithGoingAway,ObjectToBeDestroyed>::forget));
+ }
+
+ ~PairedShiva() {
+ forget ();
+ }
+
+ private:
+ sigc::connection _connection1;
+ sigc::connection _connection2;
+
+ void destroy (ObjectToBeDestroyed* obj) {
+ delete obj;
+ forget ();
+ }
+
+ void forget () {
+ _connection1.disconnect ();
+ _connection2.disconnect ();
+ }
+
+};
+
+}
+
+#endif /* __pbd_shiva_h__ */
diff --git a/libs/pbd/pbd/shortpath.h b/libs/pbd/pbd/shortpath.h
new file mode 100644
index 0000000000..55431bf34e
--- /dev/null
+++ b/libs/pbd/pbd/shortpath.h
@@ -0,0 +1,27 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_shortpath_h__
+#define __pbd_shortpath_h__
+
+#include <glibmm/ustring.h>
+
+Glib::ustring short_path (const Glib::ustring& path, Glib::ustring::size_type target_characters);
+
+#endif /* __pbd_shortpath_h__ */
diff --git a/libs/pbd/pbd/stacktrace.h b/libs/pbd/pbd/stacktrace.h
new file mode 100644
index 0000000000..0a349dcaeb
--- /dev/null
+++ b/libs/pbd/pbd/stacktrace.h
@@ -0,0 +1,114 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libpbd_stacktrace_h__
+#define __libpbd_stacktrace_h__
+
+#include <iostream>
+#include <ostream>
+#include <glibmm/thread.h>
+#include <list>
+
+namespace PBD {
+ void stacktrace (std::ostream& out, int levels = 0);
+ void trace_twb();
+
+#ifdef HAVE_EXECINFO
+#include <execinfo.h>
+#include <stdlib.h>
+#endif
+
+template<typename T>
+class thing_with_backtrace
+{
+ public:
+ thing_with_backtrace () {
+ trace_twb();
+#ifdef HAVE_EXECINFO
+ allocation_backtrace = new void*[50];
+ allocation_backtrace_size = backtrace (allocation_backtrace, 50);
+#else
+ allocation_backtrace_size = 0;
+#endif
+ Glib::Mutex::Lock lm (all_mutex);
+ all.push_back (this);
+ }
+
+ thing_with_backtrace (const thing_with_backtrace<T>& other) {
+ trace_twb();
+#ifdef HAVE_EXECINFO
+ allocation_backtrace = new void*[50];
+ allocation_backtrace_size = backtrace (allocation_backtrace, 50);
+#else
+ allocation_backtrace_size = 0;
+#endif
+ Glib::Mutex::Lock lm (all_mutex);
+ all.push_back (this);
+ }
+
+ ~thing_with_backtrace() {
+ if (allocation_backtrace_size) {
+ delete [] allocation_backtrace;
+ }
+ Glib::Mutex::Lock lm (all_mutex);
+ all.remove (this);
+ }
+
+ thing_with_backtrace<T>& operator= (const thing_with_backtrace<T>& other) {
+ /* no copyable members */
+ return *this;
+ }
+
+ static void peek_a_boo (std::ostream& stream) {
+#ifdef HAVE_EXECINFO
+ typename std::list<thing_with_backtrace<T>*>::iterator x;
+ for (x = all.begin(); x != all.end(); ++x) {
+ char **strings;
+ size_t i;
+
+ strings = backtrace_symbols ((*x)->allocation_backtrace, (*x)->allocation_backtrace_size);
+
+ if (strings) {
+ stream << "--- ALLOCATED SHARED_PTR @ " << (*x) << std::endl;
+ for (i = 0; i < (*x)->allocation_backtrace_size && i < 50U; i++) {
+ stream << strings[i] << std::endl;
+ }
+ free (strings);
+ }
+ }
+#else
+ stream << "execinfo not defined for this platform" << std::endl;
+#endif
+ }
+
+private:
+ void** allocation_backtrace;
+ int allocation_backtrace_size;
+ static std::list<thing_with_backtrace<T>* > all;
+ static Glib::StaticMutex all_mutex;
+};
+
+template<typename T> std::list<PBD::thing_with_backtrace<T> *> PBD::thing_with_backtrace<T>::all;
+template<typename T> Glib::StaticMutex PBD::thing_with_backtrace<T>::all_mutex = GLIBMM_STATIC_MUTEX_INIT;
+
+} // namespace PBD
+
+
+
+#endif /* __libpbd_stacktrace_h__ */
diff --git a/libs/pbd/pbd/stateful.h b/libs/pbd/pbd/stateful.h
new file mode 100644
index 0000000000..8ea647475a
--- /dev/null
+++ b/libs/pbd/pbd/stateful.h
@@ -0,0 +1,63 @@
+/*
+ Copyright (C) 2000 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_stateful_h__
+#define __pbd_stateful_h__
+
+#include <string>
+#include <pbd/id.h>
+
+class XMLNode;
+
+namespace PBD {
+
+namespace sys {
+ class path;
+}
+
+class Stateful {
+ public:
+ Stateful();
+ virtual ~Stateful();
+
+ virtual XMLNode& get_state (void) = 0;
+
+ virtual int set_state (const XMLNode&) = 0;
+
+ /* Extra XML nodes */
+
+ void add_extra_xml (XMLNode&);
+ XMLNode *extra_xml (const std::string& str);
+
+ const PBD::ID& id() const { return _id; }
+
+ protected:
+
+ void add_instant_xml (XMLNode&, const sys::path& directory_path);
+ XMLNode *instant_xml (const std::string& str, const sys::path& directory_path);
+
+ XMLNode *_extra_xml;
+ XMLNode *_instant_xml;
+ PBD::ID _id;
+};
+
+} // namespace PBD
+
+#endif /* __pbd_stateful_h__ */
+
diff --git a/libs/pbd/pbd/statefuldestructible.h b/libs/pbd/pbd/statefuldestructible.h
new file mode 100644
index 0000000000..83eff473d6
--- /dev/null
+++ b/libs/pbd/pbd/statefuldestructible.h
@@ -0,0 +1,44 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_stateful_destructible_h__
+#define __pbd_stateful_destructible_h__
+
+#include <pbd/stateful.h>
+#include <pbd/destructible.h>
+
+namespace PBD {
+
+class StatefulDestructible : public Stateful, public Destructible
+{
+};
+
+/* be very very careful using this class. it does not inherit from sigc::trackable and thus
+ should only be used in multiple-inheritance situations involving another type
+ that does inherit from sigc::trackable (or sigc::trackable itself)
+*/
+
+class StatefulThingWithGoingAway : public Stateful, public ThingWithGoingAway
+{
+};
+
+}
+
+
+#endif /* __pbd_stateful_destructible_h__ */
diff --git a/libs/pbd/pbd/stl_delete.h b/libs/pbd/pbd/stl_delete.h
new file mode 100644
index 0000000000..66fb027387
--- /dev/null
+++ b/libs/pbd/pbd/stl_delete.h
@@ -0,0 +1,88 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libmisc_stl_delete_h__
+#define __libmisc_stl_delete_h__
+
+/* To actually use any of these deletion functions, you need to
+ first include the revelant container type header.
+*/
+#if defined(_CPP_VECTOR) || defined(_GLIBCXX_VECTOR) || defined(__SGI_STL_VECTOR)
+template<class T> void vector_delete (std::vector<T *> *vec)
+{
+ typename std::vector<T *>::iterator i;
+
+ for (i = vec->begin(); i != vec->end(); i++) {
+ delete *i;
+ }
+ vec->clear ();
+}
+#endif // _CPP_VECTOR || _GLIBCXX_VECTOR || __SGI_STL_VECTOR
+
+#if defined(_CPP_MAP) || defined(_GLIBCXX_MAP) || defined(__SGI_STL_MAP)
+template<class K, class T> void map_delete (std::map<K, T *> *m)
+{
+ typename std::map<K, T *>::iterator i;
+
+ for (i = m->begin(); i != m->end(); i++) {
+ delete (*i).second;
+ }
+ m->clear ();
+}
+#endif // _CPP_MAP || _GLIBCXX_MAP || __SGI_STL_MAP
+
+#if defined(_CPP_LIST) || defined(_GLIBCXX_LIST) || defined(__SGI_STL_LIST)
+template<class T> void list_delete (std::list<T *> *l)
+{
+ typename std::list<T *>::iterator i;
+
+ for (i = l->begin(); i != l->end(); i++) {
+ delete (*i);
+ }
+
+ l->clear ();
+}
+#endif // _CPP_LIST || _GLIBCXX_LIST || __SGI_STL_LIST
+
+#if defined(_CPP_SLIST) || defined(_GLIBCXX_SLIST) || defined(__SGI_STL_SLIST)
+template<class T> void slist_delete (std::slist<T *> *l)
+{
+ typename std::slist<T *>::iterator i;
+
+ for (i = l->begin(); i != l->end(); i++) {
+ delete (*i);
+ }
+
+ l->clear ();
+}
+#endif // _CPP_SLIST || _GLIBCXX_SLIST || __SGI_STL_SLIST
+
+#if defined(_CPP_SET) || defined(_GLIBCXX_SET) || defined(__SGI_STL_SET)
+template<class T> void set_delete (std::set<T *> *sset)
+{
+ typename std::set<T *>::iterator i;
+
+ for (i = sset->begin(); i != sset->end(); i++) {
+ delete *i;
+ }
+ sset->erase (sset->begin(), sset->end());
+}
+#endif // _CPP_SET || _GLIBCXX_SET || __SGI_STL_SET
+
+#endif // __libmisc_stl_delete_h__
diff --git a/libs/pbd/pbd/stl_functors.h b/libs/pbd/pbd/stl_functors.h
new file mode 100644
index 0000000000..3c83a1ae2f
--- /dev/null
+++ b/libs/pbd/pbd/stl_functors.h
@@ -0,0 +1,92 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __stl_functors_h__
+#define __stl_functors_h__
+
+#include <string>
+
+#ifndef LESS_STRING_P
+struct less<std::string *> {
+ bool operator()(std::string *s1, std::string *s2) const {
+ return *s1 < *s2;
+ }
+};
+#define LESS_STRING_P
+#endif // LESS_STRING_P
+
+#ifndef LESS_CONST_STRING_P
+struct less<const std::string *> {
+ bool operator()(const std::string *s1, const std::string *s2) const {
+ return *s1 < *s2;
+ }
+};
+#define LESS_CONST_STRING_P
+#endif // LESS_CONST_STRING_P
+
+#ifndef LESS_CONST_CHAR_P
+struct less<const char *>
+{
+ bool operator()(const char* s1, const char* s2) const {
+ return strcmp(s1, s2) < 0;
+ }
+};
+#define LESS_CONST_CHAR_P
+#endif // LESS_CONST_CHAR_P
+
+#ifndef LESS_CONST_FLOAT_P
+struct less<const float *>
+{
+ bool operator()(const float *n1, const float *n2) const {
+ return *n1 < *n2;
+ }
+};
+#define LESS_CONST_FLOAT_P
+#endif // LESS_CONST_FLOAT_P
+
+#ifndef EQUAL_TO_CONST_CHAR_P
+struct equal_to<const char *>
+{
+ bool operator()(const char *s1, const char *s2) const {
+ return strcmp (s1, s2) == 0;
+ }
+};
+#define EQUAL_TO_CONST_CHAR_P
+#endif // EQUAL_TO_CONST_CHAR_P
+
+#ifndef EQUAL_TO_STRING_P
+struct equal_to<std::string *>
+{
+ bool operator()(const std::string *s1, const std::string *s2) const {
+ return *s1 == *s2;
+ }
+};
+#define EQUAL_TO_STRING_P
+#endif // EQUAL_TO_STRING_P
+
+#ifndef LESS_CONST_STRING_R
+struct less<const std::string &> {
+ bool operator() (const std::string &s1, const std::string &s2) {
+ return s1 < s2;
+ }
+};
+#define LESS_CONST_STRING_R
+#endif // EQUAL_TO_STRING_P
+
+#endif // __stl_functors_h__
diff --git a/libs/pbd/pbd/strsplit.h b/libs/pbd/pbd/strsplit.h
new file mode 100644
index 0000000000..25c4526b6a
--- /dev/null
+++ b/libs/pbd/pbd/strsplit.h
@@ -0,0 +1,30 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_strplit_h__
+#define __pbd_strplit_h__
+
+#include <string>
+#include <vector>
+#include <glibmm/ustring.h>
+
+extern void split (std::string, std::vector<std::string>&, char);
+extern void split (Glib::ustring, std::vector<Glib::ustring>&, char);
+
+#endif // __pbd_strplit_h__
diff --git a/libs/pbd/pbd/textreceiver.h b/libs/pbd/pbd/textreceiver.h
new file mode 100644
index 0000000000..e5900fc652
--- /dev/null
+++ b/libs/pbd/pbd/textreceiver.h
@@ -0,0 +1,43 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libmisc_textreceiver_h__
+#define __libmisc_textreceiver_h__
+
+#include <string>
+
+#include "receiver.h"
+
+using std::string;
+using std::cout;
+using std::endl;
+
+class TextReceiver : public Receiver
+{
+ public:
+ TextReceiver (const string &n);
+
+ protected:
+ void receive (Transmitter::Channel, const char *);
+
+ private:
+ string name;
+};
+
+#endif //__libmisc_textreceiver_h__
diff --git a/libs/pbd/pbd/thrown_error.h b/libs/pbd/pbd/thrown_error.h
new file mode 100644
index 0000000000..0a63085f11
--- /dev/null
+++ b/libs/pbd/pbd/thrown_error.h
@@ -0,0 +1,38 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+#ifndef __qm_thrown_error_h__
+#define __qm_thrown_error_h__
+
+#include "transmitter.h"
+
+#define SAFE_THROW(T) \
+ T *sent = new T; \
+ (*sent) << rdbuf(); \
+ throw sent
+
+class ThrownError : public Transmitter {
+ public:
+ ThrownError () : Transmitter (Transmitter::Throw) {}
+ protected:
+ virtual void deliver () = 0;
+};
+
+#endif // __qm_thrown_error_h__
+
+
diff --git a/libs/pbd/pbd/tokenizer.h b/libs/pbd/pbd/tokenizer.h
new file mode 100644
index 0000000000..9206d1b6fb
--- /dev/null
+++ b/libs/pbd/pbd/tokenizer.h
@@ -0,0 +1,90 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef PBD_TOKENIZER
+#define PBD_TOKENIZER
+
+#include <iterator>
+#include <string>
+
+#include <pbd/whitespace.h>
+
+namespace PBD {
+
+/**
+ Tokenize string, this should work for standard
+ strings as well as Glib::ustring. This is a bit of a hack,
+ there are much better string tokenizing patterns out there.
+ If strip_whitespace is set to true, tokens will be checked to see
+ that they still have a length after stripping. If no length, they
+ are discarded.
+*/
+template<typename StringType, typename Iter>
+unsigned int
+tokenize(const StringType& str,
+ const StringType& delims,
+ Iter it,
+ bool strip_whitespace=false)
+{
+ typename StringType::size_type start_pos = 0;
+ typename StringType::size_type end_pos = 0;
+ unsigned int token_count = 0;
+
+ do {
+ start_pos = str.find_first_not_of(delims, start_pos);
+ end_pos = str.find_first_of(delims, start_pos);
+ if (start_pos != end_pos) {
+ if (end_pos == str.npos) {
+ end_pos = str.length();
+ }
+ if (strip_whitespace) {
+ StringType stripped = str.substr(start_pos, end_pos - start_pos);
+ strip_whitespace_edges (stripped);
+ if (stripped.length()) {
+ *it++ = stripped;
+ }
+ } else {
+ *it++ = str.substr(start_pos, end_pos - start_pos);
+ }
+ ++token_count;
+ start_pos = str.find_first_not_of(delims, end_pos + 1);
+ }
+ } while (start_pos != str.npos);
+
+ if (start_pos != str.npos) {
+ if (strip_whitespace) {
+ StringType stripped = str.substr(start_pos, str.length() - start_pos);
+ strip_whitespace_edges (stripped);
+ if (stripped.length()) {
+ *it++ = stripped;
+ }
+ } else {
+ *it++ = str.substr(start_pos, str.length() - start_pos);
+ }
+ ++token_count;
+ }
+
+ return token_count;
+}
+
+} // namespace PBD
+
+#endif // PBD_TOKENIZER
+
+
diff --git a/libs/pbd/pbd/touchable.h b/libs/pbd/pbd/touchable.h
new file mode 100644
index 0000000000..12f1c443fd
--- /dev/null
+++ b/libs/pbd/pbd/touchable.h
@@ -0,0 +1,88 @@
+/*
+ Copyright (C) 1999 Paul Barton-Davis
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_touchable_h__
+#define __pbd_touchable_h__
+
+class Touchable
+{
+ public:
+ Touchable() : _delete_after_touch (false) {}
+ virtual ~Touchable() {}
+
+ void set_delete_after_touch (bool yn) { _delete_after_touch = yn; }
+ bool delete_after_touch() const { return _delete_after_touch; }
+
+ virtual void touch () = 0;
+
+ protected:
+ bool _delete_after_touch;
+};
+
+template<class T>
+class DynamicTouchable : public Touchable
+{
+ public:
+ DynamicTouchable (T& t, void (T::*m)(void))
+ : object (t), method (m) { set_delete_after_touch (true); }
+
+ void touch () {
+ (object.*method)();
+ }
+
+ protected:
+ T& object;
+ void (T::*method)(void);
+};
+
+template<class T1, class T2>
+class DynamicTouchable1 : public Touchable
+{
+ public:
+ DynamicTouchable1 (T1& t, void (T1::*m)(T2), T2 a)
+ : object (t), method (m), arg (a) { set_delete_after_touch (true); }
+
+ void touch () {
+ (object.*method)(arg);
+ }
+
+ protected:
+ T1& object;
+ void (T1::*method)(T2);
+ T2 arg;
+};
+
+template<class T1, class T2, class T3>
+class DynamicTouchable2 : public Touchable
+{
+ public:
+ DynamicTouchable2 (T1& t, void (T1::*m)(T2, T3), T2 a1, T3 a2)
+ : object (t), method (m), arg1 (a1), arg2 (a2) { set_delete_after_touch (true); }
+
+ void touch () {
+ (object.*method)(arg1, arg2);
+ }
+
+ protected:
+ T1& object;
+ void (T1::*method)(T2,T3);
+ T2 arg1;
+ T3 arg2;
+};
+
+#endif // __pbd_touchable_h__
diff --git a/libs/pbd/pbd/transmitter.h b/libs/pbd/pbd/transmitter.h
new file mode 100644
index 0000000000..61ac9bd8d8
--- /dev/null
+++ b/libs/pbd/pbd/transmitter.h
@@ -0,0 +1,109 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __libmisc_transmitter_h__
+#define __libmisc_transmitter_h__
+
+#include <sstream>
+#include <iostream>
+
+#include <sigc++/sigc++.h>
+
+using std::cout;
+using std::cerr;
+using std::endl;
+
+class Transmitter : public std::stringstream
+
+{
+ public:
+ enum Channel {
+ Info,
+ Error,
+ Warning,
+ Fatal,
+ Throw
+ };
+
+ Transmitter (Channel);
+
+ sigc::signal<void,Channel, const char *> &sender() {
+ return *send;
+ }
+
+ bool does_not_return ();
+
+ protected:
+ virtual void deliver ();
+ friend std::ostream& endmsg (std::ostream &);
+
+ private:
+ Channel channel;
+ sigc::signal<void, Channel, const char *> *send;
+
+ sigc::signal<void, Channel, const char *> info;
+ sigc::signal<void, Channel, const char *> warning;
+ sigc::signal<void, Channel, const char *> error;
+ sigc::signal<void, Channel, const char *> fatal;
+};
+
+/* for EGCS 2.91.66, if this function is not compiled within the same
+ compilation unit as the one where a ThrownError is thrown, then
+ nothing will catch the error. This is a pretty small function, so
+ inlining it here seems like a reasonable workaround.
+*/
+
+inline std::ostream &
+endmsg (std::ostream &ostr)
+
+{
+ Transmitter *t;
+
+ /* There is a serious bug in the Cygnus/GCC libstdc++ library:
+ cout is not actually an ostream, but a trick was played
+ to make the compiler think that it is. This will cause
+ the dynamic_cast<> to fail with SEGV. So, first check to
+ see if ostr == cout, and handle it specially.
+ */
+
+ if (&ostr == &cout) {
+ cout << endl;
+ return ostr;
+ } else if (&ostr == &cerr) {
+ cerr << endl;
+ return ostr;
+ }
+
+ if ((t = dynamic_cast<Transmitter *> (&ostr)) != 0) {
+ t->deliver ();
+ } else {
+ /* hmm. not a Transmitter, so just put a newline on
+ it and assume that that will be enough.
+ */
+
+ ostr << endl;
+ }
+
+ return ostr;
+}
+
+
+extern "C" { void pbd_c_error (const char *); }
+
+#endif // __libmisc_transmitter_h__
diff --git a/libs/pbd/pbd/undo.h b/libs/pbd/pbd/undo.h
new file mode 100644
index 0000000000..8f1716d09f
--- /dev/null
+++ b/libs/pbd/pbd/undo.h
@@ -0,0 +1,108 @@
+/*
+ Copyright (C) 2002 Brett Viren & Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __lib_pbd_undo_h__
+#define __lib_pbd_undo_h__
+
+#include <string>
+#include <list>
+#include <map>
+#include <sigc++/slot.h>
+#include <sigc++/bind.h>
+#include <sys/time.h>
+#include <pbd/command.h>
+
+typedef sigc::slot<void> UndoAction;
+
+class UndoTransaction : public Command
+{
+ public:
+ UndoTransaction ();
+ UndoTransaction (const UndoTransaction&);
+ UndoTransaction& operator= (const UndoTransaction&);
+ ~UndoTransaction ();
+
+ void clear ();
+ bool empty() const;
+ bool clearing () const { return _clearing; }
+
+ void add_command (Command* const);
+ void remove_command (Command* const);
+
+ void operator() ();
+ void undo();
+ void redo();
+
+ XMLNode &get_state();
+
+ void set_timestamp (struct timeval &t) {
+ _timestamp = t;
+ }
+
+ const struct timeval& timestamp() const {
+ return _timestamp;
+ }
+
+ private:
+ std::list<Command*> actions;
+ struct timeval _timestamp;
+ bool _clearing;
+
+ friend void command_death (UndoTransaction*, Command *);
+};
+
+class UndoHistory : public sigc::trackable
+{
+ public:
+ UndoHistory();
+ ~UndoHistory() {}
+
+ void add (UndoTransaction* ut);
+ void undo (unsigned int n);
+ void redo (unsigned int n);
+
+ unsigned long undo_depth() const { return UndoList.size(); }
+ unsigned long redo_depth() const { return RedoList.size(); }
+
+ std::string next_undo() const { return (UndoList.empty() ? std::string() : UndoList.back()->name()); }
+ std::string next_redo() const { return (RedoList.empty() ? std::string() : RedoList.back()->name()); }
+
+ void clear ();
+ void clear_undo ();
+ void clear_redo ();
+
+ XMLNode &get_state(int32_t depth = 0);
+ void save_state();
+
+ void set_depth (int32_t);
+ int32_t get_depth() const { return _depth; }
+
+ sigc::signal<void> Changed;
+
+ private:
+ bool _clearing;
+ int32_t _depth;
+ std::list<UndoTransaction*> UndoList;
+ std::list<UndoTransaction*> RedoList;
+
+ void remove (UndoTransaction*);
+};
+
+
+#endif /* __lib_pbd_undo_h__ */
diff --git a/libs/pbd/pbd/unknown_type.h b/libs/pbd/pbd/unknown_type.h
new file mode 100644
index 0000000000..fddc1aeddb
--- /dev/null
+++ b/libs/pbd/pbd/unknown_type.h
@@ -0,0 +1,11 @@
+#ifndef __pbd_unknown_type_h__
+#define __pbd_unknown_type_h__
+
+#include <exception>
+
+class unknown_type : public std::exception {
+ public:
+ virtual const char *what() const throw() { return "unknown type"; }
+};
+
+#endif /* __pbd_unknown_type_h__ */
diff --git a/libs/pbd/pbd/whitespace.h b/libs/pbd/pbd/whitespace.h
new file mode 100644
index 0000000000..444be112b0
--- /dev/null
+++ b/libs/pbd/pbd/whitespace.h
@@ -0,0 +1,33 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __pbd_whitespace_h__
+#define __pbd_whitespace_h__
+
+#include <string>
+
+namespace PBD {
+
+// returns the empty string if the entire string is whitespace
+// so check length after calling.
+extern void strip_whitespace_edges (std::string& str);
+
+} // namespace PBD
+
+#endif // __pbd_whitespace_h__
diff --git a/libs/pbd/pbd/xml++.h b/libs/pbd/pbd/xml++.h
new file mode 100644
index 0000000000..290a449869
--- /dev/null
+++ b/libs/pbd/pbd/xml++.h
@@ -0,0 +1,158 @@
+/* xml++.h
+ * libxml++ and this file are copyright (C) 2000 by Ari Johnson, and
+ * are covered by the GNU Lesser General Public License, which should be
+ * included with libxml++ as the file COPYING.
+ */
+
+#include <string>
+#include <list>
+#include <map>
+#include <cstdio>
+#include <cstdarg>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+#include <boost/shared_ptr.hpp>
+
+#ifndef __XML_H
+#define __XML_H
+
+using std::string;
+using std::map;
+using std::list;
+
+class XMLTree;
+class XMLNode;
+class XMLProperty;
+
+typedef list<XMLNode *> XMLNodeList;
+typedef list<boost::shared_ptr<XMLNode> > XMLSharedNodeList;
+typedef XMLNodeList::iterator XMLNodeIterator;
+typedef XMLNodeList::const_iterator XMLNodeConstIterator;
+typedef list<XMLProperty*> XMLPropertyList;
+typedef XMLPropertyList::iterator XMLPropertyIterator;
+typedef XMLPropertyList::const_iterator XMLPropertyConstIterator;
+typedef map<string, XMLProperty*> XMLPropertyMap;
+
+class XMLTree {
+private:
+ string _filename;
+ XMLNode *_root;
+ int _compression;
+ bool read_internal(bool validate);
+
+public:
+ XMLTree();
+ XMLTree(const string &fn, bool validate = false);
+ XMLTree(const XMLTree *);
+ ~XMLTree();
+
+ XMLNode *root() const { return _root; };
+ XMLNode *set_root(XMLNode *n) { return _root = n; };
+
+ const string & filename() const { return _filename; };
+ const string & set_filename(const string &fn) { return _filename = fn; };
+
+ int compression() const { return _compression; };
+ int set_compression(int);
+
+ bool read() { return read_internal(false); };
+ bool read(const string &fn) { set_filename(fn); return read_internal(false); };
+ bool read_and_validate() { return read_internal(true); };
+ bool read_and_validate(const string &fn) { set_filename(fn); return read_internal(true); };
+ bool read_buffer(const string &);
+
+ bool write() const;
+ bool write(const string &fn) { set_filename(fn); return write(); };
+
+ void debug (FILE*) const;
+
+ const string & write_buffer() const;
+};
+
+class XMLNode {
+private:
+ string _name;
+ bool _is_content;
+ string _content;
+ XMLNodeList _children;
+ XMLPropertyList _proplist;
+ XMLPropertyMap _propmap;
+
+public:
+ XMLNode(const string& name);
+ XMLNode(const string& name, const string& content);
+ XMLNode(const XMLNode& other);
+ ~XMLNode();
+
+ const string name() const { return _name; };
+
+ bool is_content() const { return _is_content; };
+ const string & content() const { return _content; };
+ const string & set_content (const string &);
+ XMLNode *add_content(const string & = string());
+
+ const XMLNodeList & children (const string& str = string()) const;
+ XMLNode *add_child (const char *);
+ XMLNode *add_child_copy (const XMLNode&);
+ XMLNode *child (const char*) const;
+ void add_child_nocopy (XMLNode&);
+
+ boost::shared_ptr<XMLSharedNodeList> find(const std::string xpath) const;
+ std::string attribute_value();
+
+ const XMLPropertyList & properties() const { return _proplist; };
+ XMLProperty *property(const char * );
+ XMLProperty *property(const std::string&);
+ const XMLProperty *property(const char * n) const
+ { return ((XMLNode *) this)->property(n); };
+ const XMLProperty *property(const std::string& ns) const
+ { return ((XMLNode *) this)->property(ns); };
+ XMLProperty *add_property(const char *name, const string& value);
+ XMLProperty *add_property(const char *name, const char *value = "");
+ XMLProperty *add_property(const char *name, const long value);
+
+ void remove_property(const string &);
+
+ /** Remove all nodes with the name passed to remove_nodes */
+ void remove_nodes(const string &);
+ /** Remove and delete all nodes with the name passed to remove_nodes */
+ void remove_nodes_and_delete(const string &);
+ /** Remove and delete all nodes with property prop matching val */
+ void remove_nodes_and_delete(const string& propname, const string& val);
+};
+
+class XMLProperty {
+private:
+ string _name;
+ string _value;
+
+public:
+ XMLProperty(const string &n, const string &v = string());
+ ~XMLProperty();
+
+ const string & name() const { return _name; };
+ const string & value() const { return _value; };
+ const string & set_value(const string &v) { return _value = v; };
+};
+
+class XMLException: public std::exception
+{
+public:
+ explicit XMLException(const string message)
+ : message_(message)
+ {
+ }
+
+ virtual ~XMLException() throw() {};
+
+ virtual const char* what() const throw() { return message_.c_str(); }
+ virtual void Raise() const { throw *this; }
+ virtual exception * Clone() const { return new exception(*this); }
+
+private:
+ string message_;
+};
+
+#endif /* __XML_H */
+
diff --git a/libs/pbd/pool.cc b/libs/pbd/pool.cc
new file mode 100644
index 0000000000..434429e69d
--- /dev/null
+++ b/libs/pbd/pool.cc
@@ -0,0 +1,145 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <cstdlib>
+#include <iostream>
+#include <vector>
+
+#include <pbd/pool.h>
+#include <pbd/error.h>
+
+using namespace std;
+using namespace PBD;
+
+Pool::Pool (string n, unsigned long item_size, unsigned long nitems)
+{
+ _name = n;
+
+ free_list = new RingBuffer<void*> (nitems);
+
+ /* since some overloaded ::operator new() might use this,
+ its important that we use a "lower level" allocator to
+ get more space.
+ */
+
+ block = malloc (nitems * item_size);
+
+ void **ptrlist = (void **) malloc (sizeof (void *) * nitems);
+
+ for (unsigned long i = 0; i < nitems; i++) {
+ ptrlist[i] = static_cast<void *> (static_cast<char*>(block) + (i * item_size));
+ }
+
+ free_list->write (ptrlist, nitems);
+
+ free (ptrlist);
+}
+
+Pool::~Pool ()
+{
+ free (block);
+}
+
+void *
+Pool::alloc ()
+{
+ void *ptr;
+
+// cerr << _name << " pool " << " alloc, thread = " << pthread_name() << " space = " << free_list->read_space() << endl;
+
+ if (free_list->read (&ptr, 1) < 1) {
+ fatal << "CRITICAL: " << _name << " POOL OUT OF MEMORY - RECOMPILE WITH LARGER SIZE!!" << endmsg;
+ /*NOTREACHED*/
+ return 0;
+ } else {
+ return ptr;
+ }
+}
+
+void
+Pool::release (void *ptr)
+{
+ free_list->write (&ptr, 1);
+// cerr << _name << ": release, now has " << free_list->read_space() << endl;
+}
+
+/*---------------------------------------------*/
+
+MultiAllocSingleReleasePool::MultiAllocSingleReleasePool (string n, unsigned long isize, unsigned long nitems)
+ : Pool (n, isize, nitems),
+ m_lock(0)
+{
+}
+
+MultiAllocSingleReleasePool::~MultiAllocSingleReleasePool ()
+{
+ if(m_lock) delete m_lock;
+}
+
+SingleAllocMultiReleasePool::SingleAllocMultiReleasePool (string n, unsigned long isize, unsigned long nitems)
+ : Pool (n, isize, nitems),
+ m_lock(0)
+{
+}
+
+SingleAllocMultiReleasePool::~SingleAllocMultiReleasePool ()
+{
+ if(m_lock) delete m_lock;
+}
+
+void*
+MultiAllocSingleReleasePool::alloc ()
+{
+ void *ptr;
+ if(!m_lock) {
+ m_lock = new Glib::Mutex();
+ // umm, I'm not sure that this doesn't also allocate memory.
+ if(!m_lock) error << "cannot create Glib::Mutex in pool.cc" << endmsg;
+ }
+
+ Glib::Mutex::Lock guard(*m_lock);
+ ptr = Pool::alloc ();
+ return ptr;
+}
+
+void
+MultiAllocSingleReleasePool::release (void* ptr)
+{
+ Pool::release (ptr);
+}
+
+void*
+SingleAllocMultiReleasePool::alloc ()
+{
+ return Pool::alloc ();
+}
+
+void
+SingleAllocMultiReleasePool::release (void* ptr)
+{
+ if(!m_lock) {
+ m_lock = new Glib::Mutex();
+ // umm, I'm not sure that this doesn't also allocate memory.
+ if(!m_lock) error << "cannot create Glib::Mutex in pool.cc" << endmsg;
+ }
+ Glib::Mutex::Lock guard(*m_lock);
+ Pool::release (ptr);
+}
+
diff --git a/libs/pbd/pthread_utils.cc b/libs/pbd/pthread_utils.cc
new file mode 100644
index 0000000000..3408f2c0b7
--- /dev/null
+++ b/libs/pbd/pthread_utils.cc
@@ -0,0 +1,147 @@
+/*
+ Copyright (C) 2002 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <map>
+#include <iostream>
+#include <string>
+#include <stdint.h>
+
+#include <pbd/pthread_utils.h>
+
+using namespace std;
+
+typedef std::map<string,pthread_t> ThreadMap;
+static ThreadMap all_threads;
+static pthread_mutex_t thread_map_lock = PTHREAD_MUTEX_INITIALIZER;
+
+namespace PBD {
+ sigc::signal<void,pthread_t,std::string> ThreadCreated;
+ sigc::signal<void,pthread_t,std::string,uint32_t> ThreadCreatedWithRequestSize;
+}
+
+using namespace PBD;
+
+int
+pthread_create_and_store (string name, pthread_t *thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg)
+{
+ int ret;
+
+ pthread_attr_t default_attr;
+ bool use_default_attr = (attr == NULL);
+
+ if (use_default_attr) {
+ // set default stack size to sensible default for memlocking
+ pthread_attr_init(&default_attr);
+ pthread_attr_setstacksize(&default_attr, 500000);
+ attr = &default_attr;
+ }
+
+ if ((ret = pthread_create (thread, attr, start_routine, arg)) == 0) {
+ std::pair<string,pthread_t> newpair;
+ newpair.first = name;
+ newpair.second = *thread;
+
+ pthread_mutex_lock (&thread_map_lock);
+ all_threads.insert (newpair);
+
+ pthread_mutex_unlock (&thread_map_lock);
+ }
+
+ if (use_default_attr) {
+ pthread_attr_destroy(&default_attr);
+ }
+
+ return ret;
+}
+
+string
+pthread_name ()
+{
+ pthread_t self = pthread_self();
+ string str;
+
+ pthread_mutex_lock (&thread_map_lock);
+ for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
+ if (i->second == self) {
+ str = i->first;
+ pthread_mutex_unlock (&thread_map_lock);
+ return str;
+ }
+ }
+ pthread_mutex_unlock (&thread_map_lock);
+ return "unknown";
+}
+
+void
+pthread_kill_all (int signum)
+{
+ pthread_mutex_lock (&thread_map_lock);
+ for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
+ if (i->second != pthread_self()) {
+ pthread_kill (i->second, signum);
+ }
+ }
+ all_threads.clear();
+ pthread_mutex_unlock (&thread_map_lock);
+}
+
+void
+pthread_cancel_all ()
+{
+ pthread_mutex_lock (&thread_map_lock);
+ for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
+ if (i->second != pthread_self()) {
+ pthread_cancel (i->second);
+ }
+ }
+ all_threads.clear();
+ pthread_mutex_unlock (&thread_map_lock);
+}
+
+void
+pthread_cancel_one (pthread_t thread)
+{
+ pthread_mutex_lock (&thread_map_lock);
+ for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
+ if (i->second == thread) {
+ all_threads.erase (i);
+ break;
+ }
+ }
+
+ pthread_cancel (thread);
+ pthread_mutex_unlock (&thread_map_lock);
+}
+
+void
+pthread_exit_pbd (void* status)
+{
+ pthread_t thread = pthread_self();
+
+ pthread_mutex_lock (&thread_map_lock);
+ for (ThreadMap::iterator i = all_threads.begin(); i != all_threads.end(); ++i) {
+ if (i->second == thread) {
+ all_threads.erase (i);
+ break;
+ }
+ }
+ pthread_mutex_unlock (&thread_map_lock);
+ pthread_exit (status);
+}
diff --git a/libs/pbd/receiver.cc b/libs/pbd/receiver.cc
new file mode 100644
index 0000000000..5e7c10de70
--- /dev/null
+++ b/libs/pbd/receiver.cc
@@ -0,0 +1,58 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <vector>
+
+#include <pbd/receiver.h>
+#include <pbd/transmitter.h>
+
+using namespace sigc;
+
+Receiver::Receiver () {}
+
+Receiver::~Receiver ()
+
+{
+ hangup ();
+}
+
+void
+Receiver::hangup ()
+{
+ vector<sigc::connection *>::iterator i;
+
+ for (i = connections.begin(); i != connections.end (); i++) {
+ (*i)->disconnect ();
+ delete *i;
+ }
+
+ connections.erase (connections.begin(), connections.end());
+}
+
+void
+Receiver::listen_to (Transmitter &transmitter)
+
+{
+ sigc::connection *c = new sigc::connection;
+
+ (*c) = transmitter.sender().connect(mem_fun(*this, &Receiver::receive));
+
+ connections.push_back (c);
+}
diff --git a/libs/pbd/search_path.cc b/libs/pbd/search_path.cc
new file mode 100644
index 0000000000..9956c6c763
--- /dev/null
+++ b/libs/pbd/search_path.cc
@@ -0,0 +1,152 @@
+/*
+ Copyright (C) 2007 Tim Mayberry
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/tokenizer.h>
+#include <pbd/search_path.h>
+#include <pbd/error.h>
+
+namespace {
+
+#ifdef WIN32
+const char * const path_delimiter = ";";
+#else
+const char * const path_delimiter = ":";
+#endif
+
+}
+
+namespace PBD {
+
+SearchPath::SearchPath ()
+{
+
+}
+
+SearchPath::SearchPath (const string& path)
+{
+ vector<sys::path> tmp;
+
+ if(tokenize (path, string(path_delimiter), std::back_inserter (tmp)))
+ {
+ add_directories (tmp);
+ }
+}
+
+SearchPath::SearchPath (const sys::path& directory_path)
+{
+ add_directory (directory_path);
+}
+
+SearchPath::SearchPath (const vector<sys::path>& paths)
+{
+ add_directories (paths);
+}
+
+SearchPath::SearchPath (const SearchPath& other)
+ : m_dirs(other.m_dirs)
+{
+
+}
+
+void
+SearchPath::add_directory (const sys::path& directory_path)
+{
+ // test for existance and warn etc?
+ m_dirs.push_back(directory_path);
+}
+
+void
+SearchPath::add_directories (const vector<sys::path>& paths)
+{
+ for(vector<sys::path>::const_iterator i = paths.begin(); i != paths.end(); ++i) {
+ add_directory (*i);
+ }
+}
+
+const string
+SearchPath::to_string () const
+{
+ string path;
+
+ for (vector<sys::path>::const_iterator i = m_dirs.begin(); i != m_dirs.end(); ++i) {
+ path += (*i).to_string();
+ path += path_delimiter;
+ }
+
+ path = path.substr (0, path.length() - 1); // drop final separator
+
+ return path;
+}
+
+SearchPath&
+SearchPath::operator= (const SearchPath& path)
+{
+ m_dirs = path.m_dirs;
+ return *this;
+}
+
+SearchPath&
+SearchPath::operator+= (const SearchPath& spath)
+{
+ m_dirs.insert(m_dirs.end(), spath.m_dirs.begin(), spath.m_dirs.end());
+ return *this;
+}
+
+SearchPath&
+SearchPath::operator+= (const sys::path& directory_path)
+{
+ add_directory (directory_path);
+ return *this;
+}
+
+SearchPath&
+SearchPath::operator+ (const sys::path& directory_path)
+{
+ add_directory (directory_path);
+ return *this;
+}
+
+SearchPath&
+SearchPath::operator+ (const SearchPath& spath)
+{
+ // concatenate paths into new SearchPath
+ m_dirs.insert(m_dirs.end(), spath.m_dirs.begin(), spath.m_dirs.end());
+ return *this;
+}
+
+SearchPath&
+SearchPath::add_subdirectory_to_paths (const string& subdir)
+{
+ for (vector<sys::path>::iterator i = m_dirs.begin(); i != m_dirs.end(); ++i)
+ {
+ // should these new paths just be added to the end of
+ // the search path rather than replace?
+ *i /= subdir;
+ }
+
+ return *this;
+}
+
+SearchPath&
+SearchPath::operator/= (const string& subdir)
+{
+ return add_subdirectory_to_paths (subdir);
+}
+
+} // namespace PBD
diff --git a/libs/pbd/shortpath.cc b/libs/pbd/shortpath.cc
new file mode 100644
index 0000000000..9f9598e617
--- /dev/null
+++ b/libs/pbd/shortpath.cc
@@ -0,0 +1,75 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/shortpath.h>
+
+using namespace Glib;
+using namespace std;
+
+ustring
+short_path (const Glib::ustring& path, ustring::size_type target_characters)
+{
+ ustring::size_type last_sep;
+ ustring::size_type len = path.length();
+ const char separator = '/';
+
+ if (len <= target_characters) {
+ return path;
+ }
+
+ if ((last_sep = path.find_last_of (separator)) == ustring::npos) {
+
+ /* just a filename, but its too long anyway */
+
+ if (target_characters > 3) {
+ return path.substr (0, target_characters - 3) + ustring ("...");
+ } else {
+ /* stupid caller, just hand back the whole thing */
+ return path;
+ }
+ }
+
+ if (len - last_sep >= target_characters) {
+
+ /* even the filename itself is too long */
+
+ if (target_characters > 3) {
+ return path.substr (last_sep+1, target_characters - 3) + ustring ("...");
+ } else {
+ /* stupid caller, just hand back the whole thing */
+ return path;
+ }
+ }
+
+ uint32_t so_far = (len - last_sep);
+ uint32_t space_for = target_characters - so_far;
+
+ if (space_for >= 3) {
+ ustring res = "...";
+ res += path.substr (last_sep - space_for);
+ return res;
+ } else {
+ /* remove part of the end */
+ ustring res = "...";
+ res += path.substr (last_sep - space_for, len - last_sep + space_for - 3);
+ res += "...";
+ return res;
+
+ }
+}
diff --git a/libs/pbd/stacktrace.cc b/libs/pbd/stacktrace.cc
new file mode 100644
index 0000000000..dc9a5e18ab
--- /dev/null
+++ b/libs/pbd/stacktrace.cc
@@ -0,0 +1,72 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/stacktrace.h>
+#include <iostream>
+
+void
+PBD::trace_twb ()
+{
+}
+
+/* Obtain a backtrace and print it to stdout. */
+
+#ifdef HAVE_EXECINFO
+
+#include <execinfo.h>
+#include <stdlib.h>
+
+void
+PBD::stacktrace (std::ostream& out, int levels)
+{
+ void *array[200];
+ size_t size;
+ char **strings;
+ size_t i;
+
+ size = backtrace (array, 200);
+ strings = backtrace_symbols (array, size);
+
+ if (strings) {
+
+ printf ("Obtained %zd stack frames.\n", size);
+
+ for (i = 0; i < size && (levels == 0 || i < size_t(levels)); i++) {
+ out << strings[i] << std::endl;
+ }
+
+ free (strings);
+ }
+}
+
+#else
+
+void
+PBD::stacktrace (std::ostream& out, int levels)
+{
+ out << "stack tracing is not enabled on this platform" << std::endl;
+}
+
+void
+c_stacktrace ()
+{
+ PBD::stacktrace (std::cout);
+}
+
+#endif /* HAVE_EXECINFO */
diff --git a/libs/pbd/stateful.cc b/libs/pbd/stateful.cc
new file mode 100644
index 0000000000..da014d738f
--- /dev/null
+++ b/libs/pbd/stateful.cc
@@ -0,0 +1,148 @@
+/*
+ Copyright (C) 2000-2001 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id: stateful.cc 629 2006-06-21 23:01:03Z paul $
+*/
+
+#include <unistd.h>
+
+#include <pbd/stateful.h>
+#include <pbd/filesystem.h>
+#include <pbd/xml++.h>
+#include <pbd/error.h>
+
+#include "i18n.h"
+
+namespace PBD {
+
+Stateful::Stateful ()
+{
+ _extra_xml = 0;
+ _instant_xml = 0;
+}
+
+Stateful::~Stateful ()
+{
+ // Do not delete _extra_xml. The use of add_child_nocopy()
+ // means it needs to live on indefinately.
+
+ if (_instant_xml) {
+ delete _instant_xml;
+ }
+}
+
+void
+Stateful::add_extra_xml (XMLNode& node)
+{
+ if (_extra_xml == 0) {
+ _extra_xml = new XMLNode ("extra");
+ }
+
+ _extra_xml->remove_nodes (node.name());
+ _extra_xml->add_child_nocopy (node);
+}
+
+XMLNode *
+Stateful::extra_xml (const string& str)
+{
+ if (_extra_xml == 0) {
+ return 0;
+ }
+
+ const XMLNodeList& nlist = _extra_xml->children();
+ XMLNodeConstIterator i;
+
+ for (i = nlist.begin(); i != nlist.end(); ++i) {
+ if ((*i)->name() == str) {
+ return (*i);
+ }
+ }
+
+ return 0;
+}
+
+void
+Stateful::add_instant_xml (XMLNode& node, const sys::path& directory_path)
+{
+ sys::create_directories (directory_path); // may throw
+
+ if (_instant_xml == 0) {
+ _instant_xml = new XMLNode ("instant");
+ }
+
+ _instant_xml->remove_nodes_and_delete (node.name());
+ _instant_xml->add_child_copy (node);
+
+ sys::path instant_xml_path(directory_path);
+
+ instant_xml_path /= "instant.xml";
+
+ XMLTree tree;
+ tree.set_filename(instant_xml_path.to_string());
+
+ /* Important: the destructor for an XMLTree deletes
+ all of its nodes, starting at _root. We therefore
+ cannot simply hand it our persistent _instant_xml
+ node as its _root, because we will lose it whenever
+ the Tree goes out of scope.
+
+ So instead, copy the _instant_xml node (which does
+ a deep copy), and hand that to the tree.
+ */
+
+ XMLNode* copy = new XMLNode (*_instant_xml);
+ tree.set_root (copy);
+
+ if (!tree.write()) {
+ error << string_compose(_("Error: could not write %1"), instant_xml_path.to_string()) << endmsg;
+ }
+}
+
+XMLNode *
+Stateful::instant_xml (const string& str, const sys::path& directory_path)
+{
+ if (_instant_xml == 0) {
+
+ sys::path instant_xml_path(directory_path);
+ instant_xml_path /= "instant.xml";
+
+ if (exists(instant_xml_path)) {
+ XMLTree tree;
+ if (tree.read(instant_xml_path.to_string())) {
+ _instant_xml = new XMLNode(*(tree.root()));
+ } else {
+ warning << string_compose(_("Could not understand XML file %1"), instant_xml_path.to_string()) << endmsg;
+ return 0;
+ }
+ } else {
+ return 0;
+ }
+ }
+
+ const XMLNodeList& nlist = _instant_xml->children();
+ XMLNodeConstIterator i;
+
+ for (i = nlist.begin(); i != nlist.end(); ++i) {
+ if ((*i)->name() == str) {
+ return (*i);
+ }
+ }
+
+ return 0;
+}
+
+} // namespace PBD
diff --git a/libs/pbd/strreplace.cc b/libs/pbd/strreplace.cc
new file mode 100644
index 0000000000..7999b5c6c9
--- /dev/null
+++ b/libs/pbd/strreplace.cc
@@ -0,0 +1,38 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/replace_all.h>
+
+int
+replace_all (std::string& str,
+ std::string const& target,
+ std::string const& replacement)
+{
+ std::string::size_type start = str.find (target, 0);
+ int cnt = 0;
+
+ while (start != std::string::npos) {
+ str.replace (start, target.size(), replacement);
+ start = str.find (target, start+replacement.size());
+ ++cnt;
+ }
+
+ return cnt;
+}
+
diff --git a/libs/pbd/strsplit.cc b/libs/pbd/strsplit.cc
new file mode 100644
index 0000000000..342daadaa2
--- /dev/null
+++ b/libs/pbd/strsplit.cc
@@ -0,0 +1,99 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/strsplit.h>
+
+using namespace std;
+using namespace Glib;
+
+void
+split (string str, vector<string>& result, char splitchar)
+{
+ string::size_type pos;
+ string remaining;
+ string::size_type len = str.length();
+ int cnt;
+
+ cnt = 0;
+
+ if (str.empty()) {
+ return;
+ }
+
+ for (string::size_type n = 0; n < len; ++n) {
+ if (str[n] == splitchar) {
+ cnt++;
+ }
+ }
+
+ if (cnt == 0) {
+ result.push_back (str);
+ return;
+ }
+
+ remaining = str;
+
+ while ((pos = remaining.find_first_of (splitchar)) != string::npos) {
+ result.push_back (remaining.substr (0, pos));
+ remaining = remaining.substr (pos+1);
+ }
+
+ if (remaining.length()) {
+
+ result.push_back (remaining);
+ }
+}
+
+void
+split (ustring str, vector<ustring>& result, char splitchar)
+{
+ ustring::size_type pos;
+ ustring remaining;
+ ustring::size_type len = str.length();
+ int cnt;
+
+ cnt = 0;
+
+ if (str.empty()) {
+ return;
+ }
+
+ for (ustring::size_type n = 0; n < len; ++n) {
+ if (str[n] == gunichar(splitchar)) {
+ cnt++;
+ }
+ }
+
+ if (cnt == 0) {
+ result.push_back (str);
+ return;
+ }
+
+ remaining = str;
+
+ while ((pos = remaining.find_first_of (splitchar)) != ustring::npos) {
+ result.push_back (remaining.substr (0, pos));
+ remaining = remaining.substr (pos+1);
+ }
+
+ if (remaining.length()) {
+
+ result.push_back (remaining);
+ }
+}
diff --git a/libs/pbd/tests/Makefile b/libs/pbd/tests/Makefile
new file mode 100644
index 0000000000..fc0da41812
--- /dev/null
+++ b/libs/pbd/tests/Makefile
@@ -0,0 +1,6 @@
+test: xpath
+ LD_LIBRARY_PATH=..:../../sigc++2:../../glibmm2 ./xpath
+ LD_LIBRARY_PATH=..:../../sigc++2:../../glibmm2 gprof ./xpath > gprof.out
+
+xpath: xpath.cc
+ gcc -o $@ -g -pg -I.. `xml2-config --libs --cflags` -L.. -L../../sigc++2 -L../../glibmm2 -lstdc++ -lpbd -lglibmm2 -lsigc++2 $<
diff --git a/libs/pbd/tests/ProtoolsPatchFile.midnam b/libs/pbd/tests/ProtoolsPatchFile.midnam
new file mode 100755
index 0000000000..8656a312eb
--- /dev/null
+++ b/libs/pbd/tests/ProtoolsPatchFile.midnam
@@ -0,0 +1,11756 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE MIDINameDocument PUBLIC "-//MIDI Manufacturers Association//DTD MIDINameDocument 0.7//EN" "http://www.sonosphere.com/dtds/MIDINameDocument.dtd">
+
+<MIDINameDocument>
+ <Author>Mark of the Unicorn - converted from FreeMIDI, 4/28/04</Author>
+ <MasterDeviceNames>
+ <Manufacturer>Roland</Manufacturer>
+ <Model>SC-88 Pro</Model>
+ <CustomDeviceMode Name="Mode 1" >
+ <DeviceModeEnable>
+ <MIDICommands>
+ <SysEx>F0 41 <SysExDeviceID Offset="00" /> 42 12 40 00 7F 00 41 F7</SysEx>
+ </MIDICommands>
+ </DeviceModeEnable>
+ <ChannelNameSetAssignments>
+ <ChannelNameSetAssign Channel="1" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="2" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="3" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="4" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="5" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="6" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="7" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="8" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="9" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="10" NameSet="Name Set 2" />
+ <ChannelNameSetAssign Channel="11" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="12" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="13" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="14" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="15" NameSet="Name Set 1" />
+ <ChannelNameSetAssign Channel="16" NameSet="Name Set 1" />
+ </ChannelNameSetAssignments>
+ </CustomDeviceMode>
+ <ChannelNameSet Name="Name Set 1" >
+ <AvailableForChannels>
+ <AvailableChannel Channel="1" Available="true" />
+ <AvailableChannel Channel="2" Available="true" />
+ <AvailableChannel Channel="3" Available="true" />
+ <AvailableChannel Channel="4" Available="true" />
+ <AvailableChannel Channel="5" Available="true" />
+ <AvailableChannel Channel="6" Available="true" />
+ <AvailableChannel Channel="7" Available="true" />
+ <AvailableChannel Channel="8" Available="true" />
+ <AvailableChannel Channel="9" Available="true" />
+ <AvailableChannel Channel="10" Available="false" />
+ <AvailableChannel Channel="11" Available="true" />
+ <AvailableChannel Channel="12" Available="true" />
+ <AvailableChannel Channel="13" Available="true" />
+ <AvailableChannel Channel="14" Available="true" />
+ <AvailableChannel Channel="15" Available="true" />
+ <AvailableChannel Channel="16" Available="true" />
+ </AvailableForChannels>
+ <PatchBank Name="Piano" >
+ <PatchNameList>
+ <Patch Number="001" Name="Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="Piano 1w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="European Pf" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="Piano + Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002+" Name="Piano 2w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002+" Name="Dance Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="Piano 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="EG+Rhodes 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="EG+Rhodes 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="Piano 3w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004" Name="Honky-tonk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004+" Name="Honky-tonk 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005" Name="E.Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="St.Soft EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="Cho. E.Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="SilentRhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="FM+SA EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="Dist E.Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="Wurly" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="Hard Rhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="MellowRhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006" Name="E.Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="Detuned EP 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="St.FM EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="Hard FM EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="Harpsichord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="Harpsichord2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="Coupled Hps." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="Harpsi.w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="Harpsi.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="Synth Harpsi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="Comp Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="Reso Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="Clav.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="Analog Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="JP8 Clav. 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="JP8 Clav. 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="35" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="$Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="$Piano 1w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="$Piano 1d" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="$Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002+" Name="$Piano 2w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="$Piano 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="$EG+Rhodes 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="$EG+Rhodes 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="$Piano 3w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004" Name="$Honky-tonk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004+" Name="$Old Upright" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005" Name="$E.Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="$St.Soft EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="$FM+SA EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="$60'sE.Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="$Hard Rhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="$MellwRhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006" Name="$E.Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="$Detuned EP2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="$St.FM EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="$Hard FM EP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="$Harpsichord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="$Coupled Hps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="$Harpsi.w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="$Harpsi.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="$Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="*Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="*Piano 1w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001+" Name="*Piano 1d" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="*Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002+" Name="*Piano 2w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="*Piano 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003+" Name="*Piano 3w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004" Name="*Honky-tonk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004+" Name="*HonkyTonk w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005" Name="*E.Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="*Detuned EP1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="*E.Piano 1v" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005+" Name="*60s E.Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006" Name="*E.Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="*Detuned EP2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006+" Name="*E.Piano 2v" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="*Harpsichord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="*Coupled Hps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="*Harpsi.w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007+" Name="*Harpsi.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="*Clav." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="#Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="#Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="#Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004" Name="#Honky-tonk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005" Name="#Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006" Name="#Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="#Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="#E.Piano 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="#Detuned EP1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="#E.Piano 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="#Acou Piano1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="#Acou Piano2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="#Acou Piano3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="004" Name="#Elec Piano1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="3" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="005" Name="#Elec Piano2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="4" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="006" Name="#Elec Piano3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="5" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="007" Name="#Elec Piano4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="6" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="008" Name="#Honkytonk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="7" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="#Harpsi 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018" Name="#Harpsi 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019" Name="#Harpsi 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020" Name="#Clavi 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="#Clavi 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022" Name="#Clavi 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Chromatic Percussion" >
+ <PatchNameList>
+ <Patch Number="009" Name="Celesta" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009+" Name="Pop Celesta" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="Glockenspiel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="Music Box" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="Vibraphone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="Pop Vibe." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="Vibraphone w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="Vibraphones" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013" Name="Marimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="Marimba w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="Barafon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="Barafon 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="Log drum" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="014" Name="Xylophone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="13" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015" Name="Tubular-bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="Church Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="Carillon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="Santur" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016+" Name="Santur 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016+" Name="Cimbalom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016+" Name="Zither 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016+" Name="Zither 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016+" Name="Dulcimer" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="$Celesta" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="$Glocknspiel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="$Music Box" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="$Vibraphone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="$Hard Vibe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="$Vib.w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013" Name="$Marimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="$Marimba w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="$Barafon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="$Barafon 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="$Log drum" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="014" Name="$Xylophone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="13" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015" Name="$Tubularbell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="$Church Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="$Carillon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="$Santur" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="$Santur 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="$Cimbalon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="*Celesta" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="*Glockenspl" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="*Music Box" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="*Vibraphone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012+" Name="*Vib.w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013" Name="*Marimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013+" Name="*Marimba w" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="014" Name="*Xylophone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="13" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015" Name="*Tubularbell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="*Church Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015+" Name="*Carillon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="*Santur" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023" Name="#Celesta 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024" Name="#Celesta 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098" Name="#Vibe 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099" Name="#Vibe 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102" Name="#Glock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103" Name="#Tube Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104" Name="#Xylophone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105" Name="#Marimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Organ" >
+ <PatchNameList>
+ <Patch Number="017" Name="Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Organ 101" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Trem. Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Organ o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="60's Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="60's Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="60's Organ 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Farf Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Cheese Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="D-50 Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="JUNO Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Hybrid Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="27" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="VS Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="28" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Digi Church" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="29" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="70's E.Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Even Bar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="Organ Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="40" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="5th Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="48" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018" Name="Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="Jazz Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="E.Organ 16+2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="Chorus Or.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="Octave Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="Perc. Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019" Name="Organ 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="Rotary Org." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="Rotary Org.S" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="Rock Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="Rock Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="Rotary Org.F" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020" Name="Church Org.1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="Church Org.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="Church Org.3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="Organ Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="Trem.Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="Theater Org." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="Reed Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="Wind Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022" Name="Accordion Fr" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="Accordion It" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="Dist. Accord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="Cho. Accord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="Hard Accord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="Soft Accord" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023" Name="Harmonica" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023+" Name="Harmonica 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024" Name="Bandoneon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024+" Name="Bandoneon 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024+" Name="Bandoneon 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="$Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Organ 101" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Detuned Or.1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Organ 109" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$60'sOrgan 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$60'sOrgan 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$60'sOrgan 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$CheeseOrgan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Organ 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Even Bar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="$Organ Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="40" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018" Name="$Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="$Organ 201" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="$DetunedOr.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="$Organ 5" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019" Name="$Organ 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="$Rotary Org." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="$RotaryOrg.S" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019+" Name="$RotaryOrg.F" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020" Name="$ChurchOrg.1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="$ChurchOrg.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="$ChurchOrg.3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="$Organ Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="$Trem.Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="$Reed Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022" Name="$AccordionFr" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="$AccordionIt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023" Name="$Harmonica" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023+" Name="$Harmonica 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024" Name="$Bandoneon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="*Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="*Detuned Or1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="*60's Organ1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017+" Name="*Organ 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018" Name="*Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="*Detuned Or2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018+" Name="*Organ 5" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019" Name="*Organ 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020" Name="*Church Org1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="*Church Org2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020+" Name="*Church Org3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="*Reed Organ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022" Name="*Accordion F" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022+" Name="*Accordion I" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023" Name="*Harmonica" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024" Name="*Bandoneon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038" Name="#Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039" Name="#Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040" Name="#Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="#Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042" Name="#Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043" Name="#Organ 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="044" Name="#Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="43" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="#Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046" Name="#Organ 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="#Elec Org 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="#Elec Org 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="#Elec Org 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="#Elec Org 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013" Name="#Pipe Org 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="014" Name="#Pipe Org 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="13" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015" Name="#Pipe Org 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="#Accordion" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088" Name="#Harmonica" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Guitar" >
+ <PatchNameList>
+ <Patch Number="025" Name="Nylon-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="Ukulele" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="Nylon Gt.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="Velo Harmnix" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="Nylon Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="Lequint Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="40" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="Steel-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="12-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="Nylon+Steel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="Mandolin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="Mandolin 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="MandolinTrem" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="Steel Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="Jazz Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027+" Name="Mellow Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027+" Name="Pedal Steel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="Clean Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="Clean Half" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="Open Hard 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="Open Hard 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="JC Clean Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="Chorus Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="JC Chorus Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="TC FrontPick" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="TC Rear Pick" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="TC Clean ff" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="TC Clean 2:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="Muted Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="Muted Dis.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="TC Muted Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="Funk Pop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="Funk Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="Overdrive Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030+" Name="Overdrive 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030+" Name="Overdrive 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030+" Name="More Drive" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030+" Name="LP OverDrvGt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030+" Name="LP OverDrv:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="DistortionGt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Dist. Gt2 :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Dazed Guitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Distortion:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Dist.Fast :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Feedback Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Feedback Gt2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Power Guitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Power Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="5th Dist." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Rock Rhythm" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="Rock Rhythm2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032" Name="Gt.Harmonics" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="Gt. Feedback" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="Gt.Feedback2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="Ac.Gt.Harmnx" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="E.Bass Harm." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="$Nylonstr.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="$Ukulele" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="$Nylon Gt.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="$VeloHarmnix" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="$Nylon Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="$Lequint Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="40" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="$Steelstr.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="$12-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="$Nylon+Steel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="$Mandolin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="$Steel Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="$Jazz Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027+" Name="$Mellow Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027+" Name="$Pedal Steel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="$Clean Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="$Chorus Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="$Muted Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="$MutedDis.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="$Funk Pop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="$Funk Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="$OverdriveGt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="$DistortionG" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$Dist. Gt2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$DazedGuitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$FeedbackGt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$FeedbackGt2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$PowerGuitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$Power Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$5th Dist." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$Rock Rhythm" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="$RockRhythm2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032" Name="$Gt.Harmonix" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="$Gt.Feedback" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="$Ac.Gt.Harm." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="*Nylon Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="*Ukulele" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="*Nylon Gt.o" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025+" Name="*Nylon Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="*Steel Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="*12-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026+" Name="*Mandolin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="*Jazz Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027+" Name="*Hawaiian Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="*Clean Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028+" Name="*Chorus Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="*Muted Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="*Funk Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029+" Name="*Funk Gt.2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="*OverdriveGt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="*Dist.Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031+" Name="*Feedback Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032" Name="*Gt.Harmonix" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032+" Name="*Gt.Feedback" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="#Steel Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="#Steel Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="013" Name="#12-str.Gt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="12" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="014" Name="#Funk Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="13" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="015" Name="#Muted Gt." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="14" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060" Name="#Guitar 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061" Name="#Guitar 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062" Name="#Elec Gtr 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="#Elec Gtr 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Bass" >
+ <PatchNameList>
+ <Patch Number="033" Name="Acoustic Bs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033+" Name="Rockabilly" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033+" Name="Wild A.Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033+" Name="Bass + OHH" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034" Name="Fingered Bs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="Fingered Bs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="Jazz Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="Jazz Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="Rock Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="ChorusJazzBs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="F.Bass/Harm." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035" Name="Picked Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="Picked Bass2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="Picked Bass3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="Picked Bass4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="Mute PickBs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="P.Bass/Harm." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036" Name="Fretless Bs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Fretless Bs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Fretless Bs3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Fretless Bs4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Syn Fretless" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Mr.Smooth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="Wood+FlessBs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037" Name="Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037+" Name="Slap Pop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037+" Name="Reso Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037+" Name="Unison Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038" Name="Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038+" Name="FM Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039" Name="Synth Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="SynthBass101" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="CS Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="JP-4 Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="JP-8 Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="P5 Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="JPMG Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Acid Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="TB303 Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Tekno Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="TB303 Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Kicked TB303" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="TB303 Saw Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="13" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Rubber303 Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="14" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Reso 303 Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="15" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Reso SH Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="TB303 Sqr Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="TB303 DistBs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="Arpeggio Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040" Name="Synth Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="SynthBass201" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Modular Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Seq Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="MG Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Mg Oct Bass1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="MG Oct Bass2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="MG Blip Bs:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Beef FM Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Dly Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="X Wire Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="WireStr Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Blip Bass :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="RubberBass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="13" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="RubberBass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="SH101 Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="SH101 Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Smooth Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="SH101 Bass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="20" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Spike Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="21" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="House Bass:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="22" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="KG Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="23" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Sync Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="MG 5th Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="RND Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="WowMG Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="27" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="Bubble Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="28" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="$AcousticBs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034" Name="$FingeredBs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="$FingeredBs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034+" Name="$Jazz Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035" Name="$Picked Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035+" Name="$MutePickBs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036" Name="$FretlessBs." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="$FretlessBs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="$FretlessBs3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="$FretlessBs4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="$SynFretless" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036+" Name="$Mr.Smooth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037" Name="$Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037+" Name="$Reso Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038" Name="$Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039" Name="$SynthBass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="$Syn.Bass101" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="$Acid Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="$TB303 Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="$Tekno Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="$Reso SHBass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040" Name="$SynthBass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$Syn.Bass201" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$ModularBass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$Seq Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$Beef FMBass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$X Wire Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$Rubber Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$SH101Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$SH101Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="$Smooth Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="*Acoustic Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034" Name="*Fingered Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035" Name="*Picked Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036" Name="*Fretless Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037" Name="*Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038" Name="*Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039" Name="*Syn.Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="*Syn.Bass101" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039+" Name="*Syn.Bass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040" Name="*Syn.Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="*Syn.Bass 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040+" Name="*Rubber Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="016" Name="#Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="15" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="#Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="018" Name="#Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="17" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="019" Name="#Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="18" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="020" Name="#Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="19" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="021" Name="#Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="20" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="022" Name="#Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="21" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="023" Name="#Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="22" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="024" Name="#Fingered Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="23" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="#Fingered Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="#Picked Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="#Picked Bass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="#Fretless Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="#Acoustic Bs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="#Syn Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="#Syn Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="#Syn Bass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032" Name="#Syn Bass 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="065" Name="#Acou Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="64" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066" Name="#Acou Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067" Name="#Elec Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="068" Name="#Elec Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="67" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069" Name="#Slap Bass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="070" Name="#Slap Bass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="69" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="071" Name="#Fretless 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="70" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072" Name="#Fretless 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Strings/orchestra" >
+ <PatchNameList>
+ <Patch Number="041" Name="Violin :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041+" Name="Violin Atk:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041+" Name="Slow Violin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042" Name="Viola :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042+" Name="Viola Atk.:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043" Name="Cello :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043+" Name="Cello Atk.:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="044" Name="Contrabass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="43" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="Tremolo Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="Slow Tremolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="Suspense Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046" Name="PizzicatoStr" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046+" Name="Vcs&amp;Cbs Pizz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046+" Name="Chamber Pizz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046+" Name="St.Pizzicato" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046+" Name="Solo Pizz." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046+" Name="Solo Spic." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047" Name="Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047+" Name="Synth Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="048" Name="Timpani" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="47" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="$Violin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041+" Name="$Slow Violin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042" Name="$Viola" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043" Name="$Cello" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="044" Name="$Contrabass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="43" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="$Tremolo Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045+" Name="$SlowTremolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045+" Name="$SuspenseStr" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046" Name="$Pizz. Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047" Name="$Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="048" Name="$Timpani" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="47" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="*Violin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041+" Name="*Slow Violin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042" Name="*Viola" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043" Name="*Cello" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="044" Name="*Contrabass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="43" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="*Tremolo Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046" Name="*Pizzicato" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047" Name="*Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="048" Name="*Timpani" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="47" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="#Str Sect 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="#Str Sect 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="#Str Sect 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052" Name="#Pizzicato" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="#Violin 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="#Violin 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055" Name="#Cello 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056" Name="#Cello 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="#Contrabass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="#Harp 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="#Harp 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113" Name="#Timpani" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Ensemble" >
+ <PatchNameList>
+ <Patch Number="049" Name="Strings :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Bright Str:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="ChamberStr:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Cello sect." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Orchestra" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Orchestra 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Tremolo Orch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Choir Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Strings+Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="St. Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Velo Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Oct Strings1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="Oct Strings2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="Slow Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="SlowStrings2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="Legato Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="Warm Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="St.Slow Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="Syn.Strings1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="OB Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="StackStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="JP Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="Syn.Strings3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="Syn.Strings4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="High Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="Hybrid Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="Tron Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="Noiz Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052" Name="Syn.Strings2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052+" Name="Syn.Strings5" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052+" Name="JUNO Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052+" Name="Air Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="St.ChoirAahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Melted Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Church Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Choir Hahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Choir Lahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Chorus Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="Male Aah+Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="Voice Oohs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054+" Name="Voice Dahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055" Name="SynVox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055+" Name="Syn.Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055+" Name="Silent Night" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055+" Name="VP330 Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055+" Name="Vinyl Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056" Name="OrchestraHit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Impact Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Philly Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Double Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Perc. Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Shock Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Lo Fi Rave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Techno Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Dist. Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Bam Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Bit Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="20" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Bim Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="21" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Technorg Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="22" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Rave Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="23" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Strings Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="Stack Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="$Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$Strings 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$Orchestra" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$Orchestra 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$TremoloOrch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$Choir Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$St.Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="$VeloStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="$SlowStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="$Slow Str. 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="$Legato Str." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="$WarmStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050+" Name="$St.SlowStr." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="$SynStrings1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="$OB Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="$SynStrings3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052" Name="$SynStrings2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="$Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="$St.Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="$Mello Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="$ChoirAahs 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="$Voice Oohs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055" Name="$SynVox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055+" Name="$Syn.Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056" Name="$Orch. Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="$Impact Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="$Philly Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="$Double Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056+" Name="$Lo Fi Rave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="*Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049+" Name="*Orchestra" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="*SlowStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="*SynStrings1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051+" Name="*SynStrings3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052" Name="*SynStrings2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="*Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053+" Name="*Choir Aahs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="*Voice Oohs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055" Name="*SynVox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056" Name="*Orchest.Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="#Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="#Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="032" Name="#Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="31" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="#Choir Aahs" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034" Name="#SlowStrings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035" Name="#Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036" Name="#SynStrings3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037" Name="#SynStrings3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064" Name="#Orchest.Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123" Name="#Orche Hit" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Brass" >
+ <PatchNameList>
+ <Patch Number="057" Name="Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Trumpet 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Trumpet :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Flugel Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="4th Trumpets" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Bright Tp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Warm Tp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="Syn. Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058+" Name="Trombone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058+" Name="Twin bones" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058+" Name="Bs. Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="Tuba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059+" Name="Tuba 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060" Name="MutedTrumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060+" Name="Muted Horns" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061" Name="French Horns" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="Fr.Horn 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="Horn + Orche" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="Wide FreHrns" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="F.Hrn Slow:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="Dual Horns" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="Synth Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="F.Horn Rip" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062" Name="Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass ff" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Bones Sect." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass sfz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass Fall" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Trumpet Fall" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Octave Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="Brass + Reed" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="Synth Brass1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="JUNO Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="Stack Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="SH-5 Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="MKS Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="Pro Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="P5 Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="Oct SynBrass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="Hybrid Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064" Name="Synth Brass2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="Soft Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="Warm Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="SynBrass sfz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="OB Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="Reso Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="Velo Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="Transbrass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="$Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="$Trumpet 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="$Flugel Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="$Bright Tp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057+" Name="$Warm Tp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="$Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058+" Name="$Trombone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="$Tuba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059+" Name="$Tuba 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060" Name="$Muted Tp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061" Name="$FrenchHorns" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="$Fr.Horns 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="$Fr.HornSolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="$Horn Orch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062" Name="$Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="$Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="$Brass Fall" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="$SynthBrass1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="$Poly Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="$Syn.Brass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="$Quack Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="$OctaveBrass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064" Name="$Syn.Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="$Soft Brass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="$Syn.Brass 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="$VeloBrass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="$VeloBrass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="*Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="*Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="*Trombone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="*Tuba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060" Name="*MuteTrumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061" Name="*French Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061+" Name="*Fr.Horn 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062" Name="*Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062+" Name="*Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="*Syn.Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="*Syn.Brass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063+" Name="*Analog Brs1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064" Name="*Syn.Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="*Syn.Brass 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064+" Name="*Analog Brs2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047" Name="#Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="048" Name="#Trumpet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="47" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="052" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="51" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="#Trombone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="#Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="060" Name="#Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="59" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="061" Name="#Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="60" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="062" Name="#Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="61" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="063" Name="#Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="62" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="#Syn Brass 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="#Syn Brass 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="#Syn Brass 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="#Syn Brass 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089" Name="#Trumpet 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090" Name="#Trumpet 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091" Name="#Trombone 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092" Name="#Trombone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093" Name="#Fr Horn 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094" Name="#Fr Horn 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095" Name="#Tuba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096" Name="#Brs Sect 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097" Name="#Brs Sect 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Reed" >
+ <PatchNameList>
+ <Patch Number="065" Name="Soprano Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="64" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="065+" Name="Soprano Exp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="64" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066" Name="Alto Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066+" Name="AltoSax Exp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066+" Name="Grow Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066+" Name="AltoSax + Tp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067" Name="Tenor Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067+" Name="Tenor Sax :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067+" Name="BreathyTn.:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067+" Name="St. Tenor Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="068" Name="Baritone Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="67" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="068+" Name="Bari. Sax :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="67" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069" Name="Oboe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069+" Name="Oboe Exp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069+" Name="Multi Reed" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="070" Name="English Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="69" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="071" Name="Bassoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="70" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072" Name="Clarinet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072+" Name="Bs Clarinet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072+" Name="Multi Wind" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="065" Name="$Soprano Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="64" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066" Name="$Alto Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066+" Name="$Hyper Alto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067" Name="$Tenor Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067+" Name="$BreathyTnr." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="068" Name="$BaritoneSax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="67" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069" Name="$Oboe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="070" Name="$EnglishHorn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="69" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="071" Name="$Bassoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="70" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072" Name="$Clarinet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072+" Name="$Bs Clarinet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="065" Name="*Soprano Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="64" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="066" Name="*Alto Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="65" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="067" Name="*Tenor Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="66" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="068" Name="*BaritoneSax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="67" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="069" Name="*Oboe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="68" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="070" Name="*EnglishHorn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="69" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="071" Name="*Bassoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="70" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="072" Name="*Clarinet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="71" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="055" Name="#Alto Sax " >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="54" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="056" Name="#Tenor Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="55" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="#BaritoneSax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="#Alto Sax" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="126" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="043" Name="#Oboe 2001" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="42" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="079" Name="#Sax 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="78" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="080" Name="#Sax 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="79" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081" Name="#Sax 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082" Name="#Sax 4" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083" Name="#Clarinet 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084" Name="#Clarinet 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085" Name="#Oboe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086" Name="#Engl Horn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087" Name="#Bassoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Pipe" >
+ <PatchNameList>
+ <Patch Number="073" Name="Piccolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073+" Name="Piccolo :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073+" Name="Nay" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073+" Name="Nay Tremolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073+" Name="Di" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074" Name="Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074+" Name="Flute 2 :" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074+" Name="Flute Exp." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074+" Name="Flt Travelso" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074+" Name="Flute + Vln" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074+" Name="Tron Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="075" Name="Recorder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="74" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076" Name="Pan Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076+" Name="Kawala" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076+" Name="Zampona" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076+" Name="Zampona Atk" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="077" Name="Bottle Blow" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="76" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="078" Name="Shakuhachi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="77" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="078+" Name="Shakuhachi:" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="77" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="079" Name="Whistle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="78" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="079+" Name="Whistle 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="78" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="080" Name="Ocarina" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="79" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073" Name="$Piccolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074" Name="$Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="075" Name="$Recorder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="74" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076" Name="$Pan Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076+" Name="$Kawala" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="077" Name="$Bottle Blow" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="76" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="078" Name="$Shakuhachi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="77" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="079" Name="$Whistle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="78" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="080" Name="$Ocarina" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="79" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073" Name="*Piccolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074" Name="*Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="075" Name="*Recorder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="74" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076" Name="*Pan Flute" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="077" Name="*Bottle Blow" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="76" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="078" Name="*Shakuhachi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="77" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="079" Name="*Whistle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="78" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="080" Name="*Ocarina" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="79" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="073" Name="#Flute 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="72" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="074" Name="#Flute 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="73" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="075" Name="#Piccolo 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="74" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="076" Name="#Piccolo 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="75" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="077" Name="#Recorder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="76" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="078" Name="#Pan Pipes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="77" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108" Name="#Shakuhachi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="109" Name="#Whistle 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="108" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="110" Name="#Whistle 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="109" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111" Name="#Bottleblow" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112" Name="#Breathpipe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Synth lead" >
+ <PatchNameList>
+ <Patch Number="081" Name="Square Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="MG Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="Hollow Mini" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="Mellow FM" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="CC Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="Shmoog" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="LM Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="2600 Sine" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="Sine Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="KG Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="P5 Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="OB Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="JP-8 Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="Pulse Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="JP8 PulseLd1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="JP8 PulseLd2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="MG Reso. Pls" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="27" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082" Name="Saw Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="OB2 Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Pulse Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Feline GR" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Big Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Velo Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="GR-300" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="LA Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Doctor Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Fat Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="D-50 Fat Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Waspy Synth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="PM Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="CS Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="MG Saw 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="MG Saw 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="OB Saw 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="26" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="OB Saw 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="27" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="D50 Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="28" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="SH-101 Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="29" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="CS Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="30" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="MG Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="31" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="OB Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="P5 Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="MG unison" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="34" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Oct Saw Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="35" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="SequenceSaw1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="40" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="SequenceSaw2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="41" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Reso Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="42" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Cheese Saw 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="43" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Cheese Saw 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="44" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="Rhythmic Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="45" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083" Name="Syn.Calliope" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083+" Name="Vent Synth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083+" Name="Pure PanLead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084" Name="Chiffer Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084+" Name="TB Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084+" Name="Mad Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085" Name="Charang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Dist.Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Acid Guitar1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Acid Guitar2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="P5 Sync Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Fat SyncLead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Rock Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="5th DecaSync" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="Dirty Sync" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="20" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="JUNO Sub Osc" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086" Name="Solo Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086+" Name="Vox Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086+" Name="LFO Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087" Name="5th Saw Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087+" Name="Big Fives" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087+" Name="5th Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087+" Name="5th Ana.Clav" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087+" Name="4th Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088" Name="Bass &amp; Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="Big &amp; Raw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="Fat &amp; Perky" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="JUNO Rave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="JP8 BsLead 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="JP8 BsLead 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="SH-5 Bs.Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081" Name="$Square Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$Hollow Mini" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$Mellow FM" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$CC Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$Shmoog" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$LM Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="$Sine Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082" Name="$Saw Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Pulse Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Feline GR" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Big Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Velo Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$GR-300" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$LA Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Doctor Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="$Waspy Synth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083" Name="$SynCalliope" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083+" Name="$Vent Synth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083+" Name="$PurePanLead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084" Name="$ChifferLead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085" Name="$Charang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085+" Name="$Dist.Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086" Name="$Solo Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087" Name="$5th Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087+" Name="$Big Fives" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088" Name="$Bass &amp; Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="$Big &amp; Raw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088+" Name="$Fat &amp; Perky" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081" Name="*Square Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="*Square" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="081+" Name="*Sine Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="80" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082" Name="*Saw Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="*Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="082+" Name="*Doctor Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="81" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="083" Name="*SynCalliope" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="82" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="084" Name="*ChifferLead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="83" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="085" Name="*Charang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="84" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="086" Name="*Solo Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="85" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="087" Name="*5th Saw" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="86" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="088" Name="*Bass &amp; Lead" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="87" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="045" Name="#Doctor Solo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="44" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="046" Name="#School Daze" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="45" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="047" Name="#Bellsinger" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="46" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="048" Name="#Square Wave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="47" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Synth pad, etc." >
+ <PatchNameList>
+ <Patch Number="089" Name="Fantasia" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089+" Name="Fantasia 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089+" Name="New Age Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089+" Name="Bell Heaven" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090" Name="Warm Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="Thick Matrix" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="Horn Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="Rotary Strng" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="OB Soft Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="Octave Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="Stack Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091" Name="Polysynth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="80's PolySyn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Polysynth 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Poly King" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Power Stack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Octave Stack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Reso Stack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="Techno Stack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092" Name="Space Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="Heaven II" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="SC Heaven" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="Cosmic Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="Auh Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="AuhAuh" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="Vocorderman" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093" Name="Bowed Glass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093+" Name="SoftBellPad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093+" Name="JP8 Sqr Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093+" Name="7thBelPad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094" Name="Metal Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094+" Name="Tine Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094+" Name="Panner Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095" Name="Halo Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095+" Name="Vox Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095+" Name="Vox Sweep" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095+" Name="Horror Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096" Name="Sweep Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="Polar Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="Converge" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="Shwimmer" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="Celestial Pd" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="Bag Sweep" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089" Name="$Fantasia" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089+" Name="$Fantasia 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090" Name="$Warm Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="$Thick Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="$Horn Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="$RotaryStrng" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090+" Name="$Soft Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091" Name="$Polysynth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091+" Name="$80'sPolySyn" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092" Name="$Space Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092+" Name="$Heaven II" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093" Name="$Bowed Glass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094" Name="$Metal Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094+" Name="$Tine Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094+" Name="$Panner Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095" Name="$Halo Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096" Name="$Sweep Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="$Polar Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="$Converge" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="$Shwimmer" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096+" Name="$CelestialPd" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="089" Name="*Fantasia" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="88" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="090" Name="*Warm Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="89" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="091" Name="*Polysynth" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="90" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="092" Name="*Space Voice" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="91" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="093" Name="*Bowed Glass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="92" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="094" Name="*Metal Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="93" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="095" Name="*Halo Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="94" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="096" Name="*Sweep Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="95" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="#Fantasy" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="034" Name="#Harmo Pan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="33" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="035" Name="#Chorale" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="34" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="036" Name="#Glasses" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="35" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Synth SFX" >
+ <PatchNameList>
+ <Patch Number="097" Name="Ice Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="Harmo Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="African wood" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="Anklung Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="Rattle Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="Clavi Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098" Name="Soundtrack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="Ancestral" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="Prologue" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="Prologue 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="Hols Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="Rave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099" Name="Crystal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Syn Mallet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Soft Crystal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Round Glock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Loud Glock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="GlockenChime" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Clear Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="ChristmasBel" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Vibra Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Digi Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Music Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Analog Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Choral Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Air Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Bell Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="Gamelimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="JUNO Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="20" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100" Name="Atmosphere" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Warm Atmos" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Nylon Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Harpvox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="HollowReleas" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Nylon+Rhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Ambient Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Invisible" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Pulsey Key" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="Noise Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101" Name="Brightness" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101+" Name="Shining Star" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101+" Name="OB Stab" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101+" Name="Org Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102" Name="Goblin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Goblinson" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="50's Sci-Fi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Abduction" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Auhbient" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="LFO Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Random Str" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Random Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="LowBirds Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Falling Down" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="LFO RAVE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="LFO Horror" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="LFO Techno" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Alternative" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="13" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="UFO FX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="14" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Gargle Man" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="15" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="Sweep FX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103" Name="Echo Drops" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Echo Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Echo Pan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Echo Pan 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Big Panner" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Reso Panner" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Water Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Pan Sequence" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="Aqua" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104" Name="Star Theme" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="Star Theme 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="Dream Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="Silky Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="New Century" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="7th Atmos." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="Galaxy Way" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097" Name="$Ice Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="$Harmo Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="$AfricanWood" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097+" Name="$Clavi Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098" Name="$Soundtrack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="$Ancestral" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="$Prologue" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098+" Name="$Rave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099" Name="$Crystal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Syn Mallet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$SoftCrystal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Round Glock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Loud Glock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$GlocknChime" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Clear Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Xmas Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Vibra Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Digi Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$ChoralBells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Air Bells" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Bell Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="$Gamelimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100" Name="$Atmosphere" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$Warm Atmos" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$Nylon Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$Harpvox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$HollowRels." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$NylonRhodes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100+" Name="$Ambient Pad" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101" Name="$Brightness" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102" Name="$Goblin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="$Goblinson" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102+" Name="$50's Sci-Fi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103" Name="$Echo Drops" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Echo Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Echo Pan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Echo Pan 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Big Panner" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Reso Panner" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="$Water Piano" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104" Name="$Star Theme" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104+" Name="$Star Theme 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="097" Name="*Ice Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="96" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="098" Name="*Soundtrack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="97" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099" Name="*Crystal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="099+" Name="*Syn Mallet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="98" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100" Name="*Atmosphere" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101" Name="*Brightness" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="102" Name="*Goblin" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="101" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103" Name="*Echo Drops" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="*Echo Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="103+" Name="*Echo Pan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="102" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="104" Name="*Star Theme" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="103" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="037" Name="#Soundtrack" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="36" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="038" Name="#Atmosphere" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="37" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="039" Name="#Warm Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="38" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="040" Name="#Funny Vox" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="39" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="#Echo Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="042" Name="#Ice Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="41" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="044" Name="#Echo Pan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="43" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="100" Name="#Syn Mallet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="99" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="101" Name="#Windbell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="100" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Ethnic, etc." >
+ <PatchNameList>
+ <Patch Number="105" Name="Sitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="Sitar 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="Detune Sitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="Sitar 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="Tambra" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="Tamboura" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106" Name="Banjo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Muted Banjo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Rabab" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="San Xian" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Gopichant" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Oud" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Oud+Strings" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="28" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="Pi Pa" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107" Name="Shamisen" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107+" Name="Tsugaru" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107+" Name="Syn Shamisen" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108" Name="Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="Gu Zheng" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="Taisho Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="Kanoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="Kanoon+Choir" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="Oct Harp" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="109" Name="Kalimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="108" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="109+" Name="Sanza" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="108" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="110" Name="Bagpipe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="109" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="110+" Name="Didgeridoo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="109" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111" Name="Fiddle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111+" Name="Er Hu" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111+" Name="Gao Hu" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112" Name="Shanai" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Shanai 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Pungi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Hichiriki" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Mizmar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Suona 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="Suona 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="33" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105" Name="$Sitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="$Sitar 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="$DetuneSitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="$Tambra" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="$Tamboura" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106" Name="$Banjo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="$Muted Banjo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="$Rabab" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="$Gopichant" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106+" Name="$Oud" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107" Name="$Shamisen" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107+" Name="$Tsugaru" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108" Name="$Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="$Taisho Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="$Kanoon" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="109" Name="$Kalimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="108" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="110" Name="$Bagpipe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="109" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111" Name="$Fiddle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112" Name="$Shanai" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="$Shanai 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="$Pungi" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112+" Name="$Hichiriki" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105" Name="*Sitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="105+" Name="*Sitar 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="104" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106" Name="*Banjo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107" Name="*Shamisen" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108" Name="*Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="108+" Name="*Taisho Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="107" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="109" Name="*Kalimba" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="108" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="110" Name="*Bagpipe" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="109" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="111" Name="*Fiddle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="110" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="112" Name="*Shanai" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="111" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="064#" Name="#Sitar" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="63" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="106#" Name="#Koto" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="105" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="107#" Name="#Sho" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="106" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="Percussive" >
+ <PatchNameList>
+ <Patch Number="113" Name="Tinkle Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="Bonang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="Gender" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="Gamelan Gong" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="St.Gamelan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="Jang Gu" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="RAMA Cymbal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114" Name="Agogo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114+" Name="Atarigane" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114+" Name="Tambourine" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="115" Name="Steel Drums" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="114" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="115+" Name="Island Mlt" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="114" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116" Name="Woodblock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="Castanets" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="Angklung" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="Angkl Rhythm" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="Finger Snaps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="909 HandClap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="32" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117" Name="Taiko" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="Small Taiko" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="Concert BD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="Jungle BD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="Techno BD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="Bounce" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118" Name="Melo. Tom 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="Real Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="Melo. Tom 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="Rock Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="Rash SD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="House SD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="Jungle SD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="909 SD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119" Name="Synth Drum" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="808 Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="Elec Perc" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="Sine Perc." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="606 Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="909 Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120" Name="Reverse Cym." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Reverse Cym2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Reverse Cym3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.Snare 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.Snare 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.Kick 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.ConBD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.Tom 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="Rev.Tom 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113" Name="$Tinkle Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="$Bonang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="$Gender" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="$GamelanGong" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="$St.Gamelan" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113+" Name="$RAMA Cymbal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114" Name="$Agogo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114+" Name="$Atarigane" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="115" Name="$Steel Drums" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="114" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116" Name="$Woodblock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="$Castanets" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117" Name="$Taiko" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="$Concert BD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118" Name="$Melo. Tom 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="$Real Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="$Melo. Tom 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="$Rock Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119" Name="$Synth Drum" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="$808 Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="$Elec Perc" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120" Name="$Reverse Cym" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$ReverseCym2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.Snare 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.Snare 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.Kick 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.ConBD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.Tom 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="24" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120+" Name="$Rev.Tom 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="25" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="113" Name="*Tinkle Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="112" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114" Name="*Agogo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="115" Name="*Steel Drums" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="114" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116" Name="*Woodblock" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116+" Name="*Castanets" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117" Name="*Taiko" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117+" Name="*Concert BD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118" Name="*Melo. Tom 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118+" Name="*Melo. Tom 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119" Name="*Synth Drum" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="*808 Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119+" Name="*Elec Perc" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120" Name="*Reverse Cym" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="114#" Name="#Melodic Tom" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="113" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="115#" Name="#Deep Snare" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="114" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="116#" Name="#Elec Perc 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="115" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="117#" Name="#Elec Perc 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="116" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="118#" Name="#Taiko" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="117" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="119#" Name="#Taiko Rim" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="118" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="120#" Name="#Cymbal" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="119" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121#" Name="#Castanets" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122#" Name="#Triangle" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ <PatchBank Name="SFX" >
+ <PatchNameList>
+ <Patch Number="121" Name="Gt.FretNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Gt.Cut Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="String Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Gt.CutNoise2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Dist.CutNoiz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Bass Slide" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Pick Scrape" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Gtr. FX Menu" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Bartok Pizz." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Guitar Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Chord Stroke" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Biwa Stroke" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="12" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="Biwa Tremolo" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="13" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122" Name="Breath Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122+" Name="Fl.Key Click" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123" Name="Seashore" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Thunder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Wind" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Stream" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Bubble" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Wind 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="Pink Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="White Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124" Name="Bird" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="Dog" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="Horse-Gallop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="Bird 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="Kitty" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="Growl" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125" Name="Telephone 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Telephone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="DoorCreaking" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Door" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Scratch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Wind Chimes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Scratch 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="ScratchKey" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="TapeRewind" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="Phono Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="MC-500 Beep" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126" Name="Helicopter" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Car-Engine" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Car-Stop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Car-Pass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Car-Crash" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Siren" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Train" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Jetplane" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Starship" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Burst Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Calculating" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="10" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="Perc. Bang" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="11" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127" Name="Applause" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Laughing" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Screaming" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Punch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Heart Beat" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Footsteps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Applause 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Small Club" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="ApplauseWave" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Voice One" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="16" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Voice Two" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="17" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Voice Three" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="18" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Voice Tah" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="19" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="Voice Whey" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="20" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128" Name="Gun Shot" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="Machine Gun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="Lasergun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="Explosion" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="Eruption" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="Big Shot" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121" Name="$Gt.FretNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$Gt.CutNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$String Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$Gt.CutNz. 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$Dist.CutNz." >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$Bass Slide" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="$Pick Scrape" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122" Name="$BreathNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122+" Name="$Fl.KeyClick" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123" Name="$Seashore" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="$Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="$Thunder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="$Wind" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="$Stream" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="$Bubble" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124" Name="$Bird" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="$Dog" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="$HorseGallop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="$Bird 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="$Kitty" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="$Growl" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125" Name="$Telephone 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Telephone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Creaking" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Door" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Scratch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Wind Chimes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="$Scratch 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126" Name="$Helicopter" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Car-Engine" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Car-Stop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Car-Pass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Car-Crash" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Siren" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Train" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Jetplane" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Starship" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="$Burst Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127" Name="$Applause" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Laughing" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Screaming" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Punch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Heart Beat" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Footsteps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="$Applause 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128" Name="$Gun Shot" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="$Machine Gun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="$Lasergun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="$Explosion" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121" Name="*Gt.FretNoiz" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="*Gt.CutNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="121+" Name="*String Slap" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="120" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122" Name="*BreathNoise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="122+" Name="*Fl.KeyClick" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="121" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123" Name="*Seashore" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="*Rain" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="*Thunder" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="*Wind" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="*Stream" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="123+" Name="*Bubble" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="122" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124" Name="*Bird" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="*Dog" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="*HorseGallop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124+" Name="*Bird 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125" Name="*Telephone 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="*Telephone 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="*Creaking" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="*Door" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="*Scratch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125+" Name="*Wind Chimes" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126" Name="*Helicopter" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Car-Engine" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Car-Stop" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Car-Pass" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Car-Crash" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Siren" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Train" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="6" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Jetplane" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="7" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Starship" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="8" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126+" Name="*Burst Noise" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="9" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127" Name="*Applause" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="*Laughing" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="*Screaming" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="*Punch" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="*Heart Beat" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="4" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127+" Name="*Footsteps" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="5" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128" Name="*Gun Shot" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="*Machine Gun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="1" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="*Lasergun" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="2" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128+" Name="*Explosion" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="3" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="124#" Name="#Telephone" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="123" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="125#" Name="#Bird Tweet" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="124" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="126#" Name="#OneNote Jam" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="125" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="127#" Name="#Water Bell" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="126" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128#" Name="#Jungle Tune" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="127" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ </ChannelNameSet>
+ <ChannelNameSet Name="Name Set 2" >
+ <AvailableForChannels>
+ <AvailableChannel Channel="1" Available="false" />
+ <AvailableChannel Channel="2" Available="false" />
+ <AvailableChannel Channel="3" Available="false" />
+ <AvailableChannel Channel="4" Available="false" />
+ <AvailableChannel Channel="5" Available="false" />
+ <AvailableChannel Channel="6" Available="false" />
+ <AvailableChannel Channel="7" Available="false" />
+ <AvailableChannel Channel="8" Available="false" />
+ <AvailableChannel Channel="9" Available="false" />
+ <AvailableChannel Channel="10" Available="true" />
+ <AvailableChannel Channel="11" Available="false" />
+ <AvailableChannel Channel="12" Available="false" />
+ <AvailableChannel Channel="13" Available="false" />
+ <AvailableChannel Channel="14" Available="false" />
+ <AvailableChannel Channel="15" Available="false" />
+ <AvailableChannel Channel="16" Available="false" />
+ </AvailableForChannels>
+ <PatchBank Name="Drum sets" >
+ <PatchNameList>
+ <Patch Number="001" Name="STANDARD 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="STANDARD 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="003" Name="STANDARD 3" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="2" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="ROOM" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="010" Name="HIP HOP" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="9" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="011" Name="JUNGLE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="10" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="012" Name="TECHNO" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="11" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="POWER" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="ELECTRONIC" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="TR-808" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="DANCE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="028" Name="CR-78" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="27" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="029" Name="TR-606" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="28" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="030" Name="TR-707" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="29" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="031" Name="TR-909" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="30" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="JAZZ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="BRUSH" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="ORCHESTRA" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="ETHNIC" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="KICK &amp; SNARE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="053" Name="ASIA" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="52" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="054" Name="CYMBAL&amp;CLAPS" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="53" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="SFX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="RHYTHM FX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="059" Name="RHYTHM FX 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="3" />
+ <ProgramChange Number="58" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="$STANDARD 1" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="002" Name="$STANDARD 2" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="1" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="$ROOM" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="$POWER" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="$ELECTRONIC" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="$TR-808/909" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="027" Name="$DANCE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="26" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="$JAZZ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="$BRUSH" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="$ORCHESTRA" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="050" Name="$ETHNIC" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="49" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="051" Name="$KICK &amp; SNARE" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="50" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="$SFX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="058" Name="$RHYTHM FX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="2" />
+ <ProgramChange Number="57" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="001" Name="*STANDARD" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="0" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="009" Name="*ROOM" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="8" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="017" Name="*POWER" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="16" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="025" Name="*ELECTRONIC" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="24" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="026" Name="*TR-808" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="25" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="033" Name="*JAZZ" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="32" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="041" Name="*BRUSH" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="40" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="049" Name="*ORCHESTRA" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="48" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="057" Name="*SFX" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="56" />
+ </PatchMIDICommands>
+ </Patch>
+ <Patch Number="128" Name="#CM-64/32L" >
+ <PatchMIDICommands>
+ <ControlChange Control="0" Value="0" />
+ <ControlChange Control="32" Value="1" />
+ <ProgramChange Number="127" />
+ </PatchMIDICommands>
+ </Patch>
+ </PatchNameList>
+ </PatchBank>
+ </ChannelNameSet>
+ </MasterDeviceNames>
+</MIDINameDocument> \ No newline at end of file
diff --git a/libs/pbd/tests/RosegardenPatchFile.xml b/libs/pbd/tests/RosegardenPatchFile.xml
new file mode 100644
index 0000000000..11db71560f
--- /dev/null
+++ b/libs/pbd/tests/RosegardenPatchFile.xml
@@ -0,0 +1,519 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE rosegarden-data>
+<rosegarden-data version="1.5.1">
+<studio thrufilter="0" recordfilter="0" audioinputpairs="2" mixerdisplayoptions="0" metronomedevice="0">
+
+
+ <device id="0" name="Roland E-09 GM Banks" direction="play" variation="MSB" connection="16:0 ES1371 (duplex)" type="midi">
+
+ <librarian name="Sasha Clarkson" email="sashaclarkson@yahoo.co.uk"/>
+ <metronome instrument="2009" barpitch="37" beatpitch="37" subbeatpitch="37" depth="2" barvelocity="120" beatvelocity="100" subbeatvelocity="80"/>
+
+ <bank name="GM2 Standard" percussion="false" msb="0" lsb="2">
+ <program id="0" name="Piano 1" />
+ <program id="1" name="Piano 2" />
+ <program id="2" name="Piano 3" />
+ <program id="3" name="Honkytonk" />
+ <program id="4" name="E.Piano 1" />
+ <program id="5" name="E.Piano 2" />
+ <program id="6" name="Harpsi 1" />
+ <program id="7" name="Clav" />
+ <program id="8" name="Celesta" />
+ <program id="9" name="Glocken" />
+ <program id="10" name="Music Box" />
+ <program id="11" name="Vibraphone" />
+ <program id="12" name="Marimba" />
+ <program id="13" name="Xylophone" />
+ <program id="14" name="Tublr Bell" />
+ <program id="15" name="Santur 1" />
+ <program id="16" name="Organ 1" />
+ <program id="17" name="Organ 2" />
+ <program id="18" name="Organ 3" />
+ <program id="19" name="ChurchOrg1" />
+ <program id="20" name="Reed Organ" />
+ <program id="21" name="Accrdn Fr" />
+ <program id="22" name="Harmonica1" />
+ <program id="23" name="Bandoneon" />
+ <program id="24" name="Nylon Gt 1" />
+ <program id="25" name="StlStr Gt1" />
+ <program id="26" name="Jazz Gt 1" />
+ <program id="27" name="Clean Gt 1" />
+ <program id="28" name="Muted Gt" />
+ <program id="29" name="Overdrive" />
+ <program id="30" name="Dist Gt 1" />
+ <program id="31" name="E.Gt Harm" />
+ <program id="32" name="Ac.Bass 1" />
+ <program id="33" name="Fingrd Bs1" />
+ <program id="34" name="Pick Bass1" />
+ <program id="35" name="Frtlss Bs1" />
+ <program id="36" name="Slap Bass1" />
+ <program id="37" name="Slap Bass2" />
+ <program id="38" name="Syn Bass 1" />
+ <program id="39" name="Syn Bass 2" />
+ <program id="40" name="Violin 1" />
+ <program id="41" name="Viola 1" />
+ <program id="42" name="Cello 1" />
+ <program id="43" name="Contrabass" />
+ <program id="44" name="Trem Str" />
+ <program id="45" name="Pizz Str" />
+ <program id="46" name="Harp" />
+ <program id="47" name="Timpani" />
+ <program id="48" name="Strings 1" />
+ <program id="49" name="Slow Str 1" />
+ <program id="50" name="SynStrings" />
+ <program id="51" name="Syn Str 2" />
+ <program id="52" name="ChoirAahs1" />
+ <program id="53" name="Voice Doos" />
+ <program id="54" name="Syn Vox" />
+ <program id="55" name="Orch Hit" />
+ <program id="56" name="Trumpet 1" />
+ <program id="57" name="Trombone 1" />
+ <program id="58" name="Tuba 1" />
+ <program id="59" name="Mute Tp 1" />
+ <program id="60" name="Fr.Horns 1" />
+ <program id="61" name="Brass 1" />
+ <program id="62" name="Syn Brass1" />
+ <program id="63" name="Syn Brass2" />
+ <program id="64" name="Sop Sax 1" />
+ <program id="65" name="Alto Sax 1" />
+ <program id="66" name="Tenor Sax1" />
+ <program id="67" name="Baritn Sax" />
+ <program id="68" name="Oboe" />
+ <program id="69" name="EnglshHorn" />
+ <program id="70" name="Bassoon" />
+ <program id="71" name="JzClarinet" />
+ <program id="72" name="Piccolo" />
+ <program id="73" name="Flute" />
+ <program id="74" name="Recorder" />
+ <program id="75" name="Pan Flute" />
+ <program id="76" name="BottleBlow" />
+ <program id="77" name="Shakuhachi" />
+ <program id="78" name="Whistle" />
+ <program id="79" name="Ocarina" />
+ <program id="80" name="SquareWave" />
+ <program id="81" name="Saw Wave 1" />
+ <program id="82" name="SynCalliop" />
+ <program id="83" name="Chiffer Ld" />
+ <program id="84" name="Charang" />
+ <program id="85" name="Solo Vox" />
+ <program id="86" name="5thSawWave" />
+ <program id="87" name="Bass and Lead" />
+ <program id="88" name="Fantasia 1" />
+ <program id="89" name="Warm Pad" />
+ <program id="90" name="Poly Syn" />
+ <program id="91" name="SpaceVoice" />
+ <program id="92" name="BowedGlass" />
+ <program id="93" name="Metal Pad" />
+ <program id="94" name="Halo Pad" />
+ <program id="95" name="Sweep Pad" />
+ <program id="96" name="Ice Rain" />
+ <program id="97" name="Soundtrack" />
+ <program id="98" name="Crystal" />
+ <program id="99" name="Atmosphere" />
+ <program id="100" name="Brightness" />
+ <program id="101" name="Goblin" />
+ <program id="102" name="Echo Drops" />
+ <program id="103" name="StarTheme1" />
+ <program id="104" name="Sitar 1" />
+ <program id="105" name="Banjo 1" />
+ <program id="106" name="Shamisen" />
+ <program id="107" name="Koto" />
+ <program id="108" name="Kalimba 1" />
+ <program id="109" name="Bagpipe" />
+ <program id="110" name="Fiddle" />
+ <program id="111" name="Shehnai 1" />
+ <program id="112" name="TinkleBell" />
+ <program id="113" name="Agogo Bell" />
+ <program id="114" name="SteelDrums" />
+ <program id="115" name="Woodblock" />
+ <program id="116" name="Taiko" />
+ <program id="117" name="Melo Tom 1" />
+ <program id="118" name="Synth Drum" />
+ <program id="119" name="RevCymbal1" />
+ <program id="120" name="Gt Fret Nz" />
+ <program id="121" name="Breath Nz" />
+ <program id="122" name="Seashore" />
+ <program id="123" name="Bird 1" />
+ <program id="124" name="Telephone1" />
+ <program id="125" name="Helicopter" />
+ <program id="126" name="Applause 1" />
+ <program id="127" name="Gun Shot" />
+ </bank>
+
+ <bank name="Alternative 1" percussion="false" msb="1" lsb="2">
+ <program id="2" name="EG+EP 1" />
+ <program id="11" name="Hard Vibe" />
+ <program id="15" name="Santur 2" />
+ <program id="16" name="Organ 101" />
+ <program id="17" name="Organ 201" />
+ <program id="22" name="Harmonica2" />
+ <program id="26" name="Mellow Gt" />
+ <program id="27" name="Clean Gt 2" />
+ <program id="28" name="Mt Dist Bs" />
+ <program id="30" name="Dist Gt 2" />
+ <program id="32" name="Ac.Bass 2" />
+ <program id="33" name="Fingrd Bs2" />
+ <program id="35" name="Frtlss Bs2" />
+ <program id="38" name="Syn Bs 101" />
+ <program id="39" name="Syn Bs 201" />
+ <program id="40" name="Violin 2" />
+ <program id="41" name="Viola 2" />
+ <program id="42" name="Cello 2" />
+ <program id="48" name="Strings 2" />
+ <program id="49" name="Slow Str 2" />
+ <program id="50" name="OB Strings" />
+ <program id="51" name="Syn Str 3" />
+ <program id="55" name="Bass Hit" />
+ <program id="56" name="Trumpet 2" />
+ <program id="57" name="Trombone 2" />
+ <program id="58" name="Tuba 2" />
+ <program id="60" name="Fr.Horns 2" />
+ <program id="61" name="Brass 2" />
+ <program id="62" name="Poly Brass" />
+ <program id="63" name="Soft Brass" />
+ <program id="65" name="Alto Sax 2" />
+ <program id="66" name="Tenor Sax2" />
+ <program id="71" name="Clarinet" />
+ <program id="80" name="Square" />
+ <program id="81" name="P5 Saw" />
+ <program id="82" name="Vent Synth" />
+ <program id="84" name="Wire Lead" />
+ <program id="86" name="Big Fives" />
+ <program id="87" name="Big and Raw" />
+ <program id="88" name="Fantasia 2" />
+ <program id="89" name="Thick Pad" />
+ <program id="90" name="80sPolySyn" />
+ <program id="91" name="Heaven II" />
+ <program id="93" name="Tine Pad" />
+ <program id="95" name="Polar Pad" />
+ <program id="96" name="Harm Rain" />
+ <program id="97" name="Ancestral" />
+ <program id="98" name="Syn Mallet" />
+ <program id="99" name="Warm Atoms" />
+ <program id="102" name="Echo Bell" />
+ <program id="103" name="StarTheme2" />
+ <program id="104" name="Sitar 2" />
+ <program id="105" name="Mute Banjo" />
+ <program id="106" name="Tsugaru" />
+ <program id="111" name="Shehnai 2" />
+ <program id="117" name="Real Tom" />
+ <program id="119" name="RevCymbal2" />
+ <program id="120" name="Gt CutNz 1" />
+ <program id="121" name="FlKeyClick" />
+ <program id="122" name="Rain" />
+ <program id="123" name="Dog" />
+ <program id="124" name="Telephone2" />
+ <program id="125" name="Car Engine" />
+ <program id="126" name="Laughing" />
+ <program id="127" name="MachineGun" />
+ </bank>
+
+ <bank name="Alternative 2" percussion="false" msb="2" lsb="2">
+ <program id="2" name="EG+EP 2" />
+ <program id="26" name="Jazz Gt 2" />
+ <program id="30" name="Dazed Gt" />
+ <program id="32" name="Ac.Bass 3" />
+ <program id="33" name="Jazz Bass" />
+ <program id="35" name="Frtlss Bs3" />
+ <program id="38" name="Juno Bass" />
+ <program id="39" name="Mod Bass" />
+ <program id="50" name="Syn Str 1" />
+ <program id="55" name="6th Hit" />
+ <program id="56" name="Trumpet 3" />
+ <program id="57" name="Trombone 3" />
+ <program id="59" name="Mute Tp 2" />
+ <program id="80" name="Hollow Min" />
+ <program id="81" name="Pulse Saw" />
+ <program id="82" name="PurePan Ld" />
+ <program id="87" name="Fat and Perky" />
+ <program id="89" name="Horn Pad" />
+ <program id="93" name="Panner Pad" />
+ <program id="96" name="African wd" />
+ <program id="97" name="Prologue" />
+ <program id="98" name="Sft Crystl" />
+ <program id="99" name="Nylon Harp" />
+ <program id="101" name="50s Sci-Fi" />
+ <program id="102" name="Echo Pan 1" />
+ <program id="104" name="Dtnd Sitar" />
+ <program id="120" name="Str Slap" />
+ <program id="122" name="Thunder" />
+ <program id="123" name="HorseGallp" />
+ <program id="124" name="Door Creak" />
+ <program id="125" name="Car-Stop" />
+ <program id="126" name="Screaming" />
+ <program id="127" name="Laser Gun" />
+ </bank>
+
+ <bank name="Alternative 8" percussion="false" msb="8" lsb="2">
+ <program id="0" name="St.Piano 1" />
+ <program id="1" name="St.Piano 2" />
+ <program id="2" name="St.Piano 3" />
+ <program id="3" name="OldUpright" />
+ <program id="4" name="St.Soft EP" />
+ <program id="5" name="Detuned EP" />
+ <program id="6" name="CoupledHps" />
+ <program id="7" name="Comp Clav" />
+ <program id="11" name="St.Vibe" />
+ <program id="12" name="St.Marimba" />
+ <program id="14" name="ChurchBell" />
+ <program id="15" name="Cimbalom" />
+ <program id="16" name="Trem Organ" />
+ <program id="17" name="Chorus Org" />
+ <program id="18" name="Rotary Org" />
+ <program id="19" name="ChurchOrg2" />
+ <program id="21" name="Accrdn It" />
+ <program id="24" name="Ukulele" />
+ <program id="25" name="12 Str Gt" />
+ <program id="26" name="PedalSteel" />
+ <program id="27" name="Chorus Gt" />
+ <program id="28" name="Funk Pop" />
+ <program id="30" name="Feedback 1" />
+ <program id="31" name="Feedback 3" />
+ <program id="34" name="Mt Pick Bs" />
+ <program id="35" name="Frtlss Bs5" />
+ <program id="36" name="Reso Slap" />
+ <program id="38" name="Acid Bass" />
+ <program id="39" name="Beef FM Bs" />
+ <program id="40" name="SlowVioln1" />
+ <program id="44" name="Slow Trem" />
+ <program id="48" name="Orchestra1" />
+ <program id="49" name="Legato Str" />
+ <program id="50" name="70s Str 1" />
+ <program id="52" name="St.Choir" />
+ <program id="54" name="Syn Voice" />
+ <program id="55" name="Impact Hit" />
+ <program id="56" name="FlugelHorn" />
+ <program id="60" name="FrHornSolo" />
+ <program id="61" name="Brass 3" />
+ <program id="62" name="Syn Brass3" />
+ <program id="63" name="Syn Brass4" />
+ <program id="64" name="Sop Sax 2" />
+ <program id="65" name="Hyper Alto" />
+ <program id="66" name="Blow Tenor" />
+ <program id="71" name="BsClarinet" />
+ <program id="75" name="Kawala 1" />
+ <program id="80" name="Sine Wave" />
+ <program id="81" name="Dr.Solo" />
+ <program id="84" name="Dist Lead" />
+ <program id="95" name="Converge" />
+ <program id="96" name="Clav Pad" />
+ <program id="97" name="Rave" />
+ <program id="98" name="VibraBells" />
+ <program id="105" name="Rabab 1" />
+ <program id="107" name="TaishoKoto" />
+ <program id="111" name="Pungi" />
+ <program id="112" name="Bonang 1" />
+ <program id="113" name="Atarigane" />
+ <program id="115" name="Castanets" />
+ <program id="116" name="Concert BD" />
+ <program id="117" name="Melo Tom 2" />
+ <program id="118" name="808 Tom" />
+ <program id="119" name="Rev Snare1" />
+ <program id="125" name="Starship" />
+ </bank>
+
+ <bank name="Alternative 16" percussion="false" msb="16" lsb="2">
+ <program id="0" name="EuropeanPf" />
+ <program id="4" name="FM+SA EP" />
+ <program id="5" name="St.FM EP" />
+ <program id="6" name="St.Harpsi" />
+ <program id="12" name="Balafon 1" />
+ <program id="16" name="60s Organ1" />
+ <program id="18" name="RotarySlow" />
+ <program id="19" name="ChurchOrg3" />
+ <program id="20" name="Puff Organ" />
+ <program id="24" name="Nylon Gt 2" />
+ <program id="25" name="Mandolin" />
+ <program id="28" name="Funk Gt" />
+ <program id="30" name="Power Gt 1" />
+ <program id="31" name="Ac.Gt Harm" />
+ <program id="38" name="Reso SH Bs" />
+ <program id="39" name="RubberBass" />
+ <program id="48" name="St.Strings" />
+ <program id="55" name="Lo-Fi Rave" />
+ <program id="60" name="Horn Orch" />
+ <program id="61" name="Brass Fall" />
+ <program id="62" name="OctSynBrss" />
+ <program id="63" name="VeloBrass1" />
+ <program id="80" name="DistSquare" />
+ <program id="81" name="Waspy Syn" />
+ <program id="98" name="Choir and Bell" />
+ <program id="105" name="Gopichant" />
+ <program id="107" name="Kanoon 1" />
+ <program id="111" name="Hichiriki" />
+ <program id="112" name="RamaCymbal" />
+ <program id="119" name="Rev Kick" />
+ </bank>
+
+ <bank name="Standard" percussion="true" msb="0" lsb="2">
+ <program id="0" name="Standard 1" />
+ <program id="1" name="Standard 2" />
+ <program id="2" name="Standard 3" />
+ <program id="8" name="Room" />
+ <program id="9" name="Hip Hop" />
+ <program id="10" name="Drum’n’Bss" />
+ <program id="11" name="Tech and House" />
+ <program id="13" name="R and B" />
+ <program id="16" name="Power" />
+ <program id="24" name="Electronic" />
+ <program id="25" name="TR-808 and 909" />
+ <program id="26" name="Dance" />
+ <program id="30" name="New TR-909" />
+ <program id="32" name="Jazz Kit 1" />
+ <program id="33" name="Jazz Kit 2" />
+ <program id="40" name="Brush Kit" />
+ <program id="48" name="Orchestra" />
+ <program id="49" name="Ethnic" />
+ <program id="50" name="Kick and Snare" />
+ <program id="56" name="SFX" />
+ </bank>
+
+ <bank name="Extra" percussion="true" msb="0" lsb="3">
+ <program id="116" name="OR Kit 2" />
+ </bank>
+
+ <bank name="Ethnic" percussion="true" msb="0" lsb="4">
+ <program id="43" name="China Perc" />
+ <program id="44" name="India Perc" />
+ <program id="45" name="GamelanPrc" />
+ <program id="46" name="Latin Perc" />
+ <program id="66" name="Std Asia" />
+ <program id="67" name="Jazz Asia" />
+ <program id="68" name="TR909 Asia" />
+ <program id="69" name="HipHopAsia" />
+ <program id="70" name="R and B Asia" />
+ <program id="71" name="TechnoAsia" />
+ <program id="72" name="D’n’B Asia" />
+ <program id="74" name="Std Latin" />
+ <program id="75" name="Jazz Latin" />
+ <program id="76" name="TR909Latin" />
+ <program id="77" name="TechnoLatn" />
+ <program id="78" name="D’n’B Latn" />
+ <program id="79" name="HipHopLatn" />
+ <program id="80" name="R and B Latin" />
+ <program id="81" name="Std OR1" />
+ <program id="82" name="Jazz OR1" />
+ <program id="83" name="TR-909 OR1" />
+ <program id="84" name="Techno OR1" />
+ <program id="85" name="D’n’B OR1" />
+ <program id="86" name="HipHop OR1" />
+ <program id="87" name="R and B OR1" />
+ <program id="88" name="MxKit and Latn" />
+ <program id="89" name="MxKt and India" />
+ <program id="90" name="MxKit and Chin" />
+ <program id="91" name="MxKit and OR1" />
+ <program id="92" name="OR Kit 1" />
+ <program id="93" name="India Kit" />
+ <program id="94" name="OrientPerc" />
+ <program id="95" name="Std OR2" />
+ <program id="96" name="Jazz OR2" />
+ <program id="97" name="TR-909 OR2" />
+ <program id="98" name="HipHop OR2" />
+ <program id="99" name="R and B OR2" />
+ <program id="100" name="Techno OR2" />
+ <program id="101" name="D’n’B OR2" />
+ <program id="102" name="MxKit and OR2" />
+ </bank>
+
+ <controls>
+ <control name="Pan" type="controller" description="&lt;none&gt;" min="0" max="127" default="64" controllervalue="10" colourindex="2" ipbposition="0"/>
+ <control name="Chorus" type="controller" description="&lt;none&gt;" min="0" max="127" default="0" controllervalue="93" colourindex="3" ipbposition="1"/>
+ <control name="Volume" type="controller" description="&lt;none&gt;" min="0" max="127" default="0" controllervalue="7" colourindex="1" ipbposition="2"/>
+ <control name="Reverb" type="controller" description="&lt;none&gt;" min="0" max="127" default="0" controllervalue="91" colourindex="3" ipbposition="3"/>
+ <control name="Sustain" type="controller" description="&lt;none&gt;" min="0" max="127" default="0" controllervalue="64" colourindex="4" ipbposition="-1"/>
+ <control name="Expression" type="controller" description="&lt;none&gt;" min="0" max="127" default="100" controllervalue="11" colourindex="2" ipbposition="-1"/>
+ <control name="Modulation" type="controller" description="&lt;none&gt;" min="0" max="127" default="0" controllervalue="1" colourindex="4" ipbposition="-1"/>
+ <control name="PitchBend" type="pitchbend" description="&lt;none&gt;" min="0" max="16383" default="8192" controllervalue="1" colourindex="4" ipbposition="-1"/>
+ </controls>
+
+ <instrument id="2000" channel="0" type="midi">
+ <bank percussion="false" msb="0" lsb="2"/>
+ <program id="0"/>
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2001" channel="1" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2002" channel="2" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2003" channel="3" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2004" channel="4" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2005" channel="5" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2006" channel="6" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2007" channel="7" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2008" channel="8" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2009" channel="9" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2010" channel="10" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2011" channel="11" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2012" channel="12" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2013" channel="13" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2014" channel="14" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ <instrument id="2015" channel="15" type="midi">
+ <pan value="64"/>
+ <volume value="100"/>
+ </instrument>
+
+ </device>
+
+
+
+
+</studio>
+
+
+</rosegarden-data>
diff --git a/libs/pbd/tests/TestSession.ardour b/libs/pbd/tests/TestSession.ardour
new file mode 100644
index 0000000000..d3bffd33a5
--- /dev/null
+++ b/libs/pbd/tests/TestSession.ardour
@@ -0,0 +1,3392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Session version="2.0.0" name="BookPoint25Jan2008" sample-rate="44100" id-counter="55596">
+ <Config>
+ <Option name="output-auto-connect" value="2"/>
+ <Option name="input-auto-connect" value="1"/>
+ <Option name="mtc-port-name" value="control"/>
+ <Option name="mmc-port-name" value="control"/>
+ <Option name="midi-port-name" value="control"/>
+ <Option name="mmc-control" value="0"/>
+ <Option name="edit-mode" value="11015"/>
+ <Option name="monitoring-model" value="1"/>
+ <Option name="all-safe" value="0"/>
+ <Option name="clicking" value="0"/>
+ <Option name="auto-play" value="0"/>
+ <Option name="auto-return" value="0"/>
+ <Option name="auto-input" value="1"/>
+ <Option name="punch-in" value="1"/>
+ <Option name="punch-out" value="1"/>
+ <Option name="seamless-loop" value="1"/>
+ <Option name="rf-speed" value="2"/>
+ <Option name="shuttle-speed-factor" value="1"/>
+ <Option name="shuttle-speed-threshold" value="5"/>
+ <Option name="slave-source" value="0"/>
+ <Option name="meter-hold" value="100"/>
+ <Option name="meter-falloff" value="32"/>
+ <Option name="save-history-depth" value="100"/>
+ <Option name="history-depth" value="100"/>
+ <Option name="default-narrow_ms" value="0"/>
+ <end-marker-is-free val="no"/>
+ </Config>
+ <Sources>
+ <Source name="Guitar clean-1.wav" id="14361" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Guitar-2.wav" id="14457" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-2%L.wav" id="14470" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-2%R.wav" id="14472" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Sax Analog-2.wav" id="14485" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Guitar-3.wav" id="14556" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-3%L.wav" id="14569" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-3%R.wav" id="14571" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-2.wav" id="14584" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-3.wav" id="14597" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Guitar-4.wav" id="14637" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-4%L.wav" id="14650" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-4%R.wav" id="14652" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-3.wav" id="14665" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-4.wav" id="14678" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Guitar-5.wav" id="14717" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-5%L.wav" id="14730" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-5%R.wav" id="14732" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-4.wav" id="14745" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-5.wav" id="14758" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Guitar-6.wav" id="14797" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-6%L.wav" id="14810" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-6%R.wav" id="14812" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-5.wav" id="14825" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-6.wav" id="14839" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Vocal1-3.wav" id="15601" captured-for="Vocal1" flags="" channel="0"/>
+ <Source name="Guitar-7.wav" id="15607" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-7%L.wav" id="15609" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-7%R.wav" id="15611" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-6.wav" id="15613" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-7.wav" id="15615" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Guitar-8.wav" id="15815" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-8%L.wav" id="15828" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-8%R.wav" id="15830" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-7.wav" id="15843" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-8.wav" id="15856" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Vocal1-4.wav" id="15902" captured-for="Vocal1" flags="" channel="0"/>
+ <Source name="Guitar-9.wav" id="15915" captured-for="Guitar" flags="" channel="0"/>
+ <Source name="Keyboard-9%L.wav" id="15928" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Keyboard-9%R.wav" id="15930" captured-for="Keyboard" flags="" channel="0"/>
+ <Source name="Guitar clean-8.wav" id="15943" captured-for="Guitar clean" flags="" channel="0"/>
+ <Source name="Sax Analog-9.wav" id="15956" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-1.wav" id="30179" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-10.wav" id="30406" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-12.wav" id="30709" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-13.wav" id="30735" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-15.wav" id="30796" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-11.wav" id="31371" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-16.wav" id="31390" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-18.wav" id="31579" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-14.wav" id="31622" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-20.wav" id="31644" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-17.wav" id="31979" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-19.wav" id="32006" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-21.wav" id="32038" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-23.wav" id="36735" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-24.wav" id="36968" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-22.wav" id="36998" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-25.wav" id="37029" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-26.wav" id="38497" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-29.wav" id="38836" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-27.wav" id="38871" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-28.wav" id="38926" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-30.wav" id="38965" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-34.wav" id="39141" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-33.wav" id="39208" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-35.wav" id="42079" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-36.wav" id="47440" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-37.wav" id="49381" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-38.wav" id="49455" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-40.wav" id="49521" captured-for="Sax Analog" flags="" channel="0"/>
+ <Source name="Sax Analog-41.wav" id="49617" captured-for="Sax Analog" flags="" channel="0"/>
+ </Sources>
+ <Regions>
+ <Region id="14545" name="Guitar-2" start="0" length="23484096" position="1999229" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14457" channels="1" master-source-0="14457">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14558" name="Keyboard-2" start="0" length="23484096" position="1999229" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14470" source-1="14472" channels="2" master-source-0="14470" master-source-1="14472">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14573" name="Guitar clean-1" start="0" length="23484096" position="1999226" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14361" channels="1" master-source-0="14361">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14586" name="Sax Analog-2" start="0" length="23484096" position="1999226" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14485" channels="1" master-source-0="14485">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14626" name="Guitar-3" start="0" length="21616701" position="25483395" ancestral-start="0" ancestral-length="21616701" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14556" channels="1" master-source-0="14556">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14639" name="Keyboard-3" start="0" length="21616701" position="25483395" ancestral-start="0" ancestral-length="21616701" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14569" source-1="14571" channels="2" master-source-0="14569" master-source-1="14571">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14654" name="Guitar clean-2" start="0" length="21616698" position="25483398" ancestral-start="0" ancestral-length="21616698" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14584" channels="1" master-source-0="14584">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14667" name="Sax Analog-3" start="0" length="21616698" position="25483398" ancestral-start="0" ancestral-length="21616698" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14597" channels="1" master-source-0="14597">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14706" name="Guitar-4" start="0" length="49923645" position="47100163" ancestral-start="0" ancestral-length="49923645" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14637" channels="1" master-source-0="14637">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14711" name="Guitar-4.1" start="1555424" length="48368221" position="48655587" ancestral-start="0" ancestral-length="49923645" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14637" channels="1" master-source-0="14637">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14719" name="Keyboard-4" start="0" length="49923645" position="47100163" ancestral-start="0" ancestral-length="49923645" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14650" source-1="14652" channels="2" master-source-0="14650" master-source-1="14652">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14724" name="Keyboard-4.1" start="1555424" length="48368221" position="48655587" ancestral-start="0" ancestral-length="49923645" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14650" source-1="14652" channels="2" master-source-0="14650" master-source-1="14652">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14734" name="Guitar clean-3" start="0" length="49923642" position="47100166" ancestral-start="0" ancestral-length="49923642" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14665" channels="1" master-source-0="14665">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14739" name="Guitar clean-3.1" start="0" length="49923642" position="47100166" ancestral-start="0" ancestral-length="49923642" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14665" channels="1" master-source-0="14665">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14747" name="Sax Analog-4" start="0" length="49923642" position="47100166" ancestral-start="0" ancestral-length="49923642" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14678" channels="1" master-source-0="14678">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14752" name="Sax Analog-4.1" start="5054531" length="44869111" position="52154697" ancestral-start="0" ancestral-length="49923642" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14678" channels="1" master-source-0="14678">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="20215" default="1" min_yval="0" max_yval="2" max_xval="44869111" state="Off" style="Absolute">
+ <events>0 0.945643
+4.48691e+07 1
+4.48691e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14786" name="Guitar-5" start="0" length="19038717" position="97023875" ancestral-start="0" ancestral-length="19038717" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14717" channels="1" master-source-0="14717">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14799" name="Keyboard-5" start="0" length="19038717" position="97023875" ancestral-start="0" ancestral-length="19038717" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14730" source-1="14732" channels="2" master-source-0="14730" master-source-1="14732">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14814" name="Guitar clean-4" start="0" length="19038714" position="97023878" ancestral-start="0" ancestral-length="19038714" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14745" channels="1" master-source-0="14745">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14827" name="Sax Analog-5" start="0" length="19038714" position="97023878" ancestral-start="0" ancestral-length="19038714" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14758" channels="1" master-source-0="14758">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14866" name="Guitar-6" start="0" length="103562173" position="116062659" ancestral-start="0" ancestral-length="103562173" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14871" name="Guitar-6.1" start="2618212" length="100943961" position="118680871" ancestral-start="0" ancestral-length="103562173" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="20267" default="1" min_yval="0" max_yval="2" max_xval="100943961" state="Off" style="Absolute">
+ <events>0 1
+1.29824e+07 1.00019
+1.30507e+07 2
+1.42752e+07 2
+1.44042e+07 1.00019
+2.79031e+07 1.00019
+2.79729e+07 1.88026
+3.21798e+07 2
+3.22396e+07 1.00019
+1.00944e+08 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14879" name="Keyboard-6" start="0" length="103562173" position="116062659" ancestral-start="0" ancestral-length="103562173" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14884" name="Keyboard-6.1" start="2618212" length="100943961" position="118680871" ancestral-start="0" ancestral-length="103562173" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14894" name="Guitar clean-5" start="0" length="103562170" position="116062662" ancestral-start="0" ancestral-length="103562170" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14825" channels="1" master-source-0="14825">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14907" name="Sax Analog-6" start="0" length="103562170" position="116062662" ancestral-start="0" ancestral-length="103562170" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="14912" name="Sax Analog-6.1" start="2618212" length="100943958" position="118680874" ancestral-start="0" ancestral-length="103562170" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="20225" default="1" min_yval="0" max_yval="2" max_xval="100943958" state="Off" style="Absolute">
+ <events>0 0
+5.08932e+06 0
+5.32422e+06 1.00019
+1.14314e+07 1.01536
+1.14575e+07 0
+1.5268e+07 0
+1.54246e+07 0.996323
+3.0505e+07 1.09402
+3.05449e+07 0.287178
+3.19203e+07 0.287178
+3.19505e+07 0
+3.37848e+07 0
+3.38048e+07 0.559071
+3.49113e+07 0.569296
+3.5001e+07 0
+1.00944e+08 0.999982
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15804" name="Guitar-7" start="0" length="59080509" position="219624899" ancestral-start="0" ancestral-length="59080509" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15607" channels="1" master-source-0="15607">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15809" name="Guitar-7.1" start="19857992" length="39035711" position="239482891" ancestral-start="0" ancestral-length="59080509" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15607" channels="1" master-source-0="15607">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15817" name="Keyboard-7" start="0" length="59080509" position="219624899" ancestral-start="0" ancestral-length="59080509" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15609" source-1="15611" channels="2" master-source-0="15609" master-source-1="15611">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15822" name="Keyboard-7.1" start="19857992" length="39035711" position="239482891" ancestral-start="0" ancestral-length="59080509" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15609" source-1="15611" channels="2" master-source-0="15609" master-source-1="15611">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15832" name="Guitar clean-6" start="0" length="59080506" position="219624902" ancestral-start="0" ancestral-length="59080506" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15613" channels="1" master-source-0="15613">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15845" name="Sax Analog-7" start="0" length="59080506" position="219624902" ancestral-start="0" ancestral-length="59080506" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15615" channels="1" master-source-0="15615">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15850" name="Sax Analog-7.1" start="19857989" length="39035711" position="239482891" ancestral-start="0" ancestral-length="59080506" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15615" channels="1" master-source-0="15615">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15891" name="Vocal1-3" start="0" length="17624061" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15601" channels="1" master-source-0="15601">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15904" name="Guitar-8" start="0" length="17624061" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15815" channels="1" master-source-0="15815">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15917" name="Keyboard-8" start="0" length="17624061" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15828" source-1="15830" channels="2" master-source-0="15828" master-source-1="15830">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15932" name="Guitar clean-7" start="0" length="17624058" position="278705478" ancestral-start="0" ancestral-length="17624058" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15843" channels="1" master-source-0="15843">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15945" name="Sax Analog-8" start="0" length="17624058" position="278705478" ancestral-start="0" ancestral-length="17624058" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15856" channels="1" master-source-0="15856">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="15990" name="Vocal1-4" start="0" length="15979773" position="296329603" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15902" channels="1" master-source-0="15902">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="16003" name="Guitar-9" start="0" length="15979773" position="296329603" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15915" channels="1" master-source-0="15915">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="16016" name="Keyboard-9" start="0" length="15979773" position="296329603" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15928" source-1="15930" channels="2" master-source-0="15928" master-source-1="15930">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="16031" name="Guitar clean-8" start="0" length="15979770" position="296329606" ancestral-start="0" ancestral-length="15979770" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15943" channels="1" master-source-0="15943">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="16044" name="Sax Analog-9" start="0" length="15979770" position="296329606" ancestral-start="0" ancestral-length="15979770" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="15956" channels="1" master-source-0="15956">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="17254" name="Sax Analog-6.5" start="51993229" length="8868137" position="168055891" ancestral-start="51993229" ancestral-length="51568939" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1.18232405186" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="17270" name="Guitar-6.5" start="51993232" length="8868137" position="168055891" ancestral-start="51993232" ancestral-length="51568939" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1.18238317966" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="17285" name="Guitar clean-5.5" start="51993229" length="8868137" position="168055891" ancestral-start="51993229" ancestral-length="51568939" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1.78929579258" source-0="14825" channels="1" master-source-0="14825">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="17300" name="Keyboard-6.5" start="51993232" length="8868137" position="168055891" ancestral-start="51993232" ancestral-length="51568939" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="2.24578332901" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21668" name="Sax Analog-6.3" start="39475018" length="64087152" position="155537680" ancestral-start="34922826" ancestral-length="66021132" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21671" default="1" min_yval="0" max_yval="2" max_xval="64087152" state="Off" style="Absolute">
+ <events>0 0
+1.16637e+06 0
+1.20624e+06 1.09402
+5.87651e+06 1.11432
+5.8875e+06 0
+1.03768e+07 0.00032384
+1.03878e+07 1.03465
+6.40872e+07 0.999999
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21683" name="Guitar-6.3" start="39475021" length="64087152" position="155537680" ancestral-start="34922829" ancestral-length="66021132" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21686" default="1" min_yval="0" max_yval="2" max_xval="64087152" state="Off" style="Absolute">
+ <events>-1.44935e+08 0.83721
+0 1.00017
+5.84425e+06 1.00019
+5.98942e+06 1.93949
+8.1941e+06 2
+8.23151e+06 1.03465
+9.89292e+06 1.01928
+1.00168e+07 2
+1.0522e+07 2
+1.05975e+07 1.01536
+6.40872e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21698" name="Keyboard-6.3" start="39475021" length="64087152" position="155537680" ancestral-start="34922829" ancestral-length="66021132" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22019" name="Sax Analog-6.14" start="60757649" length="42804521" position="176820311" ancestral-start="46981133" ancestral-length="52028845" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22022" default="1" min_yval="0" max_yval="2" max_xval="42804521" state="Off" style="Absolute">
+ <events>0 1.02847
+4.28045e+07 0.999999
+4.28045e+07 0.999999
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22034" name="Guitar-6.14" start="60757652" length="42804521" position="176820311" ancestral-start="46981136" ancestral-length="52028845" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22037" default="1" min_yval="0" max_yval="2" max_xval="42804521" state="Off" style="Absolute">
+ <events>0 1.01196
+4.28045e+07 1
+4.28045e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22049" name="Keyboard-6.14" start="60757652" length="42804521" position="176820311" ancestral-start="46981136" ancestral-length="52028845" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22893" name="Vocal1-3.5" start="14595593" length="3028466" position="293301068" ancestral-start="14595593" ancestral-length="3028466" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15601" channels="1" master-source-0="15601">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22909" name="Sax Analog-8.5" start="14595590" length="3028466" position="293301068" ancestral-start="14595590" ancestral-length="3028466" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15856" channels="1" master-source-0="15856">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22924" name="Guitar-8.5" start="14595593" length="3028466" position="293301068" ancestral-start="14595593" ancestral-length="3028466" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15815" channels="1" master-source-0="15815">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22939" name="Keyboard-8.5" start="14595593" length="3028466" position="293301068" ancestral-start="14595593" ancestral-length="3028466" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15828" source-1="15830" channels="2" master-source-0="15828" master-source-1="15830">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22942" default="1" min_yval="0" max_yval="2" max_xval="3028466" state="Off" style="Absolute">
+ <events>0 0.693863
+2.96421e+06 0.708776
+3.02847e+06 0.999446
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="30381" name="Sax Analog-1" start="0" length="6673894" position="3756071" ancestral-start="0" ancestral-length="6673894" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="30179" channels="1" master-source-0="30179">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="30411" name="Sax Analog-10" start="0" length="308541" position="0" ancestral-start="0" ancestral-length="308541" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="30406" channels="1" master-source-0="30406">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="30416" name="Sax Analog-10.1" start="0" length="308541" position="0" ancestral-start="0" ancestral-length="308541" stretch="1" shift="1" first_edit="nothing" layer="19" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="30406" channels="1" master-source-0="30406">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="30718" name="Sax Analog-12" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="30709" channels="1" master-source-0="30709">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="30723" name="Sax Analog-12.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="20" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="30709" channels="1" master-source-0="30709">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="30744" name="Sax Analog-13" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="30735" channels="1" master-source-0="30735">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="30749" name="Sax Analog-13.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="21" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="30735" channels="1" master-source-0="30735">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31376" name="Sax Analog-11" start="0" length="351805" position="0" ancestral-start="0" ancestral-length="351805" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31371" channels="1" master-source-0="31371">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31381" name="Sax Analog-11.1" start="0" length="351805" position="0" ancestral-start="0" ancestral-length="351805" stretch="1" shift="1" first_edit="nothing" layer="20" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31371" channels="1" master-source-0="31371">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31399" name="Sax Analog-16" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31390" channels="1" master-source-0="31390">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31404" name="Sax Analog-16.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="21" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31390" channels="1" master-source-0="31390">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31588" name="Sax Analog-18" start="0" length="6673894" position="3756071" ancestral-start="0" ancestral-length="6673894" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31579" channels="1" master-source-0="31579">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31593" name="Sax Analog-18.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="21" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31579" channels="1" master-source-0="31579">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31627" name="Sax Analog-14" start="0" length="156285" position="0" ancestral-start="0" ancestral-length="156285" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31622" channels="1" master-source-0="31622">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31632" name="Sax Analog-14.1" start="0" length="156285" position="0" ancestral-start="0" ancestral-length="156285" stretch="1" shift="1" first_edit="nothing" layer="22" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31622" channels="1" master-source-0="31622">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31959" name="Sax Analog-20" start="0" length="6240429" position="3756071" ancestral-start="0" ancestral-length="6240429" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31644" channels="1" master-source-0="31644">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31964" name="Sax Analog-20.1" start="0" length="6240429" position="3756071" ancestral-start="0" ancestral-length="6240429" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31644" channels="1" master-source-0="31644">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31986" name="Sax Analog-17" start="0" length="668360" position="0" ancestral-start="0" ancestral-length="668360" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="31979" channels="1" master-source-0="31979">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="31991" name="Sax Analog-17.1" start="0" length="668360" position="0" ancestral-start="0" ancestral-length="668360" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="31979" channels="1" master-source-0="31979">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="32606" name="Sax Analog-21" start="0" length="6271498" position="3756071" ancestral-start="0" ancestral-length="6271498" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="32038" channels="1" master-source-0="32038">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="32611" name="Sax Analog-21.1" start="0" length="6271498" position="3756071" ancestral-start="0" ancestral-length="6271498" stretch="1" shift="1" first_edit="nothing" layer="24" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="32038" channels="1" master-source-0="32038">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="36744" name="Sax Analog-23" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="36735" channels="1" master-source-0="36735">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="36749" name="Sax Analog-23.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="24" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="36735" channels="1" master-source-0="36735">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="36977" name="Sax Analog-24" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="36968" channels="1" master-source-0="36968">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="37006" name="Sax Analog-22" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="36998" channels="1" master-source-0="36998">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="37038" name="Sax Analog-25" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="37029" channels="1" master-source-0="37029">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="37043" name="Sax Analog-25.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="26" sync-position="0" flags="DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="37029" channels="1" master-source-0="37029">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="38689" name="Sax Analog-26" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="38497" channels="1" master-source-0="38497">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="38694" name="Sax Analog-26.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="22" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="38497" channels="1" master-source-0="38497">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="38845" name="Sax Analog-29" start="0" length="2902419" position="3756071" ancestral-start="0" ancestral-length="2902419" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="38836" channels="1" master-source-0="38836">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="38850" name="Sax Analog-29.1" start="0" length="2902419" position="3756071" ancestral-start="0" ancestral-length="2902419" stretch="1" shift="1" first_edit="nothing" layer="22" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="38836" channels="1" master-source-0="38836">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="38900" name="Sax Analog-27" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="38871" channels="1" master-source-0="38871">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="38905" name="Sax Analog-27.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="22" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="38871" channels="1" master-source-0="38871">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="38935" name="Sax Analog-28" start="0" length="1963165" position="3756071" ancestral-start="0" ancestral-length="1963165" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="38926" channels="1" master-source-0="38926">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="38940" name="Sax Analog-28.1" start="0" length="1963165" position="3756071" ancestral-start="0" ancestral-length="1963165" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="38926" channels="1" master-source-0="38926">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="38982" name="Sax Analog-30" start="0" length="2490654" position="3756071" ancestral-start="0" ancestral-length="2490654" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="38965" channels="1" master-source-0="38965">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="38987" name="Sax Analog-30.1" start="0" length="2490654" position="3756071" ancestral-start="0" ancestral-length="2490654" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="38965" channels="1" master-source-0="38965">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="39150" name="Sax Analog-34" start="0" length="6673894" position="3756071" ancestral-start="0" ancestral-length="6673894" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="39141" channels="1" master-source-0="39141">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="39155" name="Sax Analog-34.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="39141" channels="1" master-source-0="39141">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="39213" name="Sax Analog-33" start="0" length="109562" position="0" ancestral-start="0" ancestral-length="109562" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="39208" channels="1" master-source-0="39208">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="39218" name="Sax Analog-33.1" start="0" length="109562" position="0" ancestral-start="0" ancestral-length="109562" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="39208" channels="1" master-source-0="39208">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="42195" name="Sax Analog-35" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="42079" channels="1" master-source-0="42079">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="42200" name="Sax Analog-35.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="25" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="42079" channels="1" master-source-0="42079">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="47608" name="Sax Analog-36" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="47440" channels="1" master-source-0="47440">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="49391" name="Sax Analog-37" start="0" length="6673894" position="3756071" ancestral-start="0" ancestral-length="6673894" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="49381" channels="1" master-source-0="49381">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="49460" name="Sax Analog-38" start="0" length="50362" position="0" ancestral-start="0" ancestral-length="50362" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="49455" channels="1" master-source-0="49455">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="49529" name="Sax Analog-40" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="49521" channels="1" master-source-0="49521">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ <Region id="49626" name="Sax Analog-41" start="0" length="5550642" position="3756071" ancestral-start="0" ancestral-length="5550642" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,WholeFile,FadeIn,FadeOut" scale-gain="1" source-0="49617" channels="1" master-source-0="49617">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ </Region>
+ </Regions>
+ <DiskStreams>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Vocal1" speed="1" name="Vocal1" id="91"/>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Vocal2" speed="1" name="Vocal2" id="108"/>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Sax" speed="1" name="Sax" id="123"/>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Guitar" speed="1" name="Guitar" id="138"/>
+ <AudioDiskstream flags="Recordable" channels="2" playlist="Keyboard" speed="1" name="Keyboard" id="159"/>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Guitar clean" speed="1" name="Guitar clean" id="8831"/>
+ <AudioDiskstream flags="Recordable" channels="1" playlist="Sax Analog" speed="1" name="Sax Analog" id="9282"/>
+ </DiskStreams>
+ <Locations>
+ <Location id="13180" name="Anfang" start="0" end="0" flags="IsMark,IsStart" locked="no"/>
+ <Location id="19553" name="01-SoundCheck" start="1999229" end="24434440" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="13542" name="Punch" start="3756071" end="10429901" flags="IsAutoPunch" locked="no"/>
+ <Location id="22222" name="02-PopSong" start="26355161" end="44503619" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="51432" name="Thema" start="28520731" end="31351217" flags="IsRangeMarker" locked="no"/>
+ <Location id="22231" name="03-KnownBossa" start="48655587" end="62922768" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="51975" name="Schleife" start="62922769" end="97023808" flags="IsAutoLoop" locked="no"/>
+ <Location id="22240" name="04-BluesyPopSong" start="67907696" end="93709222" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="42353" name="A-Teil" start="68936346" end="70196425" flags="IsRangeMarker" locked="no"/>
+ <Location id="42368" name="B-Teil" start="70199756" end="71376385" flags="IsRangeMarker" locked="no"/>
+ <Location id="42374" name="C-Teil" start="71378548" end="72730373" flags="IsRangeMarker" locked="no"/>
+ <Location id="21392" name="05-Easy" start="97467562" end="114204505" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="21731" name="06-Black Orpheus" start="118680874" end="153603699" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="22074" name="07-Lullaby of Birdland" start="155537680" end="167595986" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="22159" name="08-Summertime" start="176820311" end="194729255" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="22333" name="09-SaxLickPopSong" start="158760000" end="219054001" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="52045" name="Verse" start="201648010" end="201648010" flags="IsMark" locked="no"/>
+ <Location id="44090" name="VerseRiff" start="202285001" end="203535169" flags="IsRangeMarker" locked="no"/>
+ <Location id="22479" name="10-PopBallad" start="230207880" end="236403110" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="52055" name="Thema" start="222195294" end="222195294" flags="IsMark" locked="no"/>
+ <Location id="22527" name="11-Close To You-Instrumental" start="239482891" end="261198164" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="22635" name="12-Route 66" start="263276478" end="278344873" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="24910" name="13-Outside The Rain Began" start="278716806" end="292344780" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="24903" name="14-Close To You-Vocal" start="300111349" end="311562149" flags="IsCDMarker,IsRangeMarker" locked="no">
+ <CD-Info name="composer" value="Various"/>
+ <CD-Info name="performer" value="TatokAntonHans"/>
+ </Location>
+ <Location id="52063" name="Thema" start="301953144" end="301953144" flags="IsMark" locked="no"/>
+ <Location id="52072" name="B-Teil" start="303880379" end="304799522" flags="IsRangeMarker" locked="no"/>
+ <Location id="13181" name="Ende" start="312309440" end="312309440" flags="IsMark,IsEnd" locked="no"/>
+ </Locations>
+ <Connections/>
+ <Routes>
+ <Route flags="MasterOut" default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=0:signal=0">
+ <IO name="master" id="19" active="yes" inputs="{Reverb/out 1,Keyboard/out 1,Guitar clean/out 1,Guitar/out 1,Sax Analog/out 1,Sax/out 1,Vocals/out 1,Vocal2/out 1,Vocal1/out 1}{Reverb/out 2,Keyboard/out 2,Guitar clean/out 2,Guitar/out 2,Sax Analog/out 2,Sax/out 2,Vocals/out 2,Vocal2/out 2,Vocal1/out 2}" outputs="{alsa_pcm:playback_1}{alsa_pcm:playback_2}" gain="0.888838410378" iolimits="-1,2,-1,2">
+ <Panner linked="yes" link_direction="OppositeDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.484848558903" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="75" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="74"/>
+ </StreamPanner>
+ <StreamPanner x="0.515151500702" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="78" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="77"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="20"/>
+ <Automation>
+ <AutomationList id="13204" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="23"/>
+ <controllable name="mute" id="24"/>
+ <remote_control id="1"/>
+ <Insert type="ladspa" unique-id="1901" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="DJ EQ" id="38875" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="38876"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <controllable name="Lo gain (dB)" id="38879"/>
+ <port number="1" value="+0.000000"/>
+ <controllable name="Mid gain (dB)" id="38881"/>
+ <port number="2" value="-9.010328"/>
+ <controllable name="Hi gain (dB)" id="38883"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="38879" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="38881" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="38883" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="38880" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="38882" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="38884" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <extra>
+ <GUI color="42954:32449:29913" shown_mixer="yes" shown_editor="yes" track_height="normal">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=1:signal=1" mode="Normal" diskstream-id="91">
+ <IO name="Vocal1" id="84" active="yes" inputs="{alsa_pcm:capture_1}" outputs="{Vocals/in 1,master/in 1}{Vocals/in 2,master/in 2}" gain="1.259130716324" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8064" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8063"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="85"/>
+ <Automation>
+ <AutomationList id="13216" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="88"/>
+ <controllable name="mute" id="89"/>
+ <remote_control id="2"/>
+ <Insert type="ladspa" unique-id="1907" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="DJ EQ (mono)" id="8875" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8876"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <controllable name="Lo gain (dB)" id="13985"/>
+ <port number="1" value="+0.000000"/>
+ <controllable name="Mid gain (dB)" id="13986"/>
+ <port number="2" value="-10.969069"/>
+ <controllable name="Hi gain (dB)" id="13987"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="13985" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="13986" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="13987" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="8884" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="8885" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="8886" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <extra>
+ <GUI color="4753:32745:31282" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55027"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=2:signal=2" mode="Normal" diskstream-id="108">
+ <IO name="Vocal2" id="101" active="yes" inputs="{alsa_pcm:capture_2}" outputs="{Vocals/in 1,master/in 1}{Vocals/in 2,master/in 2}" gain="0.999999940395" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="113" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="112"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="102"/>
+ <Automation>
+ <AutomationList id="13226" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="105"/>
+ <controllable name="mute" id="106"/>
+ <remote_control id="3"/>
+ <Insert type="ladspa" unique-id="1907" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="DJ EQ (mono)" id="8880" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8881"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <port number="1" value="+0.000000"/>
+ <port number="2" value="+0.000000"/>
+ </ladspa>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="8887" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="8888" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="8889" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <extra>
+ <GUI color="44751:45361:14681" shown_mixer="no" track_height="normal" shown_editor="no" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55037"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=3:signal=3">
+ <IO name="Vocals" id="175" active="yes" inputs="{Vocal2/out 1,Vocal1/out 1}{Vocal2/out 2,Vocal1/out 2}" outputs="{master/in 1}{master/in 2}" gain="1.723705410957" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="183" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="182"/>
+ </StreamPanner>
+ <StreamPanner x="1" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="186" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="185"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="176"/>
+ <Automation>
+ <AutomationList id="13236" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="179"/>
+ <controllable name="mute" id="180"/>
+ <remote_control id="4"/>
+ <Insert type="ladspa" unique-id="1901" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="DJ EQ" id="8859" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8860"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <controllable name="Lo gain (dB)" id="8863"/>
+ <port number="1" value="-1.958763"/>
+ <controllable name="Mid gain (dB)" id="8865"/>
+ <port number="2" value="-9.278351"/>
+ <controllable name="Hi gain (dB)" id="8867"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="8863" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="8865" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="8867" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="8864" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="8866" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="8868" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="1068" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Amplifier (Stereo)" id="22748" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="22749"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+4.000000"/>
+ <controllable name="Gain" id="22752"/>
+ </ladspa>
+ <controls>
+ <controllable name="Gain" id="22752" parameter="0"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="22753" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Send bitslot="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Send 2" id="8777" active="yes" inputs="" outputs="{Reverb/in 1}{Reverb/in 2}" gain="0.153675407171" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8783" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8782"/>
+ </StreamPanner>
+ <StreamPanner x="1" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8786" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8785"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="8778"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ </Send>
+ <extra>
+ <GUI color="45813:32382:11263" track_height="normal" shown_mixer="yes" shown_editor="no" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ </Route>
+ <Route default-type="audio" muted="yes" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=4:signal=4" mode="Normal" diskstream-id="123">
+ <IO name="Sax" id="116" active="yes" inputs="{alsa_pcm:capture_10}" outputs="{master/in 1}{master/in 2}" gain="0.992923974991" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8706" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8705"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="117"/>
+ <Automation>
+ <AutomationList id="13248" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="120"/>
+ <controllable name="mute" id="121"/>
+ <remote_control id="5"/>
+ <Insert type="ladspa" unique-id="1907" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="DJ EQ (mono)" id="8897" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8898"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <controllable name="Lo gain (dB)" id="8918"/>
+ <port number="1" value="-0.000026"/>
+ <controllable name="Mid gain (dB)" id="8919"/>
+ <port number="2" value="-10.969076"/>
+ <controllable name="Hi gain (dB)" id="8920"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="8918" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="8919" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="8920" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="8902" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="8903" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="8904" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Send bitslot="0">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Send 1" id="8754" active="yes" inputs="" outputs="{Reverb/in 1}{Reverb/in 2}" gain="0.204929262400" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8760" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8759"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="8755"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ </Send>
+ <extra>
+ <GUI color="27599:26320:35771" shown_mixer="no" track_height="normal" shown_editor="no" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55059"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=5:signal=5" mode="Normal" diskstream-id="9282">
+ <IO name="Sax Analog" id="9275" active="yes" inputs="{alsa_pcm:capture_8}" outputs="{master/in 1}{master/in 2}" gain="0.516950190067" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.666666686535" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="9287" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="9286"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="9276"/>
+ <Automation>
+ <AutomationList id="13258" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="9279"/>
+ <controllable name="mute" id="9280"/>
+ <remote_control id="6"/>
+ <Send bitslot="3">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Send 4" id="9661" active="yes" inputs="" outputs="{Reverb/in 1}{Reverb/in 2}" gain="0.188051998615" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="9667" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="9666"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="9662"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ </Send>
+ <extra>
+ <GUI color="13014:22241:36296" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55069"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=6:signal=6" mode="Normal" diskstream-id="138">
+ <IO name="Guitar" id="131" active="yes" inputs="{alsa_pcm:capture_3}" outputs="{master/in 1}{master/in 2}" gain="0.298304080963" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.212121218443" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="143" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="142"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="132"/>
+ <Automation>
+ <AutomationList id="13268" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="135"/>
+ <controllable name="mute" id="136"/>
+ <remote_control id="7"/>
+ <Insert type="ladspa" unique-id="1907" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="DJ EQ (mono)" id="602" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="603"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+1.958763"/>
+ <controllable name="Lo gain (dB)" id="606"/>
+ <port number="1" value="-1.567014"/>
+ <controllable name="Mid gain (dB)" id="608"/>
+ <port number="2" value="-12.412366"/>
+ <controllable name="Hi gain (dB)" id="610"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="606" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="608" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="610" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="607" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="609" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="611" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="1048" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Mono Amplifier" id="18666" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="18667"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+4.000000"/>
+ <controllable name="Gain" id="18670"/>
+ </ladspa>
+ <controls>
+ <controllable name="Gain" id="18670" parameter="0"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="18671" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Send bitslot="2">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Send 3" id="9298" active="yes" inputs="" outputs="{Reverb/in 1}{Reverb/in 2}" gain="0.043564416468" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="9304" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="9303"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="9299"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ </Send>
+ <extra>
+ <GUI color="22134:13930:46120" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55079"/>
+ </Route>
+ <Route default-type="audio" muted="yes" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=7:signal=7" mode="Normal" diskstream-id="8831">
+ <IO name="Guitar clean" id="8824" active="yes" inputs="{alsa_pcm:capture_4}" outputs="{master/in 1}{master/in 2}" gain="1.000000000000" iolimits="1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0.5" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8836" default="0.5" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8835"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="8825"/>
+ <Automation>
+ <AutomationList id="13278" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="8828"/>
+ <controllable name="mute" id="8829"/>
+ <remote_control id="8"/>
+ <Insert type="vst" unique-id="1648644921" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="Boss DS-1" id="45898" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="45899"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <vst>
+ <parameters param_0="0.5" param_1="0.5" param_2="0.8125"/>
+ </vst>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="45922" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="45923" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="45924" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="vst" unique-id="1649624121" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="Boss SD-1" id="45903" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="45904"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <vst>
+ <parameters param_0="0.5" param_1="0.5" param_2="0.8125"/>
+ </vst>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="45925" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="45926" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="45927" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="vst" unique-id="1245924665" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="JCM900" id="45908" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="45909"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <vst>
+ <parameters param_0="0" param_1="0.5" param_2="0.5" param_3="0.5" param_4="0.5" param_5="0.5" param_6="0" param_7="0.875" param_8="0" param_9="0"/>
+ </vst>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="45928" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="45929" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="45930" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="3">
+ <AutomationList id="45931" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="4">
+ <AutomationList id="45932" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="5">
+ <AutomationList id="45933" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="6">
+ <AutomationList id="45934" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="7">
+ <AutomationList id="45935" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="8">
+ <AutomationList id="45936" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="9">
+ <AutomationList id="45937" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="vst" unique-id="1867535161" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="PS-1" id="45913" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="45914"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <vst>
+ <parameters param_0="0.5" param_1="0.5"/>
+ </vst>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="45938" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="45939" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="vst" unique-id="1415008854" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="Rednef Twin" id="45918" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="45919"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <vst>
+ <parameters param_0="0.9921875" param_1="0.875" param_2="0.5" param_3="0.5" param_4="0.5" param_5="0.5" param_6="0"/>
+ </vst>
+ <controls/>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="45940" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="45941" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="45942" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="3">
+ <AutomationList id="45943" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="4">
+ <AutomationList id="45944" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="5">
+ <AutomationList id="45945" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="6">
+ <AutomationList id="45946" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <extra>
+ <GUI color="28248:46605:39585" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55089"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=8:signal=8" mode="Normal" diskstream-id="159">
+ <IO name="Keyboard" id="152" active="yes" inputs="{alsa_pcm:capture_5}{alsa_pcm:capture_6}" outputs="{master/in 1}{master/in 2}" gain="0.888838410378" iolimits="1,-1,-1,-1">
+ <Panner linked="yes" link_direction="OppositeDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="164" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="163"/>
+ </StreamPanner>
+ <StreamPanner x="1" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="167" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="166"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="153"/>
+ <Automation>
+ <AutomationList id="13288" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="156"/>
+ <controllable name="mute" id="157"/>
+ <remote_control id="9"/>
+ <Insert type="ladspa" unique-id="1901" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="DJ EQ" id="8848" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8849"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+6.000000"/>
+ <controllable name="Lo gain (dB)" id="8852"/>
+ <port number="1" value="-7.443299"/>
+ <controllable name="Mid gain (dB)" id="8854"/>
+ <port number="2" value="-7.835052"/>
+ <controllable name="Hi gain (dB)" id="8856"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="8852" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="8854" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="8856" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="8853" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="8855" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="8857" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Send bitslot="4">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Send 5" id="13567" active="yes" inputs="" outputs="{Reverb/in 1}{Reverb/in 2}" gain="0.159596890211" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="0" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="13573" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="13572"/>
+ </StreamPanner>
+ <StreamPanner x="1" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="13576" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="13575"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="13568"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ </Send>
+ <extra>
+ <GUI color="11656:16611:26947" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ <alignment style="ExistingMaterial"/>
+ <controllable name="recenable" id="55102"/>
+ </Route>
+ <Route default-type="audio" muted="no" soloed="no" phase-invert="no" denormal-protection="no" mute-affects-pre-fader="yes" mute-affects-post-fader="yes" mute-affects-control-outs="yes" mute-affects-main-outs="yes" order-keys="editor=9:signal=9">
+ <IO name="Reverb" id="8708" active="yes" inputs="{Send 5/out 1,Send 3/out 1,Send 4/out 1,Send 1/out 1,Send 2/out 1}{Send 5/out 2,Send 3/out 2,Send 4/out 2,Send 1/out 2,Send 2/out 2}" outputs="{master/in 1}{master/in 2}" gain="0.549319982529" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="OppositeDirection" bypassed="no">
+ <Output x="0" y="0"/>
+ <Output x="1" y="0"/>
+ <StreamPanner x="5.96046447754e-08" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8716" default="0" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8715"/>
+ </StreamPanner>
+ <StreamPanner x="1" type="Equal Power Stereo" muted="no">
+ <Automation>
+ <AutomationList id="8719" default="1" min_yval="0" max_yval="1" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ <controllable name="panner" id="8718"/>
+ </StreamPanner>
+ </Panner>
+ <controllable name="gaincontrol" id="8709"/>
+ <Automation>
+ <AutomationList id="13301" default="0" min_yval="0" max_yval="0" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ <controllable name="solo" id="8712"/>
+ <controllable name="mute" id="8713"/>
+ <remote_control id="10"/>
+ <Insert type="ladspa" unique-id="1901" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="DJ EQ" id="9308" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="9309"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+0.000000"/>
+ <controllable name="Lo gain (dB)" id="9312"/>
+ <port number="1" value="-25.340206"/>
+ <controllable name="Mid gain (dB)" id="9314"/>
+ <port number="2" value="-55.505154"/>
+ <controllable name="Hi gain (dB)" id="9316"/>
+ </ladspa>
+ <controls>
+ <controllable name="Lo gain (dB)" id="9312" parameter="0"/>
+ <controllable name="Mid gain (dB)" id="9314" parameter="1"/>
+ <controllable name="Hi gain (dB)" id="9316" parameter="2"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="9313" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="9315" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="9317" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="1123" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="Freeverb (Version 3)" id="8762" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="8763"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="4" value="+0.000000"/>
+ <controllable name="Freeze Mode" id="8766"/>
+ <port number="5" value="+0.402062"/>
+ <controllable name="Room Size" id="8767"/>
+ <port number="6" value="+0.500000"/>
+ <controllable name="Damping" id="8769"/>
+ <port number="7" value="+1.000000"/>
+ <controllable name="Wet Level" id="8771"/>
+ <port number="8" value="+0.000100"/>
+ <controllable name="Dry Level" id="8773"/>
+ <port number="9" value="+0.737113"/>
+ <controllable name="Width" id="8775"/>
+ </ladspa>
+ <controls>
+ <controllable name="Freeze Mode" id="8766" parameter="4"/>
+ <controllable name="Room Size" id="8767" parameter="5"/>
+ <controllable name="Damping" id="8769" parameter="6"/>
+ <controllable name="Wet Level" id="8771" parameter="7"/>
+ <controllable name="Dry Level" id="8773" parameter="8"/>
+ <controllable name="Width" id="8775" parameter="9"/>
+ </controls>
+ <PortAutomation>
+ <port number="4">
+ <AutomationList id="8787" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="5">
+ <AutomationList id="8768" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="6">
+ <AutomationList id="8770" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="7">
+ <AutomationList id="8772" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="8">
+ <AutomationList id="8774" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="9">
+ <AutomationList id="8776" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="2142" count="1">
+ <Redirect active="no" placement="PostFader">
+ <IO name="TAP Reverberator" id="9324" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="9325"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+2500.000000"/>
+ <controllable name="Decay [ms]" id="9328"/>
+ <port number="1" value="-70.000000"/>
+ <controllable name="Dry Level [dB]" id="9330"/>
+ <port number="2" value="+0.000000"/>
+ <controllable name="Wet Level [dB]" id="9332"/>
+ <port number="3" value="+1.000000"/>
+ <controllable name="Comb Filters" id="9334"/>
+ <port number="4" value="+1.000000"/>
+ <controllable name="Allpass Filters" id="9336"/>
+ <port number="5" value="+1.000000"/>
+ <controllable name="Bandpass Filter" id="9338"/>
+ <port number="6" value="+1.000000"/>
+ <controllable name="Enhanced Stereo" id="9340"/>
+ <port number="7" value="+15.000000"/>
+ <controllable name="Reverb Type" id="9342"/>
+ </ladspa>
+ <controls>
+ <controllable name="Decay [ms]" id="9328" parameter="0"/>
+ <controllable name="Dry Level [dB]" id="9330" parameter="1"/>
+ <controllable name="Wet Level [dB]" id="9332" parameter="2"/>
+ <controllable name="Comb Filters" id="9334" parameter="3"/>
+ <controllable name="Allpass Filters" id="9336" parameter="4"/>
+ <controllable name="Bandpass Filter" id="9338" parameter="5"/>
+ <controllable name="Enhanced Stereo" id="9340" parameter="6"/>
+ <controllable name="Reverb Type" id="9342" parameter="7"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="9329" default="2500" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="1">
+ <AutomationList id="9331" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="2">
+ <AutomationList id="9333" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="3">
+ <AutomationList id="9335" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="4">
+ <AutomationList id="9337" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="5">
+ <AutomationList id="9339" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="6">
+ <AutomationList id="9341" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="7">
+ <AutomationList id="9343" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="1950" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Stereo reverb" id="12495" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="12496"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="4" value="+56.185566"/>
+ <controllable name="Room size" id="12499"/>
+ <port number="5" value="+2.266000"/>
+ <controllable name="Reverb time" id="12501"/>
+ <port number="6" value="+1.000000"/>
+ <controllable name="Input BW" id="12503"/>
+ <port number="7" value="+0.752577"/>
+ <controllable name="Damping" id="12505"/>
+ <port number="8" value="-80.000000"/>
+ <controllable name="Dry sound" id="12507"/>
+ <port number="9" value="-11.546391"/>
+ <controllable name="Reflections" id="12509"/>
+ <port number="10" value="-16.907217"/>
+ <controllable name="Reverb tail" id="12511"/>
+ </ladspa>
+ <controls>
+ <controllable name="Room size" id="12499" parameter="4"/>
+ <controllable name="Reverb time" id="12501" parameter="5"/>
+ <controllable name="Input BW" id="12503" parameter="6"/>
+ <controllable name="Damping" id="12505" parameter="7"/>
+ <controllable name="Dry sound" id="12507" parameter="8"/>
+ <controllable name="Reflections" id="12509" parameter="9"/>
+ <controllable name="Reverb tail" id="12511" parameter="10"/>
+ </controls>
+ <PortAutomation>
+ <port number="4">
+ <AutomationList id="12500" default="10" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="5">
+ <AutomationList id="12502" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="6">
+ <AutomationList id="12504" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="7">
+ <AutomationList id="12506" default="0" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="8">
+ <AutomationList id="12508" default="-80" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="9">
+ <AutomationList id="12510" default="-80" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ <port number="10">
+ <AutomationList id="12512" default="-80" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <Insert type="ladspa" unique-id="1049" count="1">
+ <Redirect active="yes" placement="PostFader">
+ <IO name="Stereo Amplifier" id="12518" active="yes" inputs="" outputs="" gain="1.000000000000" iolimits="-1,-1,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="12519"/>
+ <Automation>
+ <Automation/>
+ </Automation>
+ </IO>
+ <Automation visible=""/>
+ </Redirect>
+ <ladspa>
+ <port number="0" value="+3.814533"/>
+ <controllable name="Gain" id="12522"/>
+ </ladspa>
+ <controls>
+ <controllable name="Gain" id="12522" parameter="0"/>
+ </controls>
+ <PortAutomation>
+ <port number="0">
+ <AutomationList id="12523" default="1" min_yval="1" max_yval="3" max_xval="0" state="Off" style="Absolute"/>
+ </port>
+ </PortAutomation>
+ </Insert>
+ <extra>
+ <GUI color="23284:24313:1573" shown_mixer="yes" shown_editor="yes" track_height="normal" strip_width="Wide">
+ <gain track_height="normal" shown="no"/>
+ <pan track_height="normal" shown="no"/>
+ </GUI>
+ </extra>
+ </Route>
+ </Routes>
+ <EditGroups/>
+ <MixGroups/>
+ <Playlists>
+ <Playlist name="Keyboard" orig_diskstream_id="159" frozen="no">
+ <Region id="14563" name="Keyboard-2.1" start="0" length="22435212" position="1999229" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14470" source-1="14472" channels="2" master-source-0="14470" master-source-1="14472">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14644" name="Keyboard-3.1" start="871763" length="18148462" position="26355158" ancestral-start="0" ancestral-length="21616701" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14569" source-1="14571" channels="2" master-source-0="14569" master-source-1="14571">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21155" name="Keyboard-4.8" start="1555424" length="14267182" position="48655587" ancestral-start="0" ancestral-length="14267182" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="1555424" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14650" source-1="14652" channels="2" master-source-0="14650" master-source-1="14652">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21161" name="Keyboard-4.9" start="20807533" length="25801527" position="67907696" ancestral-start="14267182" ancestral-length="34101039" stretch="1" shift="1" first_edit="nothing" layer="2" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14650" source-1="14652" channels="2" master-source-0="14650" master-source-1="14652">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14804" name="Keyboard-5.1" start="443684" length="16736947" position="97467559" ancestral-start="0" ancestral-length="19038717" stretch="1" shift="1" first_edit="nothing" layer="3" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14730" source-1="14732" channels="2" master-source-0="14730" master-source-1="14732">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21692" name="Keyboard-6.2" start="2618212" length="34922829" position="118680871" ancestral-start="0" ancestral-length="34922829" stretch="1" shift="1" first_edit="nothing" layer="4" sync-position="2618212" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22043" name="Keyboard-6.13" start="39475021" length="12058307" position="155537680" ancestral-start="34922829" ancestral-length="12058307" stretch="1" shift="1" first_edit="nothing" layer="5" sync-position="39475021" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22398" name="Keyboard-6.17" start="39475021" length="12058306" position="155537680" ancestral-start="34922829" ancestral-length="12058306" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="39475021" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22132" name="Keyboard-6.15" start="60757652" length="17908945" position="176820311" ancestral-start="46981136" ancestral-length="18065539" stretch="1" shift="1" first_edit="nothing" layer="6" sync-position="60757652" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22138" name="Keyboard-6.16" start="81407001" length="21584342" position="197469660" ancestral-start="65046675" ancestral-length="24738982" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14810" source-1="14812" channels="2" master-source-0="14810" master-source-1="14812">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22404" name="Keyboard-7.2" start="0" length="16778212" position="219624899" ancestral-start="0" ancestral-length="16778212" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15609" source-1="15611" channels="2" master-source-0="15609" master-source-1="15611">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22572" name="Keyboard-7.3" start="19857992" length="21724330" position="239482891" ancestral-start="0" ancestral-length="21724330" stretch="1" shift="1" first_edit="nothing" layer="11" sync-position="19857992" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15609" source-1="15611" channels="2" master-source-0="15609" master-source-1="15611">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22578" name="Keyboard-7.4" start="43651579" length="15068396" position="263276478" ancestral-start="21724330" ancestral-length="17311381" stretch="1" shift="1" first_edit="nothing" layer="12" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15609" source-1="15611" channels="2" master-source-0="15609" master-source-1="15611">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15922" name="Keyboard-8.1" start="0" length="8407596" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="15828" source-1="15830" channels="2" master-source-0="15828" master-source-1="15830">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope>
+ <AutomationList id="20151" default="1" min_yval="0" max_yval="2" max_xval="8407596" state="Off" style="Absolute">
+ <events>0 0.667538
+8.4076e+06 0.679681
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22933" name="Keyboard-8.4" start="9328480" length="5267113" position="287069909" ancestral-start="9294894" ancestral-length="5300699" stretch="1" shift="1" first_edit="nothing" layer="15" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,Automatic,FadeOut" scale-gain="1" source-0="15828" source-1="15830" channels="2" master-source-0="15828" master-source-1="15830">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22936" default="1" min_yval="0" max_yval="2" max_xval="5267113" state="Off" style="Absolute">
+ <events>0 0.681594
+5.26711e+06 0.693863
+5.26711e+06 0.693863
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22850" name="Keyboard-8.3" start="9289542" length="5352" position="287995017" ancestral-start="9289542" ancestral-length="8334518" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15828" source-1="15830" channels="2" master-source-0="15828" master-source-1="15830">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22853" default="1" min_yval="0" max_yval="2" max_xval="5352" state="Off" style="Absolute">
+ <events>0 0.681507
+5352 0.681516
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="16021" name="Keyboard-9.1" start="3781746" length="11450801" position="300111349" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="16" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15928" source-1="15930" channels="2" master-source-0="15928" master-source-1="15930">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Crossfade out="22398" in="22043" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="167595325">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="15922" in="22933" active="yes" follow-overlap="yes" fixed="no" length="43162" anchor-point="0" position="287069909">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="4316" y="0.00999999977648"/>
+ <point x="8632" y="0.0299999993294"/>
+ <point x="34529" y="0.97000002861"/>
+ <point x="38845" y="0.990000009537"/>
+ <point x="43162" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="4316" y="0.990000009537"/>
+ <point x="8632" y="0.97000002861"/>
+ <point x="34529" y="0.0299999993294"/>
+ <point x="38845" y="0.00999999977648"/>
+ <point x="43162" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ </Playlist>
+ <Playlist name="Guitar" orig_diskstream_id="138" frozen="no">
+ <Region id="14550" name="Guitar-2.1" start="0" length="22435212" position="1999229" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14457" channels="1" master-source-0="14457">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="17947" default="1" min_yval="0" max_yval="2" max_xval="22435212" state="Off" style="Absolute">
+ <events>0 1
+8.48359e+06 0.981345
+8.5083e+06 1.41418
+1.36699e+07 1.41418
+1.37542e+07 1.00019
+2.24352e+07 1
+2.24352e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14631" name="Guitar-3.1" start="871763" length="17630288" position="26355158" ancestral-start="0" ancestral-length="21616701" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14556" channels="1" master-source-0="14556">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="17952" default="1" min_yval="0" max_yval="2" max_xval="17630288" state="Off" style="Absolute">
+ <events>0 1.00001
+8.3262e+06 1.00019
+8.35092e+06 1.45319
+1.26129e+07 1.41418
+1.26458e+07 1.00019
+1.76303e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21125" name="Guitar-4.6" start="1555424" length="14267182" position="48655587" ancestral-start="0" ancestral-length="14267182" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="1555424" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14637" channels="1" master-source-0="14637">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21131" name="Guitar-4.7" start="20807533" length="25801527" position="67907696" ancestral-start="14267182" ancestral-length="34101039" stretch="1" shift="1" first_edit="nothing" layer="2" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14637" channels="1" master-source-0="14637">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21134" default="1" min_yval="0" max_yval="2" max_xval="25801527" state="Off" style="Absolute">
+ <events>-2.533e+07 0.996323
+0 1
+1.63663e+07 0.996323
+1.65236e+07 1.41418
+1.90523e+07 1.41418
+1.92872e+07 1.00019
+2.58015e+07 1.00019
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14791" name="Guitar-5.1" start="443684" length="16736947" position="97467559" ancestral-start="0" ancestral-length="19038717" stretch="1" shift="1" first_edit="nothing" layer="3" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14717" channels="1" master-source-0="14717">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="20262" default="1" min_yval="0" max_yval="2" max_xval="16736947" state="Off" style="Absolute">
+ <events>0 1
+1.16467e+07 1.01928
+1.17032e+07 1.42992
+1.44052e+07 1.41418
+1.46344e+07 1.00019
+1.63824e+07 0.981345
+1.67369e+07 1
+1.67369e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21677" name="Guitar-6.2" start="2618212" length="34922829" position="118680871" ancestral-start="0" ancestral-length="34922829" stretch="1" shift="1" first_edit="nothing" layer="4" sync-position="2618212" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21680" default="1" min_yval="0" max_yval="2" max_xval="34922829" state="Off" style="Absolute">
+ <events>0 1
+1.29824e+07 1.00019
+1.30357e+07 1.42992
+1.42752e+07 1.42992
+1.44042e+07 1.00019
+2.79031e+07 1.00019
+2.79915e+07 1.45953
+3.21488e+07 1.49408
+3.22396e+07 1.00019
+3.49228e+07 1.00018
+3.49228e+07 1.00018
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22028" name="Guitar-6.13" start="39475021" length="12058307" position="155537680" ancestral-start="34922829" ancestral-length="12058307" stretch="1" shift="1" first_edit="nothing" layer="5" sync-position="39475021" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22031" default="1" min_yval="0" max_yval="2" max_xval="12058307" state="Off" style="Absolute">
+ <events>0 1.00017
+5.84425e+06 1.00019
+5.98942e+06 1.93949
+8.1941e+06 2
+8.23151e+06 1.03465
+9.89292e+06 1.01928
+1.00168e+07 2
+1.0522e+07 2
+1.05975e+07 1.01536
+1.20583e+07 1.01454
+1.20583e+07 1.01454
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22371" name="Guitar-6.17" start="39475021" length="12058306" position="155537680" ancestral-start="34922829" ancestral-length="12058306" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="39475021" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope>
+ <AutomationList id="22374" default="1" min_yval="0" max_yval="2" max_xval="12058306" state="Off" style="Absolute">
+ <events>-1.49548e+08 1.43228
+0 1.00017
+5.84425e+06 1.00019
+5.98157e+06 1.41418
+8.15612e+06 1.42992
+8.23151e+06 1.03465
+9.89292e+06 1.01928
+9.97054e+06 1.44578
+1.05519e+07 1.44578
+1.05975e+07 1.01536
+1.20583e+07 1.01454
+1.20583e+07 1.01454
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22117" name="Guitar-6.15" start="60757652" length="17908945" position="176820311" ancestral-start="46981136" ancestral-length="18065539" stretch="1" shift="1" first_edit="nothing" layer="6" sync-position="60757652" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22120" default="1" min_yval="0" max_yval="2" max_xval="17908945" state="Off" style="Absolute">
+ <events>0 1.01196
+8.82149e+06 1.11432
+8.84173e+06 1.41418
+1.05871e+07 1.42882
+1.06504e+07 1.00019
+1.79089e+07 1.00696
+1.79089e+07 1.00696
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22123" name="Guitar-6.16" start="81407001" length="21584342" position="197469660" ancestral-start="65046675" ancestral-length="24738982" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14797" channels="1" master-source-0="14797">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22126" default="1" min_yval="0" max_yval="2" max_xval="21584342" state="Off" style="Absolute">
+ <events>-1.80897e+08 0.881277
+0 1.00619
+1.10489e+07 1.00019
+1.10627e+07 1.39856
+1.61185e+07 1.39856
+1.63256e+07 1.00019
+2.15843e+07 1.00016
+2.15843e+07 1.00016
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22377" name="Guitar-7.2" start="0" length="16778212" position="219624899" ancestral-start="0" ancestral-length="16778212" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15607" channels="1" master-source-0="15607">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22557" name="Guitar-7.3" start="19857992" length="21724330" position="239482891" ancestral-start="0" ancestral-length="21724330" stretch="1" shift="1" first_edit="nothing" layer="11" sync-position="19857992" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15607" channels="1" master-source-0="15607">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22560" default="1" min_yval="0" max_yval="2" max_xval="21724330" state="Off" style="Absolute">
+ <events>0 1
+1.26373e+07 1.09402
+1.26481e+07 1.41418
+1.53786e+07 1.41418
+1.55313e+07 1.01928
+2.17243e+07 1
+2.17243e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22563" name="Guitar-7.4" start="43651579" length="15068396" position="263276478" ancestral-start="21724330" ancestral-length="17311381" stretch="1" shift="1" first_edit="nothing" layer="12" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15607" channels="1" master-source-0="15607">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22566" default="1" min_yval="0" max_yval="2" max_xval="15068396" state="Off" style="Absolute">
+ <events>0 1
+5.77799e+06 1.00019
+5.84844e+06 1.44578
+8.20896e+06 1.42039
+8.27634e+06 1.00019
+1.50684e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15909" name="Guitar-8.1" start="0" length="8407596" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="15815" channels="1" master-source-0="15815">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22918" name="Guitar-8.4" start="9328480" length="5267113" position="287069909" ancestral-start="9294894" ancestral-length="5300699" stretch="1" shift="1" first_edit="nothing" layer="15" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeOut" scale-gain="1" source-0="15815" channels="1" master-source-0="15815">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22829" name="Guitar-8.3" start="9289542" length="5352" position="287995017" ancestral-start="9289542" ancestral-length="8334518" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15815" channels="1" master-source-0="15815">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="16008" name="Guitar-9.1" start="3781746" length="11450801" position="300111349" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="16" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15915" channels="1" master-source-0="15915">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Crossfade out="22371" in="22028" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="167595325">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="15909" in="22918" active="yes" follow-overlap="yes" fixed="no" length="43162" anchor-point="0" position="287069909">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="4316" y="0.00999999977648"/>
+ <point x="8632" y="0.0299999993294"/>
+ <point x="34529" y="0.97000002861"/>
+ <point x="38845" y="0.990000009537"/>
+ <point x="43162" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="4316" y="0.990000009537"/>
+ <point x="8632" y="0.97000002861"/>
+ <point x="34529" y="0.0299999993294"/>
+ <point x="38845" y="0.00999999977648"/>
+ <point x="43162" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ </Playlist>
+ <Playlist name="Guitar clean" orig_diskstream_id="8831" frozen="no">
+ <Region id="14578" name="Guitar clean-1.1" start="0" length="22435215" position="1999226" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14361" channels="1" master-source-0="14361">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14659" name="Guitar clean-2.1" start="0" length="21616698" position="25483398" ancestral-start="0" ancestral-length="21616698" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14584" channels="1" master-source-0="14584">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21140" name="Guitar clean-3.6" start="0" length="15822603" position="47100166" ancestral-start="0" ancestral-length="15822603" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14665" channels="1" master-source-0="14665">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21146" name="Guitar clean-3.7" start="15822603" length="34101039" position="62922769" ancestral-start="15822603" ancestral-length="34101039" stretch="1" shift="1" first_edit="nothing" layer="2" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14665" channels="1" master-source-0="14665">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14819" name="Guitar clean-4.1" start="0" length="19038714" position="97023878" ancestral-start="0" ancestral-length="19038714" stretch="1" shift="1" first_edit="nothing" layer="3" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14745" channels="1" master-source-0="14745">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14899" name="Guitar clean-5.1" start="0" length="103562170" position="116062662" ancestral-start="0" ancestral-length="103562170" stretch="1" shift="1" first_edit="nothing" layer="4" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14825" channels="1" master-source-0="14825">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15837" name="Guitar clean-6.1" start="0" length="59080506" position="219624902" ancestral-start="0" ancestral-length="59080506" stretch="1" shift="1" first_edit="nothing" layer="5" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15613" channels="1" master-source-0="15613">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15937" name="Guitar clean-7.1" start="0" length="17624058" position="278705478" ancestral-start="0" ancestral-length="17624058" stretch="1" shift="1" first_edit="nothing" layer="6" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15843" channels="1" master-source-0="15843">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="16036" name="Guitar clean-8.1" start="0" length="15979770" position="296329606" ancestral-start="0" ancestral-length="15979770" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15943" channels="1" master-source-0="15943">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ </Playlist>
+ <Playlist name="Vocal1" orig_diskstream_id="91" frozen="no">
+ <Region id="15896" name="Vocal1-3.1" start="0" length="8407596" position="278705475" ancestral-start="0" ancestral-length="17624061" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="15601" channels="1" master-source-0="15601">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22887" name="Vocal1-3.4" start="9328480" length="5267113" position="287069909" ancestral-start="9294894" ancestral-length="5300699" stretch="1" shift="1" first_edit="nothing" layer="2" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeOut" scale-gain="1" source-0="15601" channels="1" master-source-0="15601">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22877" name="Vocal1-3.3" start="9289542" length="5352" position="287995017" ancestral-start="9289542" ancestral-length="8334518" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15601" channels="1" master-source-0="15601">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15995" name="Vocal1-4.1" start="3781746" length="11450801" position="300111349" ancestral-start="0" ancestral-length="15979773" stretch="1" shift="1" first_edit="nothing" layer="3" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15902" channels="1" master-source-0="15902">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="23945" default="1" min_yval="0" max_yval="2" max_xval="11450801" state="Off" style="Absolute">
+ <events>0 0.66443
+1.13727e+07 0.821401
+1.14508e+07 1
+1.14508e+07 1
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Crossfade out="15896" in="22887" active="yes" follow-overlap="yes" fixed="no" length="43162" anchor-point="0" position="287069909">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="4316" y="0.00999999977648"/>
+ <point x="8632" y="0.0299999993294"/>
+ <point x="34529" y="0.97000002861"/>
+ <point x="38845" y="0.990000009537"/>
+ <point x="43162" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="4316" y="0.990000009537"/>
+ <point x="8632" y="0.97000002861"/>
+ <point x="34529" y="0.0299999993294"/>
+ <point x="38845" y="0.00999999977648"/>
+ <point x="43162" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ </Playlist>
+ <Playlist name="Sax Analog" orig_diskstream_id="9282" frozen="no">
+ <Region id="49465" name="Sax Analog-38.1" start="0" length="50362" position="0" ancestral-start="0" ancestral-length="50362" stretch="1" shift="1" first_edit="nothing" layer="26" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="49455" channels="1" master-source-0="49455">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="30386" name="Sax Analog-1.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="17" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="30179" channels="1" master-source-0="30179">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="30391" name="Sax Analog-1.2" start="6673830" length="64" position="3756071" ancestral-start="6673830" ancestral-length="64" stretch="1" shift="1" first_edit="nothing" layer="18" sync-position="6673830" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="30179" channels="1" master-source-0="30179">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="31598" name="Sax Analog-18.2" start="6673830" length="64" position="3756071" ancestral-start="6673830" ancestral-length="64" stretch="1" shift="1" first_edit="nothing" layer="19" sync-position="6673830" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="31579" channels="1" master-source-0="31579">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="36982" name="Sax Analog-24.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="20" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="36968" channels="1" master-source-0="36968">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="37011" name="Sax Analog-22.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="21" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="36998" channels="1" master-source-0="36998">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="39160" name="Sax Analog-34.2" start="6673830" length="64" position="3756071" ancestral-start="6673830" ancestral-length="64" stretch="1" shift="1" first_edit="nothing" layer="22" sync-position="6673830" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="39141" channels="1" master-source-0="39141">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="47613" name="Sax Analog-36.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="23" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="47440" channels="1" master-source-0="47440">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="49396" name="Sax Analog-37.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="24" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="49381" channels="1" master-source-0="49381">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="49401" name="Sax Analog-37.2" start="6673830" length="64" position="3756071" ancestral-start="6673830" ancestral-length="64" stretch="1" shift="1" first_edit="nothing" layer="25" sync-position="6673830" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="49381" channels="1" master-source-0="49381">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="49534" name="Sax Analog-40.1" start="0" length="6673830" position="3756071" ancestral-start="0" ancestral-length="6673830" stretch="1" shift="1" first_edit="nothing" layer="27" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="49521" channels="1" master-source-0="49521">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="49631" name="Sax Analog-41.1" start="0" length="5550642" position="3756071" ancestral-start="0" ancestral-length="5550642" stretch="1" shift="1" first_edit="nothing" layer="28" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="49617" channels="1" master-source-0="49617">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14591" name="Sax Analog-2.1" start="1773009" length="20662206" position="3772235" ancestral-start="0" ancestral-length="23484096" stretch="1" shift="1" first_edit="nothing" layer="0" sync-position="0" flags="Muted,Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14485" channels="1" master-source-0="14485">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14672" name="Sax Analog-3.1" start="871763" length="18148459" position="26355161" ancestral-start="0" ancestral-length="21616698" stretch="1" shift="1" first_edit="nothing" layer="7" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14597" channels="1" master-source-0="14597">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21110" name="Sax Analog-4.8" start="5054531" length="10768072" position="52154697" ancestral-start="0" ancestral-length="10768072" stretch="1" shift="1" first_edit="nothing" layer="1" sync-position="5054531" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14678" channels="1" master-source-0="14678">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21113" default="1" min_yval="0" max_yval="2" max_xval="10768072" state="Off" style="Absolute">
+ <events>0 0.945643
+1.07681e+07 0.964835
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21116" name="Sax Analog-4.9" start="20807530" length="25801527" position="67907696" ancestral-start="10768072" ancestral-length="34101039" stretch="1" shift="1" first_edit="nothing" layer="2" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14678" channels="1" master-source-0="14678">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21119" default="1" min_yval="0" max_yval="2" max_xval="25801527" state="Off" style="Absolute">
+ <events>-3.86611e+07 0.0530382
+0 0
+4.61954e+06 3.41123e-05
+4.82833e+06 0.711842
+1.64446e+07 0.723881
+1.65207e+07 0
+2.17807e+07 0
+2.17845e+07 0.0283181
+2.17883e+07 0.723881
+2.58015e+07 0.711842
+2.58015e+07 0.711842
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="14832" name="Sax Analog-5.1" start="443684" length="16736944" position="97467562" ancestral-start="0" ancestral-length="19038714" stretch="1" shift="1" first_edit="nothing" layer="3" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14758" channels="1" master-source-0="14758">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="20220" default="1" min_yval="0" max_yval="2" max_xval="16736944" state="Off" style="Absolute">
+ <events>0 0.711692
+1.66805e+07 0.711842
+1.67369e+07 0.711692
+1.67369e+07 0.711692
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="21662" name="Sax Analog-6.2" start="2618212" length="34922826" position="118680874" ancestral-start="0" ancestral-length="34922826" stretch="1" shift="1" first_edit="nothing" layer="4" sync-position="2618212" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="21665" default="1" min_yval="0" max_yval="2" max_xval="34922826" state="Off" style="Absolute">
+ <events>0 0
+5.08932e+06 0
+5.32422e+06 1.00019
+1.14314e+07 1.01536
+1.14575e+07 0
+1.5268e+07 0
+1.54246e+07 0.996323
+3.0505e+07 1.09402
+3.05449e+07 0.287178
+3.19203e+07 0.287178
+3.19505e+07 0
+3.37848e+07 0
+3.38048e+07 0.559071
+3.49113e+07 0.569296
+3.49228e+07 0.543627
+3.49228e+07 0.543627
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22013" name="Sax Analog-6.13" start="39475018" length="12058307" position="155537680" ancestral-start="34922826" ancestral-length="12058307" stretch="1" shift="1" first_edit="nothing" layer="5" sync-position="39475018" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22016" default="1" min_yval="0" max_yval="2" max_xval="12058307" state="Off" style="Absolute">
+ <events>0 0
+1.16637e+06 0
+1.20624e+06 1.09402
+5.87651e+06 1.11432
+5.8875e+06 0
+1.03768e+07 0.00032384
+1.03878e+07 1.03465
+1.20583e+07 1.0346
+1.20583e+07 1.0346
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22340" name="Sax Analog-6.19" start="39475018" length="12058306" position="155537680" ancestral-start="34922826" ancestral-length="12058306" stretch="1" shift="1" first_edit="nothing" layer="9" sync-position="39475018" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope>
+ <AutomationList id="22343" default="1" min_yval="0" max_yval="2" max_xval="12058306" state="Off" style="Absolute">
+ <events>0 0
+1.16637e+06 0
+1.20624e+06 1.09402
+5.87651e+06 1.11432
+5.8875e+06 0
+1.03768e+07 0.00032384
+1.03878e+07 1.03465
+1.20583e+07 1.0346
+1.20583e+07 1.0346
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22102" name="Sax Analog-6.17" start="60757649" length="17908945" position="176820311" ancestral-start="46981133" ancestral-length="18065539" stretch="1" shift="1" first_edit="nothing" layer="6" sync-position="60757649" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22105" default="1" min_yval="0" max_yval="2" max_xval="17908945" state="Off" style="Absolute">
+ <events>0 0.711842
+1.79089e+07 0.711842
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22108" name="Sax Analog-6.18" start="81406998" length="21584342" position="197469660" ancestral-start="65046672" ancestral-length="24738982" stretch="1" shift="1" first_edit="nothing" layer="8" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="14839" channels="1" master-source-0="14839">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22111" default="1" min_yval="0" max_yval="2" max_xval="21584342" state="Off" style="Absolute">
+ <events>0 0
+7.25429e+06 0
+7.37322e+06 1.00019
+2.15843e+07 1.00019
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22346" name="Sax Analog-7.2" start="0" length="16778209" position="219624902" ancestral-start="0" ancestral-length="16778209" stretch="1" shift="1" first_edit="nothing" layer="10" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15615" channels="1" master-source-0="15615">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22542" name="Sax Analog-7.3" start="19857989" length="21724330" position="239482891" ancestral-start="0" ancestral-length="21724330" stretch="1" shift="1" first_edit="nothing" layer="11" sync-position="19857989" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15615" channels="1" master-source-0="15615">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22548" name="Sax Analog-7.4" start="43651576" length="15068396" position="263276478" ancestral-start="21724330" ancestral-length="17311381" stretch="1" shift="1" first_edit="nothing" layer="12" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15615" channels="1" master-source-0="15615">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="22551" default="1" min_yval="0" max_yval="2" max_xval="15068396" state="Off" style="Absolute">
+ <events>0 1
+1.48675e+07 1.01928
+1.48716e+07 0
+1.50684e+07 0
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="15950" name="Sax Analog-8.1" start="0" length="8407593" position="278705478" ancestral-start="0" ancestral-length="17624058" stretch="1" shift="1" first_edit="nothing" layer="13" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,FadeIn" scale-gain="1" source-0="15856" channels="1" master-source-0="15856">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="no"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22903" name="Sax Analog-8.4" start="9328477" length="5267113" position="287069909" ancestral-start="9294891" ancestral-length="5300699" stretch="1" shift="1" first_edit="nothing" layer="15" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeOut" scale-gain="1" source-0="15856" channels="1" master-source-0="15856">
+ <FadeIn default="yes" active="no"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="22799" name="Sax Analog-8.3" start="9289539" length="5352" position="287995017" ancestral-start="9289539" ancestral-length="8334518" stretch="1" shift="1" first_edit="nothing" layer="14" sync-position="0" flags="Opaque,DefaultFadeIn,DefaultFadeOut,Automatic,FadeIn,FadeOut" scale-gain="1" source-0="15856" channels="1" master-source-0="15856">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope default="yes"/>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="no" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Region id="16049" name="Sax Analog-9.1" start="3781746" length="11450798" position="300111352" ancestral-start="0" ancestral-length="15979770" stretch="1" shift="1" first_edit="nothing" layer="16" sync-position="0" flags="Opaque,EnvelopeActive,DefaultFadeIn,DefaultFadeOut,FadeIn,FadeOut" scale-gain="1" source-0="15956" channels="1" master-source-0="15956">
+ <FadeIn default="yes" active="yes"/>
+ <FadeOut default="yes" active="yes"/>
+ <Envelope>
+ <AutomationList id="24087" default="1" min_yval="0" max_yval="2" max_xval="11450798" state="Off" style="Absolute">
+ <events>-2.99934e+08 0.835992
+-2.99895e+08 1.01555
+0 1.00019
+9.86425e+06 1.03465
+9.90955e+06 0.754746
+1.14508e+07 0.625281
+</events>
+ </AutomationList>
+ </Envelope>
+ <extra>
+ <GUI waveform-visible="yes" envelope-visible="yes" waveform-rectified="no" waveform-logscaled="no"/>
+ </extra>
+ </Region>
+ <Crossfade out="22340" in="22013" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="167595325">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="15950" in="22903" active="yes" follow-overlap="yes" fixed="no" length="43162" anchor-point="0" position="287069909">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="4316" y="0.00999999977648"/>
+ <point x="8632" y="0.0299999993294"/>
+ <point x="34529" y="0.97000002861"/>
+ <point x="38845" y="0.990000009537"/>
+ <point x="43162" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="4316" y="0.990000009537"/>
+ <point x="8632" y="0.97000002861"/>
+ <point x="34529" y="0.0299999993294"/>
+ <point x="38845" y="0.00999999977648"/>
+ <point x="43162" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="30391" in="30386" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="10429836">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="31598" in="30386" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="39160" in="30386" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="39160" in="36982" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="39160" in="37011" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49401" in="49396" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="10429836">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49401" in="30386" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49401" in="36982" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49401" in="37011" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49401" in="47613" active="yes" follow-overlap="no" fixed="yes" length="64" anchor-point="1" position="3755473">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="6" y="0.00999999977648"/>
+ <point x="12" y="0.0299999993294"/>
+ <point x="51" y="0.97000002861"/>
+ <point x="57" y="0.990000009537"/>
+ <point x="64" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="6" y="0.990000009537"/>
+ <point x="12" y="0.97000002861"/>
+ <point x="51" y="0.0299999993294"/>
+ <point x="57" y="0.00999999977648"/>
+ <point x="64" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="30386" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="36982" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="37011" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="47613" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="49396" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ <Crossfade out="49631" in="49534" active="yes" follow-overlap="no" fixed="yes" length="661" anchor-point="1" position="9306051">
+ <FadeIn>
+ <point x="0" y="0"/>
+ <point x="66" y="0.00999999977648"/>
+ <point x="132" y="0.0299999993294"/>
+ <point x="528" y="0.97000002861"/>
+ <point x="594" y="0.990000009537"/>
+ <point x="661" y="1"/>
+ </FadeIn>
+ <FadeOut>
+ <point x="0" y="1"/>
+ <point x="66" y="0.990000009537"/>
+ <point x="132" y="0.97000002861"/>
+ <point x="528" y="0.0299999993294"/>
+ <point x="594" y="0.00999999977648"/>
+ <point x="661" y="0"/>
+ </FadeOut>
+ </Crossfade>
+ </Playlist>
+ </Playlists>
+ <UnusedPlaylists/>
+ <Click>
+ <IO name="click" id="25" active="yes" inputs="" outputs="{alsa_pcm:playback_1,alsa_pcm:playback_2}" gain="1.423893570900" iolimits="0,0,-1,-1">
+ <Panner linked="no" link_direction="SameDirection" bypassed="no"/>
+ <controllable name="gaincontrol" id="26"/>
+ <Automation>
+ <AutomationList id="13313" default="1" min_yval="0" max_yval="2" max_xval="0" state="Off" style="Absolute"/>
+ </Automation>
+ </IO>
+ </Click>
+ <NamedSelections/>
+ <TempoMap>
+ <Tempo start="1|1|0" beats-per-minute="145.000000" note-type="4.000000" movable="no"/>
+ <Meter start="1|1|0" note-type="4.000000" beats-per-bar="5.000000" movable="no"/>
+ </TempoMap>
+ <ControlProtocols>
+ <Protocol name="Generic MIDI" feedback="0" feedback_interval="10000" active="yes">
+ <controls/>
+ </Protocol>
+ <Protocol name="Mackie" active="no"/>
+ </ControlProtocols>
+ <extra>
+ <ClockModes primary="SMPTE" secondary="BBT" preroll="MinSec" postroll="MinSec" bigclock="SMPTE" editpoint="SMPTE" zoomrange="SMPTE" nudge="SMPTE"/>
+ </extra>
+</Session>
diff --git a/libs/pbd/tests/xpath.cc b/libs/pbd/tests/xpath.cc
new file mode 100644
index 0000000000..54b844f16c
--- /dev/null
+++ b/libs/pbd/tests/xpath.cc
@@ -0,0 +1,98 @@
+#include "assert.h"
+#include <iostream>
+
+#include "pbd/xml++.h"
+
+using namespace std;
+
+int main()
+{
+ cout << "Test 1: RosegardenPatchFile.xml: Find all banks in the file" << endl;
+ XMLTree doc("./RosegardenPatchFile.xml");
+ // "//bank" gives as last element an empty element libxml bug????
+ boost::shared_ptr<XMLSharedNodeList> result = doc.root()->find("//bank[@name]");
+
+ cout << "Found " << result->size() << " banks" << endl;
+ assert(result->size() == 8);
+ int counter = 1;
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ assert((*i)->name() == "bank");
+ assert((*i)->property("name"));
+ cout << "Found bank number " << counter++ << " with name: " << (*i)->property("name")->value() << endl;
+ for(XMLNodeList::const_iterator j = (*i)->children().begin(); j != (*i)->children().end(); ++j) {
+ cout << "\t found program " << (*j)->property("id")->value() <<
+ " with name: " << (*j)->property("name")->value() << endl;
+ }
+ }
+
+ cout << endl << endl << "Test 2: RosegardenPatchFile.xml: Find all programs whose program name contains 'Latin'" << endl;
+
+ result = doc.root()->find("/rosegarden-data/studio/device/bank/program[contains(@name, 'Latin')]");
+ assert(result->size() == 5);
+
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ cout << "\t found program " << (*i)->property("id")->value() <<
+ " with name: " << (*i)->property("name")->value() << endl;
+ }
+
+ cout << endl << endl << "Test 3: TestSession.ardour: find all Sources where captured-for contains the string 'Guitar'" << endl;
+
+ // We have to allocate a new document here, or we get segfaults
+ XMLTree doc2("./TestSession.ardour");
+ result = doc2.root()->find("/Session/Sources/Source[contains(@captured-for, 'Guitar')]");
+ assert(result->size() == 16);
+
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ cout << "\t found source '" << (*i)->property("name")->value() <<
+ "' with id: " << (*i)->property("id")->value() << endl;
+ }
+
+ cout << endl << endl << "Test 4: TestSession.ardour: Find all elements with an 'id' and 'name' attribute" << endl;
+
+ result = doc2.root()->find("//*[@id and @name]");
+
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ assert((*i)->property("id"));
+ assert((*i)->property("name"));
+ cout << "\t found element '" << (*i)->name() <<
+ "' with id: " << (*i)->property("id")->value() <<
+ "' and name: " << (*i)->property("name")->value() << endl;
+ }
+
+ cout << endl << endl << "Test 5: ProtoolsPatchFile.midnam: Get Banks and Patches for 'Name Set 1'" << endl;
+
+ // We have to allocate a new document here, or we get segfaults
+ XMLTree doc3("./ProtoolsPatchFile.midnam");
+ result = doc3.root()->find("/MIDINameDocument/MasterDeviceNames/ChannelNameSet[@Name='Name Set 1']/PatchBank");
+ assert(result->size() == 16);
+
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ cout << "\t found Patchbank " << (*i)->property("Name")->value() << endl;
+ boost::shared_ptr<XMLSharedNodeList> patches = (*i)->find("//Patch[@Name]");
+ for(XMLSharedNodeList::const_iterator p = patches->begin(); p != patches->end(); ++p) {
+ cout << "\t\t found patch number " << (*p)->property("Number")->value()
+ << " with name: " << (*p)->property("Name")->value() << endl;
+ }
+ }
+
+ cout << endl << endl << "Test 5: ProtoolsPatchFile.midnam: Find attribute nodes" << endl;
+ result = doc3.root()->find("//@Value");
+
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ boost::shared_ptr<XMLNode> node = (*i);
+ cout << "\t found attribute node: " << node->name()
+ << " value: " << node->attribute_value() << endl;
+ }
+
+ cout << endl << endl << "Test 6: ProtoolsPatchFile.midnam: Find available channels on 'Name Set 1'" << endl;
+ result = doc3.root()->find(
+ "//ChannelNameSet[@Name = 'Name Set 1']//AvailableChannel[@Available = 'true']/@Channel");
+
+ assert(result->size() == 15);
+ for(XMLSharedNodeList::const_iterator i = result->begin(); i != result->end(); ++i) {
+ boost::shared_ptr<XMLNode> node = (*i);
+ cout << "\t found available Channel: " << node->name()
+ << " value: " << node->attribute_value() << endl;
+ }
+
+}
diff --git a/libs/pbd/textreceiver.cc b/libs/pbd/textreceiver.cc
new file mode 100644
index 0000000000..43620e9830
--- /dev/null
+++ b/libs/pbd/textreceiver.cc
@@ -0,0 +1,66 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <iostream>
+#include <cstdlib>
+
+#include <pbd/textreceiver.h>
+
+TextReceiver::TextReceiver (const string &n)
+
+{
+ name = n;
+}
+
+void
+TextReceiver::receive (Transmitter::Channel chn, const char *str)
+
+{
+ const char *prefix = "";
+
+ switch (chn) {
+ case Transmitter::Error:
+ prefix = ": [ERROR]: ";
+ break;
+ case Transmitter::Info:
+ prefix = ": [INFO]: ";
+ break;
+ case Transmitter::Warning:
+ prefix = ": [WARNING]: ";
+ break;
+ case Transmitter::Fatal:
+ prefix = ": [FATAL]: ";
+ break;
+ case Transmitter::Throw:
+ /* this isn't supposed to happen */
+ abort ();
+ }
+
+ /* note: iostreams are already thread-safe: no external
+ lock required.
+ */
+
+ cout << name << prefix << str << endl;
+
+ if (chn == Transmitter::Fatal) {
+ exit (9);
+ }
+}
+
diff --git a/libs/pbd/transmitter.cc b/libs/pbd/transmitter.cc
new file mode 100644
index 0000000000..876a9d86e5
--- /dev/null
+++ b/libs/pbd/transmitter.cc
@@ -0,0 +1,115 @@
+/*
+ Copyright (C) 1998-99 Paul Barton-Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <cstdlib>
+#include <signal.h>
+#include <iostream>
+#include <string>
+
+#include <pbd/transmitter.h>
+#include <pbd/error.h>
+
+using std::string;
+using std::ios;
+
+Transmitter::Transmitter (Channel c)
+{
+ channel = c;
+ switch (c) {
+ case Error:
+ send = &error;
+ break;
+ case Warning:
+ send = &warning;
+ break;
+ case Info:
+ send = &info;
+ break;
+ case Fatal:
+ send = &fatal;
+ break;
+ case Throw:
+ /* we should never call Transmitter::deliver
+ for thrown messages (because its overridden in the
+ class heirarchy). force a segv if we do.
+ */
+ send = 0;
+ break;
+ }
+}
+
+void
+Transmitter::deliver ()
+
+{
+ string foo;
+
+ /* NOTE: this is just a default action for a Transmitter or a
+ derived class. Any class can override this to produce some
+ other action when deliver() is called.
+ */
+
+ *this << '\0';
+
+ /* send the SigC++ signal */
+
+ foo = str();
+ (*send) (channel, foo.c_str());
+
+ /* XXX when or how can we delete this ? */
+ // delete foo;
+
+ /* return to a pristine state */
+
+ clear ();
+ seekp (0, ios::beg);
+ seekg (0, ios::beg);
+
+ /* do the right thing if this should not return */
+
+ if (does_not_return()) {
+ sigset_t mask;
+
+ sigemptyset (&mask);
+ sigsuspend (&mask);
+ /*NOTREACHED*/
+ exit (1);
+ }
+}
+
+bool
+Transmitter::does_not_return ()
+
+{
+ if (channel == Fatal || channel == Throw) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+extern "C" {
+ void pbd_c_error (const char *str)
+
+ {
+ PBD::error << str << endmsg;
+ }
+}
diff --git a/libs/pbd/undo.cc b/libs/pbd/undo.cc
new file mode 100644
index 0000000000..aeff37cce7
--- /dev/null
+++ b/libs/pbd/undo.cc
@@ -0,0 +1,293 @@
+/*
+ Copyright (C) 2001 Brett Viren & Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#include <iostream>
+#include <string>
+#include <sstream>
+
+#include <pbd/undo.h>
+#include <pbd/xml++.h>
+#include <pbd/shiva.h>
+
+#include <sigc++/bind.h>
+
+using namespace std;
+using namespace sigc;
+
+UndoTransaction::UndoTransaction ()
+ : _clearing(false)
+{
+}
+
+UndoTransaction::UndoTransaction (const UndoTransaction& rhs)
+ : Command(rhs._name)
+ , _clearing(false)
+{
+ clear ();
+ actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end());
+}
+
+UndoTransaction::~UndoTransaction ()
+{
+ GoingAway ();
+ clear ();
+}
+
+void
+command_death (UndoTransaction* ut, Command* c)
+{
+ if (ut->clearing()) {
+ return;
+ }
+
+ ut->remove_command (c);
+
+ if (ut->empty()) {
+ delete ut;
+ }
+}
+
+UndoTransaction&
+UndoTransaction::operator= (const UndoTransaction& rhs)
+{
+ if (this == &rhs) return *this;
+ _name = rhs._name;
+ clear ();
+ actions.insert(actions.end(),rhs.actions.begin(),rhs.actions.end());
+ return *this;
+}
+
+void
+UndoTransaction::add_command (Command *const action)
+{
+ /* catch death */
+ new PBD::ProxyShiva<Command,UndoTransaction> (*action, *this, &command_death);
+ actions.push_back (action);
+}
+
+void
+UndoTransaction::remove_command (Command* const action)
+{
+ actions.remove (action);
+}
+
+bool
+UndoTransaction::empty () const
+{
+ return actions.empty();
+}
+
+void
+UndoTransaction::clear ()
+{
+ _clearing = true;
+ for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) {
+ delete *i;
+ }
+ actions.clear ();
+ _clearing = false;
+}
+
+void
+UndoTransaction::operator() ()
+{
+ for (list<Command*>::iterator i = actions.begin(); i != actions.end(); ++i) {
+ (*(*i))();
+ }
+}
+
+void
+UndoTransaction::undo ()
+{
+ for (list<Command*>::reverse_iterator i = actions.rbegin(); i != actions.rend(); ++i) {
+ (*i)->undo();
+ }
+}
+
+void
+UndoTransaction::redo ()
+{
+ (*this)();
+}
+
+XMLNode &UndoTransaction::get_state()
+{
+ XMLNode *node = new XMLNode ("UndoTransaction");
+ stringstream ss;
+ ss << _timestamp.tv_sec;
+ node->add_property("tv_sec", ss.str());
+ ss.str("");
+ ss << _timestamp.tv_usec;
+ node->add_property("tv_usec", ss.str());
+ node->add_property("name", _name);
+
+ list<Command*>::iterator it;
+ for (it=actions.begin(); it!=actions.end(); it++)
+ node->add_child_nocopy((*it)->get_state());
+
+ return *node;
+}
+
+UndoHistory::UndoHistory ()
+{
+ _clearing = false;
+ _depth = 0;
+}
+
+void
+UndoHistory::set_depth (int32_t d)
+{
+ _depth = d;
+
+ while (_depth > 0 && UndoList.size() > (uint32_t) _depth) {
+ UndoList.pop_front ();
+ }
+}
+
+void
+UndoHistory::add (UndoTransaction* const ut)
+{
+ ut->GoingAway.connect (bind (mem_fun (*this, &UndoHistory::remove), ut));
+
+ while (_depth > 0 && UndoList.size() > (uint32_t) _depth) {
+ UndoList.pop_front ();
+ }
+
+ UndoList.push_back (ut);
+
+ /* we are now owners of the transaction */
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+void
+UndoHistory::remove (UndoTransaction* const ut)
+{
+ if (_clearing) {
+ return;
+ }
+
+ UndoList.remove (ut);
+ RedoList.remove (ut);
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+/** Undo some transactions.
+ * @param n Number of transactions to undo.
+ */
+void
+UndoHistory::undo (unsigned int n)
+{
+ while (n--) {
+ if (UndoList.size() == 0) {
+ return;
+ }
+ UndoTransaction* ut = UndoList.back ();
+ UndoList.pop_back ();
+ ut->undo ();
+ RedoList.push_back (ut);
+ }
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+void
+UndoHistory::redo (unsigned int n)
+{
+ while (n--) {
+ if (RedoList.size() == 0) {
+ return;
+ }
+ UndoTransaction* ut = RedoList.back ();
+ RedoList.pop_back ();
+ ut->redo ();
+ UndoList.push_back (ut);
+ }
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+void
+UndoHistory::clear_redo ()
+{
+ _clearing = true;
+ RedoList.clear ();
+ _clearing = false;
+
+ Changed (); /* EMIT SIGNAL */
+
+}
+
+void
+UndoHistory::clear_undo ()
+{
+ _clearing = true;
+ UndoList.clear ();
+ _clearing = false;
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+void
+UndoHistory::clear ()
+{
+ clear_undo ();
+ clear_redo ();
+
+ Changed (); /* EMIT SIGNAL */
+}
+
+XMLNode&
+UndoHistory::get_state (int32_t depth)
+{
+ XMLNode *node = new XMLNode ("UndoHistory");
+
+ if (depth == 0) {
+
+ return (*node);
+
+ } else if (depth < 0) {
+
+ /* everything */
+
+ for (list<UndoTransaction*>::iterator it = UndoList.begin(); it != UndoList.end(); ++it) {
+ node->add_child_nocopy((*it)->get_state());
+ }
+
+ } else {
+
+ /* just the last "depth" transactions */
+
+ list<UndoTransaction*> in_order;
+
+ for (list<UndoTransaction*>::reverse_iterator it = UndoList.rbegin(); it != UndoList.rend() && depth; ++it, depth--) {
+ in_order.push_front (*it);
+ }
+
+ for (list<UndoTransaction*>::iterator it = in_order.begin(); it != in_order.end(); it++) {
+ node->add_child_nocopy((*it)->get_state());
+ }
+ }
+
+ return *node;
+}
+
+
diff --git a/libs/pbd/whitespace.cc b/libs/pbd/whitespace.cc
new file mode 100644
index 0000000000..b09d830103
--- /dev/null
+++ b/libs/pbd/whitespace.cc
@@ -0,0 +1,80 @@
+/*
+ Copyright (C) 2000-2007 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include <pbd/whitespace.h>
+
+using namespace std;
+
+namespace PBD {
+
+void
+strip_whitespace_edges (string& str)
+{
+ string::size_type i;
+ string::size_type len;
+ string::size_type s = 0;
+
+ len = str.length();
+
+ if (len == 1) {
+ return;
+ }
+
+ /* strip front */
+
+ for (i = 0; i < len; ++i) {
+ if (isgraph (str[i])) {
+ break;
+ }
+ }
+
+ if (i == len) {
+ /* it's all whitespace, not much we can do */
+ str = "";
+ return;
+ }
+
+ /* strip back */
+
+ if (len > 1) {
+
+ s = i;
+ i = len - 1;
+
+ if (s == i) {
+ return;
+ }
+
+ do {
+ if (isgraph (str[i]) || i == 0) {
+ break;
+ }
+
+ --i;
+
+ } while (true);
+
+ str = str.substr (s, (i - s) + 1);
+
+ } else {
+ str = str.substr (s);
+ }
+}
+
+} // namespace PBD
diff --git a/libs/pbd/xml++.cc b/libs/pbd/xml++.cc
new file mode 100644
index 0000000000..ec1ca5d2b9
--- /dev/null
+++ b/libs/pbd/xml++.cc
@@ -0,0 +1,590 @@
+/* xml++.cc
+ * libxml++ and this file are copyright (C) 2000 by Ari Johnson, and
+ * are covered by the GNU Lesser General Public License, which should be
+ * included with libxml++ as the file COPYING.
+ */
+
+#include <pbd/xml++.h>
+#include <libxml/debugXML.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#define XML_VERSION "1.0"
+
+static XMLNode *readnode(xmlNodePtr);
+static void writenode(xmlDocPtr, XMLNode *, xmlNodePtr, int);
+static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string xpath);
+
+XMLTree::XMLTree()
+ : _filename(),
+ _root(0),
+ _compression(0)
+{
+}
+
+XMLTree::XMLTree(const string &fn, bool validate)
+ : _filename(fn),
+ _root(0),
+ _compression(0)
+{
+ read_internal(validate);
+}
+
+XMLTree::XMLTree(const XMLTree * from)
+{
+ _filename = from->filename();
+ _root = new XMLNode(*from->root());
+ _compression = from->compression();
+}
+
+XMLTree::~XMLTree()
+{
+ if (_root) {
+ delete _root;
+ }
+}
+
+int
+XMLTree::set_compression(int c)
+{
+ if (c > 9) {
+ c = 9;
+ } else if (c < 0) {
+ c = 0;
+ }
+
+ _compression = c;
+
+ return _compression;
+}
+
+bool
+XMLTree::read_internal(bool validate)
+{
+ //shouldnt be used anywhere ATM, remove if so!
+ assert(!validate);
+ if (_root) {
+ delete _root;
+ _root = 0;
+ }
+
+ xmlParserCtxtPtr ctxt; /* the parser context */
+ xmlDocPtr doc; /* the resulting document tree */
+
+ xmlKeepBlanksDefault(0);
+ /* parse the file, activating the DTD validation option */
+ if(validate) {
+ /* create a parser context */
+ ctxt = xmlNewParserCtxt();
+ if (ctxt == NULL) {
+ return false;
+ }
+ doc = xmlCtxtReadFile(ctxt, _filename.c_str(), NULL, XML_PARSE_DTDVALID);
+ } else {
+ doc = xmlParseFile(_filename.c_str());
+ }
+
+ /* check if parsing suceeded */
+ if (doc == NULL) {
+ if(validate) {
+ xmlFreeParserCtxt(ctxt);
+ }
+ return false;
+ } else {
+ /* check if validation suceeded */
+ if (validate && ctxt->valid == 0) {
+ xmlFreeParserCtxt(ctxt);
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+ throw XMLException("Failed to validate document " + _filename);
+ }
+ }
+
+ _root = readnode(xmlDocGetRootElement(doc));
+
+ /* free up the parser context */
+ if(validate) {
+ xmlFreeParserCtxt(ctxt);
+ }
+ xmlFreeDoc(doc);
+ xmlCleanupParser();
+
+ return true;
+}
+
+bool
+XMLTree::read_buffer(const string & buffer)
+{
+ xmlDocPtr doc;
+
+ _filename = "";
+
+ if (_root) {
+ delete _root;
+ _root = 0;
+ }
+
+ doc = xmlParseMemory((char *) buffer.c_str(), buffer.length());
+ if (!doc) {
+ return false;
+ }
+
+ _root = readnode(xmlDocGetRootElement(doc));
+ xmlFreeDoc(doc);
+
+ return true;
+}
+
+
+bool
+XMLTree::write(void) const
+{
+ xmlDocPtr doc;
+ XMLNodeList children;
+ int result;
+
+ xmlKeepBlanksDefault(0);
+ doc = xmlNewDoc((xmlChar *) XML_VERSION);
+ xmlSetDocCompressMode(doc, _compression);
+ writenode(doc, _root, doc->children, 1);
+ result = xmlSaveFormatFileEnc(_filename.c_str(), doc, "UTF-8", 1);
+ xmlFreeDoc(doc);
+
+ if (result == -1) {
+ return false;
+ }
+
+ return true;
+}
+
+void
+XMLTree::debug(FILE* out) const
+{
+ xmlDocPtr doc;
+ XMLNodeList children;
+
+ xmlKeepBlanksDefault(0);
+ doc = xmlNewDoc((xmlChar *) XML_VERSION);
+ xmlSetDocCompressMode(doc, _compression);
+ writenode(doc, _root, doc->children, 1);
+ xmlDebugDumpDocument (out, doc);
+ xmlFreeDoc(doc);
+}
+
+const string &
+XMLTree::write_buffer(void) const
+{
+ static string retval;
+ char *ptr;
+ int len;
+ xmlDocPtr doc;
+ XMLNodeList children;
+
+ xmlKeepBlanksDefault(0);
+ doc = xmlNewDoc((xmlChar *) XML_VERSION);
+ xmlSetDocCompressMode(doc, _compression);
+ writenode(doc, _root, doc->children, 1);
+ xmlDocDumpMemory(doc, (xmlChar **) & ptr, &len);
+ xmlFreeDoc(doc);
+
+ retval = ptr;
+
+ free(ptr);
+
+ return retval;
+}
+
+XMLNode::XMLNode(const string & n)
+ : _name(n), _is_content(false), _content(string())
+{
+}
+
+XMLNode::XMLNode(const string & n, const string & c)
+ :_name(n), _is_content(true), _content(c)
+{
+}
+
+XMLNode::XMLNode(const XMLNode& from)
+{
+ XMLPropertyList props;
+ XMLPropertyIterator curprop;
+ XMLNodeList nodes;
+ XMLNodeIterator curnode;
+
+ _name = from.name();
+ set_content(from.content());
+
+ props = from.properties();
+ for (curprop = props.begin(); curprop != props.end(); ++curprop) {
+ add_property((*curprop)->name().c_str(), (*curprop)->value());
+ }
+
+ nodes = from.children();
+ for (curnode = nodes.begin(); curnode != nodes.end(); ++curnode) {
+ add_child_copy(**curnode);
+ }
+}
+
+XMLNode::~XMLNode()
+{
+ XMLNodeIterator curchild;
+ XMLPropertyIterator curprop;
+
+ for (curchild = _children.begin(); curchild != _children.end(); ++curchild) {
+ delete *curchild;
+ }
+
+ for (curprop = _proplist.begin(); curprop != _proplist.end(); ++curprop) {
+ delete *curprop;
+ }
+}
+
+const string &
+XMLNode::set_content(const string & c)
+{
+ if (c.empty()) {
+ _is_content = false;
+ } else {
+ _is_content = true;
+ }
+
+ _content = c;
+
+ return _content;
+}
+
+XMLNode*
+XMLNode::child (const char *name) const
+{
+ /* returns first child matching name */
+
+ XMLNodeConstIterator cur;
+
+ if (name == 0) {
+ return 0;
+ }
+
+ for (cur = _children.begin(); cur != _children.end(); ++cur) {
+ if ((*cur)->name() == name) {
+ return *cur;
+ }
+ }
+
+ return 0;
+}
+
+const XMLNodeList &
+XMLNode::children(const string& n) const
+{
+ /* returns all children matching name */
+
+ static XMLNodeList retval;
+ XMLNodeConstIterator cur;
+
+ if (n.empty()) {
+ return _children;
+ }
+
+ retval.erase(retval.begin(), retval.end());
+
+ for (cur = _children.begin(); cur != _children.end(); ++cur) {
+ if ((*cur)->name() == n) {
+ retval.insert(retval.end(), *cur);
+ }
+ }
+
+ return retval;
+}
+
+XMLNode *
+XMLNode::add_child(const char * n)
+{
+ return add_child_copy(XMLNode (n));
+}
+
+void
+XMLNode::add_child_nocopy (XMLNode& n)
+{
+ _children.insert(_children.end(), &n);
+}
+
+XMLNode *
+XMLNode::add_child_copy(const XMLNode& n)
+{
+ XMLNode *copy = new XMLNode (n);
+ _children.insert(_children.end(), copy);
+ return copy;
+}
+
+boost::shared_ptr<XMLSharedNodeList>
+XMLNode::find(const string xpath) const
+{
+ xmlDocPtr doc = xmlNewDoc((xmlChar *) XML_VERSION);
+ writenode(doc, (XMLNode *) this, doc->children, 1);
+ xmlXPathContext* ctxt = xmlXPathNewContext(doc);
+
+ boost::shared_ptr<XMLSharedNodeList> result =
+ boost::shared_ptr<XMLSharedNodeList>(find_impl(ctxt, xpath));
+
+ xmlXPathFreeContext(ctxt);
+ xmlFreeDoc(doc);
+
+ return result;
+}
+
+std::string
+XMLNode::attribute_value()
+{
+ XMLNodeList children = this->children();
+ assert(!_is_content);
+ assert(children.size() == 1);
+ XMLNode* child = *(children.begin());
+ assert(child->is_content());
+ return child->content();
+}
+
+XMLNode *
+XMLNode::add_content(const string & c)
+{
+ return add_child_copy(XMLNode (string(), c));
+}
+
+XMLProperty *
+XMLNode::property(const char * n)
+{
+ string ns(n);
+ map<string,XMLProperty*>::iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
+ }
+
+ return 0;
+}
+
+XMLProperty *
+XMLNode::property(const string & ns)
+{
+ map<string,XMLProperty*>::iterator iter;
+
+ if ((iter = _propmap.find(ns)) != _propmap.end()) {
+ return iter->second;
+ }
+
+ return 0;
+}
+
+XMLProperty *
+XMLNode::add_property(const char * n, const string & v)
+{
+ string ns(n);
+ if(_propmap.find(ns) != _propmap.end()){
+ remove_property(ns);
+ }
+
+ XMLProperty *tmp = new XMLProperty(ns, v);
+
+ if (!tmp) {
+ return 0;
+ }
+
+ _propmap[tmp->name()] = tmp;
+ _proplist.insert(_proplist.end(), tmp);
+
+ return tmp;
+}
+
+XMLProperty *
+XMLNode::add_property(const char * n, const char * v)
+{
+ string vs(v);
+ return add_property(n, vs);
+}
+
+XMLProperty *
+XMLNode::add_property(const char *name, const long value)
+{
+ static char str[1024];
+ snprintf(str, 1024, "%ld", value);
+ return add_property(name, str);
+}
+
+void
+XMLNode::remove_property(const string & n)
+{
+ if (_propmap.find(n) != _propmap.end()) {
+ _proplist.remove(_propmap[n]);
+ _propmap.erase(n);
+ }
+}
+
+void
+XMLNode::remove_nodes(const string & n)
+{
+ XMLNodeIterator i = _children.begin();
+ XMLNodeIterator tmp;
+
+ while (i != _children.end()) {
+ tmp = i;
+ ++tmp;
+ if ((*i)->name() == n) {
+ _children.erase (i);
+ }
+ i = tmp;
+ }
+}
+
+void
+XMLNode::remove_nodes_and_delete(const string & n)
+{
+ XMLNodeIterator i = _children.begin();
+ XMLNodeIterator tmp;
+
+ while (i != _children.end()) {
+ tmp = i;
+ ++tmp;
+ if ((*i)->name() == n) {
+ delete *i;
+ _children.erase (i);
+ }
+ i = tmp;
+ }
+}
+
+void
+XMLNode::remove_nodes_and_delete(const string& propname, const string& val)
+{
+ XMLNodeIterator i = _children.begin();
+ XMLNodeIterator tmp;
+ XMLProperty* prop;
+
+ while (i != _children.end()) {
+ tmp = i;
+ ++tmp;
+
+ prop = (*i)->property(propname);
+ if(prop && prop->value() == val) {
+ delete *i;
+ _children.erase(i);
+ }
+
+ i = tmp;
+ }
+}
+
+XMLProperty::XMLProperty(const string &n, const string &v)
+ : _name(n),
+ _value(v)
+{
+}
+
+XMLProperty::~XMLProperty()
+{
+}
+
+static XMLNode *
+readnode(xmlNodePtr node)
+{
+ string name, content;
+ xmlNodePtr child;
+ XMLNode *tmp;
+ xmlAttrPtr attr;
+
+ if (node->name) {
+ name = (char *) node->name;
+ }
+
+ tmp = new XMLNode(name);
+
+ for (attr = node->properties; attr; attr = attr->next) {
+ content = "";
+ if (attr->children) {
+ content = (char *) attr->children->content;
+ }
+ tmp->add_property((char *) attr->name, content);
+ }
+
+ if (node->content) {
+ tmp->set_content((char *) node->content);
+ } else {
+ tmp->set_content(string());
+ }
+
+ for (child = node->children; child; child = child->next) {
+ tmp->add_child_nocopy (*readnode(child));
+ }
+
+ return tmp;
+}
+
+static void
+writenode(xmlDocPtr doc, XMLNode * n, xmlNodePtr p, int root = 0)
+{
+ XMLPropertyList props;
+ XMLPropertyIterator curprop;
+ XMLNodeList children;
+ XMLNodeIterator curchild;
+ xmlNodePtr node;
+
+ if (root) {
+ node = doc->children = xmlNewDocNode(doc, 0, (xmlChar *) n->name().c_str(), 0);
+ } else {
+ node = xmlNewChild(p, 0, (xmlChar *) n->name().c_str(), 0);
+ }
+
+ if (n->is_content()) {
+ node->type = XML_TEXT_NODE;
+ xmlNodeSetContentLen(node, (const xmlChar *) n->content().c_str(), n->content().length());
+ }
+
+ props = n->properties();
+ for (curprop = props.begin(); curprop != props.end(); ++curprop) {
+ xmlSetProp(node, (xmlChar *) (*curprop)->name().c_str(), (xmlChar *) (*curprop)->value().c_str());
+ }
+
+ children = n->children();
+ for (curchild = children.begin(); curchild != children.end(); ++curchild) {
+ writenode(doc, *curchild, node);
+ }
+}
+
+static XMLSharedNodeList* find_impl(xmlXPathContext* ctxt, const string xpath)
+{
+ xmlXPathObject* result = xmlXPathEval((const xmlChar*)xpath.c_str(), ctxt);
+
+ if(!result)
+ {
+ xmlXPathFreeContext(ctxt);
+ xmlFreeDoc(ctxt->doc);
+
+ throw XMLException("Invalid XPath: " + xpath);
+ }
+
+ if(result->type != XPATH_NODESET)
+ {
+ xmlXPathFreeObject(result);
+ xmlXPathFreeContext(ctxt);
+ xmlFreeDoc(ctxt->doc);
+
+ throw XMLException("Only nodeset result types are supported.");
+ }
+
+ xmlNodeSet* nodeset = result->nodesetval;
+ XMLSharedNodeList* nodes = new XMLSharedNodeList();
+ if( nodeset )
+ {
+ for (int i = 0; i < nodeset->nodeNr; ++i) {
+ XMLNode* node = readnode(nodeset->nodeTab[i]);
+ nodes->push_back(boost::shared_ptr<XMLNode>(node));
+ }
+ }
+ else
+ {
+ // return empty set
+ }
+
+ xmlXPathFreeObject(result);
+
+ return nodes;
+}
+