diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-06-02 21:41:35 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-06-02 21:41:35 +0000 |
commit | 449aab3c465bbbf66d221fac3d7ea559f1720357 (patch) | |
tree | 6843cc40c88250a132acac701271f1504cd2df04 /libs/pbd | |
parent | 9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (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')
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 Binary files differnew file mode 100644 index 0000000000..d8479018a9 --- /dev/null +++ b/libs/pbd/macosx/English.lproj/InfoPlist.strings 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 ®exp, + 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 ®exp, + 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 Binary files differnew file mode 100644 index 0000000000..5008ddfcf5 --- /dev/null +++ b/libs/pbd/pbd/.DS_Store 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 ®exp, + bool match_fullpath = true, + bool return_fullpath = true, + long limit = -1); + + + string *find_first (const string &dirpath, + const string ®exp, + 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&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 & Lead" > + <PatchMIDICommands> + <ControlChange Control="0" Value="0" /> + <ControlChange Control="32" Value="3" /> + <ProgramChange Number="87" /> + </PatchMIDICommands> + </Patch> + <Patch Number="088+" Name="Big & Raw" > + <PatchMIDICommands> + <ControlChange Control="0" Value="1" /> + <ControlChange Control="32" Value="3" /> + <ProgramChange Number="87" /> + </PatchMIDICommands> + </Patch> + <Patch Number="088+" Name="Fat & 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 & Lead" > + <PatchMIDICommands> + <ControlChange Control="0" Value="0" /> + <ControlChange Control="32" Value="2" /> + <ProgramChange Number="87" /> + </PatchMIDICommands> + </Patch> + <Patch Number="088+" Name="$Big & Raw" > + <PatchMIDICommands> + <ControlChange Control="0" Value="1" /> + <ControlChange Control="32" Value="2" /> + <ProgramChange Number="87" /> + </PatchMIDICommands> + </Patch> + <Patch Number="088+" Name="$Fat & 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 & 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 & 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&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 & 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="<none>" min="0" max="127" default="64" controllervalue="10" colourindex="2" ipbposition="0"/> + <control name="Chorus" type="controller" description="<none>" min="0" max="127" default="0" controllervalue="93" colourindex="3" ipbposition="1"/> + <control name="Volume" type="controller" description="<none>" min="0" max="127" default="0" controllervalue="7" colourindex="1" ipbposition="2"/> + <control name="Reverb" type="controller" description="<none>" min="0" max="127" default="0" controllervalue="91" colourindex="3" ipbposition="3"/> + <control name="Sustain" type="controller" description="<none>" min="0" max="127" default="0" controllervalue="64" colourindex="4" ipbposition="-1"/> + <control name="Expression" type="controller" description="<none>" min="0" max="127" default="100" controllervalue="11" colourindex="2" ipbposition="-1"/> + <control name="Modulation" type="controller" description="<none>" min="0" max="127" default="0" controllervalue="1" colourindex="4" ipbposition="-1"/> + <control name="PitchBend" type="pitchbend" description="<none>" 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; +} + |