From 2823fcdbfe7c8451f1aa25969c9e987e4cdeb0c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nuno=20Andr=C3=A9?= Date: Thu, 31 Dec 2020 16:27:02 +0100 Subject: [PATCH] initial commit ClyphX 2.6.2 downloaded from https://app.box.com/s/nd114hezhpfri1sshpcu --- .gitattributes | 17 + COPYING | 674 ++++++++++++++ COPYING.LESSER | 502 +++++++++++ ClyphX Manual.pdf | Bin 0 -> 516459 bytes ClyphX/ActionList.py | 34 + ClyphX/CSLinker.py | 303 +++++++ ClyphX/ClyphX.py | 774 ++++++++++++++++ ClyphX/ClyphXArsenalActions.py | 196 ++++ ClyphX/ClyphXClipActions.py | 952 +++++++++++++++++++ ClyphX/ClyphXClipEnvCapture.py | 113 +++ ClyphX/ClyphXControlSurfaceActions.py | 491 ++++++++++ ClyphX/ClyphXControlSurfaceActions9.py | 47 + ClyphX/ClyphXDRActions9.py | 164 ++++ ClyphX/ClyphXDeviceActions.py | 277 ++++++ ClyphX/ClyphXGlobalActions.py | 1054 ++++++++++++++++++++++ ClyphX/ClyphXM4LBrowserInterface.py | 201 +++++ ClyphX/ClyphXMXTActions.py | 129 +++ ClyphX/ClyphXPXTActions.py | 229 +++++ ClyphX/ClyphXPushActions.py | 288 ++++++ ClyphX/ClyphXSnapActions.py | 422 +++++++++ ClyphX/ClyphXSnapActions9.py | 484 ++++++++++ ClyphX/ClyphXTrackActions.py | 415 +++++++++ ClyphX/ClyphXTriggers.py | 358 ++++++++ ClyphX/ClyphXUserActions.py | 163 ++++ ClyphX/ExtraPrefs.py | 197 ++++ ClyphX/InstantMappingMakeDoc.py | 138 +++ ClyphX/Macrobat.py | 196 ++++ ClyphX/MacrobatMidiRack.py | 204 +++++ ClyphX/MacrobatParameterRackTemplate8.py | 205 +++++ ClyphX/MacrobatParameterRackTemplate9.py | 187 ++++ ClyphX/MacrobatParameterRacks.py | 334 +++++++ ClyphX/MacrobatParameterRacks9.py | 201 +++++ ClyphX/MacrobatPushRack.py | 142 +++ ClyphX/MacrobatRnRRack.py | 175 ++++ ClyphX/MacrobatSidechainRack.py | 134 +++ ClyphX/MacrobatUserConfig.py | 83 ++ ClyphX/PushEmuHandler.py | 61 ++ ClyphX/Push_APC_Combiner.py | 116 +++ ClyphX/UserSettings.txt | 286 ++++++ ClyphX/__init__.py | 33 + ClyphX/consts.py | 235 +++++ Live Instant Mapping Info.html | 1 + Macrobat Manual.pdf | Bin 0 -> 270320 bytes Macrobat Rack Examples.als | Bin 0 -> 14808 bytes 44 files changed, 11215 insertions(+) create mode 100644 .gitattributes create mode 100644 COPYING create mode 100644 COPYING.LESSER create mode 100644 ClyphX Manual.pdf create mode 100644 ClyphX/ActionList.py create mode 100644 ClyphX/CSLinker.py create mode 100644 ClyphX/ClyphX.py create mode 100644 ClyphX/ClyphXArsenalActions.py create mode 100644 ClyphX/ClyphXClipActions.py create mode 100644 ClyphX/ClyphXClipEnvCapture.py create mode 100644 ClyphX/ClyphXControlSurfaceActions.py create mode 100644 ClyphX/ClyphXControlSurfaceActions9.py create mode 100644 ClyphX/ClyphXDRActions9.py create mode 100644 ClyphX/ClyphXDeviceActions.py create mode 100644 ClyphX/ClyphXGlobalActions.py create mode 100644 ClyphX/ClyphXM4LBrowserInterface.py create mode 100644 ClyphX/ClyphXMXTActions.py create mode 100644 ClyphX/ClyphXPXTActions.py create mode 100644 ClyphX/ClyphXPushActions.py create mode 100644 ClyphX/ClyphXSnapActions.py create mode 100644 ClyphX/ClyphXSnapActions9.py create mode 100644 ClyphX/ClyphXTrackActions.py create mode 100644 ClyphX/ClyphXTriggers.py create mode 100644 ClyphX/ClyphXUserActions.py create mode 100644 ClyphX/ExtraPrefs.py create mode 100644 ClyphX/InstantMappingMakeDoc.py create mode 100644 ClyphX/Macrobat.py create mode 100644 ClyphX/MacrobatMidiRack.py create mode 100644 ClyphX/MacrobatParameterRackTemplate8.py create mode 100644 ClyphX/MacrobatParameterRackTemplate9.py create mode 100644 ClyphX/MacrobatParameterRacks.py create mode 100644 ClyphX/MacrobatParameterRacks9.py create mode 100644 ClyphX/MacrobatPushRack.py create mode 100644 ClyphX/MacrobatRnRRack.py create mode 100644 ClyphX/MacrobatSidechainRack.py create mode 100644 ClyphX/MacrobatUserConfig.py create mode 100644 ClyphX/PushEmuHandler.py create mode 100644 ClyphX/Push_APC_Combiner.py create mode 100644 ClyphX/UserSettings.txt create mode 100644 ClyphX/__init__.py create mode 100644 ClyphX/consts.py create mode 100644 Live Instant Mapping Info.html create mode 100644 Macrobat Manual.pdf create mode 100644 Macrobat Rack Examples.als diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ee16f4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +* text=auto eol=lf + +# Git +.gitattributes text +.gitignore text + +# Code +*.py text diff=python +*.txt text +*.pyc binary + +# Docs +*.html text diff=html +*.pdf binary + +# Samples +*.als binary diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. diff --git a/COPYING.LESSER b/COPYING.LESSER new file mode 100644 index 0000000..4362b49 --- /dev/null +++ b/COPYING.LESSER @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. 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. + + + Copyright (C) + + 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 library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/ClyphX Manual.pdf b/ClyphX Manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eecc7b4fb884e580993ad498c6cdaacf3610e750 GIT binary patch literal 516459 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

%z&V=Hb6z}s>Bhb<%kIvmO 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

o{X5w2;oV$I>c84cTxih1Y3 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�L3jBLyDJ;nPUdh!|wQq&MEW~`;OP;*LG8Dn-OHvk|}NR zr}pO}wV^FkLs{n6miy9dbF2H*&P;I~qa8B$oKo?ToCDxU5>&=f-_aWKz4W+Xo@kH} zSSf~zW+RP$)OU}sWDMS1wyq_cCl)}O=w))QL?N!c^i%Pg=acZ1DKPvb#iMWsYt?h(HM}SIsa2$X{xU$(n-$s6l_e`52u1sl{3HY z`mXs1-)2cq+N(TVz_DH2EP+zuk6z5KMVd&yrw0rIskT@!;~?M%B2^$yg{Xw6_h9wt z^pNEh)fCsX)?~7bbI&(-H}|Aiz4ie(5}D^%gTVxp=~(G*>5S=y9vEq4%>_(v9um(wuYk0sDkTR;Yl3S0~#6n-()yK?c5k7SPZ_(7tnrq8-6Y zkLBC4Du&9GjTORAD9EY5q9MOoSTpBQauYE6UZbWxgcV>AV&w;?gz;X@P zVd-0FZ7tIfjaN#ks$@lTr%+j3RV<|$@*H5YOw15m*-kZ+QboU&wWBy1LUDo z3(00g3WMYqVsVMtgv}2J<-w`MY_0&#L0j+=ZydrWO36MKoB^XVvFzYa5Tv5A5&=4+ z=^=C=YK5hyMLyvQAQ=<|2lLi`1$-MMCD1{t#R1er(?jY&)rw0c1=7Rll#*=(`Ji5R zMAJj-z}Cu3B?ZyL=~R-@32XY7PsSz^(}`#v57L4)h|6369D~;2Io?`W0P-LnfevCV z7N8=!99jpiR#9p`s2onGiVRYvCbT=VIqwZN6U)5!Vw(p&^# z5TBTgJttlhX+4of1rrhrxa3nwD}l3k(cwQ)LZ(9e3EpYMd~9hZf+OT<{QRb9@t{wf zNF#kBGWr(s2zpvd%2ebNuH-16P?YL~c!JtRBnX51#6oN*v9HMUu{6{t0;9WSN2}56 z#$^FQ;nJkif1TDu@xyF^qHI{YvF|6Oznu>@Hw zCgm1*`emtvtWDT0;B-2+h*(J^>v+%^d_X+mx=S%A2Tnd0zn2yG&p(ssKKOl6^h$9 zy+6sT2zde(Q(E>xoglr)*W129C8+1IpeYB!K))O1V=f_+o?@ene)atcS+$E6N}EC5 zI_3GGz8Vo*ayfH0X2qx})L+a{foPHvL@Z1c0I?pj(81 zNtHnvJpQ&8pv@-4%msp>0=JmWf{&v%m;<^cyMhOP44P|<#*$E!%#1$@2Y47s=Q5AU zdw`JX{<4SkdaYE+&1&Fn;26xwcq7m#FYpUju+1S9VNB{6uF7FU zS#rw?a=X?q+DBs#&5b2XNvA+;qJfi2 z2%z10R#2}DUWhkac^RSgax zq%KT16&)$n$EHzgi|0qzt%vn0)Xg56w{>2FFGXI_Ra*|O%lqvFYP+p4esV=sqc*MQ zu7Z_hFrH3v&MbIoc^pnryOy1^26Aqf;igqXJD#Ki>0T`Xx584tmOhc>1!+&UMD%_x(mWQ0pMf{&`2gQp87;{;xtCJWHH=q3Zgi zLUuSV@6-8^G1r;4_B<;B@CwTQ*@N*-5g}_fJr8*gwC_$GKLO>jSy(l&=Vkd+8Rc!i z4D!I1ltYMe8TaA2^{Zy)`Dhv|!K~d+s-rSx-Kz?0F-A=wQ`&V~?&4^oOVP;>d-`s} zD~XW&o8p%5q|eLzJANN!sf42P+YybT+Snn*xQc-#rdElfY9>dkjV2z=m1sv@f-E5h zU9gYet8Qe{85T(JkYA@#MZXXaP3e1H8n4AYLgOz_YQ?Ut9|!KEc=7sQJz=%_v7IlL zl%y?RjM4~_4bAzNa4=|6fJrr9d;bt)L7TFWVquup5M$Aqs?ac854os|)uC&@SrIe1 zFH$W3`r9~=LdL?quY7pJ(hTMBcTkBv=f{adk`3*TIy$C7?@;Bjgnvxi@FV=vC%2hQ`X*>5yw04Xaa=Onl2=}Ki8 z0}0^!mqaOy;TE{z79IWk=>v&|LEpuppH|2rHWb0PJKiMjV&@{b+3-A&thjNy`|6cQ zrx|_bGxT^bc?a{D7MvADSS1ox9rf$F^;mg#Q>G2vXNU}jCuJ0tZ;KZ~sbbHx_yn20 z6Osf6nP?=RZ(%6~rcVv=J0!uJ7@!I43)P^^TtOaQ1|qM{)VwF)~k zSYQB1Ep~6&X+WAsEAyb}3_v)HSxCJ>5vcw&F0ZJeTs~ZA3MT zxet_ZFCe;QF)V-}pgynq*cz|(uEqV9^l1t8{t{={nj>cCAU@>U_e>{^{QQ6uj`O$2P_jI}n z^wj(JOuJS-#^PX$Sb>S}gQ=>jvTWdKqIEs0g(y1)d%v#)rB*Gb zh<8o}xkPF<>A0GCU99poH)~e8h4c4urWNQ6%}8FL*3}1bLqdSFTw+`6QNb@pD3@?U zkK`BC-B(`;$So#WZcVYUG*Cl=CC#!5QBB$J@4n)JIOHJ_DyBag!p)V9JRlncHB~m; z@aKNO^*K2uwRZQ9R05tME)p9b95P|SXT<~&0`PWyKGnG+Fd_-I z2xEvoRLl2k??E7VghWfY^4F&VhX+F5)g5#NpOA0~+yDC1*Kj{|G|fRf@XCMQ{(x1) z7F3YXF63YkIFuMwj4+5F!+>^# zR2Wa>Yu;Vt!E~^Y$a-KqLjmLy@EC5%NOr=QOAjgF^eZmH($JV>n{bFoh?tve-P+f| zbMU7IEGj7~`G#>%fQXxHcCzm=*a?OQOSkZRLq96Ik53p>Km^SMuGSNCF$^ki0kQ zXk>3J?rxl{BgLOEZp-lqwj8N)G1lD21;Ya3)~W%(d|i5O)au1C%AJ8UQUsh-fz{o+ znlOA1Rm{K0C3dG3r@&Qqm>C3ACTWexRo&{!a;As^Ne%ZT;SY{IbEa*q)W7bVw}18< z46w)BIr!aVC)P%?8?;qiK-Q{R6F#?jN-5NK*w?zxc+r?hDZ`5{lC0zeh_Z9AK;u<+cS#<96 zo-c?J8*uelyO=4eQjFyH6U$t;ej4emR(;a?B52Ej=nZ0S+i9ir zs{Jo*G4dBuuw`p>e6oEv0zv8k8k#kemr_lGQh6bMCqwxcNV3rUW$QIQF4MEvZimi@ z)rY4HX8~j}MtwZ5N2k{(r-Q2A{4>N8^vX;Cm?|yRM#h z%k_Iqi^|u@&9!S}wvDLe+3v$Go4nK z)EDX-2lpJb%Svhtk|m9NbVvN!976}koD6=xT(Y^j16!b49^fW?wzGL0jTXEpR^|zW zxZY%z$0bJ0#)(Qj4oyF&X#oz%kTG@t{B%iz*rCc>-_Am@cOTu3I20v7%;m;85am?G z3ate|dIgaX-j8>zyPH9ONM%T{cz+9>!gf6Pw)VCnes?NXv(L@y4fHk^PV7bqNX#cI zv#mOQwkEoo%ibEyXrudC{UYS@8SSrMbKOf}N&njCvZVf!;pneJ>(d(Qs zU5>rZgj%74k7MrNvO_#2A-oQ^^aa75Kf8a8xa8?^2;12|)Icv5h_$M#+7wj+#sk{A~}8=T(Lw067G=^KotPJZuZRX)hrU50D?z9I8~1B{KL z)6LS51HMkgVVwA~awj>1sXx@|_fyv-iO-Rduj@ia%0uojGwoVM7JP-wt)#hK7RBM| zO?Wrsbeo1@W=*Cj@@e%vKz-fLOWJ^YP4oj+aF;fkZPkO{yLvs`V3lO{G$u5yM#XK7 zz@%Y;b)W2gEo7qiuVmy?%_YM|o4rbbVa=%GNsb)7UmdD*Il`IH{BbAaTQeuG%Qs>g z!y30YE2}O^3!(RJC~%Aa6d9Ql^*4*3KjNVCYvn0Y5uC8Sm6yUHfpp3+NZ2^r`%vjC zL-4IF-Dw{gh_6A-7=9BQ4En3)({oCXZI_CL;1_``Z8jrA9M6!3>2@Us?!>0uGbhX- z!SV7oqo=}+xA6FEhL-gkE+?7}<(t+!KHtehNlnBqDlsa4+{_cl>1!AVEXJd2AFsu~ zOb_Qj`1y{vLS=+reds-f<0~iFW&?5UK-t;z&rStrPw{Ft3aJN)hVvIIYk%Rh9+(71 z#o?9TPGX>7V~y=OMp(g&N`jzbMU*dMyXtzzQu4N4L>c2u%_4eR)DY?yd>e9wQk z$PP3`Iee$K(4Vgrd2*_PGsn9B3G`7bbr;-NxC)6%lBgpk+&!NCod+@2q$SHp_3pJw7+QHTx=#O*Gi3~sf zHpjr9+xGL!4?ec$N(CNzYxML!Cma%!_KSLjc0h&>%)tV}^~pzJ_L~%;t%6VJ(K z%wY52rI zj{Qr756OuvaYmbYfY0-NfI?@=TKCSj1Cc@IjKghMf$s_O2#(Xy(Y+BZ6Zd!BkL%$* zj#^nsMW$+Mfli0E?3=>X*9uixpW~-q#^9HQkK+^Ku6SQQyrx@Q0YP5{^{0p@h6_rn zgw`zW&a;@#dz320n2YC?STTb@XkGjFh>0=XdyK1sb~!8oHe-S*~O{?mglYSxksJ{ z(L!-HqHV`Q^la`b;{fmKaTf{EQ_dq?AMTIzzm{5uJ!9T)l~l3grQk8+9CYsCtQCNp zo5HnY(6?`DHwy(AtVtV+FziBVrl+$uZ2tsxexS8gKR1rn-oI96`UL-d{wQU;C@#FF zkM2^2VNa0$29GA}wMoIQmoM{;q#h@>u-N|==UZ5gD45hB+=V2!R2>qIiZm2bGA;MF zKTH4wg18kcX?QKvsVX%mWE#}ub_pl>j-41A4?4vaqUhpGfGtm1}8(mN?($GXqyrWy!88^g1W0C zFPsOyqbD-0;Myh<20GIA6{mm5GyJuP`DW?LaUs(H_gn6z@Q$e=#vbeLka{#p(r>fQ zx?e~pj~$iX3SnZd zzA&RXi?9Aywm5&*0pF{>HzTOCeL=Br`?AId)FjwKEvdOfXp*72d?}enO)k1VyA;#0 zm3*0tVHEs4#w^cQ3qjRnM?OZ2tGM(*Pvc8YL|ed;Xq(PLa@NDtu_a?z6CowtRJ*6=%&sg}e8T zjp+MUeh;?l_H|==?Fy6YUfazxwsn_CX+&cu`SDkVXN@ygDyEgy=ovJp#9xxA@a^0! zhf-YU-sHRz*89btw<@mMw9j5N7g8yKhD(pvhf#9@iciLg~Q4yDl2LG5Y$ zg6JgFG_c>f*hQYWO-Pm9SbgVY#Tl9dFr2btORF}g5;DNcSX?Q=)EnC=0#Xby+?b6^ z7&3^LP@4cWSwu=K1c~^fa3L58xsGzB8s@@${n2;uZdfpFy|T&( zbrx`-D4;laHPfHdnTb;)()%u!s$Q{p3R=b;!ifGlD2Hn3RsXIifIQdT;j&(vg;*FR zS~&lp@;Xp$FAK>|rKExLF0sR}u!w8`XpiV7PKEYXgI?JL`ULiY?>Y6v@h>clpYaHW z-GcJ3U8I!XX*M}<)jysQxIWMm$b8Rbi_}9y^a11l{*=f{Q6UqCTjI-k0gC;=d_ea00Tp0W3Wl8I|CK_ zWu}zsn-%uP!@qU==b`z5!hUL&h40L4P8jOSAUYZRpS_sYk_Mgn^p>@Wp&8y!W4YZE zVEN{`LPuc;cE6h$L>)6-HuPjY65Qe#-i1_-b}IVR?SGnx8>*kiJy(3uWS-x82K%

0~{<#aqu2|UsV;qH@{Bo$zTyDhAEF; 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%0A4{c3F&;@vAyKdD3@Ky-1byYby3n!;Dr! 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 +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +class ActionList: + __module__ = __name__ + __doc__ = ' Simple class that allows X-Triggers with no name to trigger Action Lists and can also be used to trigger ClyphX Actions via UserActions. ' + + def __init__(self, name = 'none'): + self.name = name + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/CSLinker.py b/ClyphX/CSLinker.py new file mode 100644 index 0000000..2ea3dd6 --- /dev/null +++ b/ClyphX/CSLinker.py @@ -0,0 +1,303 @@ +""" +# Copyright (C) 2014-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +from functools import partial +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from _Framework.ControlSurface import ControlSurface +from _Framework.SessionComponent import SessionComponent + +from consts import * + +class CSLinker(ControlSurfaceComponent): + """ CSLinker links the SessionComponents of two control surface scripts in Live 9. """ + + def __init__(self): + ControlSurfaceComponent.__init__(self) + self._slave_objects = [None, None] + self._script_names = None + self._horizontal_link = False + self._matched_link = False + self._multi_axis_link = False + + + def disconnect(self): + """ Extends standard to disconnect and remove slave objects. """ + for obj in self._slave_objects: + if obj: + obj.disconnect() + self._slave_objects = None + ControlSurfaceComponent.disconnect(self) + + + def parse_settings(self, settings_string): + """ Parses settings data read from UserPrefs for linker settings. """ + line_data = settings_string.split('=') + if 'MATCHED' in line_data[0]: + self._matched_link = line_data[1].strip() == 'TRUE' + elif 'HORIZ' in line_data[0] and not self._matched_link: + self._horizontal_link = line_data[1].strip() == 'TRUE' + elif 'AXIS' in line_data[0] and not self._matched_link: + self._multi_axis_link = line_data[1].strip() == 'TRUE' + else: + if 'NONE' in line_data[1]: + self._script_names = None + else: + if '1' in line_data[0]: + self._script_names = [line_data[1].strip()] + else: + if self._script_names: + self._script_names.append(line_data[1].strip()) + if 'PUSH2' in self._script_names: + self.canonical_parent.schedule_message(20, partial(self.connect_script_instances, + self.canonical_parent._control_surfaces())) + else: + self.connect_script_instances(self.canonical_parent._control_surfaces()) + + + def connect_script_instances(self, instanciated_scripts): + """ Attempts to find the two specified scripts, find their SessionComponents and create slave objects for them. """ + if self._script_names: + scripts = [None, None] + found_scripts = False + scripts_have_same_name = self._script_names[0] == self._script_names[1] + for script in instanciated_scripts: + script_name = script.__class__.__name__.upper() + if (IS_LIVE_9_5 and script_name in ('PUSH', 'PUSH2')) or (isinstance(script, ControlSurface) and script.components): + if script_name == self._script_names[0]: + if scripts_have_same_name: + scripts[scripts[0] != None] = script + else: + scripts[0] = script + elif script_name == self._script_names[1]: + scripts[1] = script + found_scripts = scripts[0] and scripts[1] + if found_scripts: + break + if found_scripts: + self.canonical_parent.log_message('CSLINKER SUCCESS: Specified scripts located!') + ssn_comps = [] + for script in scripts: + if IS_LIVE_9_5 and script.__class__.__name__.upper() in ('PUSH', 'PUSH2'): + ssn_comps.append(script._session_ring) + for c in script.components: + if isinstance (c, SessionComponent): + ssn_comps.append(c) + break + if len(ssn_comps) == 2: + self.canonical_parent.log_message('CSLINKER SUCCESS: SessionComponents for specified scripts located!') + if self._matched_link: + for s in ssn_comps: + s._link() + else: + if IS_LIVE_9_5 and self._script_names[0] in ('PUSH', 'PUSH2'): + h_offset = ssn_comps[0].num_tracks + v_offset = ssn_comps[0].num_scenes + else: + h_offset = ssn_comps[0].width() + v_offset = ssn_comps[0].height() + h_offset_1 = 0 if not self._horizontal_link and self._multi_axis_link else -(h_offset) + v_offset_1 = 0 if self._horizontal_link and self._multi_axis_link else -(v_offset) + h_offset_2 = 0 if not self._horizontal_link and self._multi_axis_link else h_offset + v_offset_2 = 0 if self._horizontal_link and self._multi_axis_link else v_offset + self._slave_objects[0] = SessionSlave(self._horizontal_link, self._multi_axis_link, ssn_comps[0], ssn_comps[1], h_offset_1, v_offset_1) + self._slave_objects[1] = SessionSlaveSecondary(self._horizontal_link, self._multi_axis_link, ssn_comps[1], ssn_comps[0], h_offset_2, v_offset_2) + self.canonical_parent.schedule_message(10, self._refresh_slave_objects) + else: + self.canonical_parent.log_message('CSLINKER ERROR: Unable to locate SessionComponents for specified scripts!') + else: + self.canonical_parent.log_message('CSLINKER ERROR: Unable to locate specified scripts!') + + + def on_track_list_changed(self): + """ Refreshes slave objects if horizontally linked. """ + if not self._matched_link and (self._horizontal_link or self._multi_axis_link): + self._refresh_slave_objects() + + + def on_scene_list_changed(self): + """ Refreshes slave objects if vertically linked. """ + if not self._matched_link and (not self._horizontal_link or self._multi_axis_link): + self._refresh_slave_objects() + + + def _refresh_slave_objects(self): + """ Refreshes offsets of slave objects. """ + for obj in self._slave_objects: + if obj: + obj._on_offsets_changed() + + + def update(self): + pass + + +class SessionSlave(object): + """ SessionSlave is the base class for linking two SessionComponents. """ + + def __init__(self, horz_link, multi_axis, self_comp, observed_comp, h_offset, v_offset): + self._horizontal_link = horz_link + self._multi_axis_link = multi_axis + self._h_offset = h_offset + self._v_offset = v_offset + self._self_ssn_comp = self_comp + self._observed_ssn_comp = observed_comp + self._last_self_track_offset = -1 + self._last_self_scene_offset = -1 + self._last_observed_track_offset = -1 + self._last_observed_scene_offset = -1 + self._num_tracks = -1 + self._num_scenes = -1 + self._observed_ssn_comp.add_offset_listener(self._on_offsets_changed) + + + def disconnect(self): + self._self_ssn_comp = None + self._observed_ssn_comp.remove_offset_listener(self._on_offsets_changed) + self._observed_ssn_comp = None + + + def _on_offsets_changed(self, arg_a=None, arg_b=None): + """ Called on offset changes to the observed SessionComponent to handle moving offsets if possible. """ + if self._horizontal_link or self._multi_axis_link: + new_num_tracks = len(self._self_ssn_comp.tracks_to_use()) + if new_num_tracks != self._num_tracks: # if track list changed, need to completely refresh offsets + self._num_tracks = new_num_tracks + self._last_self_track_offset = -1 + self._last_observed_track_offset = -1 + observed_offset = self._observed_track_offset() + if observed_offset != self._last_observed_track_offset: # if observed offset unchanged, do nothing + self._last_observed_track_offset = observed_offset + if self._track_offset_change_possible(): + self_offset = max(self._min_track_offset(), min(self._num_tracks, (self._last_observed_track_offset + self._h_offset))) + if self_offset != self._last_self_track_offset: # if self offset unchanged, do nothing + self._last_self_track_offset = self_offset + self._self_ssn_comp.set_offsets(self._last_self_track_offset, self._self_scene_offset()) + else: + return + if not self._horizontal_link or self._multi_axis_link: + if hasattr(self._self_ssn_comp.song, '__call__'): + new_num_scenes = len(self._self_ssn_comp.song().scenes) + else: + new_num_scenes = len(self._self_ssn_comp.song.scenes) + if new_num_scenes != self._num_scenes: # if scene list changed, need to completely refresh offsets + self._num_scenes = new_num_scenes + self._last_self_scene_offset = -1 + self._last_observed_scene_offset = -1 + observed_offset = self._observed_scene_offset() + if observed_offset != self._last_observed_scene_offset: # if observed offset unchanged, do nothing + self._last_observed_scene_offset = observed_offset + if self._scene_offset_change_possible(): + self_offset = max(self._min_scene_offset(), min(self._num_scenes, (self._last_observed_scene_offset + self._v_offset))) + if self_offset != self._last_self_scene_offset: # if self offset unchanged, do nothing + self._last_self_scene_offset = self_offset + self._self_ssn_comp.set_offsets(self._self_track_offset(), self._last_self_scene_offset) + else: + return + + def _observed_track_offset(self): + if hasattr(self._observed_ssn_comp.track_offset, '__call__'): + return self._observed_ssn_comp.track_offset() + return self._observed_ssn_comp.track_offset + + + def _self_track_offset(self): + if hasattr(self._self_ssn_comp.track_offset, '__call__'): + return self._self_ssn_comp.track_offset() + return self._self_ssn_comp.track_offset + + + def _observed_scene_offset(self): + if hasattr(self._observed_ssn_comp.scene_offset, '__call__'): + return self._observed_ssn_comp.scene_offset() + return self._observed_ssn_comp.scene_offset + + + def _self_scene_offset(self): + if hasattr(self._self_ssn_comp.scene_offset, '__call__'): + return self._self_ssn_comp.scene_offset() + return self._self_ssn_comp.scene_offset + + + def _track_offset_change_possible(self): + """ Returns whether or not moving the track offset is possible. """ + if hasattr(self._self_ssn_comp, 'width'): + w = self._self_ssn_comp.width() + else: + w = self._self_ssn_comp.num_tracks + return self._num_tracks > w + + + def _min_track_offset(self): + """ Returns the minimum track offset. """ + return 0 + + + def _scene_offset_change_possible(self): + """ Returns whether or not moving the scene offset is possible. """ + if hasattr(self._self_ssn_comp, 'height'): + h = self._self_ssn_comp.height() + else: + h = self._self_ssn_comp.num_scenes + return self._num_scenes > h + + + def _min_scene_offset(self): + """ Returns the minimum scene offset. """ + return 0 + + +class SessionSlaveSecondary(SessionSlave): + """ SessionSlaveSecondary is the second of the two linked slave objects. + This overrides the functions that return whether offsets can be changed as well as the functions that return minimum offsets. """ + + + def _track_offset_change_possible(self): + if hasattr(self._self_ssn_comp, 'width'): + self_width = self._self_ssn_comp.width() + else: + self_width = self._self_ssn_comp.num_tracks + if hasattr(self._observed_ssn_comp, 'width'): + obs_width = self._observed_ssn_comp.width() + else: + obs_width = self._observed_ssn_comp.num_tracks + return self._num_tracks >= self_width + obs_width + + + def _min_track_offset(self): + return self._last_observed_track_offset + + + def _scene_offset_change_possible(self): + if hasattr(self._self_ssn_comp, 'height'): + self_h = self._self_ssn_comp.height() + else: + self_h = self._self_ssn_comp.num_scenes + if hasattr(self._observed_ssn_comp, 'height'): + obs_h = self._observed_ssn_comp.height() + else: + obs_h = self._observed_ssn_comp.num_scenes + return self._num_scenes >= self_h + obs_h + + + def _min_scene_offset(self): + return self._last_observed_scene_offset + + \ No newline at end of file diff --git a/ClyphX/ClyphX.py b/ClyphX/ClyphX.py new file mode 100644 index 0000000..9737177 --- /dev/null +++ b/ClyphX/ClyphX.py @@ -0,0 +1,774 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from __future__ import with_statement +import Live +import sys +from functools import partial +from _Framework.ControlSurface import ControlSurface +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from _Framework import Task +from Macrobat import Macrobat +from ExtraPrefs import ExtraPrefs +from CSLinker import CSLinker +from ClyphXTrackActions import ClyphXTrackActions +from ClyphXSnapActions9 import ClyphXSnapActions +from ClyphXGlobalActions import ClyphXGlobalActions +from ClyphXDeviceActions import ClyphXDeviceActions +from ClyphXDRActions9 import ClyphXDRActions9 +from ClyphXClipActions import ClyphXClipActions +from ClyphXControlSurfaceActions9 import ClyphXControlSurfaceActions9 # specialized version for L9 +from ClyphXTriggers import ClyphXTrackComponent, ClyphXControlComponent, ClyphXCueComponent +from ClyphXUserActions import ClyphXUserActions +from ClyphXM4LBrowserInterface import ClyphXM4LBrowserInterface +from ActionList import ActionList +from Push_APC_Combiner import Push_APC_Combiner +from consts import * +if IS_LIVE_9_5: + from PushEmuHandler import MockHandshakeTask, MockHandshake + +FOLDER = '/ClyphX/' +SCRIPT_NAME = 'nativeKONTROL ClyphX v2.6.2 for Live 9' + + +class ClyphX(ControlSurface): + __module__ = __name__ + __doc__ = " ClyphX Main for Live 9 " + + def __init__(self, c_instance): + ControlSurface.__init__(self, c_instance) + self._user_settings_logged = False + self._is_debugging = False + self._push_emulation = False + self._push_apc_combiner = None + self._process_xclips_if_track_muted = True + with self.component_guard(): + self._macrobat = Macrobat(self) + self._extra_prefs = ExtraPrefs(self) + self._cs_linker = CSLinker() + self._track_actions = ClyphXTrackActions(self) + self._snap_actions = ClyphXSnapActions(self) + self._global_actions = ClyphXGlobalActions(self) + self._device_actions = ClyphXDeviceActions(self) + self._dr_actions = ClyphXDRActions9(self) + self._clip_actions = ClyphXClipActions(self) + self._control_surface_actions = ClyphXControlSurfaceActions9(self) # specialized version for L9 + self._user_actions = ClyphXUserActions(self) + self._control_component = ClyphXControlComponent(self) + ClyphXM4LBrowserInterface(self) + ClyphXCueComponent(self) + self._startup_actions_complete = False + self._user_variables = {} + self._play_seq_clips = {} + self._loop_seq_clips = {} + self._current_tracks = [] + live = Live.Application.get_application() + self._can_have_nested_devices = True + self.setup_tracks() + self.log_message('nativeKONTROL LOG ------- ' + SCRIPT_NAME + ' ------- Live Version: ' + str(live.get_major_version()) + '.' + str(live.get_minor_version()) + '.' + str(live.get_bugfix_version()) + ' ------- END LOG') + self.show_message(SCRIPT_NAME) + + + def disconnect(self): + self._push_apc_combiner = None + self._macrobat = None + self._extra_prefs = None + self._cs_linker = None + self._track_actions = None + self._snap_actions = None + self._global_actions = None + self._device_actions = None + self._dr_actions = None + self._clip_actions = None + self._control_surface_actions = None + self._user_actions = None + self._control_component = None + self._user_variables = {} + self._play_seq_clips = {} + self._loop_seq_clips = {} + self._current_tracks = [] + ControlSurface.disconnect(self) + + + def action_dispatch(self, tracks, xclip, action_name, args, ident): + """ Main dispatch for calling appropriate class of actions, passes all necessary arguments to class method """ + if tracks: + if action_name.startswith('SNAP'): + self._snap_actions.store_track_snapshot(tracks, xclip, ident, action_name, args) + elif action_name.startswith('SURFACE') or action_name.startswith('CS'): + self._control_surface_actions.dispatch_cs_action(tracks[0], xclip, ident, action_name, args) + elif action_name.startswith('ARSENAL'): + self._control_surface_actions.dispatch_arsenal_action(tracks[0], xclip, ident, action_name, args) + elif action_name.startswith('PUSH'): + self._control_surface_actions.dispatch_push_action(tracks[0], xclip, ident, action_name, args) + elif action_name.startswith('PXT'): + self._control_surface_actions.dispatch_pxt_action(tracks[0], xclip, ident, action_name, args) + elif action_name.startswith('MXT'): + self._control_surface_actions.dispatch_mxt_action(tracks[0], xclip, ident, action_name, args) + elif action_name in GLOBAL_ACTIONS: + getattr(self._global_actions, GLOBAL_ACTIONS[action_name])(tracks[0], xclip, ident, args) + elif action_name == 'PSEQ' and args== 'RESET': + for key, value in self._play_seq_clips.items(): + value[1] = -1 + elif action_name == 'DEBUG': + if type(xclip) is Live.Clip.Clip: + xclip.name = str(xclip.name).upper().replace('DEBUG', 'Debugging Activated') + self.start_debugging() + else: + for t in tracks: + if action_name in TRACK_ACTIONS: + getattr(self._track_actions, TRACK_ACTIONS[action_name])(t, xclip, ident, args) + elif action_name == 'LOOPER': + if args and args.split()[0] in LOOPER_ACTIONS: + getattr(self._device_actions, LOOPER_ACTIONS[args.split()[0]])(t, xclip, ident, args) + elif action_name in LOOPER_ACTIONS: + getattr(self._device_actions, LOOPER_ACTIONS[action_name])(t, xclip, ident, args) + elif action_name.startswith('DEV'): + device_action = self.get_device_to_operate_on(t, action_name, args) + device_args = None + if device_action[0]: + if len(device_action) > 1: + device_args = device_action[1] + if device_args and device_args.split()[0] in DEVICE_ACTIONS: + getattr(self._device_actions, DEVICE_ACTIONS[device_args.split()[0]])(device_action[0], t, xclip, ident, device_args) + elif device_args and 'CHAIN' in device_args: + self._device_actions.dispatch_chain_action(device_action[0], t, xclip, ident, device_args) + elif action_name.startswith('DEV'): + self._device_actions.set_device_on_off(device_action[0], t, xclip, ident, device_args) + elif action_name.startswith('CLIP') and t in self.song().tracks: + clip_action = self.get_clip_to_operate_on(t, action_name, args) + clip_args = None + if clip_action[0]: + if len(clip_action) > 1: + clip_args = clip_action[1] + if clip_args and clip_args.split()[0] in CLIP_ACTIONS: + getattr(self._clip_actions, CLIP_ACTIONS[clip_args.split()[0]])(clip_action[0], t, xclip, ident, clip_args.replace(clip_args.split()[0], '')) + elif clip_args and clip_args.split()[0].startswith('NOTES'): + self._clip_actions.do_clip_note_action(clip_action[0], t, xclip, ident, args) + elif action_name.startswith('CLIP'): + self._clip_actions.set_clip_on_off(clip_action[0], t, xclip, ident, args) + elif action_name.startswith('DR'): + dr = self.get_drum_rack_to_operate_on(t) + arg = args.split()[0] + if dr and args: + if arg in DR_ACTIONS: + getattr(self._dr_actions, DR_ACTIONS[arg])(dr, t, xclip, ident, args.strip()) + elif 'PAD' in args: + self._dr_actions.dispatch_pad_action(dr, t, xclip, ident, args.strip()) + elif action_name in self._user_actions._action_dict: + getattr(self._user_actions, self._user_actions._action_dict[action_name])(t, args) + if self._is_debugging: + self.log_message('action_dispatch triggered, ident=' + str(ident) + ' and track(s)=' + str(self.track_list_to_string(tracks)) + ' and action=' + str(action_name) + ' and args=' + str(args)) + + + def handle_external_trigger(self, xtrigger): + """ This replaces the below method for compatibility with scripts that also work with ClyphX Pro. """ + xtrigger.name = '[] %s' % xtrigger.name + self.handle_action_list_trigger(self.song().view.selected_track, xtrigger) + + + def handle_xclip_name(self, track, xclip): + """ This is just here for backwards compatibility (primarily with MapEase ClyphX Strip and ClyphX XT) and shouldn't be used if possible. """ + self.handle_action_list_trigger(track, xclip) + + + def handle_m4l_trigger(self, name): + """ Convenience method for triggering actions from M4L by simply supplying an action name. """ + self.handle_action_list_trigger(self.song().view.selected_track, ActionList('[]' + name)) + + + def handle_action_list_trigger(self, track, xtrigger): + """ Directly dispatches snapshot recall, X-Control overrides and Seq X-Clips. Otherwise, seperates ident from action names, splits up lists of action names and calls action dispatch. """ + if self._is_debugging: + self.log_message('---') + name = None + if xtrigger is not None: + name = self.get_name(xtrigger.name).strip() + if name and name[0] == '[' and ']' in name: + # Snap action, so pass directly to snap component + if ' || (' in name and type(xtrigger) is Live.Clip.Clip and xtrigger.is_playing: + self._snap_actions.recall_track_snapshot(name, xtrigger) + # Control reassignment, so pass directly to control component + elif '[[' in name and ']]' in name: + self._control_component.assign_new_actions(name) + # Standard trigger + else: + ident = name[name.index('['):name.index(']')+1].strip() + raw_action_list = name.replace(ident, '', 1).strip() + if raw_action_list == '': + return + is_play_seq = False + is_loop_seq = False + + # X-Clips can have on and off action lists, the following handles this + if type(xtrigger) is Live.Clip.Clip: + raw_action_list = self.get_xclip_action_list(xtrigger, raw_action_list) + if not raw_action_list: + return + + # Check if the trigger is a PSEQ (accessible to any type of X-Trigger) + if raw_action_list[0] == '(' and '(PSEQ)' in raw_action_list: + is_play_seq = True + raw_action_list = raw_action_list.replace('(PSEQ)', '').strip() + + # Check if the trigger is a LSEQ (accessible only to X-Clips) + elif type(xtrigger) is Live.Clip.Clip and raw_action_list[0] == '(' and '(LSEQ)' in raw_action_list: + is_loop_seq = True + raw_action_list = raw_action_list.replace('(LSEQ)', '').strip() + + # Build formatted action list + formatted_action_list = [] + for action in raw_action_list.split(';'): + action_data = self.format_action_name(track, action.strip()) + if action_data: + formatted_action_list.append(action_data) + + # If seq, pass to appropriate function, else call action dispatch for each action in the formatted action list + if formatted_action_list: + if is_play_seq: + self.handle_play_seq_action_list(formatted_action_list, xtrigger, ident) + elif is_loop_seq: + self._loop_seq_clips[xtrigger.name] = [ident, formatted_action_list] + self.handle_loop_seq_action_list(xtrigger, 0) + else: + for action in formatted_action_list: + self.action_dispatch(action['track'], xtrigger, action['action'], action['args'], ident) + if self._is_debugging: + self.log_message('handle_action_list_trigger triggered, ident=' + str(ident) + ' and track(s)=' + str(self.track_list_to_string(action['track'])) + ' and action=' + str(action['action']) + ' and args=' + str(action['args'])) + + + def get_xclip_action_list(self, xclip, full_action_list): + """ Get the action list to perform. X-Clips can have an on and off action list seperated by a comma. This will return which action list to perform + based on whether the clip is playing. If the clip is not playing and there is no off action, this returns None. """ + result = None + split_list = full_action_list.split(',') + if xclip.is_playing: + result = split_list[0] + else: + if len(split_list) == 2: + if split_list[1].strip() == '*': + result = split_list[0] + else: + result = split_list[1] + if self._is_debugging: + self.log_message('get_xclip_action_list returning ' + str(result)) + return result + + + def replace_user_variables(self, string_with_vars): + """ Replace any user variables in the given string with the value the variable represents. """ + while '%' in string_with_vars: + var_name = string_with_vars[string_with_vars.index('%')+1:] + if '%' in var_name: + var_name = var_name[0:var_name.index('%')] + string_with_vars = string_with_vars.replace('%' + var_name + '%', self.get_user_variable_value(var_name), 1) + else: + string_with_vars = string_with_vars.replace('%', '', 1) + if '$' in string_with_vars: # For compat with old-style variables + for string in string_with_vars.split(): + if '$' in string and not '=' in string: + var_name = string.replace('$', '') + string_with_vars = string_with_vars.replace('$' + var_name, self.get_user_variable_value(var_name), 1) + if self._is_debugging: + self.log_message('replace_user_variables returning ' + str(string_with_vars)) + return string_with_vars + + + def get_user_variable_value(self, var_name): + """ Get the value of the given variable name or 0 if var name not found. """ + result = '0' + if self._user_variables.has_key(var_name): + result = self._user_variables[var_name] + if self._is_debugging: + self.log_message('get_user_variable_value returning ' + str(var_name) + '=' + str(result)) + return result + + + def handle_user_variable_assignment(self, string_with_assign): + """ Handle assigning new value to variable with either assignment or expression enclosed in parens. """ + string_with_assign = string_with_assign.replace('$', '')# For compat with old-style variables + var_data = string_with_assign.split('=') + if len(var_data) >= 2 and not ';' in var_data[1] and not '%' in var_data[1] and not '=' in var_data[1]: + if '(' in var_data[1] and ')' in var_data[1]: + try: self._user_variables[var_data[0].strip()] = str(eval(var_data[1].strip())) + except: pass + else: + self._user_variables[var_data[0].strip()] = var_data[1].strip() + if self._is_debugging: + self.log_message('handle_user_variable_assignment, ' + str(var_data[0].strip()) + '=' + str(var_data[1].strip())) + + + def format_action_name(self, origin_track, origin_name): + """ Replaces vars (if any) then splits up track, action name and arguments (if any) and returns dict """ + result_name = self.replace_user_variables(origin_name) + if '=' in result_name: + self.handle_user_variable_assignment(result_name) + return + result_track = [origin_track] + if len(result_name) >= 4 and (('/' in result_name[:4]) or ('-' in result_name[:4] and '/' in result_name[4:]) or (result_name[0] == '"' and '"' in result_name[1:])): + track_data = self.get_track_to_operate_on(result_name) + result_track = track_data[0] + result_name = track_data[1] + args = '' + name = result_name.split() + if len(name) > 1: + args = result_name.replace(name[0], '', 1) + result_name = result_name.replace(args, '') + if self._is_debugging: + self.log_message('format_action_name returning, track(s)=' + str(self.track_list_to_string(result_track)) + ' and action=' + str(result_name.strip()) + ' and args=' + str(args.strip())) + return {'track' : result_track, 'action' : result_name.strip(), 'args' : args.strip()} + + + def handle_loop_seq_action_list(self, xclip, count): + """ Handles sequenced action lists, triggered by xclip looping """ + if self._loop_seq_clips.has_key(xclip.name): + if count >= len(self._loop_seq_clips[xclip.name][1]): + count = count - ((count / len(self._loop_seq_clips[xclip.name][1]))*len(self._loop_seq_clips[xclip.name][1])) + action = self._loop_seq_clips[xclip.name][1][count] + self.action_dispatch(action['track'], xclip, action['action'], action['args'], self._loop_seq_clips[xclip.name][0]) + if self._is_debugging: + self.log_message('handle_loop_seq_action_list triggered, xclip.name=' + str(xclip.name) + ' and track(s)=' + str(self.track_list_to_string(action['track'])) + ' and action=' + str(action['action']) + ' and args=' + str(action['args'])) + + + def handle_play_seq_action_list(self, action_list, xclip, ident): + """ Handles sequenced action lists, triggered by replaying/retriggering the xtrigger """ + if self._play_seq_clips.has_key(xclip.name): + count = self._play_seq_clips[xclip.name][1] + 1 + if count > len(self._play_seq_clips[xclip.name][2])-1: + count = 0 + self._play_seq_clips[xclip.name] = [ident, count, action_list] + else: + self._play_seq_clips[xclip.name] = [ident, 0, action_list] + action = self._play_seq_clips[xclip.name][2][self._play_seq_clips[xclip.name][1]] + self.action_dispatch(action['track'], xclip, action['action'], action['args'], ident) + if self._is_debugging: + self.log_message('handle_play_seq_action_list triggered, ident=' + str(ident) + ' and track(s)=' + str(self.track_list_to_string(action['track'])) + ' and action=' + str(action['action']) + ' and args=' + str(action['args'])) + + + def do_parameter_adjustment(self, param, value): + """" Adjust (, reset, random, set val) continuous params, also handles quantized param adjustment (should just use +1/-1 for those) """ + if not param.is_enabled: + return() + step = (param.max - param.min) / 127 + new_value = param.value + if value.startswith(('<', '>')): + factor = self.get_adjustment_factor(value) + if not param.is_quantized: + new_value += step * factor + else: + new_value += factor + elif value == 'RESET' and not param.is_quantized: + new_value = param.default_value + elif 'RND' in value and not param.is_quantized: + rnd_min = 0 + rnd_max = 128 + if value != 'RND' and '-' in value: + rnd_range_data = value.replace('RND', '').split('-') + if len(rnd_range_data) == 2: + new_min = 0 + new_max = 128 + try: new_min = int(rnd_range_data[0]) + except: new_min = 0 + try: new_max = int(rnd_range_data[1]) + 1 + except: new_max = 128 + if new_min in range(0, 129) and new_max in range(0, 129) and new_min < new_max: + rnd_min = new_min + rnd_max = new_max + rnd_value = (Live.Application.get_random_int(0, 128) * (rnd_max - rnd_min) / 127) + rnd_min + new_value = (rnd_value * step) + param.min + + else: + try: + if int(value) in range (128): + try: new_value = (int(value) * step) + param.min + except: new_value = param.value + except: pass + if new_value >= param.min and new_value <= param.max: + param.value = new_value + if self._is_debugging: + self.log_message('do_parameter_adjustment called on ' + str(param.name) + ', set value to ' + str(new_value)) + + + def get_adjustment_factor(self, string, as_float = False): + """ Get factor for use with < > actions """ + factor = 1 + if len(string) > 1: + if as_float: + try: factor = float(string[1:]) + except: factor = 1 + else: + try: factor = int(string[1:]) + except: factor = 1 + if string.startswith('<'): + factor = -(factor) + if self._is_debugging: + self.log_message('get_adjustment_factor returning factor=' + str(factor)) + return factor + + + def get_track_to_operate_on(self, origin_name): + """ Gets track or tracks to operate on """ + result_tracks = [] + result_name = origin_name + if '/' in origin_name: + tracks = list(tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)) + sel_track_index = tracks.index(self.song().view.selected_track) + if(origin_name.index('/') > 0): + track_spec = origin_name.split('/')[0].strip() + if '"' in track_spec: + track_spec = self.get_track_index_by_name(track_spec, tracks) + if 'SEL' in track_spec: + track_spec = track_spec.replace('SEL', str(sel_track_index + 1), 1) + if 'MST' in track_spec: + track_spec = track_spec.replace('MST', str(len(tracks)), 1) + if track_spec == 'ALL': + result_tracks = tracks + else: + track_range_spec = track_spec.split('-') + if len(track_range_spec) <= 2: + track_range = [] + try: + for spec in track_range_spec: + track_index = -1 + if spec.startswith(('<', '>')): + try: track_index = self.get_adjustment_factor(spec) + sel_track_index + except: pass + else: + try: track_index = int(spec) - 1 + except: track_index = (ord(spec) - 65) + len(self.song().tracks) + if track_index in range(len(tracks)): + track_range.append(track_index) + except: track_range = [] + if track_range: + if len(track_range) == 2: + if (track_range[0] < track_range[1]): + for index in range(track_range[0], track_range[1] + 1): + result_tracks.append(tracks[index]) + else: + result_tracks = [tracks[track_range[0]]] + result_name = origin_name[origin_name.index('/')+1:].strip() + if self._is_debugging: + self.log_message('get_track_to_operate_on returning result_tracks=' + str(self.track_list_to_string(result_tracks)) + ' and result_name=' + str(result_name)) + return (result_tracks, result_name) + + + def get_track_index_by_name(self, name, tracks): + """ Gets the index(es) associated with the track name(s) specified in name. """ + while '"' in name: + track_name = name[name.index('"')+1:] + if '"' in track_name: + track_name = track_name[0:track_name.index('"')] + track_index = '' + def_name = '' + if ' AUDIO' or ' MIDI' in track_name: + def_name = track_name.replace(' ', '-')# In Live GUI, default names are 'n Audio' or 'n MIDI', in API it's 'n-Audio' or 'n-MIDI' + for track in tracks: + current_track_name = self.get_name(track.name) + if current_track_name == track_name or current_track_name == def_name: + track_index = str(tracks.index(track) + 1) + break + name = name.replace('"' + track_name + '"', track_index, 1) + name = name.replace('"' + def_name + '"', track_index, 1) + else: + name = name.replace('"', '', 1) + return name + + + def get_device_to_operate_on(self, track, action_name, args): + """ Get device to operate on and action to perform with args """ + device = None + device_args = args + if 'DEV"' in action_name: + dev_name = action_name[action_name.index('"')+1:] + if '"' in args: + dev_name = action_name[action_name.index('"')+1:] + ' ' + args + device_args = args[args.index('"')+1:].strip() + if '"' in dev_name: + dev_name = dev_name[0:dev_name.index('"')] + for dev in track.devices: + if dev.name.upper() == dev_name: + device = dev + break + else: + if action_name == 'DEV': + device = track.view.selected_device + if device == None: + if track.devices: + device = track.devices[0] + else: + try: + dev_num = action_name.replace('DEV', '') + if '.' in dev_num and self._can_have_nested_devices: + dev_split = dev_num.split('.') + top_level = track.devices[int(dev_split[0]) - 1] + if top_level and top_level.can_have_chains: + device = top_level.chains[int(dev_split[1]) - 1].devices[0] + if len(dev_split) > 2: + device = top_level.chains[int(dev_split[1]) - 1].devices[int(dev_split[2]) - 1] + else: + device = track.devices[int(dev_num) - 1] + except: pass + if self._is_debugging: + debug_string = 'None' + if device: + debug_string = device.name + self.log_message('get_device_to_operate_on returning device=' + str(debug_string) + ' and device args=' + str(device_args)) + return (device, device_args) + + + def get_clip_to_operate_on(self, track, action_name, args): + """ Get clip to operate on and action to perform with args """ + clip = None + clip_args = args + if 'CLIP"' in action_name: + clip_name = action_name[action_name.index('"')+1:] + if '"' in args: + clip_name = action_name[action_name.index('"')+1:] + ' ' + args + clip_args = args[args.index('"')+1:].strip() + if '"' in clip_name: + clip_name = clip_name[0:clip_name.index('"')] + for slot in track.clip_slots: + if slot.has_clip and slot.clip.name.upper() == clip_name: + clip = slot.clip + break + else: + sel_slot_idx = list(self.song().scenes).index(self.song().view.selected_scene) + slot_idx = sel_slot_idx + if action_name == 'CLIP': + if track.playing_slot_index >= 0: + slot_idx = track.playing_slot_index + elif action_name == 'CLIPSEL': + if self.application().view.is_view_visible('Arranger'): + clip = self.song().view.detail_clip + else: + try: slot_idx = int(action_name.replace('CLIP', ''))-1 + except: slot_idx = sel_slot_idx + if clip == None and track.clip_slots[slot_idx].has_clip: + clip = track.clip_slots[slot_idx].clip + if self._is_debugging: + debug_string = 'None' + if clip: + debug_string = clip.name + self.log_message('get_clip_to_operate_on returning clip=' + str(debug_string) + ' and clip args=' + str(clip_args)) + return (clip, clip_args) + + + def get_drum_rack_to_operate_on(self, track): + """ Get drum rack to operate on """ + dr = None + for device in track.devices: + if device.can_have_drum_pads: + dr = device + break + if self._is_debugging: + debug_string = 'None' + if dr: + debug_string = dr.name + self.log_message('get_drum_rack_to_operate_on returning dr=' + str(debug_string)) + return dr + + + def get_user_settings(self, midi_map_handle): + """ Get user settings (variables, prefs and control settings) from text file and perform startup actions if any """ + list_to_build = None + ctrl_data = [] + prefs_data = [] + try: + mrs_path = '' + for path in sys.path: + if 'MIDI Remote Scripts' in path: + mrs_path = path + break + user_file = mrs_path + FOLDER + 'UserSettings.txt' + if not self._user_settings_logged: + self.log_message(' ------- Attempting to read UserSettings file: ' + user_file + '------- ') + for line in open(user_file): + line = self.get_name(line.rstrip('\n')) + if not line.startswith(('#', '"', '*')) and not line.strip() == '': + if not self._user_settings_logged: + self.log_message(str(line)) + if not line.startswith(('#', '"', 'STARTUP_', 'INCLUDE_NESTED_', 'SNAPSHOT_', 'PROCESS_XCLIPS_', 'PUSH_EMU', 'APC_PUSH_EMU', 'CSLINKER')) and not line == '': + if '[USER CONTROLS]' in line: + list_to_build = 'controls' + elif '[USER VARIABLES]' in line: + list_to_build = 'vars' + elif '[EXTRA PREFS]' in line: + list_to_build = 'prefs' + else: + if list_to_build == 'vars' and '=' in line: + line = self.replace_user_variables(line) + self.handle_user_variable_assignment(line) + elif list_to_build == 'controls' and '=' in line: + ctrl_data.append(line) + elif list_to_build == 'prefs' and '=' in line: + prefs_data.append(line) + elif 'PUSH_EMULATION' in line: + self._push_emulation = line.split('=')[1].strip() == 'ON' + if self._push_emulation: + if 'APC' in line: + with self.component_guard(): + self._push_apc_combiner = Push_APC_Combiner(self) + self.enable_push_emulation(self._control_surfaces()) + elif line.startswith('INCLUDE_NESTED_DEVICES_IN_SNAPSHOTS ='): + include_nested = self.get_name(line[37:].strip()) + include_nested_devices = False + if include_nested.startswith('ON'): + include_nested_devices = True + self._snap_actions._include_nested_devices = include_nested_devices + elif line.startswith('SNAPSHOT_PARAMETER_LIMIT ='): + try: limit = int(line[26:].strip()) + except: limit = 500 + self._snap_actions._parameter_limit = limit + elif line.startswith('PROCESS_XCLIPS_IF_TRACK_MUTED ='): + self._process_xclips_if_track_muted = line.split('=')[1].strip() == 'TRUE' + elif line.startswith('STARTUP_ACTIONS =') and not self._startup_actions_complete: + actions = line[17:].strip() + if actions != 'OFF': + action_list = '[]' + actions + self.schedule_message(2, partial(self.perform_startup_actions, action_list)) + self._startup_actions_complete = True + elif line.startswith('CSLINKER'): + self._cs_linker.parse_settings(line) + if ctrl_data: + self._control_component.get_user_control_settings(ctrl_data, midi_map_handle) + if prefs_data: + self._extra_prefs.get_user_settings(prefs_data) + except: pass + + + def enable_push_emulation(self, scripts): + """ Try to disable Push's handshake to allow for emulation. + If emulating for APC, set scripts on combiner component """ + for script in scripts: + script_name = script.__class__.__name__ + if script_name == 'Push': + if IS_LIVE_9_5: + with script._component_guard(): + script._start_handshake_task = MockHandshakeTask() + script._handshake = MockHandshake() + if self._push_apc_combiner: + self._push_apc_combiner.set_up_scripts(self._control_surfaces()) + else: + script._handshake._identification_timeout_task.kill() + script._handshake._identification_timeout_task = Task.Task() + break + + + def start_debugging(self): + """ Turn on debugging and write all user vars/controls/actions to Live's log file to assist in troubleshooting. """ + if not self._is_debugging: + self._is_debugging = True + self.log_message('------- ClyphX Log: Logging User Variables -------') + for key, value in self._user_variables.items(): + self.log_message(str(key) + '=' + str(value)) + self.log_message('------- ClyphX Log: Logging User Controls -------') + for key, value in self._control_component._control_list.items(): + self.log_message(str(key) + ' on_action=' + str(value['on_action']) + ' and off_action=' + str(value['off_action'])) + self.log_message('------- ClyphX Log: Logging User Actions -------') + for key, value in self._user_actions._action_dict.items(): + self.log_message(str(key) + '=' + str(value)) + self.log_message('------- ClyphX Log: Debugging Started -------') + + + def track_list_to_string(self, track_list): + """ Convert list of tracks to a string of track names or None if no tracks. This is used for debugging. """ + result = 'None' + if track_list: + result = '[' + for track in track_list: + result += track.name + ', ' + result = result[:len(result)-2] + return result + ']' + + + def perform_startup_actions(self, action_list): + """ Delay startup action so it can perform actions on values that are changed upon set load (like overdub) """ + self.handle_action_list_trigger(self.song().view.selected_track, ActionList(action_list)) + + + def setup_tracks(self): + """ Setup component tracks on ini and track list changes. Also call Macrobat's get rack """ + for t in self.song().tracks: + self._macrobat.setup_tracks(t) + if (self._current_tracks and t in self._current_tracks): + pass + else: + self._current_tracks.append(t) + ClyphXTrackComponent(self, t) + for r in tuple(self.song().return_tracks) + (self.song().master_track,): + self._macrobat.setup_tracks(r) + self._snap_actions.setup_tracks() + + + def get_name(self, name): + """ Convert name to upper-case string or return blank string if couldn't be converted """ + try: name = str(name).upper() + except: name = '' + return name + + + def _on_track_list_changed(self): + ControlSurface._on_track_list_changed(self) + self.setup_tracks() + + + def connect_script_instances(self, instanciated_scripts): + """ Pass connect scripts call to control component """ + self._control_component.connect_script_instances(instanciated_scripts) + self._control_surface_actions.connect_script_instances(instanciated_scripts) + if self._push_emulation: + self.enable_push_emulation(instanciated_scripts) + + + def build_midi_map(self, midi_map_handle): + """ Build user-defined list of midi messages for controlling ClyphX track """ + ControlSurface.build_midi_map(self, midi_map_handle) + if self._user_settings_logged: + self._control_component.rebuild_control_map(midi_map_handle) + else: + self.get_user_settings(midi_map_handle) + self._user_settings_logged = True + if self._push_emulation: + self.enable_push_emulation(self._control_surfaces()) + + + def receive_midi(self, midi_bytes): + """ Receive user-specified messages and send to control script """ + ControlSurface.receive_midi(self, midi_bytes) + self._control_component.receive_midi(midi_bytes) + + + def handle_sysex(self, midi_bytes): + """ Handle sysex received from controller """ + pass + + + def handle_nonsysex(self, midi_bytes): + """ Override so that ControlSurface doesn't report this to Log.txt """ + pass + + +# local variables: +# tab-width: 4 + diff --git a/ClyphX/ClyphXArsenalActions.py b/ClyphX/ClyphXArsenalActions.py new file mode 100644 index 0000000..e9cb43c --- /dev/null +++ b/ClyphX/ClyphXArsenalActions.py @@ -0,0 +1,196 @@ +""" +# Copyright (C) 2016-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +try: + from _NKFW2.Utils import parse_int + from _NKFW2.consts import NOTE_NAMES + from _NKFW2.Scales import SCALE_TYPES + from _NKFW2.ScaleSettingsComponent import SEQ_OFFSET, FOURTHS_OFFSET, OFFSET_NAMES + S_TYPES = [s.name.upper() for s in SCALE_TYPES] + O_NAMES = [o.upper() for o in OFFSET_NAMES] +except: + pass + + +def adjust_property(obj, prop, min_v, max_v, arg, setter=None, v_list=None): + """ Adjusts the given property absolutely or relatively. """ + if arg: + arg = arg[0].strip() + current_v = getattr(obj, prop) + new_v = current_v + # get absolute value + if arg.isdigit(): + new_v = parse_int(arg, current_v + 1, min_v + 1, max_v + 1) - 1 + # get relative value with wrapping + elif arg == '>': + new_v = current_v + 1 + if new_v > max_v: + new_v = min_v + elif arg == '<': + new_v = current_v - 1 + if new_v < min_v: + new_v = max_v + # get index of arg from v_list + elif v_list and arg in v_list: + new_v = v_list.index(arg) + if setter: + getattr(obj, setter)(new_v) + else: + setattr(obj, prop, new_v) + + +def toggle_property(obj, prop, arg): + """ Toggles the given property or turns it off/on. """ + if arg: + setattr(obj, prop, arg[0].strip() == 'ON') + else: + setattr(obj, prop, not getattr(obj, prop)) + + +def get_component(script, comp_name): + """ Returns the component of the given name. """ + for c in script._components: + if c.name == comp_name: + return c + return None + + +class ClyphXArsenalActions(ControlSurfaceComponent): + """ Actions related to Arsenal control surface scripts. """ + + def __init__(self, parent): + super(ControlSurfaceComponent, self).__init__() + self._parent = parent + self._scripts = {} + + def disconnect(self): + super(ControlSurfaceComponent, self).disconnect() + self._parent = None + self._scripts = None + + def set_script(self, script): + """ Adds the given script to the dict of scripts to work with. """ + self._scripts[script.script_name.upper()] =\ + {'top' : script, + 'scl': get_component(script, 'Scale_Settings_Control'), + 'targets': get_component(script, 'Targets_Component')} + + def dispatch_action(self, track, xclip, ident, script_name, action): + """ Dispatches the action to the appropriate handler. """ + script = self._scripts.get(script_name, None) + if script: + action_spec = action.split() + if action_spec: + action_name = action_spec[0].strip() + with script['top'].component_guard(): + if '_MODE' in action_name: + self._handle_mode_action(script, action_spec) + elif 'LOCK' in action_name: + self._handle_lock_action(script, action_spec) + elif 'SCL' in action_name: + self._handle_scale_action(script, action_spec, xclip, ident) + + def _handle_mode_action(self, script, spec): + """ Handles selecting a specific mode or incrementing modes with wrapping. """ + mc = (script['top'].matrix_modes_component if spec[0].startswith('M_MODE') + else script['top'].encoder_modes_component) + if mc: + adjust_property(mc, 'selected_mode_index', 0, mc.num_modes - 1, spec[1:]) + + def _handle_lock_action(self, script, spec): + """ Handles toggling the locking of the current track or mode-specific locks. """ + tc = script['targets'] + if tc: + if 'MODES' in spec: + tc.toggle_mode_specific_lock() + else: + tc.toggle_lock() + + def _handle_scale_action(self, script, spec, xclip, ident): + """ Handles scale actions or dispatches them to the appropriate handler. """ + if script['scl']: + scl = script['scl'] + if len(spec) == 1: + self._capture_scale_settings(script, xclip, ident) + return + elif len(spec) >= 5: + self._recall_scale_settings(scl, spec) + else: + if spec[1] == 'INKEY': + toggle_property(scl, '_in_key', spec[2:]) + elif spec[1] == 'HORZ': + toggle_property(scl, '_orientation_is_horizontal', spec[2:]) + elif spec[1] == 'ROOT': + adjust_property(scl._tonics, '_page_index', 0, + scl._tonics.num_pages - 1, spec[2:], + 'set_page_index', NOTE_NAMES) + elif spec[1] == 'TYPE': + adjust_property(scl._scales, '_page_index', 0, + scl._scales.num_pages - 1, [' '.join(spec[2:])], + 'set_page_index', S_TYPES) + elif spec[1] == 'OFFSET': + adjust_property(scl._offsets, '_page_index', 0, + scl._offsets.num_pages - 1, spec[2:], + 'set_page_index', O_NAMES) + elif spec[1] == 'SEQ': # deprecated + self._toggle_scale_offset(scl, spec[2:]) + scl._notify_scale_settings() + + def _capture_scale_settings(self, script, xclip, ident): + """ Captures the current scale type, tonic, in key state, offset and orientation + and adds them to the given xclip's name. """ + if type(xclip) is Live.Clip.Clip: + comp = script['scl'] + xclip.name = '%s %s SCL %s %s %s %s %s' % (ident, script['top'].script_name, + comp._scales.page_index, + comp.tonic, comp.in_key, + comp._offsets.page_index, + comp.orientation_is_horizontal) + + def _recall_scale_settings(self, comp, spec): + """ Recalls previously stored scale settings. """ + if len(spec) >= 5: + scale = parse_int(spec[1], None, 0, comp._scales.num_pages - 1) + if scale is not None: + comp._scales.set_page_index(scale) + tonic = parse_int(spec[2], None, 0, comp._tonics.num_pages - 1) + if tonic is not None: + comp._tonics.set_page_index(tonic) + comp._in_key = spec[3].strip() == 'TRUE' + if len(spec) == 5: # deprecated + self._toggle_scale_offset(comp, ['ON'] if spec[4].strip() == 'TRUE' + else ['OFF']) + else: + offset = parse_int(spec[4], None, 0, comp._offsets.num_pages - 1) + if offset is not None: + comp._offsets.set_page_index(offset) + comp._orientation_is_horizontal = spec[5].strip() == 'TRUE' + + def _toggle_scale_offset(self, comp, arg): + """ Toggles between sequent and 4ths offsets. This is deprecated, but maintained + for backwards compatibility. """ + offset = FOURTHS_OFFSET + if (arg and arg[0].strip() == 'ON') or (not arg and comp._offsets.page_index): + offset = SEQ_OFFSET + comp._offsets.page_index = offset diff --git a/ClyphX/ClyphXClipActions.py b/ClyphX/ClyphXClipActions.py new file mode 100644 index 0000000..b4677c3 --- /dev/null +++ b/ClyphX/ClyphXClipActions.py @@ -0,0 +1,952 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from ClyphXClipEnvCapture import ClyphXClipEnvCapture +from consts import * +if IS_LIVE_9: + import random + +ENV_TYPES = ('IRAMP', 'DRAMP', 'IPYR', 'DPYR', 'SQR', 'SAW') + +class ClyphXClipActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Clip-related actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._env_capture = ClyphXClipEnvCapture() + + + def disconnect(self): + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def set_clip_name(self, clip, track, xclip, ident, args): + """ Set clip's name """ + args = args.strip() + if args: + clip.name = args + + + def set_clip_on_off(self, clip, track, xclip, ident, value = None): + """ Toggles or turns clip on/off """ + if value in KEYWORDS: + clip.muted = not(KEYWORDS[value]) + else: + clip.muted = not(clip.muted) + + + def set_warp(self, clip, track, xclip, ident, value = None): + """ Toggles or turns clip warp on/off """ + if clip.is_audio_clip: + value = value.strip() + if value in KEYWORDS: + clip.warping = KEYWORDS[value] + else: + clip.warping = not(clip.warping) + + + def adjust_time_signature(self, clip, track, xclip, ident, args): + """ Adjust clip's time signature """ + if '/' in args: + name_split = args.split('/') + try: + clip.signature_numerator = int(name_split[0].strip()) + clip.signature_denominator = int(name_split[1].strip()) + except: pass + + + def adjust_detune(self, clip, track, xclip, ident, args): + """ Adjust/set audio clip detune """ + if clip.is_audio_clip: + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args) + clip.pitch_fine = clip.pitch_fine + factor + else: + try: + clip.pitch_fine = int(args) + except: pass + + + def adjust_transpose(self, clip, track, xclip, ident, args): + """ Adjust audio or midi clip transpose, also set audio clip transpose """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args) + if clip.is_audio_clip: + clip.pitch_coarse = max(-48, min(48, (clip.pitch_coarse + factor))) + elif clip.is_midi_clip: + self.do_note_pitch_adjustment(clip, factor) + else: + if clip.is_audio_clip: + try: + clip.pitch_coarse = int(args) + except: pass + + + def adjust_gain(self, clip, track, xclip, ident, args): + """ Adjust/set clip gain for Live 9. For settings, range is 0 - 127. """ + if IS_LIVE_9 and clip.is_audio_clip: + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + clip.gain = max(0.0, min(1.0, (clip.gain + factor * float(1.0 / 127.0)))) + else: + try: + clip.gain = int(args) * float(1.0 / 127.0) + except: pass + + + def adjust_start(self, clip, track, xclip, ident, args): + """ Adjust/set clip start exclusively for Live 9. In Live 8, same as adjust_loop_start. """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + if IS_LIVE_9 and clip.looping: + clip.start_marker = max(0.0, min(clip.end_marker - factor, (clip.start_marker + factor))) + else: + clip.loop_start = max(0.0, min(clip.loop_end - factor, (clip.loop_start + factor))) + else: + try: + if IS_LIVE_9 and clip.looping: + clip.start_marker = float(args) + else: + clip.loop_start = float(args) + except: pass + + + def adjust_loop_start(self, clip, track, xclip, ident, args): + """ Adjust/set clip loop start if loop is on or clip start otherwise. """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + clip.loop_start = max(0.0, min(clip.loop_end - factor, (clip.loop_start + factor))) + else: + try: + clip.loop_start = float(args) + except: pass + + + def adjust_end(self, clip, track, xclip, ident, args): + """ Adjust/set clip end exclusively for Live 9. In Live 8, same as adjust_loop_end. """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + if IS_LIVE_9 and clip.looping: + clip.end_marker = max((clip.start_marker - factor), (clip.end_marker + factor)) + else: + clip.loop_end = max((clip.loop_start - factor), (clip.loop_end + factor)) + else: + try: + if IS_LIVE_9 and clip.looping: + clip.end_marker = float(args) + else: + clip.loop_end = float(args) + except: pass + + + def adjust_loop_end(self, clip, track, xclip, ident, args): + """ Adjust/set clip loop end if loop is on or close end otherwise. """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + clip.loop_end = max((clip.loop_start - factor), (clip.loop_end + factor)) + else: + try: + clip.loop_end = float(args) + except: pass + + + def adjust_cue_point(self, clip, track, xclip, ident, args): + """ Adjust clip's start point and fire (also stores cue point if not specified). Will not fire xclip itself as this causes a loop """ + if clip.is_midi_clip or (clip.is_audio_clip and clip.warping): + if args: + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + args = clip.loop_start + factor + try: + clip.loop_start = float(args) + if clip.looping: + clip.looping = False + clip.loop_start = float(args) + clip.looping = True + if clip != xclip: + clip.fire() + except: pass + else: + if type(xclip) is Live.Clip.Clip: + xclip.name = xclip.name.strip() + ' ' + str(clip.loop_start) + + + def adjust_warp_mode(self, clip, track, xclip, ident, args): + """ Adjusts the warp mode of the clip. This cannot be applied if the warp mode is currently rex (5). """ + if IS_LIVE_9 and clip.is_audio_clip and clip.warping and not clip.warp_mode == 5: + args = args.strip() + if args in WARP_MODES: + clip.warp_mode = WARP_MODES[args] + elif args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + new_mode = clip.warp_mode + factor + if new_mode == 5 and '>' in args: + new_mode = 6 + elif new_mode == 5 and '<' in args: + new_mode = 4 + if new_mode in range(7) and new_mode != 5: + clip.warp_mode = new_mode + + + def adjust_grid_quantization(self, clip, track, xclip, ident, args): + """ Adjusts clip grid quantization. """ + if IS_LIVE_9: + args = args.strip() + if args in CLIP_GRID_STATES: + clip.view.grid_quantization = CLIP_GRID_STATES[args] + + + def set_triplet_grid(self, clip, track, xclip, ident, args): + """ Toggles or turns triplet grid on or off. """ + if IS_LIVE_9: + if args in KEYWORDS: + clip.view.grid_is_triplet = KEYWORDS[args] + else: + clip.view.grid_is_triplet = not(clip.view.grid_is_triplet) + + + def capture_to_envelope(self, clip, track, xclip, ident, args): + if IS_LIVE_9_1: + self._env_capture.capture(clip, track, args) + + + def insert_envelope(self, clip, track, xclip, ident, args): + """ Inserts an envelope for the given parameter into the clip. + This doesn't apply to quantized parameters. + Requires 9.1 or later. """ + if IS_LIVE_9_1: + args = args.strip() + arg_array = args.split() + if len(arg_array) > 1: + # used to determine whether env_type is last arg...otherwise a range is specified + last_arg_index = len(arg_array) - 1 + env_type_index = last_arg_index + env_type = None + for index in range(len(arg_array)): + if arg_array[index] in ENV_TYPES: + env_type_index = index + env_type = arg_array[index] + break + if env_type: + env_param_spec = '' + for index in range(env_type_index): + env_param_spec += arg_array[index] + ' ' + param = self._get_envelope_parameter(track, env_param_spec) + if param and not param.is_quantized: + env_range = (param.min, param.max) + # calculate range if specified in args + if env_type_index != last_arg_index: + try: + min_factor = int(arg_array[-2]) + max_factor = int(arg_array[-1]) + if min_factor in range(101) and max_factor in range(101) and min_factor < max_factor: + env_range = ((min_factor / 100.0) * param.max, (max_factor / 100.0) * param.max) + except: pass + self.song().view.detail_clip = clip + clip.view.show_envelope() + clip.view.select_envelope_parameter(param) + clip.clear_envelope(param) + self._perform_envelope_insertion(clip, param, env_type, env_range) + + + def _perform_envelope_insertion(self, clip, param, env_type, env_range): + """ Performs the actual insertion of the envelope into the clip. """ + env = clip.automation_envelope(param) + if env: + median = ((clip.loop_end - clip.loop_start) / 2.0) + clip.loop_start + num_beats = int(clip.loop_end - clip.loop_start) + 1 + start_beat = int(clip.loop_start) + if env_type == 'IRAMP': + env.insert_step(clip.loop_start, 0.0, env_range[0]) + env.insert_step(clip.loop_end, 0.0, env_range[1]) + elif env_type == 'DRAMP': + env.insert_step(clip.loop_start, 0.0, env_range[1]) + env.insert_step(clip.loop_end, 0.0, env_range[0]) + elif env_type == 'IPYR': + env.insert_step(clip.loop_start, 0.0, env_range[0]) + env.insert_step(median, 0.0, env_range[1]) + env.insert_step(clip.loop_end, 0.0, env_range[0]) + elif env_type == 'DPYR': + env.insert_step(clip.loop_start, 0.0, env_range[1]) + env.insert_step(median, 0.0, env_range[0]) + env.insert_step(clip.loop_end, 0.0, env_range[1]) + elif env_type == 'SAW': + for b in range(num_beats): + beat = float(b + start_beat) + env.insert_step(beat, 0.0, env_range[1]) + if beat < clip.loop_end: + env.insert_step(beat + 0.5, 0.0, env_range[0]) + elif env_type == 'SQR': + for b in range(num_beats): + beat = float(b + start_beat) + if beat < clip.loop_end: + if b % 2 == 0: + env.insert_step(beat, 1.0, env_range[1]) + else: + env.insert_step(beat, 1.0, env_range[0]) + + + def clear_envelope(self, clip, track, xclip, ident, args): + """ Clears the envelope of the specified param or all envelopes from the given clip. """ + if IS_LIVE_9_1: + if args: + param = self._get_envelope_parameter(track, args.strip()) + if param: + clip.clear_envelope(param) + else: + clip.clear_all_envelopes() + + + def show_envelope(self, clip, track, xclip, ident, args): + """ Shows the clip's envelope view and a particular envelope if specified. + Requires 9.1 or later. """ + if IS_LIVE_9_1: + self.song().view.detail_clip = clip + clip.view.show_envelope() + if args: + param = self._get_envelope_parameter(track, args.strip()) + if param: + clip.view.select_envelope_parameter(param) + + + def _get_envelope_parameter(self, track, args): + """ Gets the selected, mixer or device parameter for envelope-related actions. """ + param = None + if 'SEL' in args: + param = self.song().view.selected_parameter + elif 'VOL' in args: + param = track.mixer_device.volume + elif 'PAN' in args: + param = track.mixer_device.panning + elif 'SEND' in args: + param = self._parent._track_actions.get_send_parameter(track, args.replace('SEND', '').strip()) + elif 'DEV' in args: + arg_array = args.split() + if len(arg_array) > 1: + dev_array = self._parent.get_device_to_operate_on(track, arg_array[0], args.replace(arg_array[0], '').strip()) + if len(dev_array) == 2: + param_array = dev_array[1].strip().split() + param = None + if len(param_array) > 1: + param = self._parent._device_actions.get_banked_parameter(dev_array[0], param_array[0], param_array[1]) + else: + param = self._parent._device_actions.get_bob_parameter(dev_array[0], param_array[0]) + return param + + + def hide_envelopes(self, clip, track, xclip, ident, args): + """ Hides the clip's envelope view. """ + if IS_LIVE_9_1: + clip.view.hide_envelope() + + + def quantize(self, clip, track, xclip, ident, args): + """ + Quantizes notes or warp markers to the given quantization value, at the (optional) given strength and with the (optional) percentage of swing. + Can optionally be applied to specific notes or ranges of notes. + """ + if IS_LIVE_9: + args = args.strip() + arg_array = args.split() + array_offset = 0 + rate_to_apply = None + # standard qntz to all + if arg_array[0] in R_QNTZ_STATES: + rate_to_apply = R_QNTZ_STATES[arg_array[0]] + # qntz to specific note or note range + elif arg_array[1] in R_QNTZ_STATES and clip.is_midi_clip: + array_offset = 1 + rate_to_apply = R_QNTZ_STATES[arg_array[1]] + if rate_to_apply: + strength = 1.0 + swing_to_apply = 0.0 + current_swing = self.song().swing_amount + if len(arg_array) > (1 + array_offset): + try: + strength = float(arg_array[1 + array_offset]) / 100.0 + if strength > 1.0 or strength < 0.0: + strength = 1.0 + except: strength = 1.0 + if len(arg_array) > (2 + array_offset): + try: + swing_to_apply = float(arg_array[2 + array_offset]) / 100.0 + if swing_to_apply > 1.0 or swing_to_apply < 0.0: + swing_to_apply = 0.0 + except: swing_to_apply = 0.0 + self.song().swing_amount = swing_to_apply + # apply standard qntz to all + if array_offset == 0: + clip.quantize(rate_to_apply, strength) + # apply qntz to specific note or note range + else: + note_range = self.get_note_range(arg_array[0]) + for note in range(note_range[0], note_range[1]): + clip.quantize_pitch(note, rate_to_apply, strength) + self.song().swing_amount = current_swing + + + def duplicate_clip_content(self, clip, track, xclip, ident, args): + """ Duplicates all the content in a MIDI clip and doubles loop length. Will also zoom out to show entire loop if loop is on. """ + if IS_LIVE_9 and clip.is_midi_clip: + try: + clip.duplicate_loop() + except: pass + + + def delete_clip(self, clip, track, xclip, ident, args): + """ Deletes the given clip. """ + if IS_LIVE_9: + clip.canonical_parent.delete_clip() + + + def duplicate_clip(self, clip, track, xclip, ident, args): + """ Duplicates the given clip. This will overwrite clips if any exist in the slots used for duplication. """ + if IS_LIVE_9: + try: + track.duplicate_clip_slot(list(track.clip_slots).index(clip.canonical_parent)) + except: pass + + + def chop_clip(self, clip, track, xclip, ident, args): + """ Duplicates the clip the number of times specified and sets evenly distributed start points across all duplicates. This will overwrite clips if any exist in the slots used for duplication. """ + if IS_LIVE_9: + args = args.strip() + num_chops = 8 + if args: + try: num_chops = int(args) + except: pass + slot_index = list(track.clip_slots).index(clip.canonical_parent) + current_start = clip.start_marker + chop_length = (clip.loop_end - current_start) / num_chops + try: + for index in range(num_chops - 1): + track.duplicate_clip_slot(slot_index + index) + dupe_start = (chop_length * (index + 1)) + current_start + dupe = track.clip_slots[slot_index + index + 1].clip + dupe.start_marker = dupe_start + dupe.loop_start = dupe_start + dupe.name = clip.name + '-' + str(index + 1) + except: pass + + + def split_clip(self, clip, track, xclip, ident, args): + """ Duplicates the clip and sets each duplicate to have the length specified in args. This will overwrite clips if any exist in the slots used for duplication. """ + if IS_LIVE_9: + try: + bar_arg = float(args) + bar_length = (4.0 / clip.signature_denominator) * clip.signature_numerator + split_size = bar_length * bar_arg + num_splits = int(clip.length / split_size) + if split_size * num_splits < clip.end_marker: + num_splits += 1 + if num_splits >= 2: + slot_index = list(track.clip_slots).index(clip.canonical_parent) + current_start = clip.start_marker + actual_end = clip.end_marker + for index in xrange(num_splits): + track.duplicate_clip_slot(slot_index + index) + dupe_start = (split_size * index) + current_start + dupe_end = dupe_start + split_size + if dupe_end > actual_end: + dupe_end = actual_end + dupe = track.clip_slots[slot_index + index + 1].clip + dupe.loop_end = dupe_end + dupe.start_marker = dupe_start + dupe.loop_start = dupe_start + dupe.name = clip.name + '-' + str(index + 1) + except: pass + + + def do_clip_loop_action(self, clip, track, xclip, ident, args): + """ Handle clip loop actions """ + args = args.strip() + if args == '' or args in KEYWORDS: + self.set_loop_on_off(clip, args) + else: + if args.startswith('START'): + self.adjust_loop_start(clip, track, xclip, ident, args.replace('START', '', 1).strip()) + elif args.startswith('END'): + self.adjust_loop_end(clip, track, xclip, ident, args.replace('END', '', 1).strip()) + elif args == 'SHOW' and IS_LIVE_9: + clip.view.show_loop() + if clip.looping: + clip_stats = self.get_clip_stats(clip) + new_start = clip.loop_start + new_end = clip.loop_end + if args.startswith(('<', '>')): + self.move_clip_loop_by_factor(clip, args, clip_stats) + return() + elif args == 'RESET': + new_start = 0.0 + new_end = clip_stats['real_end'] + elif args.startswith('*'): + try: + new_end = (clip.loop_end - clip_stats['loop_length']) + (clip_stats['loop_length'] * float(args[1:])) + except: pass + else: + self.do_loop_set(clip, args, clip_stats) + return() + self.set_new_loop_position(clip, new_start, new_end, clip_stats) + + + def set_loop_on_off(self, clip, value = None): + """ Toggles or turns clip loop on/off """ + if value in KEYWORDS: + clip.looping = KEYWORDS[value] + else: + clip.looping = not(clip.looping) + + + def move_clip_loop_by_factor(self, clip, args, clip_stats): + """ Move clip loop by its length or by a specified factor """ + factor = clip_stats['loop_length'] + if args == '<': + factor = -(factor) + if len(args) > 1: + factor = self._parent.get_adjustment_factor(args, True) + new_end = clip.loop_end + factor + new_start = clip.loop_start + factor + if new_start < 0.0: + new_end = new_end - new_start + new_start = 0.0 + self.set_new_loop_position(clip, new_start, new_end, clip_stats) + + + def do_loop_set(self, clip, args, clip_stats): + """ Set loop length and (if clip is playing) position, quantizes to 1/4 by default or bar if specified """ + try: + qntz = False + if 'B' in args: + qntz = True + bars_to_loop = float(args.strip('B')) + bar = (4.0 / clip.signature_denominator) * clip.signature_numerator + start = clip.loop_start + if clip.is_playing: + start = round(clip.playing_position) + if qntz: + distance = start % bar + if distance <= bar / 2: + start = start - distance + else: + start = start + (bar - distance) + end = start + (bar * bars_to_loop) + self.set_new_loop_position(clip, start, end, clip_stats) + except: pass + + + def set_new_loop_position(self, clip, new_start, new_end, clip_stats): + """ For use with other clip loop actions, ensures that loop settings are within range and applies in correct order """ + if new_end <= clip_stats['real_end'] and new_start >= 0: + if new_end > clip.loop_start: + clip.loop_end = new_end + clip.loop_start = new_start + else: + clip.loop_start = new_start + clip.loop_end = new_end + + + def do_clip_note_action(self, clip, track, xclip, ident, args): + """ Handle clip note actions """ + if clip.is_audio_clip: + return() + note_data = self.get_notes_to_operate_on(clip, args.strip()) + if note_data['notes_to_edit']: + if note_data['args'] == '' or note_data['args'] in KEYWORDS: + self.set_notes_on_off(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'REV': + self.do_note_reverse(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'INV': + self.do_note_invert(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'COMP': + self.do_note_compress(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'EXP': + self.do_note_expand(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'SCRN': + self.do_pitch_scramble(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'SCRP': + self.do_position_scramble(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] in ('CMB', 'SPLIT'): + self.do_note_split_or_combine(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'].startswith(('GATE <', 'GATE >')): + self.do_note_gate_adjustment(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'].startswith(('NUDGE <', 'NUDGE >')): + self.do_note_nudge_adjustment(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] == 'DEL': + self.do_note_delete(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'] in ('VELO <<', 'VELO >>'): + self.do_note_crescendo(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + elif note_data['args'].startswith('VELO'): + self.do_note_velo_adjustment(clip, note_data['args'], note_data['notes_to_edit'], note_data['other_notes']) + + + def set_notes_on_off(self, clip, args, notes_to_edit, other_notes): + """ Toggles or turns note mute on/off """ + edited_notes = [] + for n in notes_to_edit: + new_mute = False + if args == '': + new_mute = not(n[4]) + elif args == 'ON': + new_mute = True + edited_notes.append((n[0], n[1], n[2], n[3], new_mute)) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_pitch_adjustment(self, clip, factor): + """ Adjust note pitch. This isn't a note action, it's called via Clip Semi """ + edited_notes = [] + note_data = self.get_notes_to_operate_on(clip) + if note_data['notes_to_edit']: + for n in note_data['notes_to_edit']: + new_pitch = n[0] + factor + if not new_pitch in range (128): + edited_notes = [] + return() + else: + edited_notes.append((new_pitch, n[1], n[2], n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, note_data['other_notes']) + + + def do_note_gate_adjustment(self, clip, args, notes_to_edit, other_notes): + """ Adjust note gate """ + edited_notes = [] + factor = self._parent.get_adjustment_factor(args.split()[1], True) + for n in notes_to_edit: + new_gate = n[2] + (factor * 0.03125) + if n[1] + new_gate > clip.loop_end or new_gate < 0.03125: + edited_notes = [] + return() + else: + edited_notes.append((n[0], n[1], new_gate, n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_nudge_adjustment(self, clip, args, notes_to_edit, other_notes): + """ Adjust note position """ + edited_notes = [] + factor = self._parent.get_adjustment_factor(args.split()[1], True) + for n in notes_to_edit: + new_pos = n[1] + (factor * 0.03125) + if n[2] + new_pos > clip.loop_end or new_pos < 0.0: + edited_notes = [] + return() + else: + edited_notes.append((n[0], new_pos, n[2], n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_velo_adjustment(self, clip, args, notes_to_edit, other_notes): + """ Adjust/set/randomize note velocity """ + edited_notes = [] + args = args.replace('VELO ', '') + args = args.strip() + for n in notes_to_edit: + if args == 'RND': + edited_notes.append((n[0], n[1], n[2], Live.Application.get_random_int(64, 64), n[4])) + elif args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args) + new_velo = n[3] + factor + if not new_velo in range (128): + edited_notes = [] + return() + else: + edited_notes.append((n[0], n[1], n[2], new_velo, n[4])) + else: + try: + edited_notes.append((n[0], n[1], n[2], float(args), n[4])) + except: pass + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_pitch_scramble(self, clip, args, notes_to_edit, other_notes): + """ Scrambles the pitches in the clip, but maintains rhythm. """ + if IS_LIVE_9: + edited_notes = [] + pitches = [n[0] for n in notes_to_edit] + random.shuffle(pitches) + for i in range(len(notes_to_edit)): + edited_notes.append((pitches[i], notes_to_edit[i][1], notes_to_edit[i][2], notes_to_edit[i][3], notes_to_edit[i][4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_position_scramble(self, clip, args, notes_to_edit, other_notes): + """ Scrambles the position of notes in the clip, but maintains pitches. """ + if IS_LIVE_9: + edited_notes = [] + positions = [n[1] for n in notes_to_edit] + random.shuffle(positions) + for i in range(len(notes_to_edit)): + edited_notes.append((notes_to_edit[i][0], positions[i], notes_to_edit[i][2], notes_to_edit[i][3], notes_to_edit[i][4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_reverse(self, clip, args, notes_to_edit, other_notes): + """ Reverse the position of notes """ + edited_notes = [] + for n in notes_to_edit: + edited_notes.append((n[0], abs(clip.loop_end - (n[1] + n[2]) + clip.loop_start), n[2], n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_invert(self, clip, args, notes_to_edit, other_notes): + """ Inverts the pitch of notes. """ + edited_notes = [] + for n in notes_to_edit: + edited_notes.append((127 - n[0], n[1], n[2], n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_compress(self, clip, args, notes_to_edit, other_notes): + """ Compresses the position and duration of notes by half. """ + edited_notes = [] + for n in notes_to_edit: + edited_notes.append((n[0], n[1] / 2, n[2] / 2, n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_expand(self, clip, args, notes_to_edit, other_notes): + """ Expands the position and duration of notes by 2. """ + edited_notes = [] + for n in notes_to_edit: + edited_notes.append((n[0], n[1] * 2, n[2] * 2, n[3], n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_split_or_combine(self, clip, args, notes_to_edit, other_notes): + """ Split notes into 2 equal parts or combine each consecutive set of 2 notes """ + edited_notes = [] ; current_note = [] ; check_next_instance = False + if args == 'SPLIT': + for n in notes_to_edit: + if n[2] / 2 < 0.03125: + return() + else: + edited_notes.append(n) + edited_notes.append((n[0], n[1] + (n[2] / 2), n[2] / 2, n[3], n[4])) + else: + for n in notes_to_edit: + edited_notes.append(n) + if current_note and check_next_instance: + if current_note[0] == n[0] and current_note[1] + current_note[2] == n[1]: + edited_notes[edited_notes.index(current_note)] = [current_note[0], current_note[1], current_note[2] + n[2], current_note[3], current_note[4]] + edited_notes.remove(n) + current_note = [] ; check_next_instance = False + else: + current_note = n + else: + current_note = n + check_next_instance = True + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_crescendo(self, clip, args, notes_to_edit, other_notes): + """ Applies crescendo/decrescendo to notes """ + edited_notes = []; last_pos = -1; pos_index = 0; new_pos = -1; new_index = 0 + sorted_notes = sorted(notes_to_edit, key=lambda note: note[1], reverse=False) + if args == 'VELO <<': + sorted_notes = sorted(notes_to_edit, key=lambda note: note[1], reverse=True) + for n in sorted_notes: + if n[1] != last_pos: + last_pos = n[1] + pos_index += 1 + for n in sorted_notes: + if n[1] != new_pos: + new_pos = n[1] + new_index += 1 + edited_notes.append((n[0], n[1], n[2], ((128 / pos_index) * new_index) - 1, n[4])) + if edited_notes: + self.write_all_notes(clip, edited_notes, other_notes) + + + def do_note_delete(self, clip, args, notes_to_edit, other_notes): + """ Delete notes """ + self.write_all_notes(clip, [], other_notes) + + + def get_clip_stats(self, clip): + """ Get real length and end of looping clip """ + clip.looping = 0 + length = clip.length + end = clip.loop_end + clip.looping = 1 + loop_length = clip.loop_end - clip.loop_start + return {'clip_length' : length, 'real_end' : end, 'loop_length' : loop_length} + + + def get_notes_to_operate_on(self, clip, args = None): + """ Get notes within loop braces to operate on """ + notes_to_edit = [] + other_notes = [] + new_args = None + note_range = (0, 128) + pos_range = (clip.loop_start, clip.loop_end) + if args: + new_args = [a.strip() for a in args.split()] + note_range = self.get_note_range(new_args[0]) + new_args.remove(new_args[0]) + if new_args and '@' in new_args[0]: + pos_range = self.get_pos_range(clip, new_args[0]) + new_args.remove(new_args[0]) + new_args = " ".join(new_args) + clip.select_all_notes() + all_notes = clip.get_selected_notes() + clip.deselect_all_notes() + for n in all_notes: + if n[0] in range(note_range[0], note_range[1]) and n[1] < pos_range[1] and n[1] >= pos_range[0]: + notes_to_edit.append(n) + else: + other_notes.append(n) + return {'notes_to_edit' : notes_to_edit, 'other_notes' : other_notes, 'args' : new_args} + + + def get_pos_range(self, clip, string): + """ Get note position or range to operate on """ + pos_range = (clip.loop_start, clip.loop_end) + user_range = string.split('-') + try: start = float(user_range[0].replace('@', '')) + except: start = None + if start != None and start >= 0.0: + pos_range = (start, start) + if len(user_range) > 1: + try: end = float(user_range[1]) + except: end = None + if end != None: + pos_range = (start, end) + return pos_range + + + def get_note_range(self, string): + """ Get note lane or range to operate on """ + note_range = (0,128) + string = string.replace('NOTES', '') + if len(string) > 1: + int_range = self.get_note_range_from_string(string) + if int_range: + note_range = int_range + else: + start_note_name = self.get_note_name_from_string(string) + start_note_num = self.string_to_note(start_note_name) + note_range = (start_note_num, start_note_num + 1) + string = string.replace(start_note_name, '').strip() + if len(string) > 1 and string.startswith('-'): + string = string[1:] + end_note_name = self.get_note_name_from_string(string) + end_note_num = self.string_to_note(end_note_name) + if end_note_num > start_note_num: + note_range = (start_note_num, end_note_num + 1) + return note_range + + + def get_note_range_from_string(self, string): + """ Attempt to get note range (specified in ints) from string and return it or None if not specified or invalid. """ + result = None + int_split = string.split('-') + try: + start = int(int_split[0]) + end = start + 1 + if(len(int_split) > 1): + end = int(int_split[1]) + 1 + if start < end and start in range(128) and end in range(129): + result = (start, end) + else: + result = None + except: result = None + return result + + + def get_note_name_from_string(self, string): + """ Get the first note name specified in the given string. """ + result = None + if len(string) >= 2: + result = string[0:2].strip() + if (result.endswith('#') or result.endswith('-')) and len(string) >= 3: + result = string[0:3].strip() + if result.endswith('-') and len(string) >= 4: + result = string[0:4].strip() + return result + + + def string_to_note(self, string): + """ Get note value from string """ + converted_note = None + base_note = None + octave = None + for s in string: + if s in NOTE_NAMES: + base_note = NOTE_NAMES.index(s) + if base_note != None and s == '#': + base_note += 1 + if base_note != None: + for o in OCTAVE_NAMES: + if o in string: + base_note = base_note + (OCTAVE_NAMES.index(o) * 12) + break + if base_note in range (128): + converted_note = base_note + return converted_note + + + def write_all_notes(self, clip, edited_notes, other_notes): + """ Writes new notes to clip """ + edited_notes.extend(other_notes) + clip.select_all_notes() + clip.replace_selected_notes(tuple(edited_notes)) + clip.deselect_all_notes() + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXClipEnvCapture.py b/ClyphX/ClyphXClipEnvCapture.py new file mode 100644 index 0000000..ea509bc --- /dev/null +++ b/ClyphX/ClyphXClipEnvCapture.py @@ -0,0 +1,113 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import IS_LIVE_9 + +class ClyphXClipEnvCapture(ControlSurfaceComponent): + """ Captures mixer/device parameters as clip envelopes. """ + + def disconnect(self): + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + def update(self): + pass + + def capture(self, clip, track, args): + clip.clear_all_envelopes() + if args == '' or 'MIX' in args: + self._capture_mix_settings(clip, track, args) + if (args == '' or 'DEV' in args) and track.devices: + self._capture_device_settings(clip, track, args) + + def _capture_mix_settings(self, clip, track, args): + if not 'MIXS' in args: + self._insert_envelope(clip, track.mixer_device.volume) + self._insert_envelope(clip, track.mixer_device.panning) + if not 'MIX-' in args: + for s in track.mixer_device.sends: + self._insert_envelope(clip, s) + + def _capture_device_settings(self, clip, track, args): + dev_range = self._get_device_range(args, track) + if dev_range: + for dev_index in range (dev_range[0], dev_range[1]): + if dev_index < (len(track.devices)): + current_device = track.devices[dev_index] + for p in current_device.parameters: + self._insert_envelope(clip, p) + if current_device.can_have_chains: + self._capture_nested_devices(clip, current_device) + + def _capture_nested_devices(self, clip, rack): + if rack.chains: + for chain in rack.chains: + for device in chain.devices: + for p in device.parameters: + self._insert_envelope(clip, p) + if not rack.class_name.startswith('Midi'): + self._insert_envelope(clip, chain.mixer_device.volume) + self._insert_envelope(clip, chain.mixer_device.panning) + self._insert_envelope(clip, chain.mixer_device.chain_activator) + sends = chain.mixer_device.sends + if sends: + for s in sends: + self._insert_envelope(clip, s) + if device.can_have_chains and device.chains: + self._capture_nested_devices(clip, device) + + def _insert_envelope(self, clip, param): + env = clip.automation_envelope(param) + if env: + env.insert_step(clip.loop_start, 0.0, param.value) + + def _get_device_range(self, args, track): + """ Returns range of devices to capture """ + dev_args = args.replace('MIX', '') + dev_args = dev_args.replace('DEV', '') + start = 0 + end = start + 1 + if dev_args: + if 'ALL' in dev_args: + start = 0 + end = len(track.devices) + elif '-' in dev_args: + try: + name_split = dev_args.split('-') + start = int(name_split[0].strip()) - 1 + end = int(name_split[1].strip()) + except: pass + else: + try: + start = int(dev_args) - 1 + end = start + 1 + except: pass + if start > len(track.devices) or start < 0 or end > len(track.devices) or end < start: + return() + return (start, end) + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXControlSurfaceActions.py b/ClyphX/ClyphXControlSurfaceActions.py new file mode 100644 index 0000000..3009aa6 --- /dev/null +++ b/ClyphX/ClyphXControlSurfaceActions.py @@ -0,0 +1,491 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from functools import partial +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from _Framework.ControlSurface import ControlSurface +from _Framework.SessionComponent import SessionComponent +from _Framework.MixerComponent import MixerComponent +from _Framework.DeviceComponent import DeviceComponent +from consts import * +from ClyphXPushActions import ClyphXPushActions +from ClyphXPXTActions import ClyphXPXTActions +from ClyphXMXTActions import ClyphXMXTActions +from ClyphXArsenalActions import ClyphXArsenalActions +from ableton.v2.control_surface import ControlSurface as CS + + +class ClyphXControlSurfaceActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Actions related to control surfaces ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._push_actions = ClyphXPushActions(parent) + self._pxt_actions = ClyphXPXTActions(parent) + self._mxt_actions = ClyphXMXTActions(parent) + self._arsenal_actions = ClyphXArsenalActions(parent) + self._scripts = {} + + + def disconnect(self): + self._scripts = {} + self._parent = None + self._arsenal_actions = None + self._push_actions = None + self._pxt_actions = None + self._mxt_actions = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def connect_script_instances(self, instanciated_scripts): + """ Build dict of connected scripts and their components, doesn't work with non-Framework scripts, but does work with User Remote Scripts """ + instanciated_scripts = self._parent._control_surfaces() + self._scripts = {} + for index in range (len(instanciated_scripts)): + script = instanciated_scripts[index] + self._scripts[index] = {'script' : script, 'name' : None, 'repeat' : False, 'mixer' : None, 'device' : None, 'last_ring_pos' : None, + 'session' : None, 'track_link' : False, 'scene_link' : False, 'centered_link' : False, 'color' : False} + script_name = script.__class__.__name__ + if isinstance (script, (ControlSurface, CS)): + if script_name == 'GenericScript': + script_name = script._suggested_input_port + if script_name.startswith('Arsenal'): + self._arsenal_actions.set_script(script) + if script_name == 'Push': + self._push_actions.set_script(script) + if script_name.startswith('PXT_Live'): + self._pxt_actions.set_script(script) + if script_name == 'MXT_Live': + self._mxt_actions.set_script(script) + if not script_name.startswith('ClyphX'): + if script._components == None: + return + else: + self._scripts[index]['name'] = script_name.upper() + for c in script.components: + if isinstance (c, SessionComponent): + self._scripts[index]['session'] = c + if script_name.startswith('APC'): + self._scripts[index]['color'] = {'GREEN' : (1, 2), 'RED' : (3, 4), 'AMBER' : (5, 6)} + self._scripts[index]['metro'] = {'controls' : c._stop_track_clip_buttons, 'component' : None, 'override' : None} + if script_name == 'Launchpad': + self._scripts[index]['color'] = {'GREEN' : (52, 56), 'RED' : (7, 11), 'AMBER' : (55, 59)} + self._scripts[index]['metro'] = {'controls' : script._selector._side_buttons, 'component' : None, 'override' : script._selector} + if isinstance (c, MixerComponent): + self._scripts[index]['mixer'] = c + if isinstance (c, DeviceComponent): + self._scripts[index]['device'] = c + if script_name == 'Push': + self._scripts[index]['session'] = script._session_ring + self._scripts[index]['mixer'] = script._mixer + self._scripts[index]['device'] = script._device_component + elif script_name == 'Push2': + # hackish way to delay for Push2 init, using monkey patching doesn't work for some reason + self.canonical_parent.schedule_message(50, partial(self._handle_push2_init, index)) + elif script_name == 'Nocturn': + self._scripts[index]['device'] = script.device_controller + script.device_controller.canonical_parent = script + + + def _handle_push2_init(self, index): + script = self._scripts[index]['script'] + self._push_actions.set_script(script, is_push2=True) + self._scripts[index]['session'] = script._session_ring + self._scripts[index]['device'] = script._device_component + + + def dispatch_push_action(self, track, xclip, ident, action, args): + """ Dispatch Push-related actions to PushActions. """ + if self._push_actions: + self._push_actions.dispatch_action(track, xclip, ident, action, args) + + + def dispatch_pxt_action(self, track, xclip, ident, action, args): + """ Dispatch PXT-related actions to PXTActions. """ + if self._pxt_actions: + self._pxt_actions.dispatch_action(track, xclip, ident, action, args) + + + def dispatch_mxt_action(self, track, xclip, ident, action, args): + """ Dispatch MXT-related actions to MXTActions. """ + if self._mxt_actions: + self._mxt_actions.dispatch_action(track, xclip, ident, action, args) + + + def dispatch_arsenal_action(self, track, xclip, ident, action, args): + """ Dispatch Arsenal-related actions to ArsenalActions. """ + if self._arsenal_actions: + self._arsenal_actions.dispatch_action(track, xclip, ident, action, args) + + + def dispatch_cs_action(self, track, xclip, ident, action, args): + """ Dispatch appropriate control surface actions """ + script = self._get_script_to_operate_on(action) + if script != None: + if 'METRO ' in args and self._scripts[script].has_key('metro'): + self.handle_visual_metro(self._scripts[script], args) + elif 'RINGLINK ' in args and self._scripts[script]['session']: + self.handle_ring_link(self._scripts[script]['session'], script, args[9:]) + elif 'RING ' in args and self._scripts[script]['session']: + self.handle_session_offset(script, self._scripts[script]['session'], args[5:]) + elif 'COLORS ' in args and self._scripts[script]['session'] and self._scripts[script]['color']: + self.handle_session_colors(self._scripts[script]['session'], self._scripts[script]['color'], args[7:]) + elif 'DEV LOCK' in args and self._scripts[script]['device']: + self._scripts[script]['device'].canonical_parent.toggle_lock() + elif 'BANK ' in args and self._scripts[script]['mixer']: + self.handle_track_bank(script, xclip, ident, self._scripts[script]['mixer'], self._scripts[script]['session'], args[5:]) + elif 'RPT' in args: + self.handle_note_repeat(self._scripts[script]['script'], script, args) + else: + if self._scripts[script]['mixer'] and '/' in args[:4]: + self.handle_track_action(script, self._scripts[script]['mixer'], xclip, ident, args) + + + def _get_script_to_operate_on(self, script_info): + """ Returns the script index to operate on, which can be specified in terms of its index + or its name. Also, can use SURFACE (legacy) or CS (new) to indicate a surface action. """ + script = None + try: + script_spec = None + if 'SURFACE' in script_info: + script_spec = script_info.strip('SURFACE') + elif 'CS' in script_info: + script_spec = script_info.strip('CS') + if len(script_spec) == 1: + script = int(script_spec) - 1 + if not self._scripts.has_key(script): + script = None + else: + script_spec = script_spec.strip('"').strip() + for k, v in self._scripts.items(): + if v['name'] == script_spec: + script = k + except: script = None + return script + + + def handle_note_repeat(self, script, script_index, args): + """ Set note repeat for the given surface """ + args = args.replace('RPT', '').strip() + if args in REPEAT_STATES: + if args == 'OFF': + script._c_instance.note_repeat.enabled = False + self._scripts[script_index]['repeat'] = False + else: + script._c_instance.note_repeat.repeat_rate = REPEAT_STATES[args] + script._c_instance.note_repeat.enabled = True + self._scripts[script_index]['repeat'] = True + else: + self._scripts[script_index]['repeat'] = not self._scripts[script_index]['repeat'] + script._c_instance.note_repeat.enabled = self._scripts[script_index]['repeat'] + + + def handle_track_action(self, script_key, mixer, xclip, ident, args): + """ Get control surface track(s) to operate on and call main action dispatch """ + track_start = None + track_end = None + track_range = args.split('/')[0] + actions = str(args[args.index('/')+1:].strip()).split() + new_action = actions[0] + new_args = '' + if len(actions) > 1: + new_args = ' '.join(actions[1:]) + if 'ALL' in track_range: + track_start = 0 + track_end = len(mixer._channel_strips) + elif '-' in track_range: + track_range = track_range.split('-') + try: + track_start = int(track_range[0]) - 1 + track_end = int(track_range[1]) + except: + track_start = None + track_end = None + else: + try: + track_start = int(track_range) - 1 + track_end = track_start + 1 + except: + track_start = None + track_end = None + if track_start != None and track_end != None: + if track_start in range (len(mixer._channel_strips) + 1) and track_end in range (len(mixer._channel_strips) + 1) and track_start < track_end: + track_list = [] + if self._scripts[script_key]['name'] == 'PUSH': + offset, _ = self._push_actions.get_session_offsets(self._scripts[script_key]['session']) + tracks_to_use = self._scripts[script_key]['session'].tracks_to_use() + else: + offset = mixer._track_offset + tracks_to_use = mixer.tracks_to_use() + for index in range (track_start, track_end): + if index + offset in range (len(tracks_to_use)): + track_list.append(tracks_to_use[index + offset]) + if track_list: + self._parent.action_dispatch(track_list, xclip, new_action, new_args, ident) + + + def handle_track_bank(self, script_key, xclip, ident, mixer, session, args): + """ Move track bank (or session bank) and select first track in bank...this works even with controllers without banks like User Remote Scripts """ + if self._scripts[script_key]['name'] == 'PUSH': + t_offset, s_offset = self._push_actions.get_session_offsets(session) + tracks = session.tracks_to_use() + else: + t_offset, s_offset = mixer._track_offset, session._scene_offset if session else None + tracks = mixer.tracks_to_use() + new_offset = None + if args == 'FIRST': + new_offset = 0 + elif args == 'LAST': + new_offset = len(tracks) - len(mixer._channel_strips) + else: + try: + offset = int(args) + if offset + t_offset in range (len(tracks)): + new_offset = offset + t_offset + except: new_offset = None + if new_offset >= 0: + if session: + session.set_offsets(new_offset, s_offset) + else: + mixer.set_track_offset(new_offset) + self.handle_track_action(script_key, mixer, xclip, ident, '1/SEL') + + + def handle_session_offset(self, script_key, session, args): + """ Handle moving session offset absolutely or relatively as well as storing/recalling its last position. """ + if self._scripts[script_key]['name'] in ('PUSH', 'PUSH2'): + last_pos = self._push_actions.handle_session_offset(session, self._scripts[script_key]['last_ring_pos'], args, self._parse_ring_spec) + self._scripts[script_key]['last_ring_pos'] = last_pos or None + return + try: + new_track = session._track_offset + new_scene = session._scene_offset + if args.strip() == 'LAST': + last_pos = self._scripts[script_key]['last_ring_pos'] + if last_pos: + session.set_offsets(last_pos[0], last_pos[1]) + return + else: + self._scripts[script_key]['last_ring_pos'] = (new_track, new_scene) + new_track, args = self._parse_ring_spec('T', args, new_track, self.song().tracks) + new_scene, args = self._parse_ring_spec('S', args, new_scene, self.song().scenes) + if new_track == -1 or new_scene == -1: + return + session.set_offsets(new_track, new_scene) + except: pass + + + def _parse_ring_spec(self, spec_id, arg_string, default_index, list_to_search): + """ Parses a ring action specification and returns the specified track/scene index + as well as the arg_string without the specification that was parsed. """ + index = default_index + arg_array = arg_string.split() + for a in arg_array: + if a.startswith(spec_id): + if a[1].isdigit(): + index = int(a.strip(spec_id)) - 1 + arg_string = arg_string.replace(a, '', 1).strip() + break + elif a[1] in ('<', '>'): + index += self._parent.get_adjustment_factor(a.strip(spec_id)) + arg_string = arg_string.replace(a, '', 1).strip() + break + elif a[1] == '"': + name_start_pos = arg_string.index(spec_id + '"') + name = arg_string[name_start_pos + 2:] + name_end_pos = name.index('"') + name = name[:name_end_pos] + for i, item in enumerate(list_to_search): + if name == item.name.upper(): + index = i + break + arg_string = arg_string.replace(spec_id + '"' + name + '"', '', 1).strip() + break + return (index, arg_string) + + + def handle_ring_link(self, session, script_index, args): + """ Handles linking/unliking session offsets to the selected track or scene with centering if specified. """ + self._scripts[script_index]['track_link'] = args == 'T' or 'T ' in args or ' T' in args + self._scripts[script_index]['scene_link'] = 'S' in args + self._scripts[script_index]['centered_link'] = 'CENTER' in args + + + def handle_session_colors(self, session, colors, args): + """ Handle changing clip launch LED colors """ + args = args.split() + if len(args) == 3: + for a in args: + if not a in colors: + return + for scene_index in range(session.height()): + scene = session.scene(scene_index) + for track_index in range(session.width()): + clip_slot = scene.clip_slot(track_index) + clip_slot.set_started_value(colors[args[0]][0]) + clip_slot.set_triggered_to_play_value(colors[args[0]][1]) + clip_slot.set_recording_value(colors[args[1]][0]) + clip_slot.set_triggered_to_record_value(colors[args[1]][1]) + clip_slot.set_stopped_value(colors[args[2]][0]) + clip_slot.update() + + + def handle_visual_metro(self, script, args): + """ Handle visual metro for APCs and Launchpad. """ + if 'ON' in args and not script['metro']['component']: + m = VisualMetro(self._parent, script['metro']['controls'], script['metro']['override']) + script['metro']['component'] = m + elif 'OFF' in args and script['metro']['component']: + script['metro']['component'].disconnect() + script['metro']['component'] = None + + + def on_selected_track_changed(self): + """ Moves the track offset of all track linked surfaces to the selected track with centering if specified. """ + trk = self.song().view.selected_track + if trk in self.song().tracks: + trk_id = list(self.song().visible_tracks).index(trk) + for k, v in self._scripts.items(): + if v['track_link']: + new_trk_id = trk_id + try: + session = self._scripts[k]['session'] + if v['name'] in ('PUSH', 'PUSH2'): + width = self._push_actions.get_session_dimensions(session)[0] + t_offset, s_offset = self._push_actions.get_session_offsets(session) + else: + width = session.width() + t_offset, s_offset = session._track_offset, session._scene_offset + if self._scripts[k]['centered_link']: + mid_point = (width / 2) + if new_trk_id < mid_point: + if t_offset <= new_trk_id: + return + else: + new_trk_id = 0 + else: + centered_id = new_trk_id - mid_point + if centered_id in range(len(self.song().visible_tracks)): + new_trk_id = centered_id + session.set_offsets(new_trk_id, s_offset) + except: pass + + + def on_selected_scene_changed(self): + """ Moves the scene offset of all scene linked surfaces to the selected scene with centering if specified. """ + scn_id = list(self.song().scenes).index(self.song().view.selected_scene) + for k, v in self._scripts.items(): + if v['scene_link']: + new_scn_id = scn_id + try: + session = self._scripts[k]['session'] + if v['name'] in ('PUSH', 'PUSH2'): + height = self._push_actions.get_session_dimensions(session)[1] + t_offset, s_offset = self._push_actions.get_session_offsets(session) + else: + height = session.height() + t_offset, s_offset = session._track_offset, session._scene_offset + + if self._scripts[k]['centered_link']: + mid_point = (height / 2) + if new_scn_id < mid_point: + if s_offset <= new_scn_id: + return + else: + new_scn_id = 0 + else: + centered_id = new_scn_id - mid_point + if centered_id in range(len(self.song().scenes)): + new_scn_id = centered_id + session.set_offsets(t_offset, new_scn_id) + except: pass + + +class VisualMetro(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Visual metro for APCs and Launchpad ' + + def __init__(self, parent, controls, override): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._controls = controls + self._override = override + self._last_beat = -1 + self.song().add_current_song_time_listener(self.on_time_changed) + self.song().add_is_playing_listener(self.on_time_changed) + + + def disconnect(self): + if self._controls: + self.clear() + self._controls = None + self.song().remove_current_song_time_listener(self.on_time_changed) + self.song().remove_is_playing_listener(self.on_time_changed) + self._override = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def on_time_changed(self): + """ Show visual metronome via control LEDs upon beat changes (will not be shown if in Launchpad User 1) """ + if self.song().is_playing and (not self._override or (self._override and self._override._mode_index != 1)): + time = str(self.song().get_current_beats_song_time()).split('.') + if self._last_beat != int(time[1])-1: + self._last_beat = int(time[1])-1 + self.clear() + if self._last_beat < len(self._controls): + self._controls[self._last_beat].turn_on() + else: + self._controls[len(self._controls)-1].turn_on() + else: + self.clear() + + + def clear(self): + """ Clear all control LEDs """ + for c in self._controls: + c.turn_off() + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXControlSurfaceActions9.py b/ClyphX/ClyphXControlSurfaceActions9.py new file mode 100644 index 0000000..7c9bfab --- /dev/null +++ b/ClyphX/ClyphXControlSurfaceActions9.py @@ -0,0 +1,47 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from __future__ import with_statement +from ClyphXControlSurfaceActions import ClyphXControlSurfaceActions, VisualMetro + +class ClyphXControlSurfaceActions9(ClyphXControlSurfaceActions): + __module__ = __name__ + __doc__ = ' Actions related to control surfaces. This is a specialized version for Live 9.' + + def __init__(self, parent): + ClyphXControlSurfaceActions.__init__(self, parent) + + def handle_visual_metro(self, script, args): + """ Handle visual metro for APCs and Launchpad. + This is a specialized version for L9 that uses component guard to avoid dependency issues. """ + if 'ON' in args and not script['metro']['component']: + with self._parent.component_guard(): + m = VisualMetro(self._parent, script['metro']['controls'], script['metro']['override']) + script['metro']['component'] = m + elif 'OFF' in args and script['metro']['component']: + script['metro']['component'].disconnect() + script['metro']['component'] = None + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXDRActions9.py b/ClyphX/ClyphXDRActions9.py new file mode 100644 index 0000000..21117d2 --- /dev/null +++ b/ClyphX/ClyphXDRActions9.py @@ -0,0 +1,164 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * + +MAX_SCROLL_POS = 28 + +class ClyphXDRActions9(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = 'Drum Rack actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + + + def disconnect(self): + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def scroll_selector(self, dr, track, xclip, ident, args): + """ Scroll Drum Rack selector up/down """ + args = args.replace('SCROLL', '').strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args) + pos = dr.view.drum_pads_scroll_position + if factor > 0: + if pos < MAX_SCROLL_POS - factor: + dr.view.drum_pads_scroll_position = pos + factor + else: + dr.view.drum_pads_scroll_position = MAX_SCROLL_POS + else: + if pos + factor > 0: + dr.view.drum_pads_scroll_position = pos + factor + else: + dr.view.drum_pads_scroll_position = 0 + + + def unmute_all(self, dr, track, xclip, ident, args): + """ Unmute all pads in the Drum Rack """ + for pad in dr.drum_pads: + pad.mute = False + + + def unsolo_all(self, dr, track, xclip, ident, args): + """ Unsolo all pads in the Drum Rack """ + for pad in dr.drum_pads: + pad.solo = False + + + def dispatch_pad_action(self, dr, track, xclip, ident, args): + """ Dispatches pad-based actions """ + arg_split = args.split() + if len(arg_split) > 1: + pads = self._get_pads_to_operate_on(dr, arg_split[0].replace('PAD', '').strip()) + if pads: + action = arg_split[1] + action_arg = None + if len(arg_split) > 2: + action_arg = arg_split[2] + if arg_split[1] == 'MUTE': + self._mute_pads(pads, action_arg) + elif arg_split[1] == 'SOLO': + self._solo_pads(pads, action_arg) + elif arg_split[1] == 'SEL': + dr.view.selected_drum_pad = pads[-1] + elif arg_split[1] == 'VOL' and action_arg: + self._adjust_pad_volume(pads, action_arg) + elif arg_split[1] == 'PAN' and action_arg: + self._adjust_pad_pan(pads, action_arg) + elif 'SEND' in arg_split[1] and len(arg_split) > 3: + self._adjust_pad_send(pads, arg_split[3], action_arg) + + + def _mute_pads(self, pads, action_arg): + """ Toggles or turns on/off pad mute """ + for pad in pads: + if action_arg in KEYWORDS: + pad.mute = KEYWORDS[action_arg] + else: + pad.mute = not pad.mute + + + def _solo_pads(self, pads, action_arg): + """ Toggles or turns on/off pad solo """ + for pad in pads: + if action_arg in KEYWORDS: + pad.solo = KEYWORDS[action_arg] + else: + pad.solo = not pad.solo + + + def _adjust_pad_volume(self, pads, action_arg): + """ Adjust/set pad volume """ + for pad in pads: + if pad.chains: + self._parent.do_parameter_adjustment(pad.chains[0].mixer_device.volume, action_arg) + + + def _adjust_pad_pan(self, pads, action_arg): + """ Adjust/set pad pan """ + for pad in pads: + if pad.chains: + self._parent.do_parameter_adjustment(pad.chains[0].mixer_device.panning, action_arg) + + + def _adjust_pad_send(self, pads, action_arg, send): + """ Adjust/set pad send """ + try: + for pad in pads: + if pad.chains: + param = pad.chains[0].mixer_device.sends[ord(send) - 65] + self._parent.do_parameter_adjustment(param, action_arg) + except: pass + + + def _get_pads_to_operate_on(self, dr, pads): + """ Get the Drum Rack pad or pads to operate on """ + pads_to_operate_on = [dr.view.selected_drum_pad] + if pads == 'ALL': + pads_to_operate_on = dr.visible_drum_pads + elif pads: + try: + index = int(pads) - 1 + if index in range(16): + pads_to_operate_on = [dr.visible_drum_pads[index]] + except: pass + return pads_to_operate_on + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXDeviceActions.py b/ClyphX/ClyphXDeviceActions.py new file mode 100644 index 0000000..21007e2 --- /dev/null +++ b/ClyphX/ClyphXDeviceActions.py @@ -0,0 +1,277 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from _Generic.Devices import * +from consts import * + +class ClyphXDeviceActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Device and Looper actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._looper_data = {} + + + def disconnect(self): + self._looper_data = {} + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def set_all_params(self, device, track, xclip, ident, args): + """ Set the value of all macros in a rack in one go. So don't need to use a whole string of DEV Px actions to do this. + Can also capture the values of macros and store them in X-Clip name if no values specified. """ + if device.class_name.endswith('GroupDevice'): + args = args.replace('SET', '', 1).strip() + if args: + param_values = args.split(' ') + if len(param_values) == 8: + for index in range(8): + self._parent.do_parameter_adjustment(device.parameters[index + 1], param_values[index].strip()) + else: + if type(xclip) is Live.Clip.Clip: + assign_string = xclip.name + ' ' + for param in device.parameters: + if 'Macro' in param.original_name: + assign_string += str(int(param.value)) + ' ' + xclip.name = assign_string + + + def adjust_selected_chain(self, device, track, xclip, ident, args): + """ Adjust the selected chain in a rack. """ + if IS_LIVE_9 and device.can_have_chains and device.chains: + args = args.replace('CSEL', '', 1).strip() + if args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + new_index = list(device.chains).index(device.view.selected_chain) + factor + else: + try: new_index = int(args) - 1 + except: new_index = list(device.chains).index(device.view.selected_chain) + if new_index in range(len(device.chains)): + device.view.selected_chain = device.chains[new_index] + + + def adjust_best_of_bank_param(self, device, track, xclip, ident, args): + """ Adjust device best-of-bank parameter """ + param = None + name_split = args.split() + if len(name_split) > 1: + param = self.get_bob_parameter(device, name_split[0]) + if param and param.is_enabled: + self._parent.do_parameter_adjustment(param, name_split[-1]) + + + def adjust_banked_param(self, device, track, xclip, ident, args): + """ Adjust device banked parameter """ + param = None + name_split = args.split() + if len(name_split) > 2: + param = self.get_banked_parameter(device, name_split[0], name_split[1]) + if param and param.is_enabled: + self._parent.do_parameter_adjustment(param, name_split[-1]) + + + def adjust_chain_selector(self, device, track, xclip, ident, args): + """ Adjust device chain selector parameter """ + param = self.get_chain_selector(device) + name_split = args.split() + if param and param.is_enabled and len(name_split) > 1: + self._parent.do_parameter_adjustment(param, name_split[-1]) + + + def randomize_params(self, device, track, xclip, ident, args): + """ Randomize device parameters """ + name = self._parent.get_name(device.name) + if not name.startswith(('NK RND', 'NK RST', 'NK CHAIN MIX', 'NK DR', 'NK LEARN', 'NK RECEIVER', 'NK TRACK', 'NK SIDECHAIN')): + for p in device.parameters: + if p and p.is_enabled and not p.is_quantized and p.name != 'Chain Selector': + p.value = (((p.max - p.min) / 127) * Live.Application.get_random_int(0, 128)) + p.min + + + def reset_params(self, device, track, xclip, ident, args): + """ Reset device parameters """ + name = self._parent.get_name(device.name) + if not name.startswith(('NK RND', 'NK RST', 'NK CHAIN MIX', 'NK DR', 'NK LEARN', 'NK RECEIVER', 'NK TRACK', 'NK SIDECHAIN')): + for p in device.parameters: + if p and p.is_enabled and not p.is_quantized and p.name != 'Chain Selector': + p.value = p.default_value + + + def select_device(self, device, track, xclip, ident, args): + """ Select device and bring it and the track it's on into view """ + if self.song().view.selected_track != track: + self.song().view.selected_track = track + self.application().view.show_view('Detail') + self.application().view.show_view('Detail/DeviceChain') + self.song().view.select_device(device) + + + def set_device_on_off(self, device, track, xclip, ident, value = None): + """ Toggles or turns device on/off """ + on_off = self.get_device_on_off(device) + if on_off and on_off.is_enabled: + if value in KEYWORDS: + on_off.value = KEYWORDS[value] + else: + on_off.value = not(on_off.value) + + + def set_looper_on_off(self, track, xclip, ident, value = None): + """ Toggles or turns looper on/off """ + self.get_looper(track) + if self._looper_data and self._looper_data['Looper'] and self._looper_data['Device On'].is_enabled: + if value in KEYWORDS: + self._looper_data['Device On'].value = KEYWORDS[value] + else: + self._looper_data['Device On'].value = not(self._looper_data['Device On'].value) + + + def set_looper_rev(self, track, xclip, ident, value = None): + """ Toggles or turns looper reverse on/off """ + self.get_looper(track) + if self._looper_data and self._looper_data['Looper'] and self._looper_data['Reverse'].is_enabled: + if value in KEYWORDS: + self._looper_data['Reverse'].value = KEYWORDS[value] + else: + self._looper_data['Reverse'].value = not(self._looper_data['Reverse'].value) + + + def set_looper_state(self, track, xclip, ident, value = None): + """ Sets looper state """ + self.get_looper(track) + if self._looper_data and self._looper_data['Looper'] and value in LOOPER_STATES and self._looper_data['State'].is_enabled: + self._looper_data['State'].value = LOOPER_STATES[value] + + + def dispatch_chain_action(self, device, track, xclip, ident, args): + """ Handle actions related to device chains """ + if self._parent._can_have_nested_devices and device.can_have_chains and device.chains: + arg_list = args.split() + try: chain = device.chains[int(arg_list[0].replace('CHAIN', '')) - 1] + except: chain = None + if chain == None and IS_LIVE_9: + chain = device.view.selected_chain + if chain: + if len(arg_list) > 1 and arg_list[1] == 'MUTE': + if len(arg_list) > 2 and arg_list[2] in KEYWORDS: + chain.mute = KEYWORDS[arg_list[2]] + else: + chain.mute = not(chain.mute) + elif len(arg_list) > 1 and arg_list[1] == 'SOLO': + if len(arg_list) > 2 and arg_list[2] in KEYWORDS: + chain.solo = KEYWORDS[arg_list[2]] + else: + chain.solo = not(chain.solo) + elif len(arg_list) > 2 and arg_list[1] == 'VOL' and not device.class_name.startswith('Midi'): + self._parent.do_parameter_adjustment(chain.mixer_device.volume, arg_list[2].strip()) + elif len(arg_list) > 2 and arg_list[1] == 'PAN' and not device.class_name.startswith('Midi'): + self._parent.do_parameter_adjustment(chain.mixer_device.panning, arg_list[2].strip()) + + + def get_device_on_off(self, device): + """ Get device on/off param """ + result = None + for parameter in device.parameters: + if str(parameter.name).startswith('Device On'): + result = parameter + break + return result + + + def get_chain_selector(self, device): + """ Get rack chain selector param """ + result = None + if device.class_name.endswith('GroupDevice'): + for parameter in device.parameters: + if str(parameter.original_name) == 'Chain Selector': + result = parameter + break + return result + + + def get_bob_parameter(self, device, param_string): + """ Get best-of-bank parameter 1-8 for Live's devices + The param string should be composed of 'P' followed by the param index (like P5) """ + result = None + if (device.class_name in DEVICE_BOB_DICT.keys()): + param_bank = DEVICE_BOB_DICT[device.class_name][0] + try: + param_num = int(param_string[1])-1 + if param_num in range (8): + parameter = get_parameter_by_name(device, param_bank[param_num]) + if parameter: + result = parameter + except: pass + return result + + + def get_banked_parameter(self, device, bank_string, param_string): + """ Get bank 1-8/parameter 1-8 for Live's devices + The bank string should be composed of 'B' followed by the bank index (like B2) + The param string should be composed of 'P' followed by the param index (like P5)""" + result = None + if device.class_name in DEVICE_DICT.keys(): + device_bank = DEVICE_DICT[device.class_name] + try: + bank_num = int(bank_string[1])-1 + param_num = int(param_string[1])-1 + if param_num in range (8) and bank_num in range (8) and bank_num <= number_of_parameter_banks(device): + param_bank = device_bank[bank_num] + parameter = get_parameter_by_name(device, param_bank[param_num]) + if parameter: + result = parameter + except: pass + return result + + + def get_looper(self, track): + """ Get first looper device on track and its params """ + self._looper_data = {} + for d in track.devices: + if d.class_name == 'Looper': + self._looper_data['Looper'] = d + for p in d.parameters: + if p.name in ('Device On', 'Reverse', 'State'): + self._looper_data[p.name] = p + break + elif not self._looper_data and self._parent._can_have_nested_devices and d.can_have_chains and d.chains: + for c in d.chains: + self.get_looper(c) + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXGlobalActions.py b/ClyphX/ClyphXGlobalActions.py new file mode 100644 index 0000000..31f2d2a --- /dev/null +++ b/ClyphX/ClyphXGlobalActions.py @@ -0,0 +1,1054 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * +if IS_LIVE_9: + from functools import partial + +class ClyphXGlobalActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Global actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._last_gqntz = 4 + self._last_rqntz = 5 + self._repeat_enabled = False + self._tempo_ramp_active = False + self._tempo_ramp_settings = [] + self._last_beat = -1 + self.song().add_current_song_time_listener(self.on_time_changed) + self.song().add_is_playing_listener(self.on_time_changed) + if self.song().clip_trigger_quantization != 0: + self._last_gqntz = int(self.song().clip_trigger_quantization) + if self.song().midi_recording_quantization != 0: + self._last_rqntz = int(self.song().midi_recording_quantization) + self._last_scene_index = list(self.song().scenes).index(self.song().view.selected_scene) + self._scenes_to_monitor = [] + self.setup_scene_listeners() + + + def disconnect(self): + self.remove_scene_listeners() + self.song().remove_current_song_time_listener(self.on_time_changed) + self.song().remove_is_playing_listener(self.on_time_changed) + self._tempo_ramp_settings = [] + self._scenes_to_monitor = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def on_scene_triggered(self, index): + self._last_scene_index = index + + + def on_scene_list_changed(self): + self.setup_scene_listeners() + + + def make_instant_mapping_docs(self, *a): + from InstantMappingMakeDoc import InstantMappingMakeDoc + InstantMappingMakeDoc() + + def send_midi_message(self, track, xclip, ident, args): + """ Send formatted note/cc/pc message or raw midi message. """ + status_values = {'NOTE': 144, 'CC': 176, 'PC': 192} + message_to_send = [] + if args: + byte_array = args.split() + if len(byte_array) >= 2: + if len(byte_array) >= 3 and byte_array[0] in status_values: + data_bytes = self.convert_strings_to_ints(byte_array[1:]) + if data_bytes and data_bytes[0] in range(1, 17): + message_to_send = [status_values[byte_array[0]] + data_bytes[0] - 1] + for byte in data_bytes[1:]: + if byte in range(128): + message_to_send.append(byte) + if (byte_array[0] != 'PC' and len(message_to_send) != 3) or (byte_array[0] == 'PC' and len(message_to_send) != 2): + return + else: + message_to_send = self.convert_strings_to_ints(byte_array) + if message_to_send: + try: + self._parent._send_midi(tuple(message_to_send)) + if byte_array[0] == 'NOTE': #---send matching note off for note messages + message_to_send[-1] = 0 + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self._parent._send_midi, tuple(message_to_send))) + else: + self._parent.schedule_message(1, self._parent._send_midi, tuple(message_to_send)) + except: pass + + + def convert_strings_to_ints(self, strings): + """ Convert list of strings of ints into list of ints. """ + result = [] + try: + for string in strings: + result.append(int(string)) + except: result = [] + return result + + + def do_variable_assignment(self, track, xclip, ident, args): + """ Creates numbered variables for the name given in args from the offset given in args and in the quantity given in args """ + args = args.strip() + arg_array = args.split() + if len(arg_array) == 3: + try: + start = int(arg_array[1]) + length = int(arg_array[2]) + for index in range(length): + self._parent._user_variables[arg_array[0] + str(index + 1)] = str(index + start) + except: pass + + + def create_audio_track(self, track, xclip, ident, value = None): + """ Creates audio track at end of track list or at the specified index. """ + if IS_LIVE_9: + value = value.strip() + if value: + try: + index = int(value) - 1 + if index in range(len(self.song().tracks)): + self.song().create_audio_track(index) + except: pass + else: + self.song().create_audio_track(-1) + + + def create_midi_track(self, track, xclip, ident, value = None): + """ Creates MIDI track at end of track list or at the specified index. """ + if IS_LIVE_9: + value = value.strip() + if value: + try: + index = int(value) - 1 + if index in range(len(self.song().tracks)): + self.song().create_midi_track(index) + except: pass + else: + self.song().create_midi_track(-1) + + + def create_return_track(self, track, xclip, ident, value = None): + """ Creates return track at end of return list. """ + if IS_LIVE_9: + self.song().create_return_track() + + + def insert_and_configure_audio_track(self, track, xclip, ident, value = None): + """ Inserts an audio track next to the selected track routed from the + selected track and armed. """ + self._insert_and_configure_track() + + + def insert_and_configure_midi_track(self, track, xclip, ident, value = None): + """ Inserts a midi track next to the selected track routed from the + selected track and armed. """ + self._insert_and_configure_track(True) + + + def _insert_and_configure_track(self, is_midi=False): + """ Handles inserting tracks and configuring them. This method will only + work if the selected track has the appropriate output/input for the insertion. """ + if IS_LIVE_9: + sel_track = self.song().view.selected_track + if is_midi and not sel_track.has_midi_input: + return + if not is_midi and not sel_track.has_audio_output: + return + try: + ins_index = list(self.song().tracks).index(sel_track) + 1 + create_method = getattr(self.song(), 'create_midi_track' if is_midi + else 'create_audio_track') + create_method(ins_index) + new_track = self.song().tracks[ins_index] + new_track.name = 'From %s' % sel_track.name + new_track.current_input_routing = sel_track.name + new_track.arm = True + except: pass + + + def create_scene(self, track, xclip, ident, value = None): + """ Creates scene at end of scene list or at the specified index. """ + if IS_LIVE_9: + current_name = None + if type(xclip) is Live.Clip.Clip: + current_name = xclip.name + xclip.name = '' + value = value.strip() + if value: + try: + index = int(value) - 1 + if index in range(len(self.song().scenes)): + self.song().create_scene(index) + except: pass + else: + self.song().create_scene(-1) + if current_name: + self._parent.schedule_message(4, partial(self.refresh_xclip_name, (xclip, current_name))) + + + def duplicate_scene(self, track, xclip, ident, args): + """ Duplicates the given scene. """ + if IS_LIVE_9: + current_name = None + if type(xclip) is Live.Clip.Clip and args: + current_name = xclip.name + xclip.name = '' + self.song().duplicate_scene(self.get_scene_to_operate_on(xclip, args.strip())) + if current_name: + self._parent.schedule_message(4, partial(self.refresh_xclip_name, (xclip, current_name))) + + + def refresh_xclip_name(self, clip_info): + """ This is used for both dupe and create scene to prevent the action from getting triggered over and over again. """ + if clip_info[0]: + clip_info[0].name = clip_info[1] + + + def delete_scene(self, track, xclip, ident, args): + """ Deletes the given scene as long as it's not the last scene in the set. """ + if IS_LIVE_9 and len(self.song().scenes) > 1: + self.song().delete_scene(self.get_scene_to_operate_on(xclip, args.strip())) + + + def swap_device_preset(self, track, xclip, ident, args): + """ Activates swapping for the selected device or swaps out the preset for the given device with the given preset or navigates forwards and back through presets. """ + if IS_LIVE_9: + device = track.view.selected_device + if device: + if not args: + self.application().view.toggle_browse() + else: + if self.application().view.browse_mode: + self.application().view.toggle_browse() + tag_target = None + dev_name = device.class_display_name + args = args.strip() + if IS_LIVE_9_5: + if device.type == Live.Device.DeviceType.audio_effect: + tag_target = self.application().browser.audio_effects + elif device.type == Live.Device.DeviceType.midi_effect: + tag_target = self.application().browser.midi_effects + elif device.type == Live.Device.DeviceType.instrument: + tag_target = self.application().browser.instruments + if tag_target: + for dev in tag_target.children: + if dev.name == dev_name: + self._handle_swapping(device, dev, args) + break + else: + if device.type == Live.Device.DeviceType.audio_effect: + tag_target = 'Audio Effects' + elif device.type == Live.Device.DeviceType.midi_effect: + tag_target = 'MIDI Effects' + elif device.type == Live.Device.DeviceType.instrument: + tag_target = 'Instruments' + if tag_target: + for main_tag in self.application().browser.tags: + if main_tag.name == tag_target: + for dev in main_tag.children: + if dev.name == dev_name: + self._handle_swapping(device, dev, args) + break + break + + + def _handle_swapping(self, device, browser_item, args): + dev_items = self._create_device_items(browser_item, []) + if args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + index = self._get_current_preset_index(device, dev_items) + new_index = index + factor + if new_index > len(dev_items) - 1: + new_index = 0 + elif new_index < 0: + new_index = -1 + self._load_preset(dev_items[new_index]) + else: + if device.can_have_chains: + args = args + '.ADG' + else: + args = args + '.ADV' + for item in dev_items: + if item.name.upper() == args: + self._load_preset(item) + break + + + def _get_current_preset_index(self, device, presets): + """ Returns the index of the current preset (based on the device's name) in the presets list. Returns -1 if not found. """ + index = -1 + current_preset_name = device.name + if device.can_have_chains: + current_preset_name = current_preset_name + '.adg' + else: + current_preset_name = current_preset_name + '.adv' + for item_index in range(len(presets)): + if presets[item_index].name == current_preset_name: + index = item_index + break + return index + + + def _load_preset(self, preset): + """ Loads the given preset. """ + self.application().view.toggle_browse() + self.application().browser.load_item(preset) + self.application().view.toggle_browse() + + + def _create_device_items(self, device, item_array): + """ Returns the array of loadable items for the given device and handles digging into sub-folders too. """ + for item in device.children: + if item.is_folder: + self._create_device_items(item, item_array) + elif item.is_loadable: + item_array.append(item) + return item_array + + + def load_device(self, track, xclip, ident, args): + """ Loads one of Live's built-in devices onto the selected Track. """ + # using a similar method for loading plugins doesn't seem to work! + if IS_LIVE_9: + args = args.strip() + tag_target = None + name = None + if IS_LIVE_9_5: + if args in AUDIO_DEVS: + tag_target = self.application().browser.audio_effects + name = AUDIO_DEVS[args] + elif args in MIDI_DEVS: + tag_target = self.application().browser.midi_effects + name = MIDI_DEVS[args] + elif args in INS_DEVS: + tag_target = self.application().browser.instruments + name = INS_DEVS[args] + if tag_target: + for dev in tag_target.children: + if dev.name == name: + self.application().browser.load_item(dev) + break + else: + if args in AUDIO_DEVS: + tag_target = 'Audio Effects' + name = AUDIO_DEVS[args] + elif args in MIDI_DEVS: + tag_target = 'MIDI Effects' + name = MIDI_DEVS[args] + elif args in INS_DEVS: + tag_target = 'Instruments' + name = INS_DEVS[args] + if tag_target: + for main_tag in self.application().browser.tags: + if main_tag.name == tag_target: + for dev in main_tag.children: + if dev.name == name: + self.application().browser.load_item(dev) + break + break + + + def load_m4l(self, track, xclip, ident, args): + """ Loads M4L device onto the selected Track. The .amxd should be omitted by the user. """ + if IS_LIVE_9: + args = args.strip() + '.AMXD' + found_dev = False + if IS_LIVE_9_5: + for m in self.application().browser.max_for_live.children: + for device in m.children: + if not found_dev: + if device.is_folder: + for dev in device.children: + if dev.name.upper() == args: + found_dev = True + self.application().browser.load_item(dev) + break + elif device.name.upper() == args: + found_dev = True + self.application().browser.load_item(device) + break + else: + break + else: + for main_tag in self.application().browser.tags: + if main_tag.name == 'Max for Live': + for folder in main_tag.children: + if not found_dev: + if folder.is_folder: + for dev in folder.children: + if dev.name.upper() == args: + found_dev = True + self.application().browser.load_item(dev) + break + else: + break + break + + + def set_session_record(self, track, xclip, ident, value = None): + """ Toggles or turns on/off session record """ + if IS_LIVE_9: + if value in KEYWORDS: + self.song().session_record = KEYWORDS[value] + else: + self.song().session_record = not(self.song().session_record) + + + def trigger_session_record(self, track, xclip, ident, value = None): + """ Triggers session record in all armed tracks for the specified fixed length. """ + if IS_LIVE_9 and value: + # the below fixes an issue where Live will crash instead of creating a new + # scene when triggered via an X-Clip + if type(xclip) is Live.Clip.Clip: + scene = list(xclip.canonical_parent.canonical_parent.clip_slots).index(xclip.canonical_parent) + for t in self.song().tracks: + if t.can_be_armed and t.arm: + if not self._track_has_empty_slot(t, scene): + self.song().create_scene(-1) + break + bar = (4.0 / self.song().signature_denominator) * self.song().signature_numerator + try: length = float(value.strip()) * bar + except: length = bar + self.song().trigger_session_record(length) + + + def _track_has_empty_slot(self, track, start): + """ Returns whether the given track has an empty slot existing after the starting + slot index. """ + for s in track.clip_slots[start:]: + if not s.has_clip: + return True + return False + + + def set_session_automation_record(self, track, xclip, ident, value = None): + """ Toggles or turns on/off session automation record """ + if IS_LIVE_9: + if value in KEYWORDS: + self.song().session_automation_record = KEYWORDS[value] + else: + self.song().session_automation_record = not(self.song().session_automation_record) + + + def retrigger_recording_clips(self, track, xclip, ident, value = None): + """ Retriggers all clips that are currently recording. """ + for track in self.song().tracks: + if track.playing_slot_index >= 0: + slot = track.clip_slots[track.playing_slot_index] + if slot.has_clip and slot.clip.is_recording: + slot.fire() + + + def set_back_to_arrange(self, track, xclip, ident, value = None): + """ Triggers back to arrange button """ + self.song().back_to_arranger = 0 + + + def set_overdub(self, track, xclip, ident, value = None): + """ Toggles or turns on/off overdub """ + if value in KEYWORDS: + self.song().overdub = KEYWORDS[value] + else: + self.song().overdub = not(self.song().overdub) + + + def set_metronome(self, track, xclip, ident, value = None): + """ Toggles or turns on/off metronome """ + if value in KEYWORDS: + self.song().metronome = KEYWORDS[value] + else: + self.song().metronome = not(self.song().metronome) + + + def set_record(self, track, xclip, ident, value = None): + """ Toggles or turns on/off record """ + if value in KEYWORDS: + self.song().record_mode = KEYWORDS[value] + else: + self.song().record_mode = not(self.song().record_mode) + + + def set_punch_in(self, track, xclip, ident, value = None): + """ Toggles or turns on/off punch in """ + if value in KEYWORDS: + self.song().punch_in = KEYWORDS[value] + else: + self.song().punch_in = not(self.song().punch_in) + + + def set_punch_out(self, track, xclip, ident, value = None): + """ Toggles or turns on/off punch out """ + if value in KEYWORDS: + self.song().punch_out = KEYWORDS[value] + else: + self.song().punch_out = not(self.song().punch_out) + + + def restart_transport(self, track, xclip, ident, value = None): + """ Restarts transport to 0.0 """ + self.song().current_song_time = 0 + + + def set_stop_transport(self, track, xclip, ident, value = None): + """ Toggles transport """ + self.song().is_playing = not(self.song().is_playing) + + + def set_continue_playback(self, track, xclip, ident, value = None): + """ Continue playback from stop point """ + self.song().continue_playing() + + + def set_stop_all(self, track, xclip, ident, value = None): + """ Stop all clips w/no quantization option for Live 9 """ + if IS_LIVE_9: + self.song().stop_all_clips(not value.strip() == 'NQ') + else: + self.song().stop_all_clips() + + + def set_tap_tempo(self, track, xclip, ident, value = None): + """ Tap tempo """ + self.song().tap_tempo() + + + def set_undo(self, track, xclip, ident, value = None): + """ Triggers Live's undo """ + if self.song().can_undo: + self.song().undo() + + + def set_redo(self, track, xclip, ident, value = None): + """ Triggers Live's redo """ + if self.song().can_redo: + self.song().redo() + + + def move_up(self, track, xclip, ident, value = None): + """ Scroll up """ + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(0), '', False) + + + def move_down(self, track, xclip, ident, value = None): + """ Scroll down """ + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(1), '', False) + + + def move_left(self, track, xclip, ident, value = None): + """ Scroll left """ + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(2), '', False) + + + def move_right(self, track, xclip, ident, value = None): + """ Scroll right """ + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(3), '', False) + + + def move_to_first_device(self, track, xclip, ident, value = None): + """ Move to the first device on the track and scroll the view """ + self.focus_devices() + self.song().view.selected_track.view.select_instrument() + + + def move_to_last_device(self, track, xclip, ident, value = None): + """ Move to the last device on the track and scroll the view """ + self.focus_devices() + if self.song().view.selected_track.devices: + self.song().view.select_device(self.song().view.selected_track.devices[len(self.song().view.selected_track.devices) - 1]) + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(3), 'Detail/DeviceChain', False) + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(2), 'Detail/DeviceChain', False) + + + def move_to_prev_device(self, track, xclip, ident, value = None): + """ Move to the previous device on the track """ + self.focus_devices() + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(2), 'Detail/DeviceChain', False) + + + def move_to_next_device(self, track, xclip, ident, value = None): + """ Move to the next device on the track """ + self.focus_devices() + self.application().view.scroll_view(Live.Application.Application.View.NavDirection(3), 'Detail/DeviceChain', False) + + + def focus_devices(self): + """ Make sure devices are in focus and visible """ + self.application().view.show_view('Detail') + self.application().view.show_view('Detail/DeviceChain') + + + def show_clip_view(self, track, xclip, ident, value = None): + """ Show clip view """ + self.application().view.show_view('Detail') + self.application().view.show_view('Detail/Clip') + + + def show_track_view(self, track, xclip, ident, value = None): + """ Show track view """ + self.application().view.show_view('Detail') + self.application().view.show_view('Detail/DeviceChain') + + + def show_detail_view(self, track, xclip, ident, value = None): + """ Toggle between showing/hiding detail view """ + if self.application().view.is_view_visible('Detail'): + self.application().view.hide_view('Detail') + else: + self.application().view.show_view('Detail') + + + def toggle_browser(self, track, xclip, ident, value = None): + """ Hide/show browser and move focus to or from browser """ + if self.application().view.is_view_visible('Browser'): + self.application().view.hide_view('Browser') + self.application().view.focus_view('') + else: + self.application().view.show_view('Browser') + self.application().view.focus_view('Browser') + + + def toggle_detail_view(self, track, xclip, ident, value = None): + """ Toggle between clip and track view """ + self.application().view.show_view('Detail') + if self.application().view.is_view_visible('Detail/Clip'): + self.application().view.show_view('Detail/DeviceChain') + else: + self.application().view.show_view('Detail/Clip') + + + def toggle_main_view(self, track, xclip, ident, value = None): + """ Toggle between session and arrange view """ + if self.application().view.is_view_visible('Session'): + self.application().view.show_view('Arranger') + else: + self.application().view.show_view('Session') + + + def focus_browser(self, track, xclip, ident, value = None): + """ Move the focus to the browser, show browser first if necessary """ + if not self.application().view.is_view_visible('Browser'): + self.application().view.show_view('Browser') + self.application().view.focus_view('Browser') + + + def focus_detail(self, track, xclip, ident, value = None): + """ Move the focus to the detail view, show detail first if necessary """ + if not self.application().view.is_view_visible('Detail'): + self.application().view.show_view('Detail') + self.application().view.focus_view('Detail') + + + def focus_main(self, track, xclip, ident, value = None): + """ Move the focus to the main focus """ + self.application().view.focus_view('') + + + def adjust_horizontal_zoom(self, track, xclip, ident, value): + """ Horizontally zoom in in Arrange the number of times specified in value. This can accept ALL, but doesn't have any bearing. """ + zoom_all = 'ALL' in value + value = value.replace('ALL', '').strip() + try: value = int(value) + except: return + direct = (value > 0) + 2 + for index in range(abs(value) + 1): + self.application().view.zoom_view(Live.Application.Application.View.NavDirection(direct), '', zoom_all) + + + def adjust_vertical_zoom(self, track, xclip, ident, value): + """ Vertically zoom in on the selected track in Arrange the number of times specified in value. This can accept ALL for zooming all tracks. """ + zoom_all = 'ALL' in value + value = value.replace('ALL', '').strip() + try: value = int(value) + except: return + direct = (value > 0) + for index in range(abs(value) + 1): + self.application().view.zoom_view(Live.Application.Application.View.NavDirection(direct), '', zoom_all) + + + def adjust_tempo(self, track, xclip, ident, args): + """ Adjust/set tempo or apply smooth synced ramp """ + self._tempo_ramp_active = False + self._tempo_ramp_settings = [] + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + self.song().tempo = max(20, min(999, (self.song().tempo + factor))) + elif args.startswith('*'): + try: self.song().tempo = max(20, min(999, (self.song().tempo * float(args[1:])))) + except: pass + elif args.startswith('RAMP') and IS_LIVE_9: + arg_array = args.split() + if len(arg_array) == 3: + try: + ramp_factor = float("%.2f" % (int(arg_array[1]) * self.song().signature_numerator)) + if arg_array[2].startswith('*'): + target_tempo = max(20, min(999, (self.song().tempo * float(arg_array[2][1:])))) + else: + target_tempo = float("%.2f" % float(arg_array[2])) + if target_tempo >= 20.0 and target_tempo <= 999.0: + self._tempo_ramp_settings = [target_tempo, (target_tempo - self.song().tempo) / ramp_factor] + self._tempo_ramp_active = True + except: pass + else: + try: + self.song().tempo = float(args) + except: pass + + + def on_time_changed(self): + """ Smooth BPM changes synced to tempo """ + if self._tempo_ramp_active and self._tempo_ramp_settings and self.song().is_playing: + time = int(str(self.song().get_current_beats_song_time()).split('.')[2]) + if self._last_beat != time: + self._last_beat = time + self._tasks.add(self.apply_tempo_ramp) + + + def apply_tempo_ramp(self, arg=None): + """ Apply tempo smoothing """ + target_reached = False + if self._tempo_ramp_settings[1] > 0: + target_reached = self._tempo_ramp_settings[0] <= self.song().tempo + else: + target_reached = self._tempo_ramp_settings[0] >= self.song().tempo + if target_reached: + self.song().tempo = self._tempo_ramp_settings[0] + self._tempo_ramp_active = False + self._tasks.kill() + self._tasks.clear() + else: + self.song().tempo += self._tempo_ramp_settings[1] + + + def adjust_groove(self, track, xclip, ident, args): + """ Adjust/set global groove """ + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + self.song().groove_amount = max(0.0, min(1.3125, (self.song().groove_amount + factor * float(1.3125 / 131.0)))) + else: + try: + self.song().groove_amount = int(args) * float(1.3125 / 131.0) + except: pass + + + def set_note_repeat(self, track, xclip, ident, args): + """ Set/toggle note repeat """ + if IS_LIVE_9: + args = args.strip() + if args in REPEAT_STATES: + if args == 'OFF': + self._parent._c_instance.note_repeat.enabled = False + self._repeat_enabled = False + else: + self._parent._c_instance.note_repeat.repeat_rate = REPEAT_STATES[args] + self._parent._c_instance.note_repeat.enabled = True + self._repeat_enabled = True + else: + self._repeat_enabled = not self._repeat_enabled + self._parent._c_instance.note_repeat.enabled = self._repeat_enabled + + + def adjust_swing(self, track, xclip, ident, args): + """ Adjust swing amount for use with note repeat """ + if IS_LIVE_9: + args = args.strip() + if args.startswith(('<', '>')): + factor = self._parent.get_adjustment_factor(args, True) + self.song().swing_amount = max(0.0, min(1.0, (self.song().swing_amount + factor * 0.01))) + else: + try: + self.song().swing_amount = int(args) * 0.01 + except: pass + + + def adjust_global_quantize(self, track, xclip, ident, args): + """ Adjust/set/toggle global quantization """ + args = args.strip() + if args in GQ_STATES: + self.song().clip_trigger_quantization = GQ_STATES[args] + elif args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + new_gq = self.song().clip_trigger_quantization + factor + if new_gq in range (14): + self.song().clip_trigger_quantization = new_gq + else: + if self.song().clip_trigger_quantization != 0: + self._last_gqntz = int(self.song().clip_trigger_quantization) + self.song().clip_trigger_quantization = 0 + else: + self.song().clip_trigger_quantization = self._last_gqntz + + + def adjust_record_quantize(self, track, xclip, ident, args): + """ Adjust/set/toggle record quantization """ + args = args.strip() + if args in RQ_STATES: + self.song().midi_recording_quantization = RQ_STATES[args] + elif args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + new_rq = self.song().midi_recording_quantization + factor + if new_rq in range (9): + self.song().midi_recording_quantization = new_rq + else: + if self.song().midi_recording_quantization != 0: + self._last_rqntz = int(self.song().midi_recording_quantization) + self.song().midi_recording_quantization = 0 + else: + self.song().midi_recording_quantization = self._last_rqntz + + + def adjust_time_signature(self, track, xclip, ident, args): + """ Adjust global time signature """ + if '/' in args: + name_split = args.split('/') + try: + self.song().signature_numerator = int(name_split[0].strip()) + self.song().signature_denominator = int(name_split[1].strip()) + except: pass + + + def set_jump_all(self, track, xclip, ident, args): + """ Jump arrange position forward/backward """ + try: self.song().jump_by(float(args.strip())) + except: pass + + + def set_unarm_all(self, track, xclip, ident, args): + """ Unarm all armable tracks """ + for t in self.song().tracks: + if t.can_be_armed and t.arm: + t.arm = 0 + + + def set_unmute_all(self, track, xclip, ident, args): + """ Unmute all tracks """ + for t in (tuple(self.song().tracks) + tuple(self.song().return_tracks)): + if t.mute: + t.mute = 0 + + + def set_unsolo_all(self, track, xclip, ident, args): + """ Unsolo all tracks """ + for t in (tuple(self.song().tracks) + tuple(self.song().return_tracks)): + if t.solo: + t.solo = 0 + + + def set_fold_all(self, track, xclip, ident, value): + """ Toggle or turn/on fold for all tracks """ + state_to_set = None + for t in self.song().tracks: + if t.is_foldable: + if state_to_set == None: + state_to_set = not(t.fold_state) + if value in KEYWORDS: + t.fold_state = KEYWORDS[value] + else: + t.fold_state = state_to_set + + + def set_scene(self, track, xclip, ident, args): + """ Sets scene to play (doesn't launch xclip) """ + args = args.strip() + scene_to_launch = self.get_scene_to_operate_on(xclip, args) + if args != '': + if 'RND' in args and len(self.song().scenes) > 1:#--Don't allow randomization unless more than 1 scene + num_scenes = len(self.song().scenes) + rnd_range = [0, num_scenes] + if '-' in args: + rnd_range_data = args.replace('RND', '').split('-') + if len(rnd_range_data) == 2: + new_min = 0 + new_max = num_scenes + try: new_min = int(rnd_range_data[0]) - 1 + except: new_min = 0 + try: new_max = int(rnd_range_data[1]) + except: new_max = num_scenes + if new_min in range(0, num_scenes) and new_max in range(0, num_scenes + 1) and new_min < new_max - 1: + rnd_range = [new_min, new_max] + scene_to_launch = Live.Application.get_random_int(0, rnd_range[1] - rnd_range[0]) + rnd_range[0] + if scene_to_launch == self._last_scene_index: + while scene_to_launch == self._last_scene_index: + scene_to_launch = Live.Application.get_random_int(0, rnd_range[1] - rnd_range[0]) + rnd_range[0] + elif args.startswith(('<', '>')) and len(self.song().scenes) > 1:#--Don't allow adjustment unless more than 1 scene + factor = self._parent.get_adjustment_factor(args) + if factor < len(self.song().scenes): + scene_to_launch = self._last_scene_index + factor + if scene_to_launch >= len(self.song().scenes): + scene_to_launch -= len(self.song().scenes) + elif scene_to_launch < 0 and abs(scene_to_launch) >= len(self.song().scenes): + scene_to_launch = -(abs(scene_to_launch) - len(self.song().scenes)) + self._last_scene_index = scene_to_launch + for t in self.song().tracks: + if t.is_foldable or (t.clip_slots[scene_to_launch].has_clip and t.clip_slots[scene_to_launch].clip == xclip): + pass + else: + t.clip_slots[scene_to_launch].fire() + + + def get_scene_to_operate_on(self, xclip, args): + scene = list(self.song().scenes).index(self.song().view.selected_scene) + if type(xclip) is Live.Clip.Clip: + scene = xclip.canonical_parent.canonical_parent.playing_slot_index + if args != '': + if '"' in args: + scene_name = args[args.index('"')+1:] + if '"' in scene_name: + scene_name = scene_name[0:scene_name.index('"')] + for index in range(len(self.song().scenes)): + if scene_name == self.song().scenes[index].name.upper(): + scene = index + break + elif args == 'SEL': + scene = list(self.song().scenes).index(self.song().view.selected_scene) + else: + try: + if int(args) in range(len(self.song().scenes) + 1): + scene = int(args)-1 + except: pass + return scene + + + def set_locator(self, track, xclip, ident, args): + """ Set/delete a locator at the current playback position """ + self.song().set_or_delete_cue() + + + def do_locator_loop_action(self, track, xclip, ident, args): + """ Same as do_locator_action with name argument, but also sets arrangement loop start to pos of locator. """ + self.do_locator_action(track, xclip, ident, args, True) + + + def do_locator_action(self, track, xclip, ident, args, move_loop_too=False): + """ Jump between locators or to a particular locator. Can also move loop start to pos of locator if specified. """ + args = args.strip() + if args == '>' and self.song().can_jump_to_next_cue: + self.song().jump_to_next_cue() + elif args == '<' and self.song().can_jump_to_prev_cue: + self.song().jump_to_prev_cue() + else: + try: + for cp in self.song().cue_points: + if self._parent.get_name(cp.name) == args: + cp.jump() + if move_loop_too: + self.song().loop_start = cp.time + break + except: pass + + + def do_loop_action(self, track, xclip, ident, args): + """ Handle arrange loop actions """ + args = args.strip() + if args == '' or args in KEYWORDS: + self.set_loop_on_off(args) + else: + new_start = self.song().loop_start + new_length = self.song().loop_length + if args.startswith(('<', '>')): + self.move_loop_by_factor(args) + return() + elif args == 'RESET': + new_start = 0 + elif args.startswith('*'): + try: + new_length = self.song().loop_length * float(args[1:]) + except: pass + else: + try: + new_length = float(args) * ((4.0 / self.song().signature_denominator) * self.song().signature_numerator) + except: pass + self.set_new_loop_position(new_start, new_length) + + + def set_loop_on_off(self, value = None): + """ Toggles or turns on/off arrange loop """ + if value in KEYWORDS: + self.song().loop = KEYWORDS[value] + else: + self.song().loop = not(self.song().loop) + + + def move_loop_by_factor(self, args): + """ Move arrangement loop by its length or by a specified factor """ + factor = self.song().loop_length + if args == '<': + factor = -(factor) + if len(args) > 1: + factor = self._parent.get_adjustment_factor(args, True) + new_start = self.song().loop_start + factor + if new_start < 0.0: + new_start = 0.0 + self.set_new_loop_position(new_start, self.song().loop_length) + + + def set_new_loop_position(self, new_start, new_length): + """ For use with other loop actions, ensures that loop settings are within range """ + if new_start >= 0 and new_length >= 0 and new_length <= self.song().song_length: + self.song().loop_start = new_start + self.song().loop_length = new_length + + + def setup_scene_listeners(self): + """ Setup listeners for all scenes in set and check that last index is in current scene range. """ + self.remove_scene_listeners() + scenes = self.song().scenes + if not self._last_scene_index in range(len(scenes)): + self._last_scene_index = list(self.song().scenes).index(self.song().view.selected_scene) + for index in range(len(scenes)): + self._scenes_to_monitor.append(scenes[index]) + listener = lambda index = index:self.on_scene_triggered(index) + if not scenes[index].is_triggered_has_listener(listener): + scenes[index].add_is_triggered_listener(listener) + + + def remove_scene_listeners(self): + if self._scenes_to_monitor: + scenes = self._scenes_to_monitor + for index in range(len(scenes)): + if scenes[index]: + listener = lambda index = index:self.on_scene_triggered(index) + if scenes[index].is_triggered_has_listener(listener): + scenes[index].remove_is_triggered_listener(listener) + self._scenes_to_monitor = [] + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXM4LBrowserInterface.py b/ClyphX/ClyphXM4LBrowserInterface.py new file mode 100644 index 0000000..f1c02c7 --- /dev/null +++ b/ClyphX/ClyphXM4LBrowserInterface.py @@ -0,0 +1,201 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +BROWSER_TAGS = ('Drums', 'Instruments', 'Audio Effects', 'MIDI Effects', 'Max for Live') + +class ClyphXM4LBrowserInterface(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = """ ClyphXM4LBrowserInterface provides access to browser data and methods for use in M4L devices. + NOTE: Lazy initialization is used, get_browser_tags method needs to be called first in order to use other methods. """ + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._selected_tag = None + self._selected_device = None + self._selected_folder = None + self._selected_item = None + self._browser = {} + + + def disconnect(self): + self._parent = None + self._selected_tag = None + self._selected_device = None + self._selected_folder = None + self._selected_item = None + self._browser = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def load_device(self): + """ Loads the selected device if there is one. """ + if self._selected_device: + self.application().browser.load_item(self._selected_device['device']) + + + def load_item(self): + """ Loads the selected item if there is one. """ + if self._selected_item: + self.application().browser.load_item(self._selected_item) + + + def activate_hotswap(self): + """ Activates hotswap for the device selected in Live, finds the appropriate tag and device to use and returns the items for the device. """ + device = self.song().view.selected_track.view.selected_device + items = [] + if device: + if self.application().view.browse_mode: + self.application().view.toggle_browse() + if device.class_name == 'PluginDevice' or self._track_contains_browser(): + pass + else: + tag_to_use = None + device_to_use = device.class_display_name + if device.can_have_drum_pads: + tag_to_use = 'Drums' + elif device.class_display_name.startswith('Max'): + tag_to_use = 'Max for Live' + elif device.type == Live.Device.DeviceType.audio_effect: + tag_to_use = 'Audio Effects' + elif device.type == Live.Device.DeviceType.midi_effect: + tag_to_use = 'MIDI Effects' + elif device.type == Live.Device.DeviceType.instrument: + tag_to_use = 'Instruments' + if tag_to_use and device_to_use: + self.application().view.toggle_browse() + self._selected_tag = self._browser[tag_to_use] + self._selected_device = self._selected_tag['devices'][device_to_use] + items = sorted(self._selected_device['folders'].keys()) + sorted(self._selected_device['items']) + return items + + + def deactivate_hotswap(self): + """ Deactivates hotswap and closes the browser. """ + if self.application().view.browse_mode: + self.application().view.toggle_browse() + self.application().view.hide_view('Browser') + + + def select_non_folder_item(self, item_name): + """ Stores an item that is not contained within a folder. """ + self._selected_item = self._selected_device['items'][item_name] + + + def select_folder_item(self, item_name): + """ Stores an item that is contained within a folder. """ + self._selected_item = self._selected_folder[item_name] + + + def get_browser_tags(self): + """ Returns the list of browser tags. + Also, initializes browser if it hasn't already been initialized. """ + if not self._browser: + for tag in self.application().browser.tags: + if tag.name in BROWSER_TAGS: + self._browser[tag.name] = {'tag' : tag, 'devices' : self._create_devices_for_tag(tag)} + return BROWSER_TAGS + + + def get_devices_for_tag(self, tag_name): + """ Returns the list of devices for the given tag and stores the tag. """ + self._selected_tag = self._browser[tag_name] + return sorted(self._selected_tag['devices']) + + + def get_items_for_device(self, device_name): + """ Returns the list of folders and items for the given device and stores the device. """ + self._selected_device = self._selected_tag['devices'][device_name] + return sorted(self._selected_device['folders'].keys()) + sorted(self._selected_device['items']) + + + def get_items_for_folder(self, folder_name): + """ Returns the list of items in the given folder and stores the folder. """ + self._selected_folder = self._selected_device['folders'][folder_name] + return sorted(self._selected_folder) + + + def _track_contains_browser(self): + """ Returns whether or not the selected track contains the Device Browser, in which case hotswapping isn't possble. """ + for device in self.song().view.selected_track.devices: + if device and device.name == 'Device Browser': + return True + return False + + + def _create_devices_for_tag(self, tag): + """ Creates dict of devices for the given tag. Special handling is needed for M4L tag, which only contains folders, and Drums tag, which contains devices and folders. """ + device_dict = {} + if tag.name == 'Max for Live': + for child in tag.children: + if child.is_folder: + for device in child.children: + if device.is_device: + device_dict[child.name] = {'device' : device, 'items' : self._create_items_for_device(child), 'folders' : {}} + break + else: + for child in tag.children: + if child.is_device: + if tag.name == 'Drums': + device_dict[child.name] = {'device' : child, 'items' : self._create_items_for_device(tag), 'folders' : {}} + else: + device_dict[child.name] = {'device' : child, 'items' : self._create_items_for_device(child), 'folders' : self._create_folders_for_device(child)} + if len(device_dict) == 1: + device_dict[' '] = {} + return device_dict + + + def _create_items_for_device(self, device): + """ Creates dict of loadable items for the given device or folder. """ + items_dict = {} + for child in device.children: + if child.is_loadable and not child.name == 'Drum Rack': + items_dict[child.name] = child + if len(items_dict) == 1: + items_dict[' '] = {} + return items_dict + + + def _create_folders_for_device(self, device): + """ Creates dict of folders for the given device. """ + folders_dict = {} + for child in device.children: + if child.is_folder: + folders_dict[child.name + ' >'] = self._create_items_for_device(child) + return folders_dict + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXMXTActions.py b/ClyphX/ClyphXMXTActions.py new file mode 100644 index 0000000..c71dfc2 --- /dev/null +++ b/ClyphX/ClyphXMXTActions.py @@ -0,0 +1,129 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +import _Framework.Task +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +MAX_CHARS = 52 +FULL_SEGMENT = 26 +FULL_SEGMENT_OFFSETS = (0, 28) + +class ClyphXMXTActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Actions related to the MXT-Live control surface ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._script = None + self._seq_comp = None + self._encoders = None + self._message_display_line = None + + + def disconnect(self): + self._script = None + self._seq_comp = None + self._encoders = None + self._message_display_line = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + def set_script(self, mxt_script): + """ Set the MXT script to connect to and get necessary components. """ + self._script = mxt_script + if self._script and self._script._components: + self._message_display_line = self._script._display_lines[0] + for c in self._script.components: + comp_name = c.__class__.__name__ + if 'NoteSeqComponent' in comp_name: + self._seq_comp = c + elif 'EncModeSelector' in comp_name: + self._encoders = c._encoders + + + def dispatch_action(self, track, xclip, ident, action, args): + """ Dispatch action to proper action group handler. """ + if self._script: + if args.startswith('MSG'): + self._display_message(args, xclip) + elif args.startswith('ENC'): + self._handle_encoder_action(args.replace('ENC', '').strip()) + elif args.startswith('SEQ') and self._seq_comp: + self._handle_seq_action(args.replace('SEQ', '').strip(), xclip, ident) + + + def _handle_seq_action(self, args, xclip, ident): + """ Handle note actions related to the note currently being sequenced. """ + comp = self._seq_comp + clip = comp._midi_clip + if clip: + note = comp._note_lane_component._note + start = comp._position_component._start_position + end = comp._position_component._end_position + self._parent._clip_actions.do_clip_note_action(clip, None, None, '', 'NOTES' + str(note) + ' @' + str(start) + '-' + str(end) + ' ' + args) + + + def _handle_encoder_action(self, args): + """ Reset or randomize the values of the parameters the encoders are controlling. """ + if self._encoders: + randomize = args == 'RND' + for enc in self._encoders: + if enc: + p = enc.mapped_parameter() + if p and p.is_enabled and not p.is_quantized: + if randomize: + p.value = (((p.max - p.min) / 127) * Live.Application.get_random_int(0, 128)) + p.min + else: + p.value = p.default_value + + + def _display_message(self, args, xclip): + """ Temporarily displays a message in Maschine's display. """ + if self._message_display_line: + msg = args.replace('MSG', '', 1).strip() + if len(msg) > MAX_CHARS: + msg = msg[:MAX_CHARS] + num_segments = 2 if len(msg) > FULL_SEGMENT else 1 + for i in range(num_segments): + offset = FULL_SEGMENT_OFFSETS[i] + self._message_display_line.write_momentary(offset, FULL_SEGMENT, msg[offset:offset+FULL_SEGMENT], True) + self._tasks.add(_Framework.Task.sequence(_Framework.Task.delay(15), self._revert_display)) + + + def _revert_display(self, args=None): + """ Reverts the display after showing temp message. """ + self._message_display_line.revert() + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXPXTActions.py b/ClyphX/ClyphXPXTActions.py new file mode 100644 index 0000000..6effa9e --- /dev/null +++ b/ClyphX/ClyphXPXTActions.py @@ -0,0 +1,229 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +import _Framework.Task +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +HAS_PXT = False +try: + from _NKFW.ClipUtils import SEQ_RESOLUTIONS + from _NKFW.Scales import SCALE_TYPES + from _NKFW.ScalesComponent import EDITABLE_SCALE + HAS_PXT = True +except: pass + +UNWRITABLE_INDEXES = (17, 35, 53) +FULL_SEGMENT = 17 +FULL_SEGMENT_OFFSETS = (0, 17, 34, 51) + +class ClyphXPXTActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Actions related to the PXT-Live/PXT-Live Plus control surface ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._script = None + self._mono_seq_mode = None + self._poly_seq_mode = None + self._encoders = None + self._message_display_line = None + + + def disconnect(self): + self._script = None + self._mono_seq_mode = None + self._poly_seq_mode = None + self._encoders = None + self._message_display_line = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def set_script(self, pxt_script): + """ Set the PXT script to connect to and get necessary components. """ + self._script = pxt_script + if self._script and self._script._components: + self._message_display_line = self._script._display_lines[2] + for c in self._script.components: + comp_name = c.__class__.__name__ + if 'MatrixModeSelector' in comp_name: + self._mono_seq_mode = c._mono_seq_mode + self._poly_seq_mode = c._poly_seq_mode + elif 'EncModeSelector' in comp_name: + self._encoders = c._encoders + + + def dispatch_action(self, track, xclip, ident, action, args): + """ Dispatch action to proper action group handler. """ + if self._script: + if args.startswith('MSG'): + self._display_message(args, xclip) + elif args.startswith('ENC'): + self._handle_encoder_action(args.replace('ENC', '').strip()) + elif args.startswith('MSEQ') and self._mono_seq_mode and self._mono_seq_mode.is_enabled(): + self._handle_mono_seq_action(args.replace('MSEQ', '').strip(), xclip, ident) + elif args.startswith('PSEQ') and self._poly_seq_mode and self._poly_seq_mode.is_enabled(): + self._handle_poly_seq_action(args.replace('PSEQ', '').strip(), xclip, ident) + + + def _handle_mono_seq_action(self, args, xclip, ident): + """ Handle note actions related to the note currently being sequenced in mono seq mode or capture mono seq mode settings. """ + comp = self._mono_seq_mode + clip = comp._midi_clip + if clip: + if args == 'CAP': + self._capture_seq_settings(xclip, ident, comp, True) + elif args.startswith('CAP'): + self._recall_seq_settings(args.replace('MSEQ', ''), comp) + else: + note = comp._note_lane_components[comp._selected_lane_index]._note + start = comp._position_component._start_position + end = comp._position_component._end_position + self._parent._clip_actions.do_clip_note_action(clip, None, None, '', 'NOTES' + str(note) + ' @' + str(start) + '-' + str(end) + ' ' + args) + + + def _handle_poly_seq_action(self, args, xclip, ident): + """ Handle note actions related to the notes currently being sequenced in poly seq mode or capture poly seq mode settings. """ + comp = self._poly_seq_mode + clip = comp._midi_clip + if clip: + if args == 'CAP': + self._capture_seq_settings(xclip, ident, comp, False) + elif args.startswith('CAP'): + self._recall_seq_settings(args.replace('PSEQ', ''), comp) + else: + start = comp._position_component._start_position + end = comp._position_component._end_position + notes = None + if 'ALL' in args: + notes = str(comp._note_lane_components[0]._note) + '-' + str(comp._note_lane_components[-1]._note) + args = args.replace('ALL', '') + else: + lane_spec = args.split()[0] + try: + lane_num = int(lane_spec) - 1 + if lane_num in range(comp._num_note_lanes): + notes = str(comp._note_lane_components[lane_num]._note) + args = args.replace(lane_spec, '') + except: pass + if notes: + start = comp._position_component._start_position + end = comp._position_component._end_position + self._parent._clip_actions.do_clip_note_action(clip, None, None, '', 'NOTES' + str(notes) + ' @' + str(start) + '-' + str(end) + ' ' + args) + + + def _capture_seq_settings(self, xclip, ident, comp, is_mono): + """ Capture the settings of the given seq comp and store them in the given xclip. """ + if type(xclip) is Live.Clip.Clip and HAS_PXT: + settings = '' + # res settings + settings += str(SEQ_RESOLUTIONS.index(comp._resolution_component._resolution)) + ' ' + # velo settings + velo_comp = comp._velocity_component + settings += str(velo_comp._fixed_velocity) + ' ' + settings += str(velo_comp._velocity_type) + ' ' + # scale settings + scl_comp = comp._scales_component + settings += str(scl_comp._scale_index) + ' ' + settings += str(scl_comp._root_note) + ' ' + settings += str(scl_comp._octave_offset) + ' ' + settings += str(scl_comp._offset_within_octave) + xclip.name = ident + ' PXT ' + ('MSEQ' if is_mono else 'PSEQ') + ' CAP ' + settings + + + def _recall_seq_settings(self, args, comp): + """ Recall the settings for the given seq comp. """ + arg_array = args.replace('CAP', '').strip().split() + if len(arg_array) >= 7: + # res settings + res_comp = comp._resolution_component + if res_comp._resolution_buttons: + res_btn = res_comp._resolution_buttons[int(arg_array[0])] + res_comp._on_resolution_button_value(127, res_btn) + # velo settings + velo_comp = comp._velocity_component + velo_comp._fixed_velocity = int(arg_array[1]) + velo_comp._velocity_type = int(arg_array[2]) + velo_comp.update() + # scale settings + scl_comp = comp._scales_component + scl_index = int(arg_array[3]) + scl_comp._scale_index = scl_index + scl_comp._root_note = int(arg_array[4]) + scl_comp._octave_offset = int(arg_array[5]) + scl_comp._offset_within_octave = int(arg_array[6]) + scl_comp._scale = EDITABLE_SCALE if scl_index == -1 else SCALE_TYPES[scl_index] + scl_comp._set_current_notes() + + + def _handle_encoder_action(self, args): + """ Reset or randomize the values of the parameters the encoders are controlling. """ + if self._encoders: + randomize = args == 'RND' + for enc in self._encoders: + if enc: + p = enc.mapped_parameter() + if p and p.is_enabled and not p.is_quantized: + if randomize: + p.value = (((p.max - p.min) / 127) * Live.Application.get_random_int(0, 128)) + p.min + else: + p.value = p.default_value + + + def _display_message(self, args, xclip): + """ Temporarily displays a message in Push's display + Uses special handling to ensure that empty display spaces aren't written to. """ + if self._message_display_line: + note_as_caps = args.replace('MSG', '', 1).strip() + note_len = len(note_as_caps) + start_index = xclip.name.upper().find(note_as_caps) + note_at_og_case = xclip.name[start_index:note_len+start_index] + for i in UNWRITABLE_INDEXES: + if len(note_at_og_case) > i and note_at_og_case[i] != ' ': + note_at_og_case = note_at_og_case[0:i] + ' ' + note_at_og_case[i:note_len] + note_len += 1 + new_len = len(note_at_og_case) + num_segments = (new_len / FULL_SEGMENT) + 1 + for i in range(num_segments): + offset = FULL_SEGMENT_OFFSETS[i] + self._message_display_line.write_momentary(offset, FULL_SEGMENT, note_at_og_case[offset:offset+FULL_SEGMENT], True) + self._tasks.add(_Framework.Task.sequence(_Framework.Task.delay(15), self._revert_display)) + + + def _revert_display(self, args=None): + """ Reverts the display after showing temp message. """ + self._message_display_line.revert() + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXPushActions.py b/ClyphX/ClyphXPushActions.py new file mode 100644 index 0000000..7291346 --- /dev/null +++ b/ClyphX/ClyphXPushActions.py @@ -0,0 +1,288 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +from __future__ import with_statement +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * + +UNWRITABLE_INDEXES = (17, 35, 53) + +MATRIX_MODES = {'SESSION': 'session', + 'NOTE': 'note'} +TRACK_MODES = {'STOP': 'stop', + 'SOLO': 'solo', + 'MUTE': 'mute'} +MAIN_MODES = {'VOLUME': 'volumes', + 'PAN': 'pan_sends', + 'TRACK': 'track', + 'CLIP': 'clip', + 'DEVICE': 'device'} +P2_MAIN_MODES = {'DEVICE': 'device', + 'MIX': 'mix', + 'CLIP': 'clip'} + + +class ClyphXPushActions(ControlSurfaceComponent): + """ Actions related to Push/Push2 ???? control surface script. """ + + def __init__(self, parent): + super(ClyphXPushActions, self).__init__() + self._parent = parent + self._script = None + self._ins_component = None + self._note_editor = None + self._scales_component = None + self._is_push2 = False + + def disconnect(self): + self._script = None + self._ins_component = None + self._note_editor = None + self._scales_component = None + self._parent = None + super(ClyphXPushActions, self).disconnect() + + def set_script(self, push_script, is_push2=False): + """ Set the Push script to connect to and get necessary components. """ + self._script = push_script + self._is_push2 = is_push2 + if self._script and self._script._components: + for c in self._script._components: + comp_name = c.__class__.__name__ + if comp_name == 'InstrumentComponent': + self._ins_component = c + elif comp_name.endswith('NoteEditorComponent'): + self._note_editor = c + elif comp_name == 'ScalesComponent': + self._scales_component = c + if not self._is_push2: + s_mode = self._script._scales_enabler._mode_map['enabled'].mode + if hasattr(s_mode, '_component'): + self._scales_component = s_mode._component + else: + self._scales_component = s_mode._enableable + + def handle_session_offset(self, session, last_pos, args, parser): + """ Special offset handling for use with 9.5. """ + try: + new_track = session.track_offset + new_scene = session.scene_offset + if args.strip() == 'LAST': + if last_pos: + session.set_offsets(last_pos[0], last_pos[1]) + return None + return_val = (new_track, new_scene) + new_track, args = parser('T', args, new_track, self.song().tracks) + new_scene, args = parser('S', args, new_scene, self.song().scenes) + if new_track == -1 or new_scene == -1: + return + session.set_offsets(new_track, new_scene) + return return_val + except: pass + + def get_session_offsets(self, session): + return session.track_offset, session.scene_offset + + def get_session_dimensions(self, session): + return session.num_tracks, session.num_scenes + + def dispatch_action(self, track, xclip, ident, action, args): + """ Dispatch action to proper action group handler. """ + if self._script: + if args.startswith('SCL') and self._ins_component: + self._handle_scale_action(args.replace('SCL', '').strip(), xclip, ident) + elif args.startswith('SEQ') and self._note_editor: + self._handle_sequence_action(args.replace('SEQ', '').strip()) + elif args == 'DRINS' and self.song().view.selected_track.has_midi_input: + with self._script.component_guard(): + with self._script._push_injector: + self._script._note_modes.selected_mode = 'instrument' + elif args.startswith('MSG'): + self._display_message(args, xclip) + elif args.startswith('MODE'): + self._handle_mode_selection(args.replace('MODE', '').strip()) + + def _handle_mode_selection(self, mode_name): + """ Handles switching to one of Push's mode if possible. """ + mode_component = None + mode_dict = None + if mode_name in MATRIX_MODES: + mode_component = self._script._matrix_modes + mode_dict = MATRIX_MODES + elif mode_name in TRACK_MODES: + if self._is_push2: + main = self._script._mute_solo_stop + mode = getattr(main, '_%s_button_handler' % TRACK_MODES[mode_name]) + main._mute_button_handler._unlock_mode() + main._solo_button_handler._unlock_mode() + main._stop_button_handler._unlock_mode() + mode._allow_released_immediately_action = False + mode._track_list_component.push_mode(mode._mode) + mode._lock_mode() + return + mode_component = self._script._track_modes + mode_dict = TRACK_MODES + elif ((not self._is_push2 and mode_name in MAIN_MODES) + or (self._is_push2 and mode_name in P2_MAIN_MODES)): + mode_component = self._script._main_modes + mode_dict = P2_MAIN_MODES if self._is_push2 else MAIN_MODES + if mode_component and mode_dict: + if mode_component.selected_mode != mode_dict[mode_name]: + with self._script.component_guard(): + with self._script._push_injector: + mode_component.selected_mode = mode_dict[mode_name] + + def _display_message(self, args, xclip): + """ Temporarily displays a message in Push's display. Uses special handling to + ensure that empty display spaces aren't written to. """ + note_as_caps = args.replace('MSG', '', 1).strip() + note_len = len(note_as_caps) + start_index = xclip.name.upper().find(note_as_caps) + note_at_og_case = xclip.name[start_index:note_len+start_index] + if not self._is_push2: + for i in UNWRITABLE_INDEXES: + if len(note_at_og_case) > i and note_at_og_case[i] != ' ': + note_at_og_case = note_at_og_case[0:i] + ' ' + note_at_og_case[i:note_len] + note_len += 1 + self._script.show_notification(note_at_og_case) + + def _handle_scale_action(self, args, xclip, ident): + """ Handles actions related to scale settings. """ + if args: + arg_array = args.split() + array_len = len(arg_array) + if arg_array[0] == 'INKEY': + self._handle_in_key(arg_array) + elif arg_array[0] == 'FIXED': + self._handle_fixed(arg_array) + elif arg_array[0] == 'ROOT' and array_len == 2: + self._handle_root_note(arg_array) + elif arg_array[0] == 'TYPE' and array_len >= 2: + self._handle_scale_type(arg_array, args) + elif arg_array[0] == 'OCT' and array_len >= 2 and arg_array[1] in ('<', '>'): + self._handle_octave(arg_array) + elif array_len == 6: + self._recall_scale_settings(arg_array) + self._update_scale_display_and_buttons() + else: + self._capture_scale_settings(xclip, ident) + + def _handle_in_key(self, arg_array): + if len(arg_array) == 2 and arg_array[1] in KEYWORDS: + self._ins_component._note_layout.is_in_key = KEYWORDS[arg_array[1]] + else: + self._ins_component._note_layout.is_in_key =\ + not self._ins_component._note_layout.is_in_key + + def _handle_fixed(self, arg_array): + if len(arg_array) == 2 and arg_array[1] in KEYWORDS: + self._ins_component._note_layout.is_fixed = KEYWORDS[arg_array[1]] + else: + self._ins_component._note_layout.is_fixed =\ + not self._ins_component._note_layout.is_fixed + + def _handle_root_note(self, arg_array): + if arg_array[1] in NOTE_NAMES: + self._ins_component._note_layout.root_note = NOTE_NAMES.index(arg_array[1]) + elif arg_array[1] in ('<', '>'): + new_root = (self._parent.get_adjustment_factor(arg_array[1]) + + self._ins_component._note_layout.root_note) + if new_root in range(12): + self._ins_component._note_layout.root_note = new_root + + def _handle_octave(self, arg_array): + if arg_array[1] == '<': + self._ins_component._slider.scroll_page_down() + else: + self._ins_component._slider.scroll_page_up() + + def _handle_scale_type(self, arg_array, args): + if arg_array[1] in ('<', '>'): + factor = self._parent.get_adjustment_factor(arg_array[1]) + if self._is_push2: + idx = self._scales_component.selected_scale_index + factor + self._scales_component._set_selected_scale_index(idx) + else: + scale_list = self._scales_component._scale_list.scrollable_list + if factor < 0: + for index in range(abs(factor)): + scale_list.scroll_up() + else: + for index in range(factor): + scale_list.scroll_down() + else: + scale_type = args.replace('TYPE', '').strip() + if self._is_push2: + for i, s in enumerate(self._scales_component.scale_names): + if s.upper() == scale_type: + self._scales_component._set_selected_scale_index(i) + break + else: + scale_list = self._scales_component._scale_list.scrollable_list + for index in range(len(scale_list.items)): + modus = scale_list.items[index] + if modus.content.name.upper() == scale_type: + scale_list._set_selected_item_index(index) + break + + def _capture_scale_settings(self, xclip, ident): + """ Captures scale settings and writes them to X-Clip's name. """ + if type(xclip) is Live.Clip.Clip: + root = str(self._ins_component._note_layout.root_note) + if self._is_push2: + scl_type = self._scales_component.selected_scale_index + else: + scl_type = str(self._scales_component._scale_list.scrollable_list + .selected_item_index) + octave = '0' + fixed = str(self._ins_component._note_layout.is_fixed) + inkey = str(self._ins_component._note_layout.is_in_key) + orient = '0' + xclip.name = '%s Push SCL %s %s %s %s %s %s' % (ident, root, scl_type, octave, + fixed, inkey, orient) + + def _recall_scale_settings(self, arg_array): + """ Recalls scale settings from X-Trigger name. """ + try: + self._ins_component._note_layout.root_note = int(arg_array[0]) + if self._is_push2: + self._scales_component._set_selected_scale_index(int(arg_array[1])) + else: + self._scales_component._scale_list.scrollable_list.selected_item_index =\ + int(arg_array[1]) + self._ins_component._note_layout.is_fixed = arg_array[3] == 'TRUE' + self._ins_component._note_layout.is_in_key = arg_array[4] == 'TRUE' + except: pass + + def _update_scale_display_and_buttons(self): + """ Updates Push's scale display and buttons to indicate current settings. """ + if not self._is_push2: + self._scales_component._update_data_sources() + self._scales_component.update() + + def _handle_sequence_action(self, args): + """ Handle note actions related to the note currently being sequenced. """ + c = self.song().view.detail_clip + clip = c if c and c.is_midi_clip else None + note = self._script._drum_component.selected_note + if clip and note != None: + self._parent._clip_actions.do_clip_note_action(clip, None, None, '', + 'NOTES%s %s' % (note, args)) diff --git a/ClyphX/ClyphXSnapActions.py b/ClyphX/ClyphXSnapActions.py new file mode 100644 index 0000000..5bcab20 --- /dev/null +++ b/ClyphX/ClyphXSnapActions.py @@ -0,0 +1,422 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +import math +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * +if IS_LIVE_9: + from functools import partial + +class ClyphXSnapActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Snapshot-related actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._current_tracks = {} + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + self._smoothing_active = False + self._synced_smoothing_active = False + self._rack_smoothing_active = False + self._smoothing_speed = 7 + self._smoothing_count = 0 + self._last_beat = -1 + self._control_rack = None + self._snap_id = None + self._is_control_track = False + self._include_nested_devices = False + self._parameter_limit = 500 + self._register_timer_callback(self.on_timer) + self._has_timer = True + self.song().add_current_song_time_listener(self.on_time_changed) + self.song().add_is_playing_listener(self.on_time_changed) + + + def disconnect(self): + if self._has_timer: + self._unregister_timer_callback(self.on_timer) + self.remove_control_rack() + self.remove_track_listeners() + self.song().remove_current_song_time_listener(self.on_time_changed) + self.song().remove_is_playing_listener(self.on_time_changed) + self._current_tracks = {} + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + self._control_rack = None + self._snap_id = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def store_track_snapshot(self, track_list, xclip, ident, action, args): + """ Store snapshot of track params """ + param_count = 0 + if not type(xclip) is Live.Clip.Clip: + return() + snap_data = {} + if track_list: + for track in track_list: + track_name = self._parent.get_name(track.name) + if not track_name.startswith('CLYPHX SNAP') and not snap_data.has_key(track.name): + track_data = [[], [], None, {}] + if args == '' or 'MIX' in args: + if not 'MIXS' in args: + mix_vals = [track.mixer_device.volume.value, track.mixer_device.panning.value] + else: + mix_vals = [-1, -1] + if not 'MIX-' in args: + mix_vals.extend([s.value for s in track.mixer_device.sends]) + param_count += len(mix_vals) + track_data[0] = mix_vals + if ('MIX+' in args or 'MIX-' in args) and track != self.song().master_track: + track_data[1] = [int(track.mute), int(track.solo), track.mixer_device.crossfade_assign] + param_count += 3 + if 'PLAY' in args and track in self.song().tracks: + track_data[2] = track.playing_slot_index + param_count += 1 + if (args == '' or 'DEV' in args) and track.devices: + dev_range = self.get_snap_device_range(args, track) + if dev_range: + track_devices = {} + for dev_index in range (dev_range[0], dev_range[1]): + if dev_index < (len(track.devices)): + current_device = track.devices[dev_index] + if not track_devices.has_key(current_device.name): + track_devices[current_device.name] = [[p.value for p in current_device.parameters], []] + param_count += len(current_device.parameters) + if self._include_nested_devices and self._parent._can_have_nested_devices and current_device.can_have_chains: + nested_devices = self.get_nested_devices(current_device, [], 0) + if nested_devices: + track_devices[current_device.name][1] = nested_devices[0] + param_count += nested_devices[1] + if track_devices: + track_data[3] = track_devices + snap_data[track.name] = track_data + if snap_data: + if param_count <= self._parameter_limit: + xclip.name = str(ident) + ' || ' + repr(snap_data) + else: + current_name = xclip.name + xclip.name = 'Too many parameters to store!' + if IS_LIVE_9: + self._parent.schedule_message(8, partial(self.refresh_xclip_name, (xclip, current_name))) + else: + self._parent.schedule_message(8, self.refresh_xclip_name, (xclip, current_name)) + + + def refresh_xclip_name(self, xclip_data): + """ Refreshes xclip's previous name in cases where a snap is asking to store too many params """ + xclip_data[0].name = xclip_data[1] + + + def get_nested_devices(self, rack, nested_list, parameter_count): + """ Get list of nested devices and count of parameters """ + if rack.chains: + for c in rack.chains: + for d in c.devices: + new_device_entry = [[p.value for p in d.parameters], []] + parameter_count += len(d.parameters) + if not rack.class_name.startswith('Midi') and list(c.devices).index(d) == 0: + new_device_entry[1] = [c.mixer_device.volume.value, c.mixer_device.panning.value, c.mixer_device.chain_activator.value] + parameter_count += 3 + sends = c.mixer_device.sends + if sends: + for s in sends: + new_device_entry[1].append(s.value) + parameter_count += len(sends) + nested_list.append(new_device_entry) + if d.can_have_chains and d.chains: + self.get_nested_devices(d, nested_list, parameter_count) + return [nested_list, parameter_count] + + + def recall_track_snapshot(self, name, xclip): + """ Recall snapshot of track params """ + self._smoothing_count = 0 + self._snap_id = xclip.name[xclip.name.index('['):xclip.name.index(']')+1].strip().upper() + track_name = self._parent.get_name(xclip.canonical_parent.canonical_parent.name) + snap_data = eval(str(xclip.name)[len(self._snap_id) + 3:]) + self._smoothing_active = False + self._rack_smoothing_active = False + self._synced_smoothing_active = False + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + self._is_control_track = track_name.startswith('CLYPHX SNAP') + is_synced = False + if self._is_control_track: + self.setup_control_rack(xclip.canonical_parent.canonical_parent) + self._smoothing_speed = 8 + new_speed = 8 + if 'SP:' in self._snap_id: + speed = self._snap_id[self._snap_id.index(':')+1:self._snap_id.index(']')].strip() + is_synced = 'S' in speed + try: new_speed = int(speed.replace('S', '')) + except: new_speed = 8 + else: + if '[' and ']' in track_name: + speed = track_name[track_name.index('[')+1:track_name.index(']')].strip() + is_synced = 'S' in speed + try: new_speed = int(speed.replace('S', '')) + except: new_speed = 8 + if is_synced: + new_speed *= self.song().signature_numerator + if new_speed in range(501): + self._smoothing_speed = new_speed + for track, param_data in snap_data.items(): + if self._current_tracks.has_key(track): + track = self._current_tracks[track] + if param_data[0]: + if track.mixer_device.volume.is_enabled and param_data[0][0] != -1: + self.get_parameter_data_to_smooth(track.mixer_device.volume, param_data[0][0]) + if track.mixer_device.panning.is_enabled and param_data[0][1] != -1: + self.get_parameter_data_to_smooth(track.mixer_device.panning, param_data[0][1]) + if track is not self.song().master_track: + for index in range (len(param_data[0])-2): + if index <= len(track.mixer_device.sends)-1 and track.mixer_device.sends[index].is_enabled: + self.get_parameter_data_to_smooth(track.mixer_device.sends[index], param_data[0][2+index]) + if param_data[1] and track is not self.song().master_track: + track.mute = param_data[1][0] + track.solo = param_data[1][1] + track.mixer_device.crossfade_assign = param_data[1][2] + if param_data[2] != None and not track.is_foldable and track is not self.song().master_track: + if param_data[2] < 0: + track.stop_all_clips() + else: + if track.clip_slots[param_data[2]].has_clip and track.clip_slots[param_data[2]].clip != xclip: + track.clip_slots[param_data[2]].fire() + if param_data[3]: + for device in track.devices: + if param_data[3].has_key(device.name): + self.recall_device_snap(device, param_data[3][device.name][0]) + if self._include_nested_devices and self._parent._can_have_nested_devices and device.can_have_chains and param_data[3][device.name][1]: + self.recall_nested_device_snap(device, param_data[3][device.name][1]) + del param_data[3][device.name] + if self._is_control_track and self._parameters_to_smooth: + if not self._control_rack or (self._control_rack and not self._control_rack.parameters[0].value == 1.0): + self._smoothing_active = not is_synced + self._synced_smoothing_active = is_synced + else: + self._parent.schedule_message(1, self.refresh_control_rack) + + + def recall_device_snap(self, device, device_data): + """ Recall device snap """ + if device and len(device.parameters) == len(device_data): + for index in range (len(device.parameters)): + if device.parameters[index].is_enabled: + self.get_parameter_data_to_smooth(device.parameters[index], device_data[index]) + + + def recall_nested_device_snap(self, rack, device_data): + """ Recall snaps of nested devices """ + if rack.chains and device_data: + for c in rack.chains: + combined_data = zip(c.devices, device_data) + if combined_data: + for cd in combined_data: + device_data.remove(cd[1]) + self.recall_device_snap(cd[0], cd[1][0]) + if not cd[0].class_name.startswith('Midi') and cd[1][1]: + if c.mixer_device.volume.is_enabled: + self.get_parameter_data_to_smooth(c.mixer_device.volume, cd[1][1][0]) + if c.mixer_device.panning.is_enabled: + self.get_parameter_data_to_smooth(c.mixer_device.panning, cd[1][1][1]) + if c.mixer_device.chain_activator.is_enabled: + self.get_parameter_data_to_smooth(c.mixer_device.chain_activator, cd[1][1][2]) + sends = c.mixer_device.sends + if sends: + for i in range(len(cd[1][1]) - 3): + if i < len(sends) and sends[i].is_enabled: + self.get_parameter_data_to_smooth(sends[i], cd[1][1][3 + i]) + if cd[0].can_have_chains: + self.recall_nested_device_snap(cd[0], device_data) + + + def setup_control_rack(self, track): + """ Setup rack to use for morphing between current vals and snapped vals """ + self.remove_control_rack() + for dev in track.devices: + dev_name = self._parent.get_name(dev.name) + if dev.class_name.endswith('GroupDevice') and dev_name.startswith('CLYPHX SNAP'): + self._control_rack = dev + break + + + def refresh_control_rack(self): + """ Refresh rack name and macro value on snap triggered. If triggered when rack off, clear snap id from rack name """ + if self._control_rack and self._snap_id: + if self._control_rack.parameters[0].value == 1.0: + self._control_rack.name = 'ClyphX Snap ' + str(self._snap_id) + self._control_rack.parameters[1].value = 0.0 + self._rack_smoothing_active = True + if not self._control_rack.parameters[1].value_has_listener(self.control_rack_macro_changed): + self._control_rack.parameters[1].add_value_listener(self.control_rack_macro_changed) + else: + self._control_rack.name = 'ClyphX Snap' + + + def control_rack_macro_changed(self): + """ Get param values to set based on macro value and build dict """ + if self._rack_smoothing_active and self._parameters_to_smooth and self._control_rack.parameters[0].value == 1.0: + self._rack_parameters_to_smooth = {} + macro_value = self._control_rack.parameters[1].value + new_dict = {} + for p, v in self._parameters_to_smooth.items(): + param_value = v[2] + (macro_value * v[0]) + if p.is_quantized: + if macro_value < 63 and p.value != v[2]: + param_value = v[2] + elif macro_value > 63 and p.value != v[1]: + param_value = v[1] + else: + param_value = None + if param_value != None: + new_dict[p] = param_value + self._rack_parameters_to_smooth = new_dict + + + def on_timer(self): + """ Smooth parameter value changes via timer """ + if self._smoothing_active and self._parameters_to_smooth: + self.apply_timed_smoothing() + if self._rack_smoothing_active and self._rack_parameters_to_smooth: + for p, v in self._rack_parameters_to_smooth.items(): + p.value = v + del self._rack_parameters_to_smooth[p] + + + def on_time_changed(self): + """ Smooth parameter value changes synced to playback """ + if self._synced_smoothing_active and self._parameters_to_smooth and self.song().is_playing: + time = int(str(self.song().get_current_beats_song_time()).split('.')[2]) + if self._last_beat != time: + self._last_beat = time + self._tasks.add(self.apply_timed_smoothing) + + + def apply_timed_smoothing(self, arg=None): + """ Apply smoothing for either timer or sync """ + self._smoothing_count += 1 + for p, v in self._parameters_to_smooth.items(): + param_value = v[2] + (self._smoothing_count * v[0]) + if p.is_quantized: + p.value = v[1] + del self._parameters_to_smooth[p] + elif param_value == v[1] or self._smoothing_count >= self._smoothing_speed: + del self._parameters_to_smooth[p] + p.value = v[1] + else: + p.value = param_value + + + def get_parameter_data_to_smooth(self, parameter, new_value): + """ Get parameter data to smooth and return list of smoothing value, target value and current value """ + factor = self._smoothing_speed + if self._is_control_track and self._control_rack and self._control_rack.parameters[0].value == 1.0: + factor = 127 + if factor and self._is_control_track: + difference = new_value - parameter.value + if difference and (factor == 127 or (factor != 127 and abs(difference) > 0.01)): + if parameter.is_quantized: + factor = 1 + param_data = [(new_value - parameter.value) / factor, new_value, parameter.value] + if difference < 0.0: + param_data = [((parameter.value - new_value) / factor) * -1, new_value, parameter.value] + self._parameters_to_smooth[parameter] = param_data + else: + parameter.value = new_value + else: + parameter.value = new_value + + + def get_snap_device_range(self, args, track): + """ Get range of devices to snapshot """ + dev_args = args.replace('MIX', '') + dev_args = dev_args.replace('PLAY', '') + dev_args = dev_args.replace('DEV', '') + dev_args = dev_args.replace('IO', '') + start = 0 + end = start + 1 + if dev_args: + if 'ALL' in dev_args: + start = 0 + end = len(track.devices) + elif '-' in dev_args: + try: + name_split = dev_args.split('-') + start = int(name_split[0].strip()) - 1 + end = int(name_split[1].strip()) + except: pass + else: + try: + start = int(dev_args) - 1 + end = start + 1 + except: pass + if start > len(track.devices) or start < 0 or end > len(track.devices) or end < start: + return() + return (start, end) + + + def setup_tracks(self): + """ Store dictionary of tracks by name """ + self._current_tracks = {} + self.remove_track_listeners() + for track in (tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)): + if not track.name_has_listener(self.setup_tracks): + track.add_name_listener(self.setup_tracks) + name = self._parent.get_name(track.name) + if not self._current_tracks.has_key(track.name) and not name.startswith('CLYPHX SNAP'): + self._current_tracks[track.name] = track + + + def remove_control_rack(self): + """ Remove control rack listeners """ + if self._control_rack: + self._control_rack.name = 'ClyphX Snap' + if self._control_rack.parameters[1].value_has_listener(self.control_rack_macro_changed): + self._control_rack.parameters[1].remove_value_listener(self.control_rack_macro_changed) + self._control_rack = None + + + def remove_track_listeners(self): + """ Remove track name listeners """ + for track in (tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)): + if track.name_has_listener(self.setup_tracks): + track.remove_name_listener(self.setup_tracks) + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ClyphXSnapActions9.py b/ClyphX/ClyphXSnapActions9.py new file mode 100644 index 0000000..8da6dbd --- /dev/null +++ b/ClyphX/ClyphXSnapActions9.py @@ -0,0 +1,484 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +import math +import pickle +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * +if IS_LIVE_9: + from functools import partial + +""" The positions of the main categories in the snap data array. """ +MIX_STD_SETTINGS_POS = 0 +MIX_EXT_SETTINGS_POS = 1 +PLAY_SETTINGS_POS = 2 +DEVICE_SETTINGS_POS = 3 + +""" The positions of standard mix settings within the associated array. """ +MIX_VOL_POS = 0 +MIX_PAN_POS = 1 +MIX_SEND_START_POS = 2 + +""" The positions of extended mix settings within the associated array. """ +MIX_MUTE_POS = 0 +MIX_SOLO_POS = 1 +MIX_CF_POS = 2 + +""" The positions of chain mix settings within the associated array. """ +CHAIN_VOL_POS = 0 +CHAIN_PAN_POS = 1 +CHAIN_MUTE_POS = 2 +CHAIN_SEND_START_POS = 3 + +class ClyphXSnapActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Snapshot-related actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._current_tracks = {} + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + self._smoothing_active = False + self._synced_smoothing_active = False + self._rack_smoothing_active = False + self._smoothing_speed = 7 + self._smoothing_count = 0 + self._last_beat = -1 + self._control_rack = None + self._snap_id = None + self._is_control_track = False + self._include_nested_devices = False + self._parameter_limit = 500 + self._register_timer_callback(self._on_timer) + self._has_timer = True + self.song().add_current_song_time_listener(self._on_time_changed) + self.song().add_is_playing_listener(self._on_time_changed) + + + def disconnect(self): + if self._has_timer: + self._unregister_timer_callback(self._on_timer) + self._remove_control_rack() + self._remove_track_listeners() + self.song().remove_current_song_time_listener(self._on_time_changed) + self.song().remove_is_playing_listener(self._on_time_changed) + self._current_tracks = {} + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + self._control_rack = None + self._snap_id = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def store_track_snapshot(self, track_list, xclip, ident, action, args, force=False): + """ Stores snapshot of track params """ + param_count = 0 + if not type(xclip) is Live.Clip.Clip and not force: + return() + snap_data = {} + if track_list: + for track in track_list: + track_name = self._parent.get_name(track.name) + if not track_name.startswith('CLYPHX SNAP') and not snap_data.has_key(track.name): + self._current_track_data = [[], [], None, {}] + if args == '' or 'MIX' in args: + param_count += self._store_mix_settings(track, args) + if 'PLAY' in args and track in self.song().tracks: + self._current_track_data[PLAY_SETTINGS_POS] = track.playing_slot_index + param_count += 1 + if (args == '' or 'DEV' in args) and track.devices: + param_count += self._store_device_settings(track, args) + snap_data[track.name] = self._current_track_data + if snap_data: + if param_count <= self._parameter_limit: + xclip.name = str(ident) + ' || ' + pickle.dumps(snap_data) + else: + current_name = xclip.name + xclip.name = 'Too many parameters to store!' + if IS_LIVE_9: + self._parent.schedule_message(8, partial(self._refresh_xclip_name, (xclip, current_name))) + else: + self._parent.schedule_message(8, self._refresh_xclip_name, (xclip, current_name)) + + + def _store_mix_settings(self, track, args): + """ Stores mixer related settings and returns the number of parameters that were stored. """ + param_count = 0 + if not 'MIXS' in args: + mix_vals = [track.mixer_device.volume.value, track.mixer_device.panning.value] + else: + mix_vals = [-1, -1] + if not 'MIX-' in args: + mix_vals.extend([s.value for s in track.mixer_device.sends]) + param_count += len(mix_vals) + self._current_track_data[MIX_STD_SETTINGS_POS] = mix_vals + if ('MIX+' in args or 'MIX-' in args) and track != self.song().master_track: + self._current_track_data[MIX_EXT_SETTINGS_POS] = [int(track.mute), int(track.solo), track.mixer_device.crossfade_assign] + param_count += 3 + return param_count + + + def _store_device_settings(self, track, args): + """ Stores device related settings and returns the number of parameters that were stored. """ + param_count = 0 + dev_range = self._get_snap_device_range(args, track) + if dev_range: + track_devices = {} + for dev_index in range (dev_range[0], dev_range[1]): + if dev_index < (len(track.devices)): + current_device = track.devices[dev_index] + if not track_devices.has_key(current_device.name): + track_devices[current_device.name] = {'params' : [p.value for p in current_device.parameters]} + param_count += len(current_device.parameters) + if self._include_nested_devices and self._parent._can_have_nested_devices and current_device.can_have_chains: + param_count += self._get_nested_devices(current_device, track_devices[current_device.name], 0) + if track_devices: + self._current_track_data[DEVICE_SETTINGS_POS] = track_devices + return param_count + + + def _get_nested_devices(self, rack, nested_devs, parameter_count): + """ Creates recursive dict of nested devices and returns count of parameters """ + if rack.chains: + nested_devs['chains'] = {} + for chain_index, c in enumerate(rack.chains): + nested_devs['chains'][chain_index] = {'devices' : {}} + for device_index, d in enumerate(c.devices): + nested_devs['chains'][chain_index]['devices'][device_index] = {'params' : [p.value for p in d.parameters]} + parameter_count += len(d.parameters) + if not rack.class_name.startswith('Midi'): + mix_settings = [c.mixer_device.volume.value, c.mixer_device.panning.value, c.mixer_device.chain_activator.value] + parameter_count += 3 + sends = c.mixer_device.sends + if sends: + for s in sends: + mix_settings.append(s.value) + parameter_count += len(sends) + nested_devs['chains'][chain_index]['mixer'] = mix_settings + if d.can_have_chains and d.chains: + self._get_nested_devices(d, nested_devs['chains'][chain_index]['devices'][device_index], parameter_count) + return parameter_count + + + def recall_track_snapshot(self, name, xclip, disable_smooth=False): + """ Recalls snapshot of track params """ + self._snap_id = xclip.name[xclip.name.index('['):xclip.name.index(']')+1].strip().upper() + snap_data = pickle.loads(str(xclip.name)[len(self._snap_id) + 4:]) + self._parameters_to_smooth = {} + self._rack_parameters_to_smooth = {} + is_synced = False if disable_smooth else self._init_smoothing(xclip) + for track, param_data in snap_data.items(): + if self._current_tracks.has_key(track): + track = self._current_tracks[track] + self._recall_mix_settings(track, param_data) + if param_data[PLAY_SETTINGS_POS] != None and not track.is_foldable and track is not self.song().master_track: + if param_data[PLAY_SETTINGS_POS] < 0: + track.stop_all_clips() + else: + if track.clip_slots[param_data[PLAY_SETTINGS_POS]].has_clip and track.clip_slots[param_data[PLAY_SETTINGS_POS]].clip != xclip: + track.clip_slots[param_data[PLAY_SETTINGS_POS]].fire() + if param_data[DEVICE_SETTINGS_POS]: + self._recall_device_settings(track, param_data) + if self._is_control_track and self._parameters_to_smooth: + if not self._control_rack or (self._control_rack and not self._control_rack.parameters[0].value == 1.0): + self._smoothing_active = not is_synced + self._synced_smoothing_active = is_synced + else: + self._parent.schedule_message(1, self._refresh_control_rack) + + + def _recall_mix_settings(self, track, param_data): + """ Recalls mixer related settings. """ + if param_data[MIX_STD_SETTINGS_POS]: + pan_value = param_data[MIX_STD_SETTINGS_POS][MIX_PAN_POS] + if track.mixer_device.volume.is_enabled and param_data[MIX_STD_SETTINGS_POS][MIX_VOL_POS] != -1: + self._get_parameter_data_to_smooth(track.mixer_device.volume, param_data[MIX_STD_SETTINGS_POS][MIX_VOL_POS]) + if track.mixer_device.panning.is_enabled and not isinstance(pan_value, int): + self._get_parameter_data_to_smooth(track.mixer_device.panning, param_data[MIX_STD_SETTINGS_POS][MIX_PAN_POS]) + if track is not self.song().master_track: + for index in range (len(param_data[MIX_STD_SETTINGS_POS])-MIX_SEND_START_POS): + if index <= len(track.mixer_device.sends)-1 and track.mixer_device.sends[index].is_enabled: + self._get_parameter_data_to_smooth(track.mixer_device.sends[index], param_data[MIX_STD_SETTINGS_POS][MIX_SEND_START_POS+index]) + if param_data[1] and track is not self.song().master_track: + track.mute = param_data[MIX_EXT_SETTINGS_POS][MIX_MUTE_POS] + track.solo = param_data[MIX_EXT_SETTINGS_POS][MIX_SOLO_POS] + track.mixer_device.crossfade_assign = param_data[MIX_EXT_SETTINGS_POS][MIX_CF_POS] + + + def _recall_device_settings(self, track, param_data): + """ Recalls device related settings. """ + for device in track.devices: + if param_data[DEVICE_SETTINGS_POS].has_key(device.name): + self._recall_device_snap(device, param_data[DEVICE_SETTINGS_POS][device.name]['params']) + if self._include_nested_devices and self._parent._can_have_nested_devices and device.can_have_chains and param_data[DEVICE_SETTINGS_POS][device.name].has_key('chains'): + self._recall_nested_device_snap(device, param_data[DEVICE_SETTINGS_POS][device.name]['chains']) + del param_data[DEVICE_SETTINGS_POS][device.name] + + + def _recall_device_snap(self, device, stored_params): + """ Recalls the settings of a single device """ + if device and len(device.parameters) == len(stored_params): + for index, param in enumerate(device.parameters): + if param.is_enabled: + self._get_parameter_data_to_smooth(param, stored_params[index]) + + + def _recall_nested_device_snap(self, rack, stored_params): + """ Recalls the settings and mixer settings of nested devices """ + if rack.chains and stored_params: + num_chains = len(rack.chains) + for chain_key in stored_params.keys(): + if chain_key < num_chains: + chain = rack.chains[chain_key] + chain_devices = chain.devices + num_chain_devices = len(chain_devices) + stored_chain = stored_params[chain_key] + stored_devices = stored_chain['devices'] + for device_key in stored_devices.keys(): + if device_key < num_chain_devices: + self._recall_device_snap(chain_devices[device_key], stored_devices[device_key]['params']) + if chain_devices[device_key].can_have_chains and stored_devices[device_key].has_key('chains'): + self._recall_nested_device_snap(chain_devices[device_key], stored_devices[device_key]['chains']) + if not rack.class_name.startswith('Midi') and stored_chain.has_key('mixer'): + if chain.mixer_device.volume.is_enabled: + self._get_parameter_data_to_smooth(chain.mixer_device.volume, stored_chain['mixer'][CHAIN_VOL_POS]) + if chain.mixer_device.panning.is_enabled: + self._get_parameter_data_to_smooth(chain.mixer_device.panning, stored_chain['mixer'][CHAIN_PAN_POS]) + if chain.mixer_device.chain_activator.is_enabled: + self._get_parameter_data_to_smooth(chain.mixer_device.chain_activator, stored_chain['mixer'][CHAIN_MUTE_POS]) + sends = chain.mixer_device.sends + if sends: + num_sends = len(sends) + for i in range(len(stored_chain['mixer']) - CHAIN_SEND_START_POS): + if i < num_sends and sends[i].is_enabled: + self._get_parameter_data_to_smooth(sends[i], stored_chain['mixer'][CHAIN_SEND_START_POS + i]) + + + def _init_smoothing(self, xclip): + """ Initializes smoothing and returns whether or not smoothing is synced to tempo or not. """ + self._smoothing_count = 0 + self._smoothing_active = False + self._rack_smoothing_active = False + self._synced_smoothing_active = False + is_synced = False + track_name = self._parent.get_name(xclip.canonical_parent.canonical_parent.name) + self._is_control_track = track_name.startswith('CLYPHX SNAP') + if self._is_control_track: + self._setup_control_rack(xclip.canonical_parent.canonical_parent) + self._smoothing_speed = 8 + new_speed = 8 + if 'SP:' in self._snap_id: + speed = self._snap_id[self._snap_id.index(':')+1:self._snap_id.index(']')].strip() + is_synced = 'S' in speed + try: new_speed = int(speed.replace('S', '')) + except: new_speed = 8 + else: + if '[' and ']' in track_name: + speed = track_name[track_name.index('[')+1:track_name.index(']')].strip() + is_synced = 'S' in speed + try: new_speed = int(speed.replace('S', '')) + except: new_speed = 8 + if is_synced: + new_speed *= self.song().signature_numerator + if new_speed in range(501): + self._smoothing_speed = new_speed + return is_synced + + + def _setup_control_rack(self, track): + """ Sets up rack to use for morphing between current vals and snapped vals """ + self._remove_control_rack() + for dev in track.devices: + dev_name = self._parent.get_name(dev.name) + if dev.class_name.endswith('GroupDevice') and dev_name.startswith('CLYPHX SNAP'): + self._control_rack = dev + break + + + def _refresh_control_rack(self): + """ Refreshes rack name and macro value on snap triggered. If triggered when rack off, clear snap id from rack name """ + if self._control_rack and self._snap_id: + if self._control_rack.parameters[0].value == 1.0: + self._control_rack.name = 'ClyphX Snap ' + str(self._snap_id) + self._control_rack.parameters[1].value = 0.0 + self._rack_smoothing_active = True + if not self._control_rack.parameters[1].value_has_listener(self._control_rack_macro_changed): + self._control_rack.parameters[1].add_value_listener(self._control_rack_macro_changed) + else: + self._control_rack.name = 'ClyphX Snap' + + + def _control_rack_macro_changed(self): + """ Returns param values to set based on macro value and build dict """ + if self._rack_smoothing_active and self._parameters_to_smooth and self._control_rack.parameters[0].value == 1.0: + self._rack_parameters_to_smooth = {} + macro_value = self._control_rack.parameters[1].value + new_dict = {} + for p, v in self._parameters_to_smooth.items(): + param_value = v[2] + (macro_value * v[0]) + if p.is_quantized: + if macro_value < 63 and p.value != v[2]: + param_value = v[2] + elif macro_value > 63 and p.value != v[1]: + param_value = v[1] + else: + param_value = None + if param_value != None: + new_dict[p] = param_value + self._rack_parameters_to_smooth = new_dict + + + def _on_timer(self): + """ Smoothes parameter value changes via timer """ + if self._smoothing_active and self._parameters_to_smooth: + self._apply_timed_smoothing() + if self._rack_smoothing_active and self._rack_parameters_to_smooth: + for p, v in self._rack_parameters_to_smooth.items(): + p.value = v + del self._rack_parameters_to_smooth[p] + + + def _on_time_changed(self): + """ Smoothes parameter value changes synced to playback """ + if self._synced_smoothing_active and self._parameters_to_smooth and self.song().is_playing: + time = int(str(self.song().get_current_beats_song_time()).split('.')[2]) + if self._last_beat != time: + self._last_beat = time + if IS_LIVE_9: + self._tasks.add(self._apply_timed_smoothing) + else: + self._parent.schedule_message(1, self._apply_timed_smoothing) + + + def _apply_timed_smoothing(self, arg=None): + """ Applies smoothing for either timer or sync """ + self._smoothing_count += 1 + for p, v in self._parameters_to_smooth.items(): + param_value = v[2] + (self._smoothing_count * v[0]) + if p.is_quantized: + p.value = v[1] + del self._parameters_to_smooth[p] + elif param_value == v[1] or self._smoothing_count >= self._smoothing_speed: + del self._parameters_to_smooth[p] + p.value = v[1] + else: + p.value = param_value + + + def _get_parameter_data_to_smooth(self, parameter, new_value): + """ Returns parameter data to smooth and return list of smoothing value, target value and current value """ + factor = self._smoothing_speed + if self._is_control_track and self._control_rack and self._control_rack.parameters[0].value == 1.0: + factor = 127 + if factor and self._is_control_track: + difference = new_value - parameter.value + if difference and (factor == 127 or (factor != 127 and abs(difference) > 0.01)): + if parameter.is_quantized: + factor = 1 + param_data = [(new_value - parameter.value) / factor, new_value, parameter.value] + if difference < 0.0: + param_data = [((parameter.value - new_value) / factor) * -1, new_value, parameter.value] + self._parameters_to_smooth[parameter] = param_data + else: + parameter.value = new_value + else: + parameter.value = new_value + + + def _get_snap_device_range(self, args, track): + """ Returns range of devices to snapshot """ + dev_args = args.replace('MIX', '') + dev_args = dev_args.replace('PLAY', '') + dev_args = dev_args.replace('DEV', '') + dev_args = dev_args.replace('IO', '') + start = 0 + end = start + 1 + if dev_args: + if 'ALL' in dev_args: + start = 0 + end = len(track.devices) + elif '-' in dev_args: + try: + name_split = dev_args.split('-') + start = int(name_split[0].strip()) - 1 + end = int(name_split[1].strip()) + except: pass + else: + try: + start = int(dev_args) - 1 + end = start + 1 + except: pass + if start > len(track.devices) or start < 0 or end > len(track.devices) or end < start: + return() + return (start, end) + + + def setup_tracks(self): + """ Stores dictionary of tracks by name """ + self._current_tracks = {} + self._remove_track_listeners() + for track in (tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)): + if not track.name_has_listener(self.setup_tracks): + track.add_name_listener(self.setup_tracks) + name = self._parent.get_name(track.name) + if not self._current_tracks.has_key(track.name) and not name.startswith('CLYPHX SNAP'): + self._current_tracks[track.name] = track + + + def _refresh_xclip_name(self, xclip_data): + """ Refreshes xclip's previous name in cases where a snap is asking to store too many params """ + xclip_data[0].name = xclip_data[1] + + + def _remove_control_rack(self): + """ Removes control rack listeners """ + if self._control_rack: + self._control_rack.name = 'ClyphX Snap' + if self._control_rack.parameters[1].value_has_listener(self._control_rack_macro_changed): + self._control_rack.parameters[1].remove_value_listener(self._control_rack_macro_changed) + self._control_rack = None + + + def _remove_track_listeners(self): + """ Removes track name listeners """ + for track in (tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)): + if track.name_has_listener(self.setup_tracks): + track.remove_name_listener(self.setup_tracks) + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXTrackActions.py b/ClyphX/ClyphXTrackActions.py new file mode 100644 index 0000000..4d098a5 --- /dev/null +++ b/ClyphX/ClyphXTrackActions.py @@ -0,0 +1,415 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import * + +class ClyphXTrackActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Track-related actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + + + def disconnect(self): + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def duplicate_track(self, track, xclip, ident, args): + """ Duplicates the given track (only regular tracks can be duplicated). """ + if IS_LIVE_9 and track in self.song().tracks: + self.song().duplicate_track(list(self.song().tracks).index(track)) + + + def delete_track(self, track, xclip, ident, args): + """ Deletes the given track as long as it's not the last track in the set (only regular tracks can be deleted). """ + if IS_LIVE_9 and track in self.song().tracks: + self.song().delete_track(list(self.song().tracks).index(track)) + + + def delete_device(self, track, xclip, ident, args): + """ Delete the device on the track associated with the given index. Only top level devices can be deleted. """ + if IS_LIVE_9: + try: + index = int(args.strip()) - 1 + if index < len(track.devices): + track.delete_device(index) + except: pass + + + def create_clip(self, track, xclip, ident, args): + """ Creates a clip in the given slot index (or sel if specified) at the given length (in bars). If no args, creates a 1 bar clip in the selected slot. """ + if IS_LIVE_9 and track.has_midi_input: + slot = list(self.song().scenes).index(self.song().view.selected_scene) + bar = (4.0 / self.song().signature_denominator) * self.song().signature_numerator + length = bar + if args: + arg_array = args.split() + if len(arg_array) > 0: + specified_slot = arg_array[0].strip() + if specified_slot != 'SEL': + try: slot = int(specified_slot) - 1 + except: pass + if len(arg_array) > 1: + try: length = float(arg_array[1].strip()) * bar + except: pass + if slot in xrange(len(self.song().scenes)): + if not track.clip_slots[slot].has_clip: + track.clip_slots[slot].create_clip(length) + + + def set_name(self, track, xclip, ident, args): + """ Set track's name """ + if track in tuple(self.song().tracks) + tuple(self.song().return_tracks): + args = args.strip() + if args: + track.name = args + + + def rename_all_clips(self, track, xclip, ident, args): + """ Renames all clips on the track based on the track's name or the name specified in args. """ + if track in self.song().tracks and not track.is_foldable: + name = track.name + if args: + name = args.strip() + for i in range(len(track.clip_slots)): + slot = track.clip_slots[i] + if slot.has_clip: + slot.clip.name = name + ' ' + str(i + 1) + + + def set_mute(self, track, xclip, ident, value = None): + """ Toggles or turns on/off track mute """ + if track in tuple(self.song().tracks) + tuple(self.song().return_tracks): + if value in KEYWORDS: + track.mute = KEYWORDS[value] + else: + track.mute = not(track.mute) + + + def set_solo(self, track, xclip, ident, value = None): + """ Toggles or turns on/off track solo """ + if track in tuple(self.song().tracks) + tuple(self.song().return_tracks): + if value in KEYWORDS: + track.solo = KEYWORDS[value] + else: + track.solo = not(track.solo) + + + def set_arm(self, track, xclip, ident, value = None): + """ Toggles or turns on/off track arm """ + if track in self.song().tracks and track.can_be_armed: + if value in KEYWORDS: + track.arm = KEYWORDS[value] + else: + track.arm = not(track.arm) + + + def set_fold(self, track, xclip, ident, value = None): + """ Toggles or turns on/off track fold """ + if track.is_foldable: + if value in KEYWORDS: + track.fold_state = KEYWORDS[value] + else: + track.fold_state = not(track.fold_state) + + + def set_monitor(self, track, xclip, ident, args): + """ Toggles or sets monitor state """ + if track in self.song().tracks and not track.is_foldable: + if args in MON_STATES: + track.current_monitoring_state = MON_STATES[args] + else: + if track.current_monitoring_state == 2: + track.current_monitoring_state = 0 + else: + track.current_monitoring_state += 1 + + + def set_xfade(self, track, xclip, ident, args): + """ Toggles or sets crossfader assignment """ + if track != self.song().master_track: + if args in XFADE_STATES: + track.mixer_device.crossfade_assign = XFADE_STATES[args] + else: + if track.mixer_device.crossfade_assign == 2: + track.mixer_device.crossfade_assign = 0 + else: + track.mixer_device.crossfade_assign += 1 + + + def set_selection(self, track, xclip, ident, args): + """ Sets track/slot selection """ + self.song().view.selected_track = track + if track in self.song().tracks: + if args: + try: + self.song().view.selected_scene = list(self.song().scenes)[int(args.strip())-1] + except: pass + else: + if track.playing_slot_index >= 0: + self.song().view.selected_scene = list(self.song().scenes)[track.playing_slot_index] + + + def set_jump(self, track, xclip, ident, args): + """ Jumps playing clip on track forward/backward """ + if track in self.song().tracks: + try: track.jump_in_running_session_clip(float(args.strip())) + except: pass + + + def set_stop(self, track, xclip, ident, value = None): + """ Stops all clips on track w/no quantization option for Live 9 """ + if track in self.song().tracks: + if IS_LIVE_9: + track.stop_all_clips(not value.strip() == 'NQ') + else: + track.stop_all_clips() + + + def set_play(self, track, xclip, ident, args): + """ Plays clips normally. Allow empty slots unless using keywords. """ + allow_empty_slots = args != '<' and args != '>' + slot_to_play = self._get_slot_index_to_play(track, xclip, args.strip(), allow_empty_slots) + if slot_to_play != -1: + track.clip_slots[slot_to_play].fire() + + + def set_play_w_legato(self, track, xclip, ident, args): + """ Plays the clip with legato using the current global quantization. This will not launch empty slots. """ + if IS_LIVE_9: + slot_to_play = self._get_slot_index_to_play(track, xclip, args.strip()) + if slot_to_play != -1: + track.clip_slots[slot_to_play].fire(force_legato=True, launch_quantization=self.song().clip_trigger_quantization) + + + def set_play_w_force_qntz(self, track, xclip, ident, args): + """ Plays the clip with a specific quantization regardless of launch/global quantization. This will not launch empty slots. """ + self._handle_force_qntz_play(track, xclip, args, False) + + + def set_play_w_force_qntz_and_legato(self, track, xclip, ident, args): + """ Combination of play_legato and play_w_force_qntz. """ + self._handle_force_qntz_play(track, xclip, args, True) + + + def _handle_force_qntz_play(self, track, xclip, args, w_legato): + """ Handles playing clips with a specific quantization with or without legato. """ + if IS_LIVE_9: + args = args.strip() + arg_array = args.split() + qntz_spec = arg_array[0] + if 'BAR' in args: + qntz_spec = arg_array[0] + ' ' + arg_array[1] + if qntz_spec in GQ_STATES.keys(): + qntz_to_use = GQ_STATES[qntz_spec] + slot_to_play = self._get_slot_index_to_play(track, xclip, args.replace(qntz_spec, '').strip()) + if slot_to_play != -1: + track.clip_slots[slot_to_play].fire(force_legato=w_legato, launch_quantization=qntz_to_use) + + + def _get_slot_index_to_play(self, track, xclip, args, allow_empty_slots=False): + """ Returns the slot index to play based on keywords in the given args. """ + slot_to_play = -1 + if track in self.song().tracks: + play_slot = track.playing_slot_index + select_slot = list(self.song().scenes).index(self.song().view.selected_scene) + if args == '': + if type(xclip) is Live.Clip.Clip: + slot_to_play = xclip.canonical_parent.canonical_parent.playing_slot_index + else: + if play_slot >= 0: + slot_to_play = play_slot + else: + slot_to_play = select_slot + elif args == 'SEL': + slot_to_play = select_slot + elif 'RND' in args and len(self.song().scenes) > 1:#--Don't allow randomization unless more than 1 scene + num_scenes = len(self.song().scenes) + rnd_range = [0, num_scenes] + if '-' in args: + rnd_range_data = args.replace('RND', '').split('-') + if len(rnd_range_data) == 2: + new_min = 0 + new_max = num_scenes + try: new_min = int(rnd_range_data[0]) - 1 + except: new_min = 0 + try: new_max = int(rnd_range_data[1]) + except: new_max = num_scenes + if new_min in range(0, num_scenes) and new_max in range(0, num_scenes + 1) and new_min < new_max - 1: + rnd_range = [new_min, new_max] + slot_to_play = Live.Application.get_random_int(0, rnd_range[1] - rnd_range[0]) + rnd_range[0] + if slot_to_play == play_slot: + while slot_to_play == play_slot: + slot_to_play = Live.Application.get_random_int(0, rnd_range[1] - rnd_range[0]) + rnd_range[0] + elif args.startswith(('<', '>')) and len(self.song().scenes) > 1:#--Don't allow adjustment unless more than 1 scene + if track.is_foldable: + return -1 + factor = self._parent.get_adjustment_factor(args) + if factor < len(self.song().scenes): + if abs(factor) == 1:#---Only launch slots that contain clips + for index in range (len(self.song().scenes)): + play_slot += factor + if play_slot >= len(self.song().scenes): + play_slot = 0 + if track.clip_slots[play_slot].has_clip and track.clip_slots[play_slot].clip != xclip: + break + else: + play_slot += factor + if play_slot >= len(self.song().scenes): + play_slot -= len(self.song().scenes) + elif play_slot < 0 and abs(play_slot) >= len(self.song().scenes): + play_slot = -(abs(play_slot) - len(self.song().scenes)) + slot_to_play = play_slot + elif args.startswith('"') and args.endswith('"'): + clip_name = args.strip('"') + for index in range(len(track.clip_slots)): + slot = track.clip_slots[index] + if slot.has_clip and slot.clip.name.upper() == clip_name: + slot_to_play = index + break + else: + try: + if int(args) in range(len(self.song().scenes) + 1): + slot_to_play = int(args)-1 + except: pass + else: + return -1 + if (not track.clip_slots[slot_to_play].has_clip and allow_empty_slots) or (track.clip_slots[slot_to_play].has_clip and track.clip_slots[slot_to_play].clip != xclip): + return slot_to_play + else: + return -1 + + + def adjust_preview_volume(self, track, xclip, ident, args): + """ Adjust/set master preview volume """ + if track == self.song().master_track: + self._parent.do_parameter_adjustment(self.song().master_track.mixer_device.cue_volume, args.strip()) + + + def adjust_crossfader(self, track, xclip, ident, args): + """ Adjust/set master crossfader """ + if track == self.song().master_track: + self._parent.do_parameter_adjustment(self.song().master_track.mixer_device.crossfader, args.strip()) + + + def adjust_volume(self, track, xclip, ident, args): + """ Adjust/set track volume """ + self._parent.do_parameter_adjustment(track.mixer_device.volume, args.strip()) + + + def adjust_pan(self, track, xclip, ident, args): + """ Adjust/set track pan """ + self._parent.do_parameter_adjustment(track.mixer_device.panning, args.strip()) + + + def adjust_sends(self, track, xclip, ident, args): + """ Adjust/set track sends """ + args = args.split() + if len(args) > 1: + param = self.get_send_parameter(track, args[0].strip()) + if param: + self._parent.do_parameter_adjustment(param, args[1].strip()) + + + def get_send_parameter(self, track, send_string): + """ Gets the send parameter to operate on. """ + param = None + if track != self.song().master_track: + try: param = track.mixer_device.sends[ord(send_string) - 65] + except: pass + return param + + + def adjust_input_routing(self, track, xclip, ident, args): + """ Adjust track input routing """ + if track in self.song().tracks and not track.is_foldable: + routings = list(track.input_routings) + current_routing = 0 + if track.current_input_routing in routings: + current_routing = routings.index(track.current_input_routing) + track.current_input_routing = self.handle_track_routing(args, routings, current_routing) + + + def adjust_input_sub_routing(self, track, xclip, ident, args): + """ Adjust track input sub-routing """ + if track in self.song().tracks and not track.is_foldable: + routings = list(track.input_sub_routings) + current_routing = 0 + if track.current_input_sub_routing in routings: + current_routing = routings.index(track.current_input_sub_routing) + track.current_input_sub_routing = self.handle_track_routing(args, routings, current_routing) + + + def adjust_output_routing(self, track, xclip, ident, args): + """ Adjust track output routing """ + if track != self.song().master_track: + routings = list(track.output_routings) + current_routing = 0 + if track.current_output_routing in routings: + current_routing = routings.index(track.current_output_routing) + track.current_output_routing = self.handle_track_routing(args, routings, current_routing) + + + def adjust_output_sub_routing(self, track, xclip, ident, args): + """ Adjust track output sub-routing """ + if track != self.song().master_track: + routings = list(track.output_sub_routings) + current_routing = 0 + if track.current_output_sub_routing in routings: + current_routing = routings.index(track.current_output_sub_routing) + track.current_output_sub_routing = self.handle_track_routing(args, routings, current_routing) + + + def handle_track_routing(self, args, routings, current_routing): + """ Handle track routing adjustment """ + new_routing = routings[current_routing] + args = args.strip() + if args in ('<', '>'): + factor = self._parent.get_adjustment_factor(args) + if current_routing + factor in range (len(routings)): + new_routing = routings[current_routing + factor] + else: + for i in routings: + if self._parent.get_name(i) == args: + new_routing = i + break + return new_routing + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXTriggers.py b/ClyphX/ClyphXTriggers.py new file mode 100644 index 0000000..b2dd920 --- /dev/null +++ b/ClyphX/ClyphXTriggers.py @@ -0,0 +1,358 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from ActionList import ActionList +from consts import * +if IS_LIVE_9: + from functools import partial + +class ClyphXControlComponent(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Control component for ClyphX ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._control_list = {} + self._xt_scripts = [] + + + def disconnect(self): + self._control_list = {} + self._xt_scripts = [] + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def connect_script_instances(self, instanciated_scripts): + """ Try to connect to ClyphX_XT instances """ + ClyphX_XT = None + for i in range (5): + try: + if i == 0: + from ClyphX_XTA.ClyphX_XT import ClyphX_XT + elif i == 1: + from ClyphX_XTB.ClyphX_XT import ClyphX_XT + elif i == 2: + from ClyphX_XTC.ClyphX_XT import ClyphX_XT + elif i == 3: + from ClyphX_XTD.ClyphX_XT import ClyphX_XT + elif i == 4: + from ClyphX_XTE.ClyphX_XT import ClyphX_XT + except: pass + if ClyphX_XT: + for i in instanciated_scripts: + if isinstance(i, ClyphX_XT) and not i in self._xt_scripts: + self._xt_scripts.append(i) + break + + + def assign_new_actions(self, string): + """ Assign new actions to controls via xclips """ + if self._xt_scripts: + for x in self._xt_scripts: + x.assign_new_actions(string) + ident = string[string.index('[')+2:string.index(']')].strip() + actions = string[string.index(']')+2:].strip() + for c, v in self._control_list.items(): + if ident == v['ident']: + new_actions = actions.split(',') + on_action = '[' + ident + '] ' + new_actions[0] + off_action = None + if on_action and len(new_actions) > 1: + if new_actions[1].strip() == '*': + off_action = on_action + else: + off_action = '[' + ident + '] ' + new_actions[1] + if on_action: + v['on_action'] = on_action + v['off_action'] = off_action + break + + + def receive_midi(self, bytes): + """ Receive user-defined midi messages """ + if self._control_list: + ctrl_data = None + if bytes[2] == 0 or bytes[0] < 144: + if (bytes[0], bytes[1]) in self._control_list.keys() and self._control_list[(bytes[0], bytes[1])]['off_action']: + ctrl_data = self._control_list[(bytes[0], bytes[1])] + elif (bytes[0] + 16, bytes[1]) in self._control_list.keys() and self._control_list[(bytes[0] + 16, bytes[1])]['off_action']: + ctrl_data = self._control_list[(bytes[0] + 16, bytes[1])] + if ctrl_data: + ctrl_data['name'].name = ctrl_data['off_action'] + elif bytes[2] != 0 and (bytes[0], bytes[1]) in self._control_list.keys(): + ctrl_data = self._control_list[(bytes[0], bytes[1])] + ctrl_data['name'].name = ctrl_data['on_action'] + if ctrl_data: + self._parent.handle_action_list_trigger(self.song().view.selected_track, ctrl_data['name']) + + + def get_user_control_settings(self, data, midi_map_handle): + """ Receives control data from user settings file and builds control dictionary """ + self._control_list = {} + for d in data: + status_byte = None + channel = None + ctrl_num = None + on_action = None + off_action = None + d = d.split('=') + ctrl_name = d[0].strip() + new_ctrl_data = d[1].split(',') + try: + if new_ctrl_data[0].strip() == 'NOTE': + status_byte = 144 + elif new_ctrl_data[0].strip() == 'CC': + status_byte = 176 + if int(new_ctrl_data[1].strip()) in range(1,17): + channel = int(new_ctrl_data[1].strip()) - 1 + if int(new_ctrl_data[2].strip()) in range(128): + ctrl_num = int(new_ctrl_data[2].strip()) + on_action = '[' + ctrl_name + '] ' + new_ctrl_data[3] + if on_action and len(new_ctrl_data) > 4: + if new_ctrl_data[4].strip() == '*': + off_action = on_action + else: + off_action = '[' + ctrl_name + '] ' + new_ctrl_data[4] + except: pass + if status_byte and channel != None and ctrl_num != None and on_action: + self._control_list[(status_byte + channel, ctrl_num)] = {'ident' : ctrl_name, 'on_action' : on_action, 'off_action' : off_action, 'name' : ActionList(on_action)} + if status_byte == 144: + Live.MidiMap.forward_midi_note(self._parent._c_instance.handle(), midi_map_handle, channel, ctrl_num) + else: + Live.MidiMap.forward_midi_cc(self._parent._c_instance.handle(), midi_map_handle, channel, ctrl_num) + + + def rebuild_control_map(self, midi_map_handle): + """ Called from main when build_midi_map is called. """ + for key in self._control_list.keys(): + if key[0] >= 176: + Live.MidiMap.forward_midi_cc(self._parent._c_instance.handle(), midi_map_handle, key[0] - 176, key[1]) + else: + Live.MidiMap.forward_midi_note(self._parent._c_instance.handle(), midi_map_handle, key[0] - 144, key[1]) + + +class ClyphXTrackComponent(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Track component that monitors play slot index and calls main script on changes ' + + def __init__(self, parent, track): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._track = track + self._clip = None + self._loop_count = 0 + self._track.add_playing_slot_index_listener(self.play_slot_index_changed) + self._register_timer_callback(self.on_timer) + self._last_slot_index = -1 + self._triggered_clips = [] + self._triggered_lseq_clip = None + + + def disconnect(self): + self.remove_loop_jump_listener() + self._unregister_timer_callback(self.on_timer) + if self._track and self._track.playing_slot_index_has_listener(self.play_slot_index_changed): + self._track.remove_playing_slot_index_listener(self.play_slot_index_changed) + self._track = None + self._clip = None + self._triggered_clips = [] + self._triggered_lseq_clip = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def play_slot_index_changed(self): + """ Called on track play slot index changes to set up clips to trigger (on play and stop) and set up loop listener for LSEQ. """ + self.remove_loop_jump_listener() + new_clip = self.get_xclip(self._track.playing_slot_index) + prev_clip = self.get_xclip(self._last_slot_index) + self._last_slot_index = self._track.playing_slot_index + if new_clip and prev_clip and new_clip == prev_clip: + self._triggered_clips.append(new_clip) + elif new_clip: + if prev_clip: + self._triggered_clips.append(prev_clip) + self._triggered_clips.append(new_clip) + elif prev_clip: + self._triggered_clips.append(prev_clip) + self._clip = new_clip + if self._clip and '(LSEQ)' in self._clip.name.upper() and not self._clip.loop_jump_has_listener(self.on_loop_jump): + self._clip.add_loop_jump_listener(self.on_loop_jump) + + + def get_xclip(self, slot_index): + """ Get the xclip associated with slot_index or None. """ + clip = None + if self._track and slot_index in xrange(len(self._track.clip_slots)): + slot = self._track.clip_slots[slot_index] + if slot.has_clip and not slot.clip.is_recording and not slot.clip.is_triggered: + clip_name = slot.clip.name + if len(clip_name) > 2 and clip_name[0] == '[' and ']' in clip_name: + clip = slot.clip + return clip + + + def on_loop_jump(self): + """ Called on loop changes to increment loop count and set clip to trigger. """ + self._loop_count += 1 + if self._clip: + self._triggered_lseq_clip = self._clip + + + def on_timer(self): + """ Continuous timer, calls main script if there are any triggered clips. """ + if self._track and (not self._track.mute or self._parent._process_xclips_if_track_muted): + if self._triggered_clips: + for clip in self._triggered_clips: + self._parent.handle_action_list_trigger(self._track, clip) + self._triggered_clips = [] + if self._triggered_lseq_clip: + self._parent.handle_loop_seq_action_list(self._triggered_lseq_clip, self._loop_count) + self._triggered_lseq_clip = None + + + def remove_loop_jump_listener(self): + self._loop_count = 0 + if self._clip and self._clip.loop_jump_has_listener(self.on_loop_jump): + self._clip.remove_loop_jump_listener(self.on_loop_jump) + + +class ClyphXCueComponent(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Cue component that monitors cue points and calls main script on changes ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self.song().add_current_song_time_listener(self.arrange_time_changed) + self.song().add_is_playing_listener(self.arrange_time_changed) + self.song().add_cue_points_listener(self.cue_points_changed) + self._x_points = {} + self._x_point_time_to_watch_for = -1 + self._last_arrange_position = -1 + self._sorted_times = [] + self.cue_points_changed() + + + def disconnect(self): + self.remove_cue_point_listeners() + self.song().remove_current_song_time_listener(self.arrange_time_changed) + self.song().remove_is_playing_listener(self.arrange_time_changed) + self.song().remove_cue_points_listener(self.cue_points_changed) + self._x_points = {} + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def cue_points_changed(self): + """ Called on cue point changes to set up points to watch, cue points can't be named via the API so cue points can't perform any actions requiring naming """ + self.remove_cue_point_listeners() + self._sorted_times = [] + for cp in self.song().cue_points: + if not cp.time_has_listener(self.cue_points_changed): + cp.add_time_listener(self.cue_points_changed) + if not cp.name_has_listener(self.cue_points_changed): + cp.add_name_listener(self.cue_points_changed) + name = self._parent.get_name(cp.name) + if len(name) > 2 and name[0] == '[' and name.count('[') == 1 and name.count(']') == 1: + cue_name = name.replace(name[name.index('['):name.index(']')+1].strip(), '') + self._x_points[cp.time] = cp + self._sorted_times = sorted(self._x_points.keys()) + self.set_x_point_time_to_watch() + + + def arrange_time_changed(self): + """ Called on arrange time changed and schedules actions where necessary """ + if self.song().is_playing: + if self._x_point_time_to_watch_for != -1 and self._last_arrange_position < self.song().current_song_time: + if self.song().current_song_time >= self._x_point_time_to_watch_for and self._x_point_time_to_watch_for < self._last_arrange_position: + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.schedule_x_point_action_list, self._x_point_time_to_watch_for)) + else: + self._parent.schedule_message(1, self.schedule_x_point_action_list, self._x_point_time_to_watch_for) + self._x_point_time_to_watch_for = -1 + else: + self.set_x_point_time_to_watch() + self._last_arrange_position = self.song().current_song_time + + + def set_x_point_time_to_watch(self): + """ Determine which cue point time to watch for next """ + if self._x_points: + if self.song().is_playing: + for t in self._sorted_times: + if t >= self.song().current_song_time: + self._x_point_time_to_watch_for = t + break + else: + self._x_point_time_to_watch_for = -1 + + + def schedule_x_point_action_list(self, point): + self._parent.handle_action_list_trigger(self.song().view.selected_track, self._x_points[point]) + + + def remove_cue_point_listeners(self): + for cp in self.song().cue_points: + if cp.time_has_listener(self.cue_points_changed): + cp.remove_time_listener(self.cue_points_changed) + if cp.name_has_listener(self.cue_points_changed): + cp.remove_name_listener(self.cue_points_changed) + self._x_points = {} + self._x_point_time_to_watch_for = -1 + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/ClyphXUserActions.py b/ClyphX/ClyphXUserActions.py new file mode 100644 index 0000000..8291b61 --- /dev/null +++ b/ClyphX/ClyphXUserActions.py @@ -0,0 +1,163 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from ActionList import ActionList +from consts import IS_LIVE_9 + +""" This script allows you to create your own ClyphX actions that can be used like any other ClyphX action. + +PLEASE NOTE: nativeKONTROL cannot provide support on writing Python code or on accessing Live's API through Python. +These are extremely vast subjects that would be difficult to support, particularly in the context of ClyphX, which +is sometimes difficult to support on its own. However, this script is full of comments to help you. Also, the rest +of the scripts in the ClyphX folder include plenty of examples of how to do things. Lastly, we would make the +following recommendations: + +- You can edit this file with any text editor, but an IDE makes this easier: http://wingware.com/ + +- To learn about Python: http://www.diveintopython.net/toc/index.html and http://www.google.com + +- To learn the basics of MIDI Remote Scripts/Live API access: http://remotescripts.blogspot.com/ + +- Reference of Live functions and such that you can access: http://cycling74.com/docs/max5/refpages/m4l-ref/m4l_live_object_model.html + +- After making changes to this file, you will need to recompile. The quickest way to do that is by loading a set. Note, however, that if you + make a change that results in errors, this can sometimes break all control surface scripts (cause them to throw strange errors for no reason) + until you reload Live. + + +TO CREATE ACTIONS: + - You'll first add the action to the action_dict (dictionary below). + + - Then you'll add and implement a function that will be called when the action is triggered. + + - The function has to receive the following parameters: (self, track, args) + + - See the example functions below (example_action_one and example_action_two) for some examples of how to set up functions. + +PARAMETER EXPLANATION: +- track = the track to apply the action to. If the action isn't applied to any particular track, this will either be the selected track + (in the case of X-Controls and X-Cues) or the track the X-Clip resides on. All of the actions CAN be (but don't HAVE to be) applied + to ranges of tracks (like 1-8/MY_ACTION, which will apply to tracks 1-8). If applied to a range of tracks, the function associated with + the action will be called once for each track in the range. + +- args = these are arguments that follow the name of the action. For example, with the action VOL 10. The 10 is an argument. These arguments will always be in all caps. + +RESTRICTIONS: +- Action names (which you define in the dictionary below) should NOT be the same as any current ClyphX action and should be composed of + just letters and numbers. + +- Arguments should NOT use any of the special characters used in ClyphX: semi-colon(;), comma(,), percent sign(%), equals sign(=) +""" + +class ClyphXUserActions(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' User actions ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + + """ Below is the dictionary of actions that this script provides. + + For each entry: + - The key = the one-word (not case-sensitive) name of the action. This is the name that is used when accessing the action from an X-Trigger. + + - The value = the name of the function in this script to call to perform the action. + + Except for the last entry, every entry should be followed by a comma. You can remove the 2 example entries from the dictionary if you wish. """ + self._action_dict = {#<--DO NOTE REMOVE THIS + 'EX_ACTION_1' : 'example_action_one', + 'EX_ACTION_2' : 'example_action_two' + }#<--DO NOTE REMOVE THIS + + """ The parent ClyphX script. Through this you can access things such as the log_message function (writes to Live's Log.txt file), + which you'll likely use quite a bit. The Troubleshooting section of the ClyphX manual covers how to access Log.txt. """ + self._parent = parent + + + def disconnect(self): + """ Called by the control surface on disconnect (app closed, script closed). DO NOT REMOVE THIS. """ + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + """ Called when this script is enabled/disabled (by calling set_enabled on it). DO NOT REMOVE THIS. """ + pass + + + def update(self): + """ Called by the control surface on instantiation and in other cases such as when exiting MIDI map mode. DO NOT REMOVE THIS. """ + pass + + + def example_action_one(self, track, args): + """ Example action that writes to Live's log file and then triggers standard ClyphX METRO action. + This can receive the same args as the METRO action (like EX_ACTION_1 ON), so it just passes args it receives to the METRO function. + + NOTE: The arguments passed to handle_action_list_trigger are: + - The track associated with the trigger. Since our function here is not associated with any particular track, we pass the selected track. + + - The ActionList object, which is just a simple object that contains a name field. You just instantiate one of these with the action list + as a string(proceeded by an identifier). """ + self._parent.log_message('example_action_one triggered with args=' + str(args)) + self._parent.handle_action_list_trigger(self.song().view.selected_track, ActionList('[] METRO ' + str(args))) + + + def example_action_two(self, track, args): + """ Example action that sets mixer settings of the given track to be the same as the master track. + If no args or args contains VOL, sets volume. + If no args or args contains PAN, sets panning. + Obviously, does nothing if the given track is the master track. """ + if track != self.song().master_track: + if not args or 'VOL' in args: + track.mixer_device.volume.value = self.song().master_track.mixer_device.volume.value + if not args or 'PAN' in args: + track.mixer_device.panning.value = self.song().master_track.mixer_device.panning.value + + + def on_track_list_changed(self): + """ Called by the control surface if tracks are added/removed, to be overridden """ + pass + + + def on_scene_list_changed(self): + """ Called by the control surface if scenes are added/removed, to be overridden """ + pass + + + def on_selected_track_changed(self): + """ Called by the control surface when a track is selected, to be overridden """ + pass + + + def on_selected_scene_changed(self): + """ Called by the control surface when a scene is selected, to be overridden """ + pass + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/ExtraPrefs.py b/ClyphX/ExtraPrefs.py new file mode 100644 index 0000000..5e0b1c2 --- /dev/null +++ b/ClyphX/ExtraPrefs.py @@ -0,0 +1,197 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from consts import * +if IS_LIVE_9: + from functools import partial +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +class ExtraPrefs(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = " Extra prefs component for ClyphX " + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._show_highlight = True + self._exclusive_arm = False + self._exclusive_fold = False + self._clip_record = False + self._clip_record_slot = None + self._midi_clip_length = False + self._midi_clip_length_slot = None + self._last_track = self.song().view.selected_track + self.on_selected_track_changed() + + + def disconnect(self): + self.remove_listeners() + self._last_track = None + self._clip_record_slot = None + self._midi_clip_length_slot = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def get_user_settings(self, data): + """ Get user settings from config file and make sure they are in proper range """ + for d in data: + d = d.split('=') + if 'NAVIGATION_HIGHLIGHT' in d[0]: + self._show_highlight = 'ON' in d[1] + elif 'EXCLUSIVE_ARM_ON_SELECT' in d[0] and 'ON' in d[1]: + self._exclusive_arm = True + elif 'EXCLUSIVE_SHOW_GROUP_ON_SELECT' in d[0] and 'ON' in d[1]: + self._exclusive_fold = True + elif 'CLIP_RECORD_LENGTH_SET_BY_GLOBAL_QUANTIZATION' in d[0] and 'ON' in d[1]: + self._clip_record = True + elif 'DEFAULT_INSERTED_MIDI_CLIP_LENGTH' in d[0]: + try: + if int(d[1].strip()) in range (2,17): + self._midi_clip_length = int(d[1].strip()) + except: pass + self.on_selected_track_changed() + + + def on_selected_track_changed(self): + """ Handles navigation highlight, triggering exclusive arm/fold functions and removes/sets up listeners for clip-related functions """ + ControlSurfaceComponent.on_selected_track_changed(self) + track = self.song().view.selected_track + clip_slot = self.song().view.highlighted_clip_slot + self.remove_listeners() + if self._show_highlight: + tracks = list(tuple(self.song().visible_tracks) + tuple(self.song().return_tracks)) + tracks.append(self.song().master_track) + if self.song().view.selected_track in tracks: + self._parent._set_session_highlight(tracks.index(self.song().view.selected_track), list(self.song().scenes).index(self.song().view.selected_scene), 1, 1, True) + else: + self._parent._set_session_highlight(-1, -1, -1, -1, False) + if self._exclusive_arm and track != self._last_track: + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.do_exclusive_arm, track)) + else: + self._parent.schedule_message(1, self.do_exclusive_arm, track) + if self._exclusive_fold and track != self._last_track: + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.do_exclusive_fold, track)) + else: + self._parent.schedule_message(1, self.do_exclusive_fold, track) + if self._clip_record: + if track.can_be_armed and not clip_slot.has_clip: + self._clip_record_slot = clip_slot + if not self._clip_record_slot.has_clip_has_listener(self.clip_record_slot_changed): + self._clip_record_slot.add_has_clip_listener(self.clip_record_slot_changed) + if self._midi_clip_length: + if track.has_midi_input and not clip_slot.has_clip and not track.is_foldable: + self._midi_clip_length_slot = clip_slot + if not self._midi_clip_length_slot.has_clip_has_listener(self.midi_clip_length_slot_changed): + self._midi_clip_length_slot.add_has_clip_listener(self.midi_clip_length_slot_changed) + self._last_track = track + + + def do_exclusive_fold(self, track): + """ Called on track change. Collapses all group tracks except for the current group track """ + if (track.is_foldable): + for t in self.song().tracks: + if (t.is_foldable): + if t == track: + t.fold_state = 0 + else: + t.fold_state = 1 + + + def do_exclusive_arm(self, track): + """ Called on track change. Disarams all tracks except for the current track """ + for t in self.song().tracks: + if (t.can_be_armed): + if t == track: + t.arm = True + else: + t.arm = False + + + def clip_record_slot_changed(self): + """ Called on slot has clip changed. Checks if clip is recording and retriggers it if so """ + track = self.song().view.selected_track + if self.song().clip_trigger_quantization != 0 and track.arm: + clip = self._clip_record_slot.clip + if clip and clip.is_recording: + clip.fire() + + + def midi_clip_length_slot_changed(self): + """Called on slot has clip changed to trigger set length function. Checks if clip is not playing/triggered, is 1-bar in length, has no name and no notes.""" + clip = self._midi_clip_length_slot.clip + if clip and not clip.is_playing and not clip.is_triggered: + one_bar = (4.0 / self.song().signature_denominator) * self.song().signature_numerator + if clip.length == one_bar and clip.name == '': + clip.select_all_notes() + all_notes = clip.get_selected_notes() + clip.deselect_all_notes() + if not all_notes: + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.do_midi_clip_set_length, (clip, one_bar))) + else: + self._parent.schedule_message(1, self.do_midi_clip_set_length, (clip, one_bar)) + + + def do_midi_clip_set_length(self, clip_params): + """ Sets clip length and loop end to user-defined length """ + clip = clip_params[0] + new_length = clip_params[1] * self._midi_clip_length + clip.loop_end = new_length + clip.looping = False + clip.loop_end = new_length + clip.looping = True + + + def remove_listeners(self): + """ Remove parameter listeners. """ + if self._clip_record_slot: + if self._clip_record_slot.has_clip_has_listener(self.clip_record_slot_changed): + self._clip_record_slot.remove_has_clip_listener(self.clip_record_slot_changed) + self._clip_record_slot = None + if self._midi_clip_length_slot: + if self._midi_clip_length_slot.has_clip_has_listener(self.midi_clip_length_slot_changed): + self._midi_clip_length_slot.remove_has_clip_listener(self.midi_clip_length_slot_changed) + self._midi_clip_length_slot = None + + + def on_selected_scene_changed(self): + ControlSurfaceComponent.on_selected_scene_changed(self) + self.on_selected_track_changed() + + +# local variables: +# tab-width: 4 diff --git a/ClyphX/InstantMappingMakeDoc.py b/ClyphX/InstantMappingMakeDoc.py new file mode 100644 index 0000000..bed0a37 --- /dev/null +++ b/ClyphX/InstantMappingMakeDoc.py @@ -0,0 +1,138 @@ +""" +# Copyright (C) 2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +import os +import logging +logger = logging.getLogger(__name__) + +import Live +live_app = Live.Application.get_application() + +from _Generic.Devices import DEVICE_DICT, DEVICE_BOB_DICT, BANK_NAME_DICT + +""" Translation table between API names and friendly names. """ +DEV_NAME_TRANSLATION_TABLE = {'UltraAnalog': 'Analog', + 'MidiArpeggiator': 'Arpeggiator', + 'AudioEffectGroupDevice': 'Audio Effect Rack', + 'MidiChord': 'Chord', + 'Compressor2': 'Compressor', + 'DrumGroupDevice': 'Drum Rack', + 'Tube': 'Dynamic Tube', + 'Eq8': 'EQ Eight', + 'FilterEQ3': 'EQ Three', + 'LoungeLizard': 'Electric', + 'InstrumentImpulse': 'Impulse', + 'InstrumentGroupDevice': 'Instrument Rack', + 'MidiEffectGroupDevice': 'MIDI Effect Rack', + 'MidiNoteLength': 'Note Length', + 'MidiPitcher': 'Pitch', + 'MidiRandom': 'Random', + 'MultiSampler': 'Sampler', + 'MidiScale': 'Scale', + 'CrossDelay': 'Simple Delay', + 'OriginalSimpler': 'Simpler', + 'SpectrumAnalyzer': 'Spectrum', + 'StringStudio': 'Tension', + 'StereoGain': 'Utility', + 'MidiVelocity': 'Velocity', + 'Vinyl': 'Vinyl Distortion'} + +""" The version of Live we're running in. """ +LIVE_VER = 'Live v%s.%s.%s' % (live_app.get_major_version(), live_app.get_minor_version(), + live_app.get_bugfix_version()) + +""" The header of the html file. """ +HEADER = ('

Live Instant Mapping Info for {0}

Brought to ' + + 'you by nativeKONTROL.

' + + 'The following document covers the parameter banks accessible via Live\'s ' + + 'Instant Mapping feature for each built in device. This info also applies ' + + 'to controlling device parameters via ClyphX\'s Device Actions.

' + + 'NOTE: The order of parameter banks is sometimes changed by ' + + 'Ableton. If you find the information in this document to be incorrect, you ' + + 'can recreate it with ClyphX by triggering an action named MAKE_DEV_DOC. ' + + 'That will create a new version of this file in your user/home directory.' + + '
').format(LIVE_VER) + + +class InstantMappingMakeDoc(object): + """ InstantMappingMakeDoc creates a html file in the user's home directory containing + information on the parameter banks defined for all Live devices in Devices.pyc. """ + + def __init__(self): + self.log('InstantMappingMakeDoc initialized.') + self._create_html_file(self._collect_device_infos()) + self.log('InstantMappingMakeDoc finished.') + + def log(self, msg): + """ Writes a message to Live's log file. """ + logger.info(str(msg)) + + def _collect_device_infos(self): + """ Returns a dict of dicts for each device containing its friendly name, bob + parameters and bank names/bank parameters if applicable. """ + dev_dict = {} + for k, v in DEVICE_DICT.iteritems(): + has_banks = len(v) > 1 + info = {'name': DEV_NAME_TRANSLATION_TABLE.get(k, k), + 'bob': DEVICE_BOB_DICT[k][0], + 'bank_names': BANK_NAME_DICT.get(k, ()) if has_banks else (), + 'banks': (v if has_banks else ())} + dev_dict[k] = info + return dev_dict + + def _create_html_file(self, dev_dict): + """ Creates an html in the user's home directory. """ + html_file = os.path.join(os.path.expanduser('~'), + 'Live Instant Mapping Info.html') + try: + with open(html_file, 'w') as f: + f.write(HEADER) + f.write('

Device Index

') + for dev in self._get_device_index(dev_dict): + f.write(dev) + f.write('
') + for key, value in sorted(dev_dict.iteritems(), + key=lambda (k, v): (v['name'], k)): + self._write_device_info(f, value) + f.write('') + except IOError: + self.log('IOError: Unable to write file.') + + def _get_device_index(self, dev_dict): + """ Returns a sorted device index for quickly navigating the file. """ + return sorted(['{0}
'.format(v['name']) + for v in dev_dict.values()]) + + def _write_device_info(self, file, info): + """ Writes info to the file for a device. """ + file.write('

{0}

'.format(info['name'])) + self._write_bank_parameters(file, 'Best Of Banks', info['bob']) + for i, bn in enumerate(info['bank_names']): + self._write_bank_parameters(file, 'B%s: %s' % (i + 1, bn), info['banks'][i]) + file.write('
Back to Device Index
') + + def _write_bank_parameters(self, file, bank_name, bank): + """ Writes the bank name and its parameters to the file. """ + file.write('%s
' % bank_name) + for i, p in enumerate(bank): + if p: + file.write('P%s: %s
' % (i + 1, p)) + file.write('
') diff --git a/ClyphX/Macrobat.py b/ClyphX/Macrobat.py new file mode 100644 index 0000000..0a40e02 --- /dev/null +++ b/ClyphX/Macrobat.py @@ -0,0 +1,196 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from MacrobatMidiRack import MacrobatMidiRack +from MacrobatRnRRack import MacrobatRnRRack +from MacrobatSidechainRack import MacrobatSidechainRack +from MacrobatParameterRacks import MacrobatLearnRack, MacrobatChainMixRack, MacrobatDRMultiRack, MacrobatDRRack, MacrobatReceiverRack, MacrobatTrackRack +from consts import IS_LIVE_9, IS_LIVE_9_5 +if IS_LIVE_9_5: + from MacrobatPushRack import MacrobatPushRack +if IS_LIVE_9: + from MacrobatParameterRacks9 import MacrobatChainSelectorRack, MacrobatDRPadMixRack + +class Macrobat(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = " Macrobat script component for ClyphX " + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._current_tracks = [] + + + def disconnect(self): + self._current_tracks = [] + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_tracks(self, track): + """ Setup component tracks on ini and track list changes """ + if not track in self._current_tracks: + self._current_tracks.append(track) + MacrobatTrackComponent(track, self._parent) + + +class MacrobatTrackComponent(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Track component that monitors track devices ' + + def __init__(self, track, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._track = track + self._track.add_devices_listener(self.setup_devices) + self._current_devices = [] + self._update_in_progress = False + self._has_learn_rack = False + self.setup_devices() + + + def disconnect(self): + self.remove_listeners() + if self._track: + if self._track.devices_has_listener(self.setup_devices): + self._track.remove_devices_listener(self.setup_devices) + self.remove_devices(self._track.devices) + self._track = None + self._current_devices = [] + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def update(self): + if self._track and self.song().view.selected_track == self._track: + self.setup_devices() + + + def on_enabled_changed(self): + pass + + + def reallow_updates(self): + """ Reallow device updates, used to prevent updates happening in quick succession """ + self._update_in_progress = False + + + def setup_devices(self): + """ Get devices on device/chain list and device name changes """ + if self._track and not self._update_in_progress: + self._update_in_progress = True + self._has_learn_rack = False + self.remove_listeners() + self.get_devices(self._track.devices) + self._parent.schedule_message(5, self.reallow_updates) + + + def remove_listeners(self): + """ Disconnect Macrobat rack components """ + for d in self._current_devices: + d[0].disconnect() + self._current_devices = [] + + + def get_devices(self, dev_list): + """ Go through device and chain lists and setup Macrobat racks """ + for d in dev_list: + self.setup_macrobat_rack(d) + if not d.name_has_listener(self.setup_devices): + d.add_name_listener(self.setup_devices) + if self._parent._can_have_nested_devices and d.can_have_chains: + if not d.chains_has_listener(self.setup_devices): + d.add_chains_listener(self.setup_devices) + for c in d.chains: + if not c.devices_has_listener(self.setup_devices): + c.add_devices_listener(self.setup_devices) + self.get_devices(c.devices) + + + def setup_macrobat_rack(self, rack): + """ Setup Macrobat rack if meets criteria """ + if rack.class_name.endswith('GroupDevice'): + name = self._parent.get_name(rack.name) + m = None + if name.startswith('NK RECEIVER'): + m = MacrobatReceiverRack(self._parent, rack, self._track) + elif name.startswith('NK TRACK') and not self._track.has_midi_output: + m = MacrobatTrackRack(self._parent, rack, self._track) + elif name.startswith('NK DR MULTI') and self._parent._can_have_nested_devices: + m = MacrobatDRMultiRack(self._parent, rack, self._track) + elif name.startswith('NK DR PAD MIX') and IS_LIVE_9_5: + m = MacrobatDRPadMixRack(self._parent, rack, self._track) + elif name.startswith('NK CHAIN MIX') and self._parent._can_have_nested_devices: + m = MacrobatChainMixRack(self._parent, rack, self._track) + elif name.startswith('NK DR') and self._parent._can_have_nested_devices: + m = MacrobatDRRack(self._parent, rack, self._track) + elif name.startswith('NK LEARN') and self._parent._can_have_nested_devices and self._track == self.song().master_track and not self._has_learn_rack: + m = MacrobatLearnRack(self._parent, rack, self._track) + self._has_learn_rack = True + elif name.startswith('NK MIDI'): + m = MacrobatMidiRack(self._parent, rack, name) + elif name.startswith(('NK RST', 'NK RND')): + m = MacrobatRnRRack(self._parent, rack, name, self._track) + elif name.startswith('NK SIDECHAIN'): + m = MacrobatSidechainRack(self._parent, rack, self._track) + elif name.startswith('NK SCL') and IS_LIVE_9_5: + m = MacrobatPushRack(self._parent, rack) + elif name.startswith('NK CS') and IS_LIVE_9: + m = MacrobatChainSelectorRack(self._parent, rack, self._track) + if m: + self._current_devices.append((m, rack)) + + + def remove_devices(self, dev_list): + """ Remove all device listeners """ + for d in dev_list: + if d.name_has_listener(self.setup_devices): + d.remove_name_listener(self.setup_devices) + if self._parent._can_have_nested_devices and d.can_have_chains: + if d.chains_has_listener(self.setup_devices): + d.remove_chains_listener(self.setup_devices) + for c in d.chains: + if c.devices_has_listener(self.setup_devices): + c.remove_devices_listener(self.setup_devices) + self.remove_devices(c.devices) + + + def on_selected_track_changed(self): + self.update() + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatMidiRack.py b/ClyphX/MacrobatMidiRack.py new file mode 100644 index 0000000..31d4f1f --- /dev/null +++ b/ClyphX/MacrobatMidiRack.py @@ -0,0 +1,204 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from MacrobatUserConfig import * +from consts import IS_LIVE_9 + +class MacrobatMidiRack(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Macros To Midi CCs + PCs + SysEx ' + + def __init__(self, parent, rack, name): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._macro_to_cc = [] + self._macro_to_pc = [] + self._macro_to_sysex = [] + self._sysex_list = [] + self.build_sysex_list() + self.setup_device(rack, name) + + + def disconnect(self): + self.remove_macro_listeners() + self._macro_to_cc = [] + self._macro_to_pc = [] + self._macro_to_sysex = [] + self._sysex_list = [] + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_device(self, rack, name): + """ - Rack name needs to start with 'nK MIDI' + - Default channel is 0. Can change with '[CHn]' in rack name + - Macro names needs to start with = functions: + * [CCn] = Where n is the CC# to send + * [PC] = Program Change + * SysEx_identifier = Identifier specified in SysEx List in user config """ + self.remove_macro_listeners() + channel = self.check_for_channel(name) + for p in rack.parameters: + if p.is_enabled: + name = self._parent.get_name(p.name) + if name.startswith('[CC') and not p.value_has_listener(self.do_cc): + cc_num = self.check_for_cc_num(name) + if cc_num != None: + self._macro_to_cc.append((p, cc_num, -1, rack, channel)) + p.add_value_listener(self.do_cc) + elif name.startswith('[PC]') and not p.value_has_listener(self.do_pc): + self._macro_to_pc.append((p, -1, rack, channel)) + p.add_value_listener(self.do_pc) + else: + sysex_entry = self.check_sysex_list(name) + if sysex_entry and not p.value_has_listener(self.do_sysex): + self._macro_to_sysex.append((p, sysex_entry, -1, rack)) + p.add_value_listener(self.do_sysex) + + + def do_cc(self): + """ Send out CC on macro value change """ + if self._macro_to_cc: + for p in self._macro_to_cc: + if int(p[0].value) != p[2]: + self._parent._send_midi((int(176 + p[4]), p[1], int(p[0].value))) + self._macro_to_cc[self._macro_to_cc.index(p)] = ((p[0], p[1], int(p[0].value), p[3], p[4])) + + + def do_pc(self): + """ Send out PC on macro value change """ + if self._macro_to_pc: + for p in self._macro_to_pc: + if int(p[0].value) != p[1]: + self._parent._send_midi((int(192 + p[3]), int(p[0].value))) + self._macro_to_pc[self._macro_to_pc.index(p)] = ((p[0], int(p[0].value), p[2], p[3])) + + + def do_sysex(self): + """ Send out SysEx on macro value change """ + if self._macro_to_sysex: + for p in self._macro_to_sysex: + if int(p[0].value) != p[2]: + new_string = [] + send_new_val = True + for byte in p[1][0]: + if byte == -1: + new_val = int((((p[1][2] - p[1][1]) / 127.0) * int(p[0].value)) + p[1][1]) + if int((((p[1][2] - p[1][1]) / 127.0) * p[2]) + p[1][1]) != new_val: + new_string.append(new_val) + else: + send_new_val = False + else: + new_string.append(byte) + if send_new_val: + self._parent._send_midi(tuple(new_string)) + self._macro_to_sysex[self._macro_to_sysex.index(p)] = ((p[0], p[1], int(p[0].value), p[3])) + + + def build_sysex_list(self): + """ Build SysEx list (in decimal) based on user-defined list """ + self._sysex_list = [] + if SYSEX_LIST: + for s in SYSEX_LIST: + if len(s) == 4: + bytes = s[1].split() + current_entry = [] + if bytes[0] == 'F0' and bytes[-1] == 'F7' and s[2] in range (128) and s[3] in range (128): + for byte in bytes: + if byte == 'nn': + current_entry.append(-1) + else: + if int(byte, 16) in range (248): + current_entry.append(int(byte, 16)) + self._sysex_list.append((s[0], current_entry, s[2], s[3])) + + + def check_sysex_list(self, name_string): + """ Check that SysEx list exists and identifier exists in list """ + result = None + if self._sysex_list: + for entry in self._sysex_list: + if self._parent.get_name(entry[0]) == name_string: + result = [entry[1], entry[2], entry[3]] + return result + + + def check_for_channel(self, name): + """ Check for user-specified channel in rack name """ + result = 0 + if '[CH' in name and ']' in name and not name.count('[') > 1 and not name.count(']') > 1: + try: + get_ch = int(name[name.index('[')+3:name.index(']')]) + if get_ch in range (1, 17): + result = get_ch - 1 + except: + pass + return result + + + def check_for_cc_num(self, name): + """ Check for user-specified CC# in macro name """ + result = None + if '[CC' in name and ']' in name and not name.count('[') > 1 and not name.count(']') > 1: + try: + get_cc = int(name[name.index('[')+3:name.index(']')]) + if get_cc in range (128): + result = get_cc + except: + pass + return result + + + def remove_macro_listeners(self): + """ Remove listeners """ + if self._macro_to_cc: + for p in self._macro_to_cc: + if p[3] and p[0].value_has_listener(self.do_cc): + p[0].remove_value_listener(self.do_cc) + self._macro_to_cc = [] + if self._macro_to_pc: + for p in self._macro_to_pc: + if p[2] and p[0].value_has_listener(self.do_pc): + p[0].remove_value_listener(self.do_pc) + self._macro_to_pc = [] + if self._macro_to_sysex: + for p in self._macro_to_sysex: + if p[3] and p[0].value_has_listener(self.do_sysex): + p[0].remove_value_listener(self.do_sysex) + self._macro_to_sysex = [] + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatParameterRackTemplate8.py b/ClyphX/MacrobatParameterRackTemplate8.py new file mode 100644 index 0000000..dc92bbc --- /dev/null +++ b/ClyphX/MacrobatParameterRackTemplate8.py @@ -0,0 +1,205 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +class MacrobatParameterRackTemplate(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Template for Macrobat racks that control parameters in Live 8 ' + + def __init__(self, parent, rack, track): + self._parent = parent + ControlSurfaceComponent.__init__(self) + self._register_timer_callback(self.on_timer) + self._has_timer = True + self._on_off_param = [] + self._param_macros = {} + self._update_macro = 0 + self._update_param = 0 + self._param_update_in_progress = True + self._macro_update_in_progress = True + self._parent.schedule_message(8, self.allow_macro_updates) + self._parent.schedule_message(8, self.allow_param_updates) + self._get_initial_value = False + self._track = track + self.setup_device(rack) + + + def disconnect(self): + self.remove_macro_listeners() + if self._has_timer: + self._unregister_timer_callback(self.on_timer) + self._has_timer = False + self._on_off_param = [] + self._param_macros = {} + self._track = None + self._parent = None + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_device(self, rack): + """ Remove any current listeners and set up listener for on/off (used for resetting assigned params) """ + self.remove_macro_listeners() + if not rack.parameters[0].value_has_listener(self.on_off_changed): + self._on_off_param = [rack.parameters[0], rack.parameters[0].value] + rack.parameters[0].add_value_listener(self.on_off_changed) + + + def macro_changed(self, index): + """ Called on macro changes to update param values """ + if not self._update_macro and not self._macro_update_in_progress: + if self._param_macros.has_key(index) and self._param_macros[index][0] and self._param_macros[index][1]: + scaled_value = self.scale_param_value_to_macro(self._param_macros[index][1]) + if scaled_value != self._param_macros[index][0].value: + self._update_param = index + self._param_update_in_progress = True + self._parent.schedule_message(8, self.allow_macro_updates) + + + def param_changed(self, index): + """ Called on param changes to update macros """ + if not self._update_param and not self._param_update_in_progress: + if self._param_macros.has_key(index) and self._param_macros[index][0] and self._param_macros[index][1]: + scaled_value = self.scale_macro_value_to_param(self._param_macros[index][0], self._param_macros[index][1]) + if scaled_value != self._param_macros[index][1].value: + self._update_macro = index + self._macro_update_in_progress = True + self._parent.schedule_message(8, self.allow_param_updates) + + + def on_off_changed(self): + """ On/off changed, schedule param reset """ + if self._on_off_param and self._on_off_param[0]: + if self._on_off_param[0].value != self._on_off_param[1] and self._on_off_param[0].value == 1.0: + self._parent.schedule_message(1, self.do_reset) + self._on_off_param[1] = self._on_off_param[0].value + + + def do_reset(self): + """ Reset assigned params to default """ + self._update_param = False + self._update_macro = False + self._param_update_in_progress = False + self._macro_update_in_progress = False + for k, v in self._param_macros.items(): + if v[1] and not v[1].is_quantized and v[1].name != 'Chain Selector': + v[1].value = v[1].default_value + v[0].value = self.scale_param_value_to_macro(v[1]) + + + def on_timer(self): + """ Handle updating values and getting initial values """ + if not self._get_initial_value: + if self._update_macro and not self._update_param: + if self._param_macros.has_key(self._update_macro): + if self._param_macros[self._update_macro][0] and self._param_macros[self._update_macro][1]: + self._param_macros[self._update_macro][0].value = self.scale_param_value_to_macro(self._param_macros[self._update_macro][1]) + self._update_macro = 0 + self._parent.schedule_message(8, self.allow_param_updates) + elif self._update_param and not self._update_macro: + if self._param_macros.has_key(self._update_param): + if self._param_macros[self._update_param][0] and self._param_macros[self._update_param][1]: + self._param_macros[self._update_param][1].value = self.scale_macro_value_to_param(self._param_macros[self._update_param][0], self._param_macros[self._update_param][1]) + self._update_param = 0 + self._parent.schedule_message(8, self.allow_macro_updates) + else: + for index in range(1,9): + if self._param_macros.has_key(index): + if self._param_macros[index][0] and self._param_macros[index][1]: + if self._param_macros[index][0].value != self.scale_param_value_to_macro(self._param_macros[index][1]): + self._param_macros[index][0].value = self.scale_param_value_to_macro(self._param_macros[index][1]) + self._get_initial_value = False + + + def scale_macro_value_to_param(self, macro, param): + return (((param.max - param.min) / 127.0) * macro.value) + param.min + + + def scale_param_value_to_macro(self, param): + return int(((param.value - param.min) / (param.max - param.min)) * 127.0) + + + def allow_macro_updates(self): + """ Used to prevent param change getting triggered while param update is in progress (new issue in 8.2.2) """ + if not self._update_param: + self._param_update_in_progress = False + + + def allow_param_updates(self): + """ Used to prevent macro change getting triggered while macro update is in progress (new issue in 8.2.2) """ + if not self._update_macro: + self._macro_update_in_progress = False + + + def get_drum_rack(self): + """ For use with DR racks, get drum rack to operate on as well as the params of any simplers/samplers in the rack """ + drum_rack = {} + drum_rack['devs_by_index'] = {} + drum_rack['devs_by_name'] = {} + if self._track and self._track.devices: + for d in self._track.devices: + if d.class_name == 'DrumGroupDevice': + drum_rack['rack'] = d + rack_devices_by_index = {} + rack_devices_by_name = {} + for chain_index in range (len(d.chains)): + for device in d.chains[chain_index].devices: + if device.class_name in ('OriginalSimpler', 'MultiSampler'): + current_params = {} + for p in device.parameters: + current_params[str(p.name).upper()] = p + rack_devices_by_index[str(chain_index + 1)] = current_params + rack_devices_by_name[str(device.name)] = current_params + break + drum_rack['devs_by_index'] = rack_devices_by_index + drum_rack['devs_by_name'] = rack_devices_by_name + break + return drum_rack + + + def remove_macro_listeners(self): + for index in range(1,9): + if self._param_macros.has_key(index): + m_listener = lambda index = index:self.macro_changed(index) + p_listener = lambda index = index:self.param_changed(index) + if self._param_macros[index][0] and self._param_macros[index][0].value_has_listener(m_listener): + self._param_macros[index][0].remove_value_listener(m_listener) + if self._param_macros[index][1] and self._param_macros[index][1].value_has_listener(p_listener): + self._param_macros[index][1].remove_value_listener(p_listener) + self._param_macros = {} + if self._on_off_param and self._on_off_param[0] and self._on_off_param[0].value_has_listener(self.on_off_changed): + self._on_off_param[0].remove_value_listener(self.on_off_changed) + self._on_off_param = [] + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatParameterRackTemplate9.py b/ClyphX/MacrobatParameterRackTemplate9.py new file mode 100644 index 0000000..2ca6f55 --- /dev/null +++ b/ClyphX/MacrobatParameterRackTemplate9.py @@ -0,0 +1,187 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +class MacrobatParameterRackTemplate(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Template for Macrobat racks that control parameters in Live 9 ' + + def __init__(self, parent, rack, track): + self._parent = parent + ControlSurfaceComponent.__init__(self) + self._on_off_param = [] + self._param_macros = {} + self._update_macro = 0 + self._update_param = 0 + self._track = track + self.setup_device(rack) + + + def disconnect(self): + self.remove_macro_listeners() + self._on_off_param = [] + self._param_macros = {} + self._track = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_device(self, rack): + """ Remove any current listeners and set up listener for on/off (used for resetting assigned params) """ + self.remove_macro_listeners() + if not rack.parameters[0].value_has_listener(self.on_off_changed): + self._on_off_param = [rack.parameters[0], rack.parameters[0].value] + rack.parameters[0].add_value_listener(self.on_off_changed) + + + def macro_changed(self, index): + """ Called on macro changes to update param values """ + if self._param_macros.has_key(index) and self._param_macros[index][0] and self._param_macros[index][1]: + scaled_value = self.scale_param_value_to_macro(self._param_macros[index][1]) + if scaled_value != self._param_macros[index][0].value: + self._update_param = index + self._tasks.kill() + self._tasks.clear() + self._tasks.add(self.update_param) + + + def param_changed(self, index): + """ Called on param changes to update macros """ + if self._param_macros.has_key(index) and self._param_macros[index][0] and self._param_macros[index][1]: + scaled_value = self.scale_macro_value_to_param(self._param_macros[index][0], self._param_macros[index][1]) + if scaled_value != self._param_macros[index][1].value: + self._update_macro = index + self._tasks.kill() + self._tasks.clear() + self._tasks.add(self.update_macro) + + + def update_param(self, arg=None): + """ Update param to match value of macro. """ + if self._param_macros.has_key(self._update_param): + if self._param_macros[self._update_param][0] and self._param_macros[self._update_param][1]: + self._param_macros[self._update_param][1].value = self.scale_macro_value_to_param(self._param_macros[self._update_param][0], self._param_macros[self._update_param][1]) + self._tasks.kill() + self._tasks.clear() + + + def update_macro(self, arg=None): + """ Update macro to match value of param. """ + if self._param_macros.has_key(self._update_macro): + if self._param_macros[self._update_macro][0] and self._param_macros[self._update_macro][1]: + self._param_macros[self._update_macro][0].value = self.scale_param_value_to_macro(self._param_macros[self._update_macro][1]) + self._tasks.kill() + self._tasks.clear() + + + def get_initial_value(self, arg=None): + """ Get initial values to set macros to. """ + for index in range(1,9): + if self._param_macros.has_key(index): + if self._param_macros[index][0] and self._param_macros[index][1]: + if self._param_macros[index][0].value != self.scale_param_value_to_macro(self._param_macros[index][1]): + self._param_macros[index][0].value = self.scale_param_value_to_macro(self._param_macros[index][1]) + + + def on_off_changed(self): + """ On/off changed, schedule param reset """ + if self._on_off_param and self._on_off_param[0]: + if self._on_off_param[0].value != self._on_off_param[1] and self._on_off_param[0].value == 1.0: + self._parent.schedule_message(1, self.do_reset) + self._on_off_param[1] = self._on_off_param[0].value + + + def do_reset(self): + """ Reset assigned params to default """ + self._update_param = 0 + self._update_macro = 0 + self._tasks.kill() + self._tasks.clear() + for k, v in self._param_macros.items(): + if v[1] and not v[1].is_quantized and v[1].name != 'Chain Selector': + v[1].value = v[1].default_value + v[0].value = self.scale_param_value_to_macro(v[1]) + + + def scale_macro_value_to_param(self, macro, param): + return (((param.max - param.min) / 127.0) * macro.value) + param.min + + + def scale_param_value_to_macro(self, param): + return int(((param.value - param.min) / (param.max - param.min)) * 127.0) + + + def get_drum_rack(self): + """ For use with DR racks, get drum rack to operate on as well as the params of any simplers/samplers in the rack """ + drum_rack = {} + drum_rack['devs_by_index'] = {} + drum_rack['devs_by_name'] = {} + if self._track and self._track.devices: + for d in self._track.devices: + if d.class_name == 'DrumGroupDevice': + drum_rack['rack'] = d + rack_devices_by_index = {} + rack_devices_by_name = {} + for chain_index in range (len(d.chains)): + for device in d.chains[chain_index].devices: + if device.class_name in ('OriginalSimpler', 'MultiSampler'): + current_params = {} + for p in device.parameters: + current_params[str(p.name).upper()] = p + rack_devices_by_index[str(chain_index + 1)] = current_params + rack_devices_by_name[str(device.name)] = current_params + break + drum_rack['devs_by_index'] = rack_devices_by_index + drum_rack['devs_by_name'] = rack_devices_by_name + break + return drum_rack + + + def remove_macro_listeners(self): + for index in range(1,9): + if self._param_macros.has_key(index): + m_listener = lambda index = index:self.macro_changed(index) + p_listener = lambda index = index:self.param_changed(index) + if self._param_macros[index][0] and self._param_macros[index][0].value_has_listener(m_listener): + self._param_macros[index][0].remove_value_listener(m_listener) + if self._param_macros[index][1] and self._param_macros[index][1].value_has_listener(p_listener): + self._param_macros[index][1].remove_value_listener(p_listener) + self._param_macros = {} + if self._on_off_param and self._on_off_param[0] and self._on_off_param[0].value_has_listener(self.on_off_changed): + self._on_off_param[0].remove_value_listener(self.on_off_changed) + self._on_off_param = [] + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatParameterRacks.py b/ClyphX/MacrobatParameterRacks.py new file mode 100644 index 0000000..78b7a2f --- /dev/null +++ b/ClyphX/MacrobatParameterRacks.py @@ -0,0 +1,334 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +#---This module contains Learn, Chain Mix, DR, DR Multi, Receiver and Track Racks + +from _Generic.Devices import * +from consts import * +if IS_LIVE_9: + from functools import partial + from MacrobatParameterRackTemplate9 import MacrobatParameterRackTemplate +else: + from MacrobatParameterRackTemplate8 import MacrobatParameterRackTemplate + +LAST_PARAM = {} + +class MacrobatLearnRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macro 1 to learned param ' + + def __init__(self, parent, rack, track): + self._rack = rack + #---delay adding listener to prevent issue with change on set load + if IS_LIVE_9: + parent.schedule_message(8, partial(parent.song().view.add_selected_parameter_listener, self.on_selected_parameter_changed)) + else: + parent.schedule_message(8, parent.song().view.add_selected_parameter_listener, self.on_selected_parameter_changed) + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + if self.song().view.selected_parameter_has_listener(self.on_selected_parameter_changed): + self.song().view.remove_selected_parameter_listener(self.on_selected_parameter_changed) + self._rack = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Set up macro 1 and learned param """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._rack = rack + param = self.song().view.selected_parameter + if LAST_PARAM and LAST_PARAM.has_key(0): + param = LAST_PARAM[0] + if self._rack and param: + if self._rack.parameters[1].is_enabled and param.is_enabled: + index = 1 + m_listener = lambda index = index:self.macro_changed(index) + self._rack.parameters[1].add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (self._rack.parameters[1], param) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + + def on_selected_parameter_changed(self): + """ Update rack on new param selected """ + if self.song().view.selected_parameter and self._rack and not self.song().view.selected_parameter.canonical_parent == self._rack: + LAST_PARAM[0] = self.song().view.selected_parameter + self.setup_device(self._rack) + + +class MacrobatChainMixRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macros to params of Rack chains ' + + def __init__(self, parent, rack, track): + self._rack = {} + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._rack = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Set up macros and rack chain params """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._rack = self.get_rack() + if self._rack: + param_name = self._parent.get_name(rack.name[12:].strip()) + for index in range(1,9): + chain_to_edit = {} + macro = rack.parameters[index] + param = None + if macro.is_enabled: + chain_name = self._parent.get_name(macro.name) + if self._rack.has_key(chain_name): + chain_to_edit = self._rack[chain_name] + if chain_to_edit.has_key(param_name): + param = chain_to_edit[param_name] + if param and param.is_enabled: + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (macro, param) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + + def get_rack(self): + """ Get rack to operate on as well as the mixer params of its chains """ + rack_chains = {} + if self._track and self._track.devices: + for d in self._track.devices: + if d.class_name.endswith('GroupDevice') and not d.class_name.startswith('Midi'): + for chain_index in range (len(d.chains)): + c = d.chains[chain_index] + rack_chains[str(chain_index + 1)] = {'VOL' : c.mixer_device.volume, 'PAN' : c.mixer_device.panning, 'MUTE' : c.mixer_device.chain_activator} + break + return rack_chains + + +class MacrobatDRMultiRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macros to params of multiple Simplers/Samplers ' + + def __init__(self, parent, rack, track): + self._drum_rack = {} + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._drum_rack = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Set up macros and drum rack params """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._drum_rack = self.get_drum_rack() + if self._drum_rack: + param_name = self._parent.get_name(rack.name[11:].strip()) + for index in range(1,9): + drum_to_edit = {} + macro = rack.parameters[index] + param = None + if macro.is_enabled: + drum_name = macro.name + if self._drum_rack['devs_by_index'].has_key(drum_name): + drum_to_edit = self._drum_rack['devs_by_index'][drum_name] + elif self._drum_rack['devs_by_name'].has_key(drum_name): + drum_to_edit = self._drum_rack['devs_by_name'][drum_name] + if drum_to_edit.has_key(param_name): + param = drum_to_edit[param_name] + if param and param.is_enabled: + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (macro, param) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + +class MacrobatDRRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macros to params of single Simpler/Sampler ' + + def __init__(self, parent, rack, track): + self._drum_rack = {} + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._drum_rack = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Set up macros and drum rack params """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._drum_rack = self.get_drum_rack() + if self._drum_rack: + drum_name = rack.name[5:].strip() + drum_to_edit = {} + if self._drum_rack['devs_by_index'].has_key(drum_name): + drum_to_edit = self._drum_rack['devs_by_index'][drum_name] + elif self._drum_rack['devs_by_name'].has_key(drum_name): + drum_to_edit = self._drum_rack['devs_by_name'][drum_name] + for index in range(1,9): + macro = rack.parameters[index] + param = None + if macro.is_enabled: + name = self._parent.get_name(macro.name) + if drum_to_edit.has_key(name): + param = drum_to_edit[name] + if param and param.is_enabled: + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (macro, param) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + +class MacrobatReceiverRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macros to macros of other racks ' + + def __init__(self, parent, rack, track): + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def setup_device(self, rack): + """ Set up receiver and send macros """ + MacrobatParameterRackTemplate.setup_device(self, rack) + receiver_macros = self.get_ident_macros(rack) + if receiver_macros: + self._sender_macros = [] + for t in (tuple(self.song().tracks) + tuple(self.song().return_tracks) + (self.song().master_track,)): + self.get_sender_macros(t.devices) + if self._sender_macros: + for r in receiver_macros: + index = 0 + for s in self._sender_macros: + index += 1 + if r[0] == s[0] and r[1].is_enabled and s[1].is_enabled: + r_listener = lambda index = index:self.macro_changed(index) + r[1].add_value_listener(r_listener) + s_listener = lambda index = index:self.param_changed(index) + s[1].add_value_listener(s_listener) + self._param_macros[index] = (r[1], s[1]) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + + def get_sender_macros(self, dev_list): + """ Look through all devices/chains on all tracks for sender macros """ + for d in dev_list: + name = self._parent.get_name(d.name) + if d and d.class_name.endswith('GroupDevice') and not name.startswith('NK RECEIVER'): + self._sender_macros.extend(self.get_ident_macros(d)) + if self._parent._can_have_nested_devices and d.can_have_chains: + for c in d.chains: + self.get_sender_macros(c.devices) + + + def get_ident_macros(self, rack): + """ Get send and receiver macros """ + ident_macros = [] + ident_names = [] + for macro in rack.parameters: + name = self._parent.get_name(macro.name) + if macro.original_name.startswith('Macro') and '(*' in name and '*)' in name and len(name) > 4: + if not name.count('(') > 1 and not name.count(')') > 1: + ident = name[name.index('(') + 2:name.index(')') - 1] + if ident not in ident_names: + ident_macros.append((ident, macro)) + ident_names.append(ident) + return ident_macros + + + def on_off_changed(self): + """ Receiver rack doesn't do reset """ + pass + + +class MacrobatTrackRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macros to track params ' + + def __init__(self, parent, rack, track): + self._rack = rack + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._rack = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Setup macros and track mixer params """ + MacrobatParameterRackTemplate.setup_device(self, rack) + for index in range(1,9): + macro = rack.parameters[index] + param = None + if macro.is_enabled: + name = self._parent.get_name(macro.name) + if name.startswith('SEND') and not self._track == self.song().master_track: + try: param = self._track.mixer_device.sends[ord(name[5]) - 65] + except: param = None + elif name.startswith('VOL'): + param = self._track.mixer_device.volume + elif name.startswith('PAN'): + param = self._track.mixer_device.panning + if param and param.is_enabled: + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (macro, param) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatParameterRacks9.py b/ClyphX/MacrobatParameterRacks9.py new file mode 100644 index 0000000..b18e63a --- /dev/null +++ b/ClyphX/MacrobatParameterRacks9.py @@ -0,0 +1,201 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +#---This module contains CS and DR Pad Mix Rack. + +from _Generic.Devices import * +from consts import * +from functools import partial +from MacrobatParameterRackTemplate9 import MacrobatParameterRackTemplate +from _Framework.SubjectSlot import Subject, SlotManager, subject_slot + + +class MacrobatDRPadMixRack(MacrobatParameterRackTemplate): + + __module__ = __name__ + __doc__ = ' Macros to mixer params of selected DR pad ' + + def __init__(self, parent, rack, track): + self._drum_rack = {} + self._rack = None + self._selected_chain = None + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._drum_rack = None + self._rack = None + self._selected_chain = None + MacrobatParameterRackTemplate.disconnect(self) + + + def setup_device(self, rack): + """ Set up macros and drum rack params """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._rack = rack + self._drum_rack = self.get_drum_rack() + self._selected_chain = None + self._on_sends_changed.subject = None + self._on_selected_pad_changed.subject = None + if self._drum_rack: + self._on_selected_pad_changed.subject = self._drum_rack['rack'].view + self._set_selected_chain() + if self._selected_chain: + num_sends = len(self._selected_chain.mixer_device.sends) + for index in range(1,9): + if rack.parameters[index].is_enabled: + param = None + if index == 1: + param = self._selected_chain.mixer_device.volume + elif index == 2: + param = self._selected_chain.mixer_device.panning + else: + s_index = index - 3 + if s_index < num_sends: + param = self._selected_chain.mixer_device.sends[s_index] + if param and param.is_enabled: + macro = rack.parameters[index] + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + param.add_value_listener(p_listener) + self._param_macros[index] = (macro, param) + self._tasks.add(self.get_initial_value) + + + @subject_slot('selected_drum_pad') + def _on_selected_pad_changed(self): + self.setup_device(self._rack) + + + @subject_slot('sends') + def _on_sends_changed(self): + self.setup_device(self._rack) + + + def _set_selected_chain(self): + self._selected_chain = None + self._on_sends_changed.subject = None + if self._drum_rack: + sel_pad = self._drum_rack['rack'].view.selected_drum_pad + if sel_pad and sel_pad.chains: + self._selected_chain = sel_pad.chains[0] + self._on_sends_changed.subject = self._selected_chain.mixer_device + + +class CSWrapper(Subject, SlotManager): + """ Wrapper for a chain selector that limits the max value to the number + of chains in the rack. """ + + __subject_events__ = ('value',) + + def __init__(self, cs): + super(CSWrapper, self).__init__() + self._cs = cs + self._max = 0 + self._on_cs_value_changed.subject = self._cs + + @property + def is_enabled(self): + return self._cs.is_enabled + + def _get_value(self): + return min(self._cs.value, self._max) + + def _set_value(self, value): + if value <= self._max: + self._cs.value = value + + value = property(_get_value, _set_value) + + @property + def min(self): + return self._cs.min + + def _get_max(self): + return self._max + + def _set_max(self, value): + self._max = value + + max = property(_get_max, _set_max) + + @subject_slot('value') + def _on_cs_value_changed(self): + if self._cs.value <= self._max: + self.notify_value() + + +class MacrobatChainSelectorRack(MacrobatParameterRackTemplate): + __module__ = __name__ + __doc__ = ' Macro 1 to chain selector' + + def __init__(self, parent, rack, track): + self._rack = rack + self._wrapper = None + MacrobatParameterRackTemplate.__init__(self, parent, rack, track) + + + def disconnect(self): + self._rack = None + self._wrapper = None + MacrobatParameterRackTemplate.disconnect(self) + + + def scale_macro_value_to_param(self, macro, param): + return (((param.max - param.min) / 126.0) * macro.value) + param.min + + + def setup_device(self, rack): + """ Set up macro 1 and chain selector """ + MacrobatParameterRackTemplate.setup_device(self, rack) + self._rack = rack + if self._rack: + macro = self._rack.parameters[1] + cs = self._rack.parameters[9] + if macro.is_enabled and cs.is_enabled: + self._wrapper = CSWrapper(cs) + self._wrapper.max = len(self._rack.chains) + if self._wrapper.max > 1: + self._on_chains_changed.subject = self._rack + index = 1 + m_listener = lambda index = index:self.macro_changed(index) + macro.add_value_listener(m_listener) + p_listener = lambda index = index:self.param_changed(index) + self._wrapper.add_value_listener(p_listener) + self._param_macros[index] = (macro, self._wrapper) + if IS_LIVE_9: + self._tasks.add(self.get_initial_value) + else: + self._get_initial_value = True + + + @subject_slot('chains') + def _on_chains_changed(self): + if self._wrapper and self._rack: + self._wrapper.max = len(self._rack.chains) + self.param_changed(0) + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatPushRack.py b/ClyphX/MacrobatPushRack.py new file mode 100644 index 0000000..42c6cfb --- /dev/null +++ b/ClyphX/MacrobatPushRack.py @@ -0,0 +1,142 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from __future__ import with_statement +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from consts import NOTE_NAMES + +class MacrobatPushRack(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Sets up Macros 1 and 2 to control Push root note and scale type respectively. ' + + def __init__(self, parent, rack): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._rack = rack + self._script = None + self._push_ins = self._connect_to_push() + self.setup_device() + + + def disconnect(self): + self.remove_macro_listeners() + self._rack = None + self._script = None + self._push_ins = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + self._push_ins = self._connect_to_push() + + + def setup_device(self): + """ Rack names needs to start with nK SCL and Push needs to be selected as a control surface. """ + self._push_ins = self._connect_to_push() + self.remove_macro_listeners() + if self._rack: + if self._rack.parameters[1].is_enabled: + self._rack.parameters[1].add_value_listener(self._on_macro_one_value) + if self._rack.parameters[2].is_enabled: + self._rack.parameters[2].add_value_listener(self._on_macro_two_value) + self._parent.schedule_message(1, self._update_rack_name) + + + def _connect_to_push(self): + """ Attempt to connect to Push. """ + if self._parent: + for script in self._parent._control_surfaces(): + script_name = script.__class__.__name__ + if script_name == 'Push': + self._script = script + for c in script.components: + comp_name = c.__class__.__name__ + if comp_name == 'InstrumentComponent': + return c + return None + + + def _on_macro_one_value(self): + """ Set Push root note and update rack name. """ + self._tasks.add(self._handle_root_note_change) + + + def _handle_root_note_change(self, args=None): + if self._push_ins: + new_root = self.scale_macro_value_to_param(self._rack.parameters[1], 12) + if new_root != self._push_ins._note_layout.root_note: + self._push_ins._note_layout.root_note = new_root + self._update_scale_display_and_buttons() + self._parent.schedule_message(1, self._update_rack_name) + + + def _on_macro_two_value(self): + """ Set Push scale type and update rack name. """ + self._tasks.add(self._handle_scale_type_change) + + + def _handle_scale_type_change(self, args=None): + if self._push_ins: + mode_list = self._script._scales_enabler._mode_map['enabled'].mode._component._scale_list.scrollable_list + current_type = self._script._scales_enabler._mode_map['enabled'].mode._component._scale_list.scrollable_list.selected_item_index + new_type = self.scale_macro_value_to_param(self._rack.parameters[2], len(mode_list.items)) + if new_type != current_type: + mode_list._set_selected_item_index(new_type) + self._update_scale_display_and_buttons() + self._parent.schedule_message(1, self._update_rack_name) + + + def _update_scale_display_and_buttons(self): + """ Updates Push's scale display and buttons to indicate current settings. """ + self._script._scales_enabler._mode_map['enabled'].mode._component._update_data_sources() + self._script._scales_enabler._mode_map['enabled'].mode._component.update() + + + def _update_rack_name(self): + """ Update rack name to reflect selected root note and scale type. """ + if self._rack and self._push_ins: + self._rack.name = 'nK SCL - ' + str(NOTE_NAMES[self._push_ins._note_layout.root_note]) + ' - ' + str(self._push_ins._note_layout.scale.name) + + + def scale_macro_value_to_param(self, macro, hi_value): + """ Scale the value of the macro to the Push parameter being controlled. """ + return int((hi_value / 128.0) * macro.value) + + + def remove_macro_listeners(self): + """ Remove listeners """ + if self._rack: + if self._rack.parameters[1].value_has_listener(self._on_macro_one_value): + self._rack.parameters[1].remove_value_listener(self._on_macro_one_value) + if self._rack.parameters[2].value_has_listener(self._on_macro_two_value): + self._rack.parameters[2].remove_value_listener(self._on_macro_two_value) + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/MacrobatRnRRack.py b/ClyphX/MacrobatRnRRack.py new file mode 100644 index 0000000..333a173 --- /dev/null +++ b/ClyphX/MacrobatRnRRack.py @@ -0,0 +1,175 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from consts import * +if IS_LIVE_9: + from functools import partial +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +class MacrobatRnRRack(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Rack on/off to Device Randomize/Reset ' + + def __init__(self, parent, rack, name, track): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._on_off_param = [] + self._devices_to_operate_on = [] + self._track = track + self.setup_device(rack, name) + + + def disconnect(self): + self.remove_on_off_listeners() + self._on_off_param = [] + self._devices_to_operate_on = [] + self._track = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_device(self, rack, name): + """ - Will not reset/randomize any other Macrobat racks except for MIDI Rack + - Allowable rack names are: ['NK RST', 'NK RST ALL', 'NK RND', 'NK RND ALL'] """ + self.remove_on_off_listeners() + if rack: + for p in rack.parameters: + if p.name == 'Device On' and p.is_enabled: + if not p.value_has_listener(self.on_off_changed): + self._on_off_param = [p, name] + if IS_LIVE_9: + self._parent.schedule_message(5, partial(p.add_value_listener, self.on_off_changed))#---use this to get around device on/off switches getting turned on upon set load + else: + self._parent.schedule_message(5, p.add_value_listener, self.on_off_changed)#---use this to get around device on/off switches getting turned on upon set load + break + + + def on_off_changed(self): + """ On/off changed, perform assigned function """ + if self._on_off_param and self._on_off_param[0]: + mess_type = None + is_reset = False + if self._on_off_param[1].startswith('NK RND ALL'): + mess_type = 'all' + elif self._on_off_param[1].startswith('NK RND'): + mess_type = 'next' + elif self._on_off_param[1].startswith('NK RST ALL'): + mess_type = 'all' + is_reset = True + elif self._on_off_param[1].startswith('NK RST'): + mess_type = 'next' + is_reset = True + if mess_type: + if IS_LIVE_9: + if is_reset: + self._parent.schedule_message(1, partial(self.do_device_reset, mess_type)) + else: + self._parent.schedule_message(1, partial(self.do_device_randomize, mess_type)) + else: + if is_reset: + self._parent.schedule_message(1, self.do_device_reset, mess_type) + else: + self._parent.schedule_message(1, self.do_device_randomize, mess_type) + + + def do_device_randomize(self, params): + """ Randomize device params """ + if self._on_off_param and self._on_off_param[0]: + self._devices_to_operate_on = [] + self.get_devices_to_operate_on(self._on_off_param[0].canonical_parent.canonical_parent.devices, params) + if self._devices_to_operate_on: + for d in self._devices_to_operate_on: + for p in d.parameters: + if p.is_enabled and not p.is_quantized and p.name != 'Chain Selector': + p.value = (((p.max - p.min) / 127) * Live.Application.get_random_int(0, 128)) + p.min + + + def do_device_reset(self, params): + """ Reset device params """ + if self._on_off_param and self._on_off_param[0]: + self._devices_to_operate_on = [] + self.get_devices_to_operate_on(self._on_off_param[0].canonical_parent.canonical_parent.devices, params) + if self._devices_to_operate_on: + for d in self._devices_to_operate_on: + for p in d.parameters: + if p and p.is_enabled and not p.is_quantized and p.name != 'Chain Selector': + p.value = p.default_value + + + def get_devices_to_operate_on(self, dev_list, devices_to_get): + """ Get next device on track, all devices on track or all devices on chain """ + if devices_to_get == 'all': + if self._parent._can_have_nested_devices and type(self._on_off_param[0].canonical_parent.canonical_parent) == Live.Chain.Chain: + dev_list = self._on_off_param[0].canonical_parent.canonical_parent.devices + for d in dev_list: + name = self._parent.get_name(d.name) + if d and not name.startswith(('NK RND', 'NK RST', 'NK CHAIN MIX', 'NK DR', 'NK LEARN', 'NK RECEIVER', 'NK TRACK', 'NK SIDECHAIN')): + self._devices_to_operate_on.append(d) + if self._parent._can_have_nested_devices and d.can_have_chains: + for c in d.chains: + self.get_devices_to_operate_on(c.devices, 'all') + else: + self.get_next_device(self._on_off_param[0].canonical_parent, dev_list) + + + def get_next_device(self, rnr_rack, dev_list, store_next = False): + """ Get the next non-RnR device on the track or in the chain """ + for d in dev_list: + if d and not store_next: + if d == rnr_rack: + store_next = True + elif d and store_next: + if not self._devices_to_operate_on or (self._parent._can_have_nested_devices and type(d.canonical_parent) == Live.Chain.Chain): + name = self._parent.get_name(d.name) + if d and not name.startswith(('NK RND', 'NK RST', 'NK CHAIN MIX', 'NK DR', 'NK LEARN', 'NK RECEIVER', 'NK TRACK', 'NK SIDECHAIN')): + self._devices_to_operate_on.append(d) + if self._parent._can_have_nested_devices and type(rnr_rack.canonical_parent) == Live.Chain.Chain: + return + if self._parent._can_have_nested_devices and d.can_have_chains: + for c in d.chains: + self.get_next_device(rnr_rack, c.devices, True) + else: + return + + + def remove_on_off_listeners(self): + """ Remove listeners """ + if self._on_off_param and self._on_off_param[0] and self._on_off_param[0].value_has_listener(self.on_off_changed): + self._on_off_param[0].remove_value_listener(self.on_off_changed) + self._on_off_param = [] + + +# local variables: +# tab-width: 4 + \ No newline at end of file diff --git a/ClyphX/MacrobatSidechainRack.py b/ClyphX/MacrobatSidechainRack.py new file mode 100644 index 0000000..008987e --- /dev/null +++ b/ClyphX/MacrobatSidechainRack.py @@ -0,0 +1,134 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from consts import * +if IS_LIVE_9: + from functools import partial +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent + +class MacrobatSidechainRack(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Macros sidechain to track output ' + + def __init__(self, parent, rack, track): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._last_meter_left_val = -1 + self._last_meter_right_val = -1 + self._last_midi_meter_val = -1 + self._track = track + self._rack = rack + self.setup_device() + + + def disconnect(self): + if self._track: + if self._track.has_audio_output and self._track.output_meter_left_has_listener(self.audio_left_changed): + self._track.remove_output_meter_left_listener(self.audio_left_changed) + if self._track.has_audio_output and self._track.output_meter_right_has_listener(self.audio_right_changed): + self._track.remove_output_meter_right_listener(self.audio_right_changed) + if self._track.has_midi_output and self._track.output_meter_level_has_listener(self.midi_changed): + self._track.remove_output_meter_level_listener(self.midi_changed) + self._track = None + self._rack = None + self._parent = None + if IS_LIVE_9: + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def setup_device(self): + """ - Rack name needs to start with 'nK Sidechain' + - Macro names needs to start with '[SC]' + - Macro names can be changed dynamically with this rack + - Dev On/Off turns sidechain on/off + - IMPORTANT NOTE: This will hose undo history since each macro movement is undoable """ + if self._track.has_audio_output: + if not self._track.output_meter_left_has_listener(self.audio_left_changed): + self._track.add_output_meter_left_listener(self.audio_left_changed) + if not self._track.output_meter_right_has_listener(self.audio_right_changed): + self._track.add_output_meter_right_listener(self.audio_right_changed) + if self._track.has_midi_output and not self._track.output_meter_level_has_listener(self.midi_changed): + self._track.add_output_meter_level_listener(self.midi_changed) + + + def audio_left_changed(self): + """ Audio left changed, update macro (1 tick delay)""" + val = int(self._track.output_meter_left * 127) + if val != self._last_meter_left_val: + self._last_meter_left_val = val + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.update_macros, val)) + else: + self._parent.schedule_message(1, self.update_macros, val) + + + def audio_right_changed(self): + """ Audio right changed, update macro (1 tick delay) """ + val = int(self._track.output_meter_right * 127) + if val != self._last_meter_right_val: + self._last_meter_right_val = val + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.update_macros, val)) + else: + self._parent.schedule_message(1, self.update_macros, val) + + + def midi_changed(self): + """ Midi output changed, update macro (1 tick delay) """ + val = int(self._track.output_meter_level * 127) + if val != self._last_midi_meter_val: + self._last_midi_meter_val = val + if IS_LIVE_9: + self._parent.schedule_message(1, partial(self.update_macros, val)) + else: + self._parent.schedule_message(1, self.update_macros, val) + + + def update_macros(self, val): + """ Update macros based on track output as long as rack is on """ + if self._rack: + for p in self._rack.parameters: + name = self._parent.get_name(p.name) + if name.startswith('DEVICE'): + if p.value == 0.0: + return() + if name.startswith('[SC]') and p.is_enabled: + if (self._track.has_audio_output and self._track.output_meter_right == 0.0 and self._track.output_meter_left == 0.0) or self._track.output_meter_level == 0.0: + val = 0.0 + p.value = val + if self._track.has_midi_output: + self._parent.schedule_message(4, self.midi_changed) + +# local variables: +# tab-width: 4 + \ No newline at end of file diff --git a/ClyphX/MacrobatUserConfig.py b/ClyphX/MacrobatUserConfig.py new file mode 100644 index 0000000..a06ffbd --- /dev/null +++ b/ClyphX/MacrobatUserConfig.py @@ -0,0 +1,83 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +# ***************************** [SETTINGS NOTES] ************************** + +# Please DO NOT change any of the spacing in this file. + +# Please DO NOT change the name of this file or its file extension. When done +# making your changes to the [SETTINGS] below, just save the file. + +# After saving this file, you will need to close/restart Live for your changes +# to take effect. + +# For Windows 7/Vista users, depending on how your privileges are set up, you may +# not be able to save changes you make to this file. You may receive an error +# such as Access Denied when trying to save. If this occurs, you will need to +# drag this file onto your desktop, then make your changes and save. When +# done, drag the file back into the ClyphX folder. + + + +# ******************************* [SETTINGS] ******************************* + +# Below you can define a list of SysEx messages that can be sent from macros. +# The entries in the list below are just examples and can be removed. + +SYSEX_LIST = [#<------Do NOT remove this. + +('Motif Arp I/O', 'F0 43 10 6F 40 70 15 nn F7', 0, 1), +('Motif Arp Type', 'F0 43 10 6F 40 70 14 nn F7', 0, 127), +('Motif Mode', 'F0 43 10 6F 0A 00 01 nn F7', 0, 3), +('Motif EQ Lo', 'F0 43 10 6F 40 70 31 nn F7', 0, 127), +('Motif EQ LoMid', 'F0 43 10 6F 40 70 32 nn F7', 0, 127), +('Motif EQ HiMid', 'F0 43 10 6F 40 70 33 nn F7', 0, 127), +('Motif EQ Hi', 'F0 43 10 6F 40 70 34 nn F7', 0, 127) + +]#<------Do NOT remove this. + +# Entry Format: +# ('Identifier', 'SysEx String', Min Value, Max Value) + +# Identifier: +# A name to identify the SysEx string with. + +# SysEx String: +# The SysEx string (in hexadecimal) to send. +# This must start with F0 and end with F7. +# All other values in the string should be within the range of 00 - 7F. +# nn represents the variable byte in the SysEx string, the one the macro will control. + +# Min Value: +# The lowest value (in decimal) of the variable byte. Should be in the range of 0 - 127. + +# Max Value: +# The highest value (in decimal) of the variable byte. Should be in the range of 0 - 127. + +# Notes: +# The Min and Max Value do not not have quotes around them. +# Except for the last entry in the list, every entry in the list should have a comma following it. + +# local variables: +# tab-width: 4 diff --git a/ClyphX/PushEmuHandler.py b/ClyphX/PushEmuHandler.py new file mode 100644 index 0000000..606a704 --- /dev/null +++ b/ClyphX/PushEmuHandler.py @@ -0,0 +1,61 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from Push.handshake_component import HandshakeComponent + + +class MockHandshakeTask(object): + """ Mock objects used to replace Push's handshake task. """ + + def kill(self): + pass + + def restart(self): + pass + + def is_running(self): + return False + + +class MockHandshake(HandshakeComponent): + """ Extended HandshakeComponent that overrides methods to allow for + emulation. """ + + def __init__(self, *a, **k): + super(MockHandshake, self).__init__(*a, **k) + self._on_identity_value.subject = None + self._on_dongle_value.subject = None + + def _start_handshake(self): + self._handshake_succeeded = None + self._do_succeed() + + def firmware_version(self): + return 1.16 + + def has_version_requirements(self, x, y): + return True + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/Push_APC_Combiner.py b/ClyphX/Push_APC_Combiner.py new file mode 100644 index 0000000..9ed89c8 --- /dev/null +++ b/ClyphX/Push_APC_Combiner.py @@ -0,0 +1,116 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +from _Framework.ControlSurfaceComponent import ControlSurfaceComponent +from _Framework.SessionComponent import SessionComponent +from consts import IS_LIVE_9_5 +SessionRingComponent = None +if IS_LIVE_9_5: + from ableton.v2.control_surface.components.session_ring import SessionRingComponent + +class Push_APC_Combiner(ControlSurfaceComponent): + __module__ = __name__ + __doc__ = ' Class that syncs Push and APC40 session grids for proper emulation. ' + + def __init__(self, parent): + ControlSurfaceComponent.__init__(self) + self._parent = parent + self._push = None + self._push_session = None + self._apc = None + self._apc_session = None + + + def disconnect(self): + self._remove_listeners() + self._push = None + self._push_session = None + self._apc = None + self._apc_session = None + self._parent = None + ControlSurfaceComponent.disconnect(self) + + + def on_enabled_changed(self): + pass + + + def update(self): + pass + + + def set_up_scripts(self, scripts): + """ Remove current listeners, get Push/APC scripts, set up listeners and also set feedback delay on APC+Push encoders. """ + self._remove_listeners() + for script in scripts: + script_name = script.__class__.__name__ + if script_name == 'Push': + self._push = script + self._push_session = self._get_session_component(script) + if self._push_session: + for c in script.controls: + if c.__class__.__name__ == 'TouchEncoderElement': + c.set_feedback_delay(-1) + elif script_name == 'APC40': + self._apc = script + self._apc_session = self._get_session_component(script) + if self._apc_session: + for c in script.controls: + if c.__class__.__name__ == 'RingedEncoderElement': + c.set_feedback_delay(-1) + self._apc_session.add_offset_listener(self._on_apc_offset_changed) + self._on_apc_offset_changed() + + + def _get_session_component(self, script): + """ Get the session component for the given script. """ + comp = None + if script and script._components: + for c in script.components: + if isinstance (c, SessionComponent): + comp = c + break + if comp is None: + if hasattr(script, '_session_ring'): + return script._session_ring + return comp + + + def _on_apc_offset_changed(self): + """ Update Push offset on APC offset changed and suppress its highlight. """ + if self._push_session and self._apc_session: + self._push_session.set_offsets(self._apc_session.track_offset(), self._apc_session.scene_offset()) + if IS_LIVE_9_5: + self._push_session._session_ring.hide_highlight() + else: + self._push._set_session_highlight(-1, -1, -1, -1, False) + + + def _remove_listeners(self): + if self._apc_session and self._apc_session.offset_has_listener(self._on_apc_offset_changed): + self._apc_session.remove_offset_listener(self._on_apc_offset_changed) + + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/UserSettings.txt b/ClyphX/UserSettings.txt new file mode 100644 index 0000000..0233def --- /dev/null +++ b/ClyphX/UserSettings.txt @@ -0,0 +1,286 @@ +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray + + + +***************************** [SETTINGS NOTES] ************************** + + +# Please DO NOT change any of the spacing in this file. + +# Please DO NOT change the name of this file or its file extension. When done +# making your changes to the settings below, just save the file. + +# After saving this file, you will need to close/restart Live for your changes +# to take effect. + +# For Windows 7/Vista users, depending on how your privileges are set up, you may +# not be able to save changes you make to this file. You may receive an error +# such as Access Denied when trying to save. If this occurs, you will need to +# drag this file onto your desktop, then make your changes and save. When +# done, drag the file back into the ClyphX folder. + + + +***************************** [SNAPSHOT SETTINGS] ************************** + + +INCLUDE_NESTED_DEVICES_IN_SNAPSHOTS = On +# Setting: +# Off or On + +# Description: +# Determines whether or not nested Devices (Devices inside of Racks) will be +# included in Snapshots. This setting only applies if you're using Live 8.2.2 +# or later. + + + +SNAPSHOT_PARAMETER_LIMIT = 500 +# Setting: +# Any whole number + +# Description: +# Determines the number of parameters that Snapshots will be allowed to store. +# If the limit is exceeded, you'll receive an error message. + +# Note: +# Please use caution when adjusting this setting. Recalling Snapshots that have +# stored 1000 or more parameters can cause delays and momentary freezing of Live's GUI. + + + +***************************** [EXTRA PREFS] ************************** + + +PROCESS_XCLIPS_IF_TRACK_MUTED = True +# Setting: +# True or False + +# Description: +# Determines whether or not X-Clips on a Muted Track will be processed. + + + +STARTUP_ACTIONS = Off +# Setting: +# Off or Action(s) to perform on set load. + +# Description: +# Performs an Action List when a set is loaded. + + + +NAVIGATION_HIGHLIGHT = On +# Setting: +# On or Off + +# Description: +# Displays a highlight around the selected Clip. + + + +EXCLUSIVE_ARM_ON_SELECT = Off +# Setting: +# On or Off + +# Description: +# Upon selecting Tracks, if the selected Track can be armed, it will be armed +# and any other armed Tracks will be disarmed. + +# Note: +# This function may produce undesirable results if Select On Launch is on +# in your Live preferences. + + + +EXCLUSIVE_SHOW_GROUP_ON_SELECT = Off +# Setting: +# On or Off + +# Description: +# Upon selecting Tracks, if the selected Track is a Group Track, it will be +# unfolded and any other Group Tracks will be folded. + +# Note: +# This function may produce undesirable results if Select On Launch is on +# in your Live preferences. + + + +CLIP_RECORD_LENGTH_SET_BY_GLOBAL_QUANTIZATION = Off +# Setting: +# On or Off + +# Description: +# This changes the behavior of launching the selected Clip Slot so that +# (under the Conditions listed below) you can easily record a new Clip with a length +# defined by the Global Quantization value. This will do nothing if the Conditions +# below aren't met. + +# Conditions: +# - Selected Track is armed +# - Selected Clip Slot has no Clip on it +# - Global Quantization is not set to None + + + +DEFAULT_INSERTED_MIDI_CLIP_LENGTH = 0 +# Setting: +# 0 (for Off) or 2 - 16 (for number of bars to use) + +# Description: +# Upon inserting a blank MIDI Clip onto the selected Clip Slot, the Clip's length +# will be set to the length (in bars) specified in the setting above. + +# Note: +# This will not change the default zoom setting of the Clip, so you'll only see the +# Clip's first bar. You'll need to zoom out to see the rest of the Clip. + + + +***************************** [CSLINKER] ************************** + + +# CSLinker allows you to link the grid selectors (colored borders around clips) of +# two Control Surfaces either horizontally or vertically. + +# The Control Surface script names to use are as shown in Live's Control Surface chooser. +# If a Control Surface's name has a space in it (like MXT Live), you should use an underscore +# in place of the space (like MXT_Live). + +# Note, Push and Push2 cannot be used for matched linking. Additionally, horizontal linking +# with Push2 may produce undesirable results due to Push2's inclusion of Chain mixer settings +# along side normal Track mixer settings. + + +CSLINKER_MATCHED_LINK = False +# Setting: +# True for matched link or False for horizonal/vertical link. + +# Description: +# Determines whether the two Control Surfaces should have a matched link meaning that +# they will lay on top of each other. This setting overrides CSLINKER_HORIZONTAL_LINK. +# and CSLINKER_MULTI_AXIS_LINK. + + + +CSLINKER_HORIZONTAL_LINK = True +# Setting: +# True for horizontal link or False for vertical link. + +# Description: +# Determines whether the two Control Surfaces should be horizontal or vertically linked. + + + +CSLINKER_MULTI_AXIS_LINK = False +# Setting: +# True for multi-axis link. + +# Determines whether movement should be sychronized in all directions (vertical and horizontal) or +# purely on a single axis determined by the CS_HORIZONTAL_LINK setting. + + + +CSLINKER_SCRIPT_1_NAME = None +# Setting: +# None (to turn linking off) or the name of a Control Surface. + +# Description: +# The first Control Surface script that should be linked. + + + +CSLINKER_SCRIPT_2_NAME = None +# Setting: +# None (to turn linking off) or the name of a Control Surface. + +# Description: +# The second Control Surface script that should be linked. + + + +******************************* [USER CONTROLS] ******************************* + + +# Below, you can specify a list of MIDI Controls to use as X-Controls. + +# The entry format is: CONTROL_NAME = MSG_TYPE, MIDI_CHANNEL, NOTE_OR_CC_NUM, ON_ACTION_LIST + +# CONTROL_NAME = A unique one-word name (Identifier) for the control. See [IDENTIFIER NOTE] below. +# MSG_TYPE = The word Note or CC. +# MIDI_CHANNEL = The MIDI Channel number in the range of 1 - 16 +# NOTE_OR_CC = The Note or CC number in the range of 0 - 127. +# ON_ACTION_LIST = The Action List to perform when the control sends an on message. + +# Example: MY_BTN1 = NOTE, 1, 10, 1/MUTE ; 2/MUTE + + +# You can optionally specify an Action List to perform when the control sends an off message. +# To do this, place a comma after the On Action List and then specify the Off Action List. + +# Example: MY_BTN2 = CC, 16, 117, 1/MUTE ; 2/MUTE, 3/PLAY > + + +# To perform the same Action List for the On Action List and Off Action List, just specify an asterick +# for the Off Action List. + +# Example: MY_BTN3 = NOTE, 5, 0, 1/MUTE, * + + +# Below is an example list that has been commented out (the # at the beginning of +# a line makes the line a comment). Your list should be formatted in the same way +# except without the # at the beginning of each line. + + +# btn_1 = note, 1, 0, mute , * + +# btn_2 = note, 1, 1, solo + +# btn_3 = cc, 9, 2, arm + +# btn_4 = cc, 9, 3, mon + +#>>>>>>>>DELETE THIS ENTIRE LINE AND START YOUR LIST HERE<<<<<<<<# + + +******************************* [USER VARIABLES] ******************************* + + +# Below, you can specify a list of Variables to use in your Action Lists. + +# The entry format is: VARIABLE_NAME = VALUE + +# VARIABLE_NAME = A unique one-word name (Identifier) for the variable. See [IDENTIFIER NOTE] below. +# VALUE = Any value or word or combination of words. See the User Variables section of the manual for +# more info on this. + +# The Variables listed below are just examples and can be removed. + + +ex_var1 = 10 +ex_var2 = mute + + +******************************* [IDENTIFIER NOTE] ******************************* + + +# Identifiers and Variable names should not contain characters other than letters, numbers and underscores. +# Also, Variable names and their values are not case-sensitive. diff --git a/ClyphX/__init__.py b/ClyphX/__init__.py new file mode 100644 index 0000000..4bad43f --- /dev/null +++ b/ClyphX/__init__.py @@ -0,0 +1,33 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +import Live +from ClyphX import ClyphX + + +def create_instance(c_instance): + return ClyphX(c_instance) + +# local variables: +# tab-width: 4 \ No newline at end of file diff --git a/ClyphX/consts.py b/ClyphX/consts.py new file mode 100644 index 0000000..e76c0a3 --- /dev/null +++ b/ClyphX/consts.py @@ -0,0 +1,235 @@ +""" +# Copyright (C) 2013-2017 Stray +# +# 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 library 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 +# +# For questions regarding this module contact +# Stray +""" + +# emacs-mode: -*- python-*- +# -*- coding: utf-8 -*- + +#--- NOTE: Action names and their corresponding values can't contain a '/' or '-' within the first four chars like this 'EX/ONE', but 'EXMP/ONE' is okay. + +import Live + +app = Live.Application.get_application() +IS_LIVE_10 = app.get_major_version() == 10 +IS_LIVE_9 = app.get_major_version() >= 9 +IS_LIVE_9_1 = IS_LIVE_10 or (IS_LIVE_9 and app.get_minor_version() >= 1) +IS_LIVE_9_5 = IS_LIVE_10 or (IS_LIVE_9 and app.get_minor_version() >= 5) + +GLOBAL_ACTIONS = { + 'ASN' : 'do_variable_assignment', + 'ADDAUDIO' : 'create_audio_track', + 'ADDMIDI' : 'create_midi_track', + 'INSAUDIO' : 'insert_and_configure_audio_track', + 'INSMIDI' : 'insert_and_configure_midi_track', + 'ADDRETURN' : 'create_return_track', + 'ADDSCENE' : 'create_scene', + 'DELSCENE' : 'delete_scene', + 'DUPESCENE' : 'duplicate_scene', + 'LOADDEV' : 'load_device', + 'LOADM4L' : 'load_m4l', + 'SWAP' : 'swap_device_preset', + 'SREC' : 'set_session_record', + 'SRECFIX' : 'trigger_session_record', + 'SATM' : 'set_session_automation_record', + 'B2A' : 'set_back_to_arrange', + 'RPT' : 'set_note_repeat', + 'SWING' : 'adjust_swing', + 'BPM' : 'adjust_tempo', + 'DEVFIRST' : 'move_to_first_device', + 'DEVLAST' : 'move_to_last_device', + 'DEVLEFT' : 'move_to_prev_device', + 'DEVRIGHT' : 'move_to_next_device', + 'FOCBRWSR' : 'focus_browser', + 'FOCDETAIL' : 'focus_detail', + 'FOCMAIN' : 'focus_main', + 'GQ' : 'adjust_global_quantize', + 'GRV' : 'adjust_groove', + 'HZOOM' : 'adjust_horizontal_zoom', + 'VZOOM' : 'adjust_vertical_zoom', + 'UP' : 'move_up', + 'DOWN' : 'move_down', + 'LEFT' : 'move_left', + 'RIGHT' : 'move_right', + 'LOOP' : 'do_loop_action', + 'LOC' : 'do_locator_action', + 'LOCLOOP' : 'do_locator_loop_action', + 'METRO' : 'set_metronome', + 'MIDI': 'send_midi_message', + 'OVER' : 'set_overdub', + 'PIN' : 'set_punch_in', + 'POUT' : 'set_punch_out', + 'REC' : 'set_record', + 'REDO' : 'set_redo', + 'UNDO' : 'set_undo', + 'RESTART' : 'restart_transport', + 'RQ' : 'adjust_record_quantize', + 'RTRIG': 'retrigger_recording_clips', + 'SIG' : 'adjust_time_signature', + 'SCENE' : 'set_scene', + 'SHOWCLIP' : 'show_clip_view', + 'SHOWDEV' : 'show_track_view', + 'SHOWDETAIL' : 'show_detail_view', + 'TGLBRWSR': 'toggle_browser', + 'TGLDETAIL': 'toggle_detail_view', + 'TGLMAIN': 'toggle_main_view', + 'STOPALL' : 'set_stop_all', + 'SETCONT' : 'set_continue_playback', + 'SETLOC' : 'set_locator', + 'SETSTOP' : 'set_stop_transport', + 'SETFOLD' : 'set_fold_all', + 'SETJUMP' : 'set_jump_all', + 'TAPBPM' : 'set_tap_tempo', + 'UNARM' : 'set_unarm_all', + 'UNMUTE' : 'set_unmute_all', + 'UNSOLO' : 'set_unsolo_all', + 'MAKE_DEV_DOC': 'make_instant_mapping_docs'} + +TRACK_ACTIONS = { + 'ARM' : 'set_arm', + 'MUTE' : 'set_mute', + 'SOLO' : 'set_solo', + 'MON' : 'set_monitor', + 'XFADE' : 'set_xfade', + 'SEL' : 'set_selection', + 'ADDCLIP' : 'create_clip', + 'DEL' : 'delete_track', + 'DELDEV' : 'delete_device', + 'DUPE' : 'duplicate_track', + 'FOLD' : 'set_fold', + 'PLAY' : 'set_play', + 'PLAYL' : 'set_play_w_legato', + 'PLAYQ' : 'set_play_w_force_qntz', + 'PLAYLQ' : 'set_play_w_force_qntz_and_legato', + 'STOP' : 'set_stop', + 'JUMP' : 'set_jump', + 'VOL' : 'adjust_volume', + 'PAN' : 'adjust_pan', + 'SEND' : 'adjust_sends', + 'CUE' : 'adjust_preview_volume', + 'XFADER' : 'adjust_crossfader', + 'IN' : 'adjust_input_routing', + 'INSUB' : 'adjust_input_sub_routing', + 'OUT' : 'adjust_output_routing', + 'OUTSUB' : 'adjust_output_sub_routing', + 'NAME' : 'set_name', + 'RENAMEALL' : 'rename_all_clips'} + +CLIP_ACTIONS = { + 'CENT' : 'adjust_detune', + 'SEMI' : 'adjust_transpose', + 'GAIN' : 'adjust_gain', + 'CUE' : 'adjust_cue_point', + 'END' : 'adjust_end', + 'START' : 'adjust_start', + 'GRID' : 'adjust_grid_quantization', + 'TGRID' : 'set_triplet_grid', + 'ENVINS' : 'insert_envelope', + 'ENVCLR' : 'clear_envelope', + 'ENVCAP' : 'capture_to_envelope', + 'ENVSHOW' : 'show_envelope', + 'ENVHIDE' : 'hide_envelopes', + 'QNTZ' : 'quantize', + 'EXTEND' : 'duplicate_clip_content', + 'DEL' : 'delete_clip', + 'DUPE' : 'duplicate_clip', + 'CHOP' : 'chop_clip', + 'SPLIT' : 'split_clip', + 'WARPMODE' : 'adjust_warp_mode', + 'LOOP' : 'do_clip_loop_action', + 'SIG' : 'adjust_time_signature', + 'WARP' : 'set_warp', + 'NAME' : 'set_clip_name'} + +DEVICE_ACTIONS = { + 'CSEL' : 'adjust_selected_chain', + 'CS' : 'adjust_chain_selector', + 'RESET' : 'reset_params', + 'RND' : 'randomize_params', + 'SEL' : 'select_device', + 'SET' : 'set_all_params', + 'P1' : 'adjust_best_of_bank_param', + 'P2' : 'adjust_best_of_bank_param', + 'P3' : 'adjust_best_of_bank_param', + 'P4' : 'adjust_best_of_bank_param', + 'P5' : 'adjust_best_of_bank_param', + 'P6' : 'adjust_best_of_bank_param', + 'P7' : 'adjust_best_of_bank_param', + 'P8' : 'adjust_best_of_bank_param', + 'B1' : 'adjust_banked_param', + 'B2' : 'adjust_banked_param', + 'B3' : 'adjust_banked_param', + 'B4' : 'adjust_banked_param', + 'B5' : 'adjust_banked_param', + 'B6' : 'adjust_banked_param', + 'B7' : 'adjust_banked_param', + 'B8' : 'adjust_banked_param'} + +if IS_LIVE_9: + DR_ACTIONS = { + 'SCROLL' : 'scroll_selector', + 'UNMUTE' : 'unmute_all', + 'UNSOLO' : 'unsolo_all' + } + +LOOPER_ACTIONS = { + 'LOOPER' : 'set_looper_on_off', + 'REV' : 'set_looper_rev', + 'OVER' : 'set_looper_state', + 'PLAY' : 'set_looper_state', + 'REC' : 'set_looper_state', + 'STOP': 'set_looper_state'} + +KEYWORDS = {'ON' : 1, 'OFF' : 0} + +NOTE_NAMES = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'] +OCTAVE_NAMES = ['-2', '-1', '0', '1', '2', '3', '4', '5', '6', '7', '8'] + +GQ_STATES = {'NONE' : 0, '8 BARS' : 1, '4 BARS' : 2, '2 BARS' : 3, '1 BAR' : 4, '1/2' : 5, '1/2T' : 6, '1/4' : 7, '1/4T' : 8, '1/8' : 9, '1/8T' : 10, '1/16' : 11, '1/16T' : 12, '1/32' : 13} +RQ_STATES = {'NONE' : 0, '1/4' : 1, '1/8' : 2, '1/8T' : 3, '1/8 + 1/8T' : 4, '1/16' : 5, '1/16T' : 6, '1/16 + 1/16T' : 7, '1/32' : 8} + +XFADE_STATES = {'A': 0, 'OFF' : 1, 'B' : 2} +MON_STATES = {'IN' : 0, 'AUTO' : 1, 'OFF' : 2} + +LOOPER_STATES = {'STOP': 0.0, 'REC' : 1.0, 'PLAY' : 2.0, 'OVER' : 3.0} + +if IS_LIVE_9: + R_QNTZ_STATES = {'1/4' : Live.Song.RecordingQuantization.rec_q_quarter, '1/8' : Live.Song.RecordingQuantization.rec_q_eight, + '1/8T' : Live.Song.RecordingQuantization.rec_q_eight_triplet, '1/8 + 1/8T' : Live.Song.RecordingQuantization.rec_q_eight_eight_triplet, '1/16' : Live.Song.RecordingQuantization.rec_q_sixtenth, + '1/16T' : Live.Song.RecordingQuantization.rec_q_sixtenth_triplet, '1/16 + 1/16T' : Live.Song.RecordingQuantization.rec_q_sixtenth_sixtenth_triplet, + '1/32' : Live.Song.RecordingQuantization.rec_q_thirtysecond} + + CLIP_GRID_STATES = {'OFF' : Live.Clip.GridQuantization.no_grid, '8 BARS' : Live.Clip.GridQuantization.g_8_bars, + '4 BARS' : Live.Clip.GridQuantization.g_4_bars, '2 BARS' : Live.Clip.GridQuantization.g_2_bars, + '1 BAR' : Live.Clip.GridQuantization.g_bar, '1/2' : Live.Clip.GridQuantization.g_half, + '1/4' : Live.Clip.GridQuantization.g_quarter, '1/8' : Live.Clip.GridQuantization.g_eighth, + '1/16' : Live.Clip.GridQuantization.g_sixteenth, '1/32' : Live.Clip.GridQuantization.g_thirtysecond} + + REPEAT_STATES = {'OFF' : 1.0, '1/4' : 1.0, '1/4T' : 0.666666666667, '1/8' : 0.5, '1/8T' : 0.333333333333, '1/16' : 0.25, '1/16T' : 0.166666666667, '1/32' : 0.125, '1/32T' : 0.0833333333333} + + WARP_MODES = {'BEATS': 0, 'TONES': 1, 'TEXTURE': 2, 'RE-PITCH': 3, 'COMPLEX': 4, 'COMPLEX PRO': 6} + + AUDIO_DEVS = {u'SIMPLE DELAY': u'Simple Delay', u'OVERDRIVE': u'Overdrive', u'LOOPER': u'Looper', u'AUTO FILTER': u'Auto Filter', u'EXTERNAL AUDIO EFFECT': u'External Audio Effect', u'SATURATOR': u'Saturator', u'PHASER': u'Phaser', u'VINYL DISTORTION': u'Vinyl Distortion', u'DYNAMIC TUBE': u'Dynamic Tube', u'BEAT REPEAT': u'Beat Repeat', u'MULTIBAND DYNAMICS': u'Multiband Dynamics', u'CABINET': u'Cabinet', u'AUDIO EFFECT RACK': u'Audio Effect Rack', u'FLANGER': u'Flanger', u'GATE': u'Gate', u'REVERB': u'Reverb', u'GRAIN DELAY': u'Grain Delay', u'REDUX': u'Redux', u'PING PONG DELAY': u'Ping Pong Delay', u'SPECTRUM': u'Spectrum', u'COMPRESSOR': u'Compressor', u'VOCODER': u'Vocoder', u'AMP': u'Amp', u'GLUE COMPRESSOR': u'Glue Compressor', u'EROSION': u'Erosion', u'EQ THREE': u'EQ Three', u'EQ EIGHT': u'EQ Eight', u'RESONATORS': u'Resonators', u'FREQUENCY SHIFTER': u'Frequency Shifter', u'AUTO PAN': u'Auto Pan', u'CHORUS': u'Chorus', u'LIMITER': u'Limiter', u'CORPUS': u'Corpus', u'FILTER DELAY': u'Filter Delay', u'UTILITY': u'Utility'} + + INS_DEVS = {u'TENSION': u'Tension', u'EXTERNAL INSTRUMENT': u'External Instrument', u'ELECTRIC': u'Electric', u'INSTRUMENT RACK': u'Instrument Rack', u'DRUM RACK': u'Drum Rack', u'COLLISION': u'Collision', u'IMPULSE': u'Impulse', u'SAMPLER': u'Sampler', u'OPERATOR': u'Operator', u'ANALOG': u'Analog', u'SIMPLER': u'Simpler'} + + MIDI_DEVS = {u'NOTE LENGTH': u'Note Length', u'CHORD': u'Chord', u'RANDOM': u'Random', u'MIDI EFFECT RACK': u'MIDI Effect Rack', u'SCALE': u'Scale', u'PITCH': u'Pitch', u'ARPEGGIATOR': u'Arpeggiator', u'VELOCITY': u'Velocity'} + +# local variables: +# tab-width: 4 diff --git a/Live Instant Mapping Info.html b/Live Instant Mapping Info.html new file mode 100644 index 0000000..33f37d0 --- /dev/null +++ b/Live Instant Mapping Info.html @@ -0,0 +1 @@ +

Live Instant Mapping Info for Live v9.7.0

Brought to you by nativeKONTROL.

The following document covers the parameter banks accessible via Live's Instant Mapping feature for each built in device. This info also applies to controlling device parameters via ClyphX's Device Actions.

NOTE: The order of parameter banks is sometimes changed by Ableton. If you find the information in this document to be incorrect, you can recreate it with ClyphX by triggering an action named MAKE_DEV_DOC. That will create a new version of this file in your user/home directory.

Device Index

Amp
Analog
Arpeggiator
Audio Effect Rack
AutoFilter
AutoPan
BeatRepeat
Cabinet
Chord
Chorus
Collision
Compressor
Corpus
Drum Rack
Dynamic Tube
EQ Eight
EQ Three
Electric
Erosion
FilterDelay
Flanger
FrequencyShifter
Gate
GlueCompressor
GrainDelay
Impulse
Instrument Rack
Looper
MIDI Effect Rack
MultibandDynamics
Note Length
Operator
Overdrive
Phaser
PingPongDelay
Pitch
Random
Redux
Resonator
Reverb
Sampler
Saturator
Scale
Simple Delay
Simpler
Tension
Utility
Velocity
Vinyl Distortion
Vocoder

Amp

Best Of Banks
P1: Amp Type
P2: Bass
P3: Middle
P4: Treble
P5: Presence
P6: Gain
P7: Volume
P8: Dry/Wet

B1: Global
P1: Amp Type
P2: Bass
P3: Middle
P4: Treble
P5: Presence
P6: Gain
P7: Volume
P8: Dry/Wet

B2: Dual Mono
P1: Dual Mono


Back to Device Index

Analog

Best Of Banks
P1: F1 Freq
P2: F1 Resonance
P3: OSC1 Shape
P4: OSC1 Octave
P5: OSC2 Shape
P6: OSC2 Octave
P7: OSC2 Detune
P8: Volume

B1: Oscillators
P1: OSC1 Level
P2: OSC1 Octave
P3: OSC1 Semi
P4: OSC1 Shape
P5: OSC2 Level
P6: OSC2 Octave
P7: OSC2 Semi
P8: OSC2 Shape

B2: Filters
P1: OSC1 Balance
P2: F1 Freq
P3: F1 Resonance
P4: F1 Type
P5: OSC2 Balance
P6: F2 Freq
P7: F2 Resonance
P8: F2 Type

B3: Filter Envelopes
P1: FEG1 Attack
P2: FEG1 Decay
P3: FEG1 Sustain
P4: FEG1 Rel
P5: FEG2 Attack
P6: FEG2 Decay
P7: FEG2 Sustain
P8: FEG2 Rel

B4: Filter Modulation
P1: F1 On/Off
P2: F1 Freq < LFO
P3: F1 Freq < Env
P4: F1 Res < LFO
P5: F2 On/Off
P6: F2 Freq < LFO
P7: F2 Freq < Env
P8: F2 Res < LFO

B5: Volume Envelopes
P1: AEG1 Attack
P2: AEG1 Decay
P3: AEG1 Sustain
P4: AEG1 Rel
P5: AEG2 Attack
P6: AEG2 Decay
P7: AEG2 Sustain
P8: AEG2 Rel

B6: Mix
P1: AMP1 Level
P2: AMP1 Pan
P3: LFO1 Shape
P4: LFO1 Speed
P5: AMP2 Level
P6: AMP2 Pan
P7: LFO2 Shape
P8: LFO2 Speed

B7: Output
P1: Volume
P2: Noise On/Off
P3: Noise Level
P4: Noise Color
P5: Unison On/Off
P6: Unison Detune
P7: Vib On/Off
P8: Vib Amount


Back to Device Index

Arpeggiator

Best Of Banks
P1: Synced Rate
P2: Free Rate
P3: Transp. Steps
P4: Transp. Dist.
P5: Gate
P6: Tranpose Key
P7: Velocity Decay
P8: Velocity Target

B1: Style
P1: Style
P2: Groove
P3: Offset
P4: Synced Rate
P5: Retrigger Mode
P6: Ret. Interval
P7: Repeats
P8: Gate

B2: Pitch/Velocity
P1: Tranpose Mode
P2: Tranpose Key
P3: Transp. Steps
P4: Transp. Dist.
P5: Velocity Decay
P6: Velocity Target
P7: Velocity On
P8: Vel. Retrigger


Back to Device Index

Audio Effect Rack

Best Of Banks
P1: Macro 1
P2: Macro 2
P3: Macro 3
P4: Macro 4
P5: Macro 5
P6: Macro 6
P7: Macro 7
P8: Macro 8


Back to Device Index

AutoFilter

Best Of Banks
P1: Frequency
P2: Resonance
P3: Filter Type
P4: Env. Modulation
P5: LFO Amount
P6: LFO Waveform
P7: LFO Frequency
P8: LFO Phase

B1: Filter
P1: Frequency
P2: Resonance
P3: Env. Attack
P4: Env. Release
P5: Env. Modulation
P6: LFO Amount
P7: LFO Frequency
P8: LFO Phase

B2: Filter Extra
P1: Filter Type
P2: LFO Quantize On
P3: LFO Quantize Rate
P4: LFO Stereo Mode
P5: LFO Spin
P6: LFO Sync
P7: LFO Sync Rate
P8: LFO Offset

B3: Side Chain
P6: Ext. In On
P7: Ext. In Mix
P8: Ext. In Gain


Back to Device Index

AutoPan

Best Of Banks
P1: Frequency
P2: Phase
P3: Shape
P4: Waveform
P5: Sync Rate
P6: Offset
P7: Width (Random)
P8: Amount


Back to Device Index

BeatRepeat

Best Of Banks
P1: Grid
P2: Interval
P3: Offset
P4: Gate
P5: Pitch
P6: Pitch Decay
P7: Variation
P8: Chance

B1: Repeat Rate
P1: Interval
P2: Offset
P3: Grid
P4: Variation
P5: Filter Freq
P6: Filter Width
P7: Volume
P8: Decay

B2: Gate/Pitch
P1: Chance
P2: Gate
P3: Pitch
P4: Pitch Decay
P5: Filter Freq
P6: Filter Width
P7: Volume
P8: Decay


Back to Device Index

Cabinet

Best Of Banks
P1: Cabinet Type
P2: Microphone Position
P3: Microphone Type
P4: Dual Mono
P8: Dry/Wet


Back to Device Index

Chord

Best Of Banks
P1: Shift1
P2: Shift2
P3: Shift3
P4: Shift4
P5: Shift5
P6: Velocity5
P7: Shift6
P8: Velocity6

B1: Shift
P1: Shift1
P2: Shift2
P3: Shift3
P4: Shift4
P5: Shift5
P6: Shift6

B2: Shift %
P1: Velocity1
P2: Velocity2
P3: Velocity3
P4: Velocity4
P5: Velocity5
P6: Velocity6


Back to Device Index

Chorus

Best Of Banks
P1: LFO Amount
P2: LFO Rate
P3: Delay 1 Time
P4: Delay 1 HiPass
P5: Delay 2 Time
P6: Delay 2 Mode
P7: Feedback
P8: Dry/Wet


Back to Device Index

Collision

Best Of Banks
P1: Res 1 Brightness
P2: Res 1 Type
P3: Mallet Stiffness
P4: Mallet Noise Amount
P5: Res 1 Inharmonics
P6: Res 1 Decay
P7: Res 1 Tune
P8: Volume

B1: Mallet
P1: Mallet On/Off
P2: Mallet Volume
P3: Mallet Noise Amount
P4: Mallet Stiffness
P5: Mallet Noise Color

B2: Noise
P1: Noise Volume
P2: Noise Filter Type
P3: Noise Filter Freq
P4: Noise Filter Q
P5: Noise Attack
P6: Noise Decay
P7: Noise Sustain
P8: Noise Release

B3: Resonator 1, Set A
P1: Res 1 Decay
P2: Res 1 Material
P3: Res 1 Type
P4: Res 1 Quality
P5: Res 1 Tune
P6: Res 1 Fine Tune
P7: Res 1 Pitch Env.
P8: Res 1 Pitch Env. Time

B4: Resonator 1, Set B
P1: Res 1 Listening L
P2: Res 1 Listening R
P3: Res 1 Hit
P4: Res 1 Brightness
P5: Res 1 Inharmonics
P6: Res 1 Radius
P7: Res 1 Opening
P8: Res 1 Ratio

B5: Resonator 2, Set A
P1: Res 2 Decay
P2: Res 2 Material
P3: Res 2 Type
P4: Res 2 Quality
P5: Res 2 Tune
P6: Res 2 Fine Tune
P7: Res 2 Pitch Env.
P8: Res 2 Pitch Env. Time

B6: Resonator 2, Set B
P1: Res 2 Listening L
P2: Res 2 Listening R
P3: Res 2 Hit
P4: Res 2 Brightness
P5: Res 2 Inharmonics
P6: Res 2 Radius
P7: Res 2 Opening
P8: Res 2 Ratio


Back to Device Index

Compressor

Best Of Banks
P1: Threshold
P2: Ratio
P3: Attack
P4: Release
P5: Model
P6: Knee
P7: Dry/Wet
P8: Output Gain

B1: Compression
P1: Threshold
P2: Ratio
P3: Attack
P4: Release
P5: Auto Release On/Off
P6: Env Mode
P7: Knee
P8: Model

B2: Output
P1: Threshold
P2: Expansion Ratio
P3: LookAhead
P4: Side Listen
P5: Ext. In Gain
P6: Makeup
P7: Dry/Wet
P8: Output Gain

B3: Side Chain
P1: EQ On
P2: EQ Mode
P3: EQ Freq
P4: EQ Q
P5: EQ Gain
P6: Ext. In On
P7: Ext. In Mix
P8: Ext. In Gain


Back to Device Index

Corpus

Best Of Banks
P1: Brightness
P2: Resonance Type
P3: Material
P4: Inharmonics
P5: Decay
P6: Ratio
P7: Tune
P8: Dry Wet

B1: Amount
P1: Decay
P2: Material
P3: Mid Freq
P4: Width
P5: Bleed
P6: Resonance Type
P7: Gain
P8: Dry Wet

B2: Body
P1: Listening L
P2: Listening R
P3: Hit
P4: Brightness
P5: Inharmonics
P6: Radius
P7: Opening
P8: Ratio

B3: Tune
P1: Resonance Type
P2: Tune
P3: Transpose
P4: Fine
P5: Spread
P6: Resonator Quality
P7: Note Off
P8: Off Decay


Back to Device Index

Drum Rack

Best Of Banks
P1: Macro 1
P2: Macro 2
P3: Macro 3
P4: Macro 4
P5: Macro 5
P6: Macro 6
P7: Macro 7
P8: Macro 8


Back to Device Index

Dynamic Tube

Best Of Banks
P1: Drive
P2: Bias
P3: Envelope
P4: Tone
P5: Attack
P6: Release
P7: Output
P8: Dry/Wet


Back to Device Index

EQ Eight

Best Of Banks
P1: 1 Frequency A
P2: 1 Gain A
P3: 2 Frequency A
P4: 2 Gain A
P5: 3 Frequency A
P6: 3 Gain A
P7: 4 Frequency A
P8: 4 Gain A

B1: Band On/Off
P1: 1 Filter On A
P2: 2 Filter On A
P3: 3 Filter On A
P4: 4 Filter On A
P5: 5 Filter On A
P6: 6 Filter On A
P7: 7 Filter On A
P8: 8 Filter On A

B2: Frequency
P1: 1 Frequency A
P2: 2 Frequency A
P3: 3 Frequency A
P4: 4 Frequency A
P5: 5 Frequency A
P6: 6 Frequency A
P7: 7 Frequency A
P8: 8 Frequency A

B3: Gain
P1: 1 Gain A
P2: 2 Gain A
P3: 3 Gain A
P4: 4 Gain A
P5: 5 Gain A
P6: 6 Gain A
P7: 7 Gain A
P8: 8 Gain A

B4: Resonance
P1: 1 Resonance A
P2: 2 Resonance A
P3: 3 Resonance A
P4: 4 Resonance A
P5: 5 Resonance A
P6: 6 Resonance A
P7: 7 Resonance A
P8: 8 Resonance A

B5: Filter Type
P1: 1 Filter Type A
P2: 2 Filter Type A
P3: 3 Filter Type A
P4: 4 Filter Type A
P5: 5 Filter Type A
P6: 6 Filter Type A
P7: 7 Filter Type A
P8: 8 Filter Type A

B6: Output
P1: Adaptive Q
P7: Scale
P8: Output Gain

B7: EQs 3-5
P1: 3 Gain A
P2: 3 Frequency A
P3: 3 Resonance A
P4: 4 Gain A
P5: 4 Frequency A
P6: 4 Resonance A
P7: 5 Gain A
P8: 5 Frequency A


Back to Device Index

EQ Three

Best Of Banks
P1: GainLo
P2: GainMid
P3: GainHi
P4: FreqLo
P5: LowOn
P6: MidOn
P7: HighOn
P8: FreqHi


Back to Device Index

Electric

Best Of Banks
P1: M Stiffness
P2: M Force
P3: Noise Amount
P4: F Tine Vol
P5: F Tone Vol
P6: F Release
P7: P Symmetry
P8: Volume

B1: Mallet and Tine
P1: M Stiffness
P2: M Force
P3: Noise Pitch
P4: Noise Decay
P5: Noise Amount
P6: F Tine Color
P7: F Tine Decay
P8: F Tine Vol

B2: Tone and Damper
P1: F Tone Decay
P2: F Tone Vol
P3: F Release
P4: Damp Tone
P5: Damp Balance
P6: Damp Amount

B3: Pickup
P1: P Symmetry
P2: P Distance
P3: P Amp In
P4: P Amp Out
P5: Pickup Model

B4: Modulation
P1: M Stiff < Vel
P2: M Stiff < Key
P3: M Force < Vel
P4: M Force < Key
P5: Noise < Key
P6: F Tine < Key
P7: P Amp < Key

B5: Global
P1: Volume
P2: Voices
P3: Semitone
P4: Detune
P5: KB Stretch
P6: PB Range


Back to Device Index

Erosion

Best Of Banks
P1: Frequency
P2: Width
P3: Mode
P4: Amount


Back to Device Index

FilterDelay

Best Of Banks
P1: 2 Filter Freq
P2: 2 Filter Width
P3: 2 Beat Delay
P4: 2 Feedback
P5: 1 Volume
P6: 3 Volume
P7: 2 Volume
P8: Dry

B1: Input L Filter
P1: 1 Filter Freq
P2: 1 Filter Width
P3: 1 Beat Delay
P4: 1 Beat Swing
P5: 1 Feedback
P6: 1 Pan
P7: 1 Volume
P8: Dry

B2: Input L+R Filter
P1: 2 Filter Freq
P2: 2 Filter Width
P3: 2 Beat Delay
P4: 2 Beat Swing
P5: 2 Feedback
P6: 2 Pan
P7: 2 Volume
P8: Dry

B3: Input R Filter
P1: 3 Filter Freq
P2: 3 Filter Width
P3: 3 Beat Delay
P4: 3 Beat Swing
P5: 3 Feedback
P6: 3 Pan
P7: 3 Volume
P8: Dry


Back to Device Index

Flanger

Best Of Banks
P1: Hi Pass
P2: Delay Time
P3: Frequency
P4: Sync Rate
P5: LFO Amount
P6: Env. Modulation
P7: Feedback
P8: Dry/Wet

B1: Frequency Controls
P1: Hi Pass
P2: Dry/Wet
P3: Delay Time
P4: Feedback
P5: Env. Modulation
P6: Env. Attack
P7: Env. Release

B2: LFO / S&H
P1: LFO Amount
P2: Frequency
P3: LFO Phase
P4: Sync
P5: LFO Offset
P6: Sync Rate
P7: LFO Width (Random)
P8: LFO Waveform


Back to Device Index

FrequencyShifter

Best Of Banks
P1: Coarse
P2: Fine
P3: Mode
P4: Ring Mod Frequency
P5: Drive On/Off
P6: Drive
P7: Wide
P8: Dry/Wet


Back to Device Index

Gate

Best Of Banks
P1: Threshold
P2: Return
P3: FlipMode
P4: LookAhead
P5: Attack
P6: Hold
P7: Release
P8: Floor

B1: Gate
P1: Threshold
P2: Return
P3: FlipMode
P4: LookAhead
P5: Attack
P6: Hold
P7: Release
P8: Floor

B2: Side Chain
P1: EQ On
P2: EQ Mode
P3: EQ Freq
P4: EQ Q
P5: EQ Gain
P6: Ext. In On
P7: Ext. In Mix
P8: Ext. In Gain


Back to Device Index

GlueCompressor

Best Of Banks
P1: Threshold
P2: Ratio
P3: Attack
P4: Release
P5: Peak Clip In
P6: Range
P7: Makeup
P8: Dry/Wet

B1: Compression
P1: Threshold
P2: Ratio
P3: Attack
P4: Release
P5: Peak Clip In
P6: Range
P7: Dry/Wet
P8: Makeup

B2: Side Chain
P1: EQ On
P2: EQ Mode
P3: EQ Freq
P4: EQ Q
P5: EQ Gain
P6: Ext. In On
P7: Ext. In Mix
P8: Ext. In Gain


Back to Device Index

GrainDelay

Best Of Banks
P1: Frequency
P2: Pitch
P3: Time Delay
P4: Beat Swing
P5: Random
P6: Spray
P7: Feedback
P8: DryWet


Back to Device Index

Impulse

Best Of Banks
P1: Global Time
P2: Global Transpose
P3: 1 Transpose
P4: 2 Transpose
P5: 3 Transpose
P6: 4 Transpose
P7: 5 Transpose
P8: 6 Transpose

B1: Pad 1
P1: 1 Start
P2: 1 Transpose
P3: 1 Stretch Factor
P4: 1 Saturator Drive
P5: 1 Filter Freq
P6: 1 Filter Res
P7: 1 Pan
P8: 1 Volume

B2: Pad 2
P1: 2 Start
P2: 2 Transpose
P3: 2 Stretch Factor
P4: 2 Saturator Drive
P5: 2 Filter Freq
P6: 2 Filter Res
P7: 2 Pan
P8: 2 Volume

B3: Pad 3
P1: 3 Start
P2: 3 Transpose
P3: 3 Stretch Factor
P4: 3 Saturator Drive
P5: 3 Filter Freq
P6: 3 Filter Res
P7: 3 Pan
P8: 3 Volume

B4: Pad 4
P1: 4 Start
P2: 4 Transpose
P3: 4 Stretch Factor
P4: 4 Saturator Drive
P5: 4 Filter Freq
P6: 4 Filter Res
P7: 4 Pan
P8: 4 Volume

B5: Pad 5
P1: 5 Start
P2: 5 Transpose
P3: 5 Stretch Factor
P4: 5 Saturator Drive
P5: 5 Filter Freq
P6: 5 Filter Res
P7: 5 Pan
P8: 5 Volume

B6: Pad 6
P1: 6 Start
P2: 6 Transpose
P3: 6 Stretch Factor
P4: 6 Saturator Drive
P5: 6 Filter Freq
P6: 6 Filter Res
P7: 6 Pan
P8: 6 Volume

B7: Pad 7
P1: 7 Start
P2: 7 Transpose
P3: 7 Stretch Factor
P4: 7 Saturator Drive
P5: 7 Filter Freq
P6: 7 Filter Res
P7: 7 Pan
P8: 7 Volume

B8: Pad 8
P1: 8 Start
P2: 8 Transpose
P3: 8 Stretch Factor
P4: 8 Saturator Drive
P5: 8 Filter Freq
P6: 8 Filter Res
P7: 8 Pan
P8: 8 Volume


Back to Device Index

Instrument Rack

Best Of Banks
P1: Macro 1
P2: Macro 2
P3: Macro 3
P4: Macro 4
P5: Macro 5
P6: Macro 6
P7: Macro 7
P8: Macro 8


Back to Device Index

Looper

Best Of Banks
P1: State
P2: Speed
P3: Reverse
P4: Quantization
P5: Monitor
P6: Song Control
P7: Tempo Control
P8: Feedback


Back to Device Index

MIDI Effect Rack

Best Of Banks
P1: Macro 1
P2: Macro 2
P3: Macro 3
P4: Macro 4
P5: Macro 5
P6: Macro 6
P7: Macro 7
P8: Macro 8


Back to Device Index

MultibandDynamics

Best Of Banks
P1: Above Threshold (Low)
P2: Above Ratio (Low)
P3: Above Threshold (Mid)
P4: Above Ratio (Mid)
P5: Above Threshold (High)
P6: Above Ratio (High)
P7: Master Output
P8: Amount

B1: Global
P1: Master Output
P2: Amount
P3: Time Scaling
P4: Soft Knee On/Off
P5: Peak/RMS Mode
P6: Band Activator (High)
P7: Band Activator (Mid)
P8: Band Activator (Low)

B2: Low Band
P1: Input Gain (Low)
P2: Below Threshold (Low)
P3: Below Ratio (Low)
P4: Above Threshold (Low)
P5: Above Ratio (Low)
P6: Attack Time (Low)
P7: Release Time (Low)
P8: Output Gain (Low)

B3: Mid Band
P1: Input Gain (Mid)
P2: Below Threshold (Mid)
P3: Below Ratio (Mid)
P4: Above Threshold (Mid)
P5: Above Ratio (Mid)
P6: Attack Time (Mid)
P7: Release Time (Mid)
P8: Output Gain (Mid)

B4: High Band
P1: Input Gain (High)
P2: Below Threshold (High)
P3: Below Ratio (High)
P4: Above Threshold (High)
P5: Above Ratio (High)
P6: Attack Time (High)
P7: Release Time (High)
P8: Output Gain (High)

B5: Split Frequencies
P1: Low-Mid Crossover
P2: Mid-High Crossover

B6: Side Chain
P6: Ext. In On
P7: Ext. In Mix
P8: Ext. In Gain


Back to Device Index

Note Length

Best Of Banks
P1: Sync On
P2: Time Length
P3: Synced Length
P4: Gate
P5: On/Off-Balance
P6: Decay Time
P7: Decay Key Scale


Back to Device Index

Operator

Best Of Banks
P1: Filter Freq
P2: Filter Res
P3: A Coarse
P4: A Fine
P5: B Coarse
P6: B Fine
P7: Osc-B Level
P8: Volume

B1: Oscillator A
P1: Ae Attack
P2: Ae Decay
P3: Ae Sustain
P4: Ae Release
P5: A Coarse
P6: A Fine
P7: Osc-A Lev < Vel
P8: Osc-A Level

B2: Oscillator B
P1: Be Attack
P2: Be Decay
P3: Be Sustain
P4: Be Release
P5: B Coarse
P6: B Fine
P7: Osc-B Lev < Vel
P8: Osc-B Level

B3: Oscillator C
P1: Ce Attack
P2: Ce Decay
P3: Ce Sustain
P4: Ce Release
P5: C Coarse
P6: C Fine
P7: Osc-C Lev < Vel
P8: Osc-C Level

B4: Oscillator D
P1: De Attack
P2: De Decay
P3: De Sustain
P4: De Release
P5: D Coarse
P6: D Fine
P7: Osc-D Lev < Vel
P8: Osc-D Level

B5: LFO
P1: Le Attack
P2: Le Decay
P3: Le Sustain
P4: Le Release
P5: LFO Rate
P6: LFO Amt
P7: LFO Type
P8: LFO R < K

B6: Filter
P1: Fe Attack
P2: Fe Decay
P3: Fe Sustain
P4: Fe Release
P5: Filter Freq
P6: Filter Res
P7: Fe R < Vel
P8: Fe Amount

B7: Pitch Modulation
P1: Pe Attack
P2: Pe Decay
P3: Pe Sustain
P4: Pe Release
P5: Pe Init
P6: Glide Time
P7: Pe Amount
P8: Spread

B8: Routing
P1: Time < Key
P2: Panorama
P3: Pan < Key
P4: Pan < Rnd
P5: Algorithm
P6: Time
P7: Tone
P8: Volume


Back to Device Index

Overdrive

Best Of Banks
P1: Filter Freq
P2: Filter Width
P3: Drive
P4: Tone
P5: Preserve Dynamics
P8: Dry/Wet


Back to Device Index

Phaser

Best Of Banks
P1: Frequency
P2: Feedback
P3: Poles
P4: Env. Modulation
P5: Color
P6: LFO Amount
P7: LFO Frequency
P8: Dry/Wet

B1: Frequency Controls
P1: Poles
P2: Color
P3: Dry/Wet
P4: Frequency
P5: Env. Modulation
P6: Env. Attack
P7: Env. Release
P8: Feedback

B2: LFO / S&H
P1: LFO Amount
P2: LFO Frequency
P3: LFO Phase
P4: LFO Sync
P5: LFO Offset
P6: LFO Sync Rate
P7: LFO Spin
P8: LFO Waveform


Back to Device Index

PingPongDelay

Best Of Banks
P1: Filter Freq
P2: Filter Width
P3: Time Delay
P4: Beat Delay
P5: Beat Swing
P6: Delay Mode
P7: Feedback
P8: Dry/Wet


Back to Device Index

Pitch

Best Of Banks
P1: Pitch
P2: Range
P3: Lowest


Back to Device Index

Random

Best Of Banks
P1: Chance
P2: Choices
P3: Scale
P4: Sign


Back to Device Index

Redux

Best Of Banks
P1: Bit Depth
P2: Sample Mode
P3: Sample Hard
P4: Sample Soft
P5: Bit On


Back to Device Index

Resonator

Best Of Banks
P1: Decay
P2: I Note
P3: II Pitch
P4: III Pitch
P5: IV Pitch
P6: V Pitch
P7: Global Gain
P8: Dry/Wet

B1: General / Mode I
P1: Frequency
P2: Width
P3: Global Gain
P4: Dry/Wet
P5: Decay
P6: I Note
P7: Color
P8: I Gain

B2: Modes II-IV
P1: II Gain
P2: III Gain
P3: IV Gain
P4: V Gain
P5: II Pitch
P6: III Pitch
P7: IV Pitch
P8: V Pitch


Back to Device Index

Reverb

Best Of Banks
P1: DecayTime
P2: Room Size
P3: PreDelay
P4: In Filter Freq
P5: ER Level
P6: Diffuse Level
P7: Stereo Image
P8: Dry/Wet

B1: Reflections
P1: In Filter Freq
P2: In Filter Width
P3: PreDelay
P4: ER Spin On
P5: ER Spin Rate
P6: ER Spin Amount
P7: ER Shape
P8: DecayTime

B2: Diffusion Network
P1: HiShelf Freq
P2: LowShelf Freq
P3: Chorus Rate
P4: Density
P5: HiShelf Gain
P6: LowShelf Gain
P7: Chorus Amount
P8: Scale

B3: Global
P1: DecayTime
P2: Freeze On
P3: Room Size
P4: Stereo Image
P5: ER Level
P6: Diffuse Level
P7: Dry/Wet
P8: Quality


Back to Device Index

Sampler

Best Of Banks
P1: Filter Freq
P2: Filter Res
P3: Fe < Env
P4: Fe Decay
P5: Ve Attack
P6: Ve Release
P7: Transpose
P8: Volume

B1: Volume
P1: Volume
P2: Ve Attack
P3: Ve Decay
P4: Ve Sustain
P5: Ve Release
P6: Vol < Vel
P7: Ve R < Vel
P8: Time

B2: Filter
P1: Filter Type
P2: Filter Morph
P3: Filter Freq
P4: Filter Res
P5: Filt < Vel
P6: Filt < Key
P7: Fe < Env
P8: Shaper Amt

B3: Filter Envelope
P1: Fe Attack
P2: Fe Decay
P3: Fe Sustain
P4: Fe Release
P5: Fe End
P6: Fe Mode
P7: Fe Loop
P8: Fe Retrig

B4: LFO 1
P1: L 1 Wave
P2: L 1 Sync
P3: L 1 Sync Rate
P4: L 1 Rate
P5: Vol < LFO
P6: Filt < LFO
P7: Pan < LFO
P8: Pitch < LFO

B5: LFO 2
P1: L 2 Wave
P2: L 2 Sync
P3: L 2 Sync Rate
P4: L 2 Rate
P5: L 2 R < Key
P6: L 2 St Mode
P7: L 2 Spin
P8: L 2 Phase

B6: LFO 3
P1: L 3 Wave
P2: L 3 Sync
P3: L 3 Sync Rate
P4: L 3 Rate
P5: L 3 R < Key
P6: L 3 St Mode
P7: L 3 Spin
P8: L 3 Phase

B7: Oscillator
P1: O Mode
P2: O Volume
P3: O Coarse
P4: O Fine
P5: Oe Attack
P6: Oe Decay
P7: Oe Sustain
P8: Oe Release

B8: Pitch
P1: Transpose
P2: Spread
P3: Pe < Env
P4: Pe Attack
P5: Pe Peak
P6: Pe Decay
P7: Pe Sustain
P8: Pe Release


Back to Device Index

Saturator

Best Of Banks
P1: Drive
P2: Type
P3: Base
P4: Frequency
P5: Width
P6: Depth
P7: Output
P8: Dry/Wet

B1: General Controls
P1: Drive
P2: Base
P3: Frequency
P4: Width
P5: Depth
P6: Output
P7: Dry/Wet
P8: Type

B2: Waveshaper Controls
P1: WS Drive
P2: WS Lin
P3: WS Curve
P4: WS Damp
P5: WS Depth
P6: WS Period
P7: Dry/Wet


Back to Device Index

Scale

Best Of Banks
P1: Base
P2: Transpose
P3: Range
P4: Lowest


Back to Device Index

Simple Delay

Best Of Banks
P1: L Beat Delay
P2: L Beat Swing
P3: L Time Delay
P4: R Beat Delay
P5: R Beat Swing
P6: R Time Delay
P7: Feedback
P8: Dry/Wet


Back to Device Index

Simpler

Best Of Banks
P1: Filter Freq
P2: Filter Res
P3: S Start
P4: S Length
P5: Ve Attack
P6: Ve Release
P7: Transpose
P8: Volume

B1: Amplitude
P1: Ve Attack
P2: Ve Decay
P3: Ve Sustain
P4: Ve Release
P5: S Start
P6: S Loop Length
P7: S Length
P8: S Loop Fade

B2: Filter
P1: Fe Attack
P2: Fe Decay
P3: Fe Sustain
P4: Fe Release
P5: Filter Freq
P6: Filter Res
P7: Filt < Vel
P8: Fe < Env

B3: LFO
P1: L Attack
P2: L Rate
P3: L R < Key
P4: L Wave
P5: Vol < LFO
P6: Filt < LFO
P7: Pitch < LFO
P8: Pan < LFO

B4: Pitch Modifiers
P1: Pe Attack
P2: Pe Decay
P3: Pe Sustain
P4: Pe Release
P5: Glide Time
P6: Spread
P7: Pan
P8: Volume


Back to Device Index

Tension

Best Of Banks
P1: Filter Freq
P2: Filter Reso
P3: Filter Type
P4: Excitator Type
P5: E Pos
P6: String Decay
P7: Str Damping
P8: Volume

B1: Excitator and String
P1: Excitator Type
P2: String Decay
P3: Str Inharmon
P4: Str Damping
P5: Exc ForceMassProt
P6: Exc FricStiff
P7: Exc Velocity
P8: E Pos

B2: Damper
P1: Damper On
P2: Damper Mass
P3: D Stiffness
P4: D Velocity
P5: Damp Pos
P6: D Damping
P7: D Pos < Vel
P8: D Pos Abs

B3: Termination and Pickup
P1: Term On/Off
P2: Term Mass
P3: Term Fng Stiff
P4: Term Fret Stiff
P5: Pickup On/Off
P6: Pickup Pos
P7: T Mass < Vel
P8: T Mass < Key

B4: Body
P1: Body On/Off
P2: Body Type
P3: Body Size
P4: Body Decay
P5: Body Low-Cut
P6: Body High-Cut
P7: Body Mix
P8: Volume

B5: Vibrato
P1: Vibrato On/Off
P2: Vib Delay
P3: Vib Fade-In
P4: Vib Speed
P5: Vib Amount
P6: Vib < ModWh
P7: Vib Error
P8: Volume

B6: Filter
P1: Filter On/Off
P2: Filter Type
P3: Filter Freq
P4: Filter Reso
P5: Freq < Env
P6: Freq < LFO
P7: Reso < Env
P8: Reso < LFO

B7: Envelope and LFO
P1: FEG On/Off
P2: FEG Attack
P3: FEG Decay
P4: FEG Sustain
P5: FEG Release
P6: LFO On/Off
P7: LFO Shape
P8: LFO Speed

B8: Global
P1: Unison On/Off
P2: Uni Detune
P3: Porta On/Off
P4: Porta Time
P5: Voices
P6: Octave
P7: Semitone
P8: Volume


Back to Device Index

Utility

Best Of Banks
P1: StereoSeparation
P2: BlockDc
P3: PhaseInvertL
P4: PhaseInvertR
P5: Signal Source
P6: Panorama
P7: Mute
P8: Gain


Back to Device Index

Velocity

Best Of Banks
P1: Drive
P2: Compand
P3: Random
P4: Mode
P5: Out Hi
P6: Out Low
P7: Range
P8: Lowest


Back to Device Index

Vinyl Distortion

Best Of Banks
P1: Tracing Freq.
P2: Tracing Width
P3: Tracing Drive
P4: Crackle Density
P5: Pinch Freq.
P6: Pinch Width
P7: Pinch Drive
P8: Crackle Volume


Back to Device Index

Vocoder

Best Of Banks
P1: Formant Shift
P2: Attack Time
P3: Release Time
P4: Unvoiced Level
P5: Gate Threshold
P6: Filter Bandwidth
P7: Envelope Depth
P8: Dry/Wet

B1: Global
P1: Formant Shift
P2: Attack Time
P3: Release Time
P4: Mono/Stereo
P5: Output Level
P6: Gate Threshold
P7: Envelope Depth
P8: Dry/Wet

B2: Filters/Voicing
P1: Filter Bandwidth
P2: Upper Filter Band
P3: Lower Filter Band
P4: Precise/Retro
P5: Unvoiced Level
P6: Unvoiced Sensitivity
P7: Unvoiced Speed
P8: Enhance

B3: Carrier
P1: Noise Rate
P2: Noise Crackle
P3: Upper Pitch Detection
P4: Lower Pitch Detection
P5: Oscillator Pitch
P6: Oscillator Waveform
P7: Ext. In Gain


Back to Device Index
\ No newline at end of file diff --git a/Macrobat Manual.pdf b/Macrobat Manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..40a1eaf07fccaa529ecff9307ef847c04231b122 GIT binary patch literal 270320 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 A4pHM|$|_K(8B#d#I6WzukHy-(sN9 zfZ}D_m$##5)3Z-p`_)V9p3HWr!au5NLGTKUX}JX1^OWyVUK`AFc_cFVYF6luNU6|( z=8FJvW<0bnl=sr+hBhDAI1e;q~Sz0BD7KyFIQe35MJ|z|9^5r{4 zDL#`k;^Ut!R^3KuD^M{}&)9H^;_cGb$k{>nuBU-CdOLqy<#YJtbJ8cYplxTBmy2d$yOotZhElr>`exKaL9U zj+cZce=6BDB7lFTXl_BhW#={>a1^(faf4AT0jW_~DlbC(d6#2W%=IkKD0e$=bRN)nT3{5$ETS~u$a z!~}+)$*h!JmZgi3ot9;3D@2vFNE+VUu)U*a$I?lvJzp6R;;DnbrqtO zjPU7tcMSWNMn6t8WUoG&qO$%MVLrPc!(C!e7Dl;(R!4gq)meJ>oe*7Mz#Z;&4ezv6BcBqhD|{<;nUixBK54>w zTO%*5O(X9}o5?Owr;OudHgT-QY%Lsdx4q_n=hxJ|aAWKaqlukullN}W*!%9f${duY zy@=H6hbo67id84hwt6og`*7FydbQ+sww~d|9dYvWY^7p<(sDVCnp zk(si^-7{d5omRV*N;$ne6K)Y#;=2!H#~cJFws;)}Mr+KbLqJ1|SR0+oVTt@XxEQ5Q zOpWhzD|u3}6K_|MRNJPgEIg|NYs9Z$lqIDcJ$o(W7aZbwEy+1U=p>~y3WVZ{ zX$AWly7Le9%JHYM4YUA&V)gUW&-*+0IAyI`CNAXj7?<9!!Z# z3|Uvmz+GQljEO^;@E*?5UC=n(Ht7xPFyTx9UK;p7PbKX&E_C|D)4#V*dj}2I>V>}I zl#a8ay@*GeMbYcdzR`6N4DOzckD~#(Z(W@~-reQMlJ_siv^wxTNm7)pxwrc8qZaZI zWNFtbuilmi(>`{$0xcrJ|(Nze8X6#OOi%7 z#_H~+C*g5wX}!&tM7Ro;lP%H3&$pdy{T#DI_i$J1unDbEhfI}@MqCh2z_2RdMv?=I zzCeMYjc_avc4r|ZB7X%7oiH#MGu-<`MMkZ_`nM`?c23>ZO+0!^@ zqKtuk*)X?9yRG-wjK_!i4G-?G8kFC|O}s}JX@Uo@#b_LDi(Jpq(|7EoO`F`WZ(%94 zIWbUbe5s7Byv(w4r#^NrA4Nu5#`eV?M1HB;B^wwIdQJ*DhXjaAl3l6aNSYjKeHM5;=qW}-!7hr}m~FYCFB z)hD=njEZR2Y?{}H1zHM#cImyz3ALetZcMBVP zBf0fpW*HIj_02~IzJgP1|3hZsv6P>5-uma)8cvp^}s~s;>LQhg++C!@NqQgkmbZWR92G- z%|pFNgY}s)j&p&7*WC&7oCc70?aMirnz#^Wf!ch($

ULiiA^fh`ua>e|kYH$5^ zRqMk)4F=j(?f1Dpc`TUXs`K(Ob?tCnc9rqamnd5*+1+~1Eh>sfjKhPr51%sWm!+2~ z3|uyNVp}RqD)=zqq$4%%ZpWRl+vo4BRAfoqdr9?5QSY?7`%c;Oghaj9>VSu@TIXpt3#k^YHQi-(lW>6 zX{%&r{SnB;MuJc_aT(cKXmxPemBZ z0LJqw9?BC@WXxe^)Z@Cg`6;rxhf6*1j2br!CFIgJyL!4Uu{_R3e3-mMuO zWQmo@qMx1!T(S%7eU0ejrF~o_qnR7?R@jVUNaK8+TQxl}*@6 z_=1^Oe?*ji6gqk8cayQS4-yzrf75yx#8QMb_R*9mnw!b?S4EQoWLTi%L7fHDT#aT%c>F6Cj$vtl)vO0Qb5oGc9o|Uu>VH~)L2i;Suq^0I*rasd&MM5IH zrZ8uW`gA1_Sxin$OfEQobsI}y7hW6RueUj1|It+BP|{s;*;(_PjKd`TBtM$Q(?H#u zdz(=5S2}mzq#(qN`?@jTN2wy9zlM_~1eaV8wGx2kQO$;(CS?$IG{ ze4Il@ZZqk9cgdFVirs{~=ab6*Zys`VMlJbNm09X|gJ~pMYmYfThnWZF<(3TktP`9S zV@4*4z3LRyQJhCw(|qgBY2m0M})Vv(c*p!Vd%z&S}IJh~R zn7IH?mvpdqJwHG|T)@35Y?5Hm`Hz4TP7wI(M_eEdcGzc75QGk7J1=m)EvgM72T zq?N6!nKPTDEuf#cnTdm`8JoPBy@jhK2*Sa`BPjT-={&Prv~?UNc?kTm?wqwtl}|W! z-?()dp-#WK@38_nGJ2}R^xBiS9JEZ@(gk_$GymZ^g+v;&w;@h9d#@_&=z6lw@Q&7> zv?Qh;R2gR{i$66`b*k0>uywMI-#9(vb7OMm=qNcUN{mAEXQA$VxI>lllsvJ#* zU#QHMB7S2-Fj9YLb9v`f^GOTv#>E4yj1!jt2ZVu>rndb}w$($KD5pHpkb<$R$not4 zk~A+WEKXS5w^t>t)p)97i7PDws&{uu{%iPD!(^{U{dr7{c6!odG|hwsi#2sOF~+MmOlcHzMhD>n=)=guyNmq6XG@C` zS9lYp5+A+e7f{9^;C-lXo&sJWZWqgifY`u1#lZ80Nn33giS@=@UqGM0VD z#{F{Xp?Z+@=|X}R{ov;=^2_Etw?ydGV`<(s2=LF^4+;?6lc8hI!mE9|;3j&9vX5!0 zxc82BukM@lgFUaCa{EjE)dBjSnG(rnYgKf@%i?B)oX!sW(2)rs!UP30+H2u4t*n7D zp5oGT)P*67mu;RY-wzY_g&!sitG(7yJWPw|nEn}Yjjz+N?#pN#q_`@#Y*N1qy)-fd zUQr)3m>jjM$bU&`u_%;}UGlce05V>5LicDw_m}2vY#DLprAwU$cjmZFz8Io$keN8O zp|Tm0KYKf6%7+y6rcyj9Ah>bJw{;+GJZ~=;-SM{Rb411|dra)iAhp~%mzdkAL`fmrLRs%#fk%?GSmZiY#E zz3<)gmk0EzH^d8RM*jufp^jOLreyo6ioo*`TtQ-DVytNkoa&{K^hEfR; zGV0Vl&3eWCn%)d=2vhMK=E@D*`AD1LzKMd!BadtyZWU6-4eS9q=S#j1a%)b^C*;h! zYerXPylUE(T{4n&&=`w^7it_12aXaID5p8HK+dflSu2Jy%3q-}&B6{qI<{^ZwRd$)C5zO`& z9cFMiO$idc;7u-@^afTFFCVPuwi~xUA3w?P#~2oaFJLCR|5}aodT1ej2rJ`>*6`Y` zI9!sO*5Xwvmvn~-A`at&bfpxc^vV4MyDw$PQ06U$Ma_=vd|Dxg7s{pZyL}|{9G6f5 ziPV@%C?a(mV;w{cyc-L%0gdur=v6xm-ui6+wRqFTLU_5!ZXaBl$<`!_I|==wx8R*n=L8Ca>mHWw&9j>(bj6$DyM0$RQseSp&=QXDsR7zefUQC zDa$x7DMCtTr|oUW)41C&qTc3UCsyXvE3DLO8a2L+VSdkmj2!{LdYRYz1N!3}u?%FN zO5Md0jP;Z($EEf6L}4nO)So*~HT@rkMBEpP(4LQ9-a!n&_0mq_&{S^jV4Hp(FLtY8 zM{B|xH~UCB)HVd=CZZ^X-ku+L*LlX*Ci2e5aj>r>~n}#inkwN5k>NkyK!hn73KUuS1bXZTd-h+bz5m z#+H;t(>zqH{^FG$ijZl~z}?LUMxGJSc5Ovm2>Q{;rI5845O0u!c&6_VFuyTd$h!+-g6k6hD#MLmlgsV@-^|Z@w=*$Nai5spThP? z@7q`R(6&{tU}(lw(r+2(mk|2$x)0<(*~u%mYoxm}<>kn@K8Hv=wPj$!#T&n-_4%EwJNMq{=ckMxnY&}FKg9vkU!U|Tu=z-54EbE zo(mawrJqO2nV8UXTZtBhJ&#-ZzTEDN+)j%rx^Kcq{nArt9%B!0s5Omfbum5-W(RKQ#{Pn8_%H{aXp zIGp;QN}fEn<8pY-X3-taZLzk@y*1;{*(T&cw7QM) zdHuat50LF&W9=iWow$^$3F0+3+tq(5e029|C`V-Yynd|p_SBx~1W~t=`QS<$0_h`i zEVgQ6y{g9!i!D`f#R5)R$Bp>08RQL8H_AOepsbtUxywuTWr|%ae5s>Vkt6SQQ`Hpb!OxpV71*?hhFdF!qw5CQ z9qk|HBNVG{y|R`XBwWG?w05(~ZETw6<)WQb;f#U~=4rEYMxX)Nl^s!wDSvtn<%_ELH*12FZa2JKv zEi-P~4X7Wk`-!`svM@f&ZA3v|C>ZRyRWhxWjp(GIg#&lqC0SeGG8$I8BS$Rs zpu;Xj^YJy3m+KpS2b5BmYl;)hg{1a;*;7=+>|&t}Q>dN1{>r4)6rey?#-Vb=>C1St&;mmqrW2X0H~9FJ66C0J?WI6G5?F za!z-iPO7@APCpf?NL6x{O4l&+31KxgcAxynbu(I@OL>tD2pJ%(^0PE@CH!O}1^mst z&B&5@GOnlNy~R^QZsX@jH!zQAq4A3-fw>*wM(UAEq^(+m${YjRC5`ruPvqZ3!nA z-o!<1L;D1L8xofyK>`}^V&t{&I6v^xq_ifX2VJks+|gld({PdHGv#_01v)d~3+l|z zbkdFjmGS0F*qRd{34F|3aIdr{6ZoineM~uCG{uK9K5!OB_J}MUBvd!$z+AkQE~d26Cc8&rCKFp|o{S->{6; ztIaj(MEy7>6D+m8)stX*uO0MTpjmTt_S21Ea6#G6TciP0+w0OXXCHY|gWTqj zCq29qF6Xqi!Gj%R*n=k7j@R&Nh@qXR!>XMa{!!=so4Vm9nhvO)sQ!%fROu2O#PFo` zE^Z4vRM;2dgGDD(1(Z-j@SdV<=2cz}+IZ*NUMW;GEnqu2ge!|MjDl}%1BD>dFtk5a zzAP*aMs&2iym&@Bb!*!d?F#+$>fOKryS6XnL#G(CuV2z4DZTgSBY_mA4+dBcvK_I7 z3ZmL7Nj^oG%~9n%VH5tK#`!tJzFOuSq*-N>n&a|L@e8G$2A*e4lBJ4I)2h!gxlgF#ihIn^A!RUs} zjTkyl-OjfwppsA1!sFL+XBfb=9p$x?P-{fuXW5GMFo3@Dv_9hZ2Y!(n60HEtRP5P5qZmf@$&??H0d)`dn46hQL|^@lk9tH60Ho z4?~_hA{zb(&YkjPYPN&Yye`8rL6?9o_ z6kj)nL!66&xmI*^tv!`J$TSqLRF02U>5frYUy&E>vBVdN8AM?%BjTp{P})$%T?A4_ z;CI~OT&q6Uxs@Ip%^zwNhnf|A5_PEM-=7%mXrcpt8dc}x?tNxRR&%+!^wn)1g%YNo zusk#l#TST0?J2^yUYMpAq7}mzqm81c={S+cxs~TNv&i5Ao}-X%=ETX)BD;d6+xdK4 zhKB+*WFthH(x$q%))fa8iC9zGQvFlMDCIJmN?bn1%TAQAPl59}u}4Y=7N~Nz*cC6X z#Yl18vBd$oF;toMgLQGV76m08iFY=quFOG+UF%?dmGY>F9$HD} zY`xveP!+zGb)CgIBV}~)V4O5`PXQ_E-eFOQ{e9^=2_%H89&TX~3fYM|n4`(Ua8J>k z6HU_w;Axr~5QzKP7@#c8g?QQ^u{@+Kx!QpbEkyOXNRX>ovHYbo8bY#D>QJ~ldZJ8} znKy+6wXp&Pz(^JBQTZ-rfu7=JR#_^$*X9z8T_wiq z1azO_4xrOhqFCz0=a+OcAzrtiPBeCXgFpH43R6vL{--;c#>sCs=i(=E!M3MwpIN)a z?}al5X^fA$RgM(%KkL?sBhs6`pMCc;&s&lecY2+K^(cmZm&!hzdp1oI6eEmOedZa^ z2F4{$$N-kA#LJRw_0Og+J0e!Hjl}y3f>lgB0yToi@$|87vE3n1cm#K^zf#N)Pa6X< ziOTbCLhUIRM*MWJWN$_AJ05SW%&Rqzz47KLTvg+@*Dz9B0orOMIdP6%7Mg2Dbn))w z?xFT#hAZ%lxoYCcTuXO|y?b&xC)oPA6}c(NY-+iw^8+6(84x_~GELXdWa^*WF=@;MAOyt!-a|CmA+K|c=i$NWt3?b2w;e{fG z^9WFfD-$%z%UV0@eu(Yl?NW*}MtP{ubHi}Kea)WC0!6gz?b=Ox_dADzxC2*`iJo3r zn{{#=-|)g(W$n02@hY}PCKdHIeQI78QEJ47)~oV{KDdzw>8sey&FQn}e0qHqd(SBc z+MaW}c_1UMx?27Z| zQ_jhiN-Gk3&~DN_ z)MpRUsqzlASVTJ&XJoL4tzU|cna4{AmLoy$&K?EHfWwO3Qm|qM?JQtU<3B-^jvx>` ziU^dJMZaC*fs;-+c*>BcgNbBBOwUpNBEfWv|YX+?+q>!xU3gNc(aL=nIPa1#V} zmMN65xDO?lEs~j2XX|s`(lwq|YX$B|!M={BFw!?crGCUZ0A}s@yd=H9tayDfmQ^;k zJTaT(STb!~Y-$A{Z#00siQbTgPOqTT0{ey_>!G=3u&By4yKv$B=aA2uSBju@6lg&} zXay;cU-sJc+lJDUPfc@2zMzyYacUedr4)U!N-1`ywvUCdw13mZ0gocc-&qYc^K+Eg zp!Lpznxpg*bL&nVo=MQ9y9Y9Lcrv>$!|)qkxN6WD_G@2n&$mXCjVYzU<{m919h>Fi zOE5d^kmSR?!fPx~j`PMvc4ki(;l5(p^(E(8Q^TUWR6WU;69leZbDb&W(-NHC+Np12 z?F_*+Ow5SS`9#X{0$YhANwJw5c(Vk_KdW&09O!1Z1BFWpxl1qbl6>D!+rz4{+Pqha0Gq<=njQlx$fgUgVKPi z)`rF2iz0Fr*LC0>wde?ZK5dCT;y7ga^Bq@VExbZSQPuXwAe#&fTB(8`W z9th$Zh%_dfpM}*lLdcq(7mwacgEMg#c{=Yi)3FZ|KVTQH3r0_vxDrJvN)|*3d`HRN zMg~D#NP~vCULqrfkaO7GU)n9ltk*eQ{!2V2~9nBgNq9yI+KibBr%rL5~j*A^qdoH%b5 ztU6EX!16N*G8`sko1vXCA9|cBLFb*$(D|sxFRL0C8vxTaAWXL30y$eoelSvo=rT) zhP!zz90@+YeUMLkQjJ`XYxes6VTV0EEd}6-ihw5$`R)&sY`Bj$@(dGl(Xh9kr(Q~+ zEA!N27XKN!&1`e)hN=#(1&UkutdFls>`)Twn+f?+r=@t+U~VoS0W}j2tAv5VLRzVg zY5KYv-gL5;6Z{o~&#z20AITpXP)db!>}%n&Ht)KI*$li&Mxu*$;PUA~n^H}IT^YpzT> z7?+mXf|#8nlK=**zrxpkB~&-4;%QiJNLC%)koTPFZCED045P6=;m2lKJ0hGkJ$C}h zW?vx^`#Q#ZQwtjE!rQ)8HPKDPLLiI60;(@8Y@yM*Yh!R(r=#*x6Xe~9K#}qk4Ul-) z>)tTQr6z(_LaGr;E-?EQpbNPI7+w>&hD|-=W41KuSoCJ;ElTBGK+z9PV+aolTC- zoJVvdOUup7!$DqfMF|0J>Amiio0+PoflfOU+k(8x~zZUAFdA4YFwQUv@HuRSm4Q!tZuygqA zo-hZMJy|E*QypoSy2FNkvpk3V`thY!cAK_M?)}N6E8bX3$odD~m#~=q)B{?>goHXA zknp0f`d5t3gdSE2X1W!W&Q=p?c{q!QyiKM-K~)*L7bFw8Ao9rWYMIdWPE;#CQ6Bw< z2u12;N0iF9BGfDCFN}732?TxB0}gRoUwu}?j}&rH3LEOJu;jA9)-T>(SJL6Nf3~`A zP#iG5LO2t1D0G5C{fQ!_U+1RS4uib!DZB~EC){JsRe`aMrM%qX0Fkq|o2XkI{&R&0 zZavJUE1@r+w}79YAYxT-8LbL(VQdNH5Ai|Sx*w}mf$ zNoOhD;BHeGPO(2}TlGWY9r zB=O%GY#bi0A`WoUTrYp)0F8f7w#b#Hv0J#0^CZ^FKJd{O(DoXEjG9#tyzSR&)k=)au1%{pFM>XXO(5M7WaACu#U=mTrEYs;gwTI=z~nE*qTBq;e2hmm#vP~%`)`&+8HM4dC% zs>EPfbb`{H2foZ7Y_l7T->Av%yX()+^k!9*$Y)y`s%pga;9c{3xbeX{J}0_nRyzxN z(v2gq@vewB!r_i5>QmB*M+!UWt7{l^Hs%iqEzk$19n>~Ys;S>L9&SvBR+aNTZQv)t zERm-&yS^7kIBjmjnrpN8>XER3&Rf?C+Ey4M{%0(vKhKk z+|6OGyZ8BV!}gB7&DNLFc3h_F&XXsQD9sO+sQesr@YO#CuP4vFryI8*)4iqr(O6K4z@G6GWFvR^W10hc+RhcUgTl{R!|M%G z0>{YIU*D$OYq`DRZy=^N9C$E>6j0!pA7P5zmNzI;X|` z{dzA|H)GfHrCRb<_BOy$EfZHA9&T1{Cr04ntmxH2PZ4%g^&;)PF8N1kX#T} zD43o7zjBJ3xwz_pFII`MX=-VMzz|Ll_xZXqU@6#lz~>9fzRhv{5}2I}umlLq4Q7P` zcKIg8e@t@$2|1rbRJnlU;rC{ge+~NmLbqRnLICB!Fg1BtIXFQ7NbxtI z9Oth6V{4vU;!n2a;N@WDg#a!CtUTmm1uVw-O^RQDp8MwS8ua@~<6mjY!3AaIfq`;? zSvg>5-vs#^Tre--H$N)-{q*cFaXEnahJZMLHs$;Z|5cD*fWj7Ner;ARZXi5<0OdJv z_CH#fotKsC929yUFB}&l{0$r@*MH#thP)s=KwMsU5rl_>70P+;PaGE_`~vh3@xt>r zWCVe702T$5gR%k(NB zV(0li{{Wf+X%7(e+@ug*2rJiD?mHLZ7l=QE#(z@@z$AYT4KU=wr00k{JYVsD4#)K; zxWAztAccbgZ-YRfE1!4==b21cc+o)kTzpE=XAg#B(k_ zaJYyJ5D)Ar7l96Z2z$y!Q~+17rvM&!@dMaXF6^xWx-f!@-oGUh@9*gl0s%5NCy0xe zhZR_!&;G57;0AL72?^K;t()CoX;tCIek+<1S_h+qgnNl*|lP0b1csy_%2N#{xZ zoE5pa&Wp95qy8zT&U5TG7pbQsK6ke21KLc7BHfFrqqT*rOkfKcvp5uiLkO8#E#V#1gCx3wqxWreg z14Ds2n-l1=17!4zwEidJ0ki*s@?fF!Z#;jEo<9WhkFftOc){%Fw)kVjLV!>OatoOI zoK1i-4a~~P`3pz7$YI~|$VKA_#^7ozxl#0M$^?*uxx5l{+1IDxFi35i)ssA0f z;Q;fVcMUng?BCoKpm!*c(;!?h+W)ysf3nlXzSIlC1?+S#!H+WifsUa(Kw1Y%YtC;~ zFBqtyfU5W0e!nSYF5>(*qT3or=S#LNu( zdI@rM00DcMK@QHKi=E6MD|?W!k*kTNnF}Su`F3YhHxn~wde{?x@i34(;4C2BZ$t9- z|DfwKFtA-H0}S1Z1KW=2#rYuYU~YCWmQ4Q#2QLv#H(fv0#DwJI%gl`hT!gB*Y|S0Av0X z4%U_V1_#sTE8ImL@LScs=kb5w#8m(ncQ$i!vvM|b0m)mrn}L976IRH1=$!AVcRu&_ zpY$_enf03_FkQb&a>0zhmE?Q&{$3J=Tk>i$p#OgY!Nxzn2?VpoSAk%0^ShS#p1Qvm zNLfT2q#&dDUy*<==}#;K1Nvd$|C>NCqkI+UqBi@jg}$$}{}Bj?Xdsx+<@wtt`#~UB zZ|R#ru&=%fbWtS!R-o_6>0g0V|04)`VZsi-=u(9;;R%evin^-{g>r{=#-Zb zQBnMlAiwhBAB2JRs=f&W`|7JOeT4?>Fc{Yexvrq z9sfa6l@XV?@Q82m`2!wo{@|Nt-;*FP3;PGky}08)cnUJ&G7M~A6Vt^=k_y|`!~_d} zSYl!U!|39Fim8jqg|Fg#)%dIWe6V&|q7+C;Sq;c<-*UqF z{K@}zLH_Y@m<@i&X~3BKzh&+}9(M68>5e+sw@wKY? zS|fb31I#Qxdce8-|6_+=>HiZn*yO}F-C&0KHQISZ{)6@H%|9;xIOx|ZL(a<7Md!kS zfYF6>*8yfpFAgwmK(O0@e$B;)uz_lz4+gus2zsC=dvOH|2Vk`S;tFP`^B4DA)RG)O z*x}-#-(>s$YPq)E#%&<_ZXo|)Y_U-LpcO@lx)`C*M6GZU4HZ2y*_O6>BpjKgEv>Mdd}Z}{OPpIS2+#@1{}oYWGgpU2}o(z{63B=k&Yy*g36~`meZB>UxG{UCwFk z)PKR+$zD2rSDQQ=>3ZarhMSJAZy^8GacK5)n;DKntiW-C90!>W)@bGYGcD8lw2E_u z@A}E3?|1yPqnC0WA-W!u)S7w?SiD5DAz7Ds>{Yg39u6OHs z_1Ew14_GNK@nITI?(Oc{V+}d9&XxbjO%Yy`sMFYzJ5SnTJV2X=xF1s#{6V*ZjLWT{c?E>{K=$q+C;e> z_4oU7hKNstaW)oiI*=JULY%lG+)Uy6qrq5Y0$iEM*Rf^lQcwc9UG1uTH7zdI{(Y1? zS!?KiAyiv6hVdA~gLfX$`>pmX{k@){%QS{-1AERVOj3H^*SVH81CWaysB9t^S0R|iQA230bBPJKoWtC0L#}uIuKOB>+ zevk`@IAh8MDRF8TCb^%X8*yFuMJMD;H>Ql1VIl4Kn^+idpMs2xBNluxOz%l41bg!o=mw+q4FeSlOWmuRbKF1W8d%P}6Dmtk& z%77e?XBmQ;#M=mDa{j((4WEx!z+&FdVK1hYV6$8q#)4K-1{R^yu((H9S#<^$^Ej0e z=v^$8M*1q`RGtXzfnwRK~=Z$$}@Q%TGw)^5N+`{HH9Ry;#4h^)HA*0=^ajM|pH zn8zvP5*{zWQa)~A4iI!)YWN;J9NxZ=16|RQ3y84CbVFicF)X6veTK!-vX?@H%VD@@ zaf)#bj4ewpuwqxGipM04iFRA27>F!;_B;bZ5}(UtgfQjr775Aw4CDf$Ga5dKgd(aC z!w~rv7F+EGkA`eKKp83RGnn=;n_1<8UTc+s368f%bV5=QJ$^F5^9Mv+X2v|-AD-ehCQI4n8PW-QDaPtlP0rH&L$ zkSwhDi$WY^a(kiVd5MfdBJr~K4HX^wnm(XG*1}?I+yG(SZgVAgK8f}S_*^EV7(eyl zWndDp>W4|7QI~3)my2S1)#`SyTHZtXT-5opcfVfKi7QOD@A2ezHDBW^-mLyQYX96F z1=%=A!%-Fv2SXJla0ikFf0V?da6HV${cbWG<3L!V#cmW5&s2qjARLaOG#h7fAhJHr b$|+^Xx@lY0`8r+%bepTz+qdKQ*;VTwn_xbO literal 0 HcmV?d00001 diff --git a/Macrobat Rack Examples.als b/Macrobat Rack Examples.als new file mode 100644 index 0000000000000000000000000000000000000000..fa502417bbed1bb4b0d88e3bc3a19251c43bea41 GIT binary patch literal 14808 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