From d37b91f1bcb9317f5042d40e52bd4159fb9568e7 Mon Sep 17 00:00:00 2001 From: raphaelradna Date: Sun, 1 Jan 2023 19:23:18 -0800 Subject: [PATCH] initialize repo --- Extra/xenosInterface.png | Bin 0 -> 199770 bytes LICENSE | 674 +++++++++++++++++++++++++++++++++++++ README.md | 32 ++ Resources/background.png | Bin 0 -> 63049 bytes Source/ParamListener.h | 25 ++ Source/ParamMenu.h | 25 ++ Source/ParamSlider.h | 25 ++ Source/PluginEditor.cpp | 309 +++++++++++++++++ Source/PluginEditor.h | 170 ++++++++++ Source/PluginProcessor.cpp | 389 +++++++++++++++++++++ Source/PluginProcessor.h | 103 ++++++ Source/Quantizer.cpp | 88 +++++ Source/Quantizer.h | 72 ++++ Source/RandomSource.cpp | 121 +++++++ Source/RandomSource.h | 42 +++ Source/RandomWalk.cpp | 154 +++++++++ Source/RandomWalk.h | 44 +++ Source/Scale.cpp | 76 +++++ Source/Scale.h | 30 ++ Source/Utility.cpp | 46 +++ Source/Utility.h | 22 ++ Source/Xenos.h | 343 +++++++++++++++++++ Xenos.jucer | 99 ++++++ 23 files changed, 2889 insertions(+) create mode 100644 Extra/xenosInterface.png create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Resources/background.png create mode 100644 Source/ParamListener.h create mode 100644 Source/ParamMenu.h create mode 100644 Source/ParamSlider.h create mode 100644 Source/PluginEditor.cpp create mode 100644 Source/PluginEditor.h create mode 100644 Source/PluginProcessor.cpp create mode 100644 Source/PluginProcessor.h create mode 100644 Source/Quantizer.cpp create mode 100644 Source/Quantizer.h create mode 100644 Source/RandomSource.cpp create mode 100644 Source/RandomSource.h create mode 100644 Source/RandomWalk.cpp create mode 100644 Source/RandomWalk.h create mode 100644 Source/Scale.cpp create mode 100644 Source/Scale.h create mode 100644 Source/Utility.cpp create mode 100644 Source/Utility.h create mode 100644 Source/Xenos.h create mode 100644 Xenos.jucer diff --git a/Extra/xenosInterface.png b/Extra/xenosInterface.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0813cd9aae82f4f3e592a714a21b31665fcb3c GIT binary patch literal 199770 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%0DmIZxA7+kc%%9&a@o)q-uJl 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≫bvuYACR+2-rcF5= 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

nfwcbC?Lw#+CX4aP%*gSPAz43Vg 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 literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -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/README.md b/README.md new file mode 100644 index 0000000..c59e939 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# Xenos + +Xenos is a virtual instrument plug-in that implements and extends the Dynamic Stochastic Synthesis (DSS) algorithm invented by Iannis Xenakis. It is open-source, cross-platform, and can be built in a number of plugin formats. + +![](Extra/xenosInterface.png "The Xenos interface") + +Features include: +- Authentic DSS engine +- Xenharmonic pitch quantizer +- Custom scale import in the [Scala](https://www.huygens-fokker.org/scala/) format +- Ten stochastic distributions with up to two parameters each +- First- and second-order random walks +- Variable number of segments per wave cycle +- Variable amplitude envelope +- Polyphonic (64 voices by default) +- MIDI implementation (notes, sustain, pitch bend) +- External MIDI controller assignment +- Parameter automation +- Simple and streamlined interface +- Free and open source + +## Build + +1. [Download](https://juce.com/get-juce/download) JUCE +2. Clone or [download](https://github.com/raphaelradna/xenos/archive/refs/heads/main.zip) Xenos +3. Open Xenos.jucer in the Projucer +4. Export the project for your IDE and platform (e.g. Xcode (maxOS) or Visual Studio 2019); see [here](https://docs.juce.com/master/tutorial_new_projucer_project.html) for help +5. Compile Xenos using your IDE (or make on Linux) +6. Copy the plug-in binary (e.g., Xenos.component, Xenos.vst3, etc.) to the proper location for your platform and host software +7. Open a suitable plug-in host application, add Xenos on a virtual instrument track, and enjoy! + +## Pre-built releases and user manual coming soon! \ No newline at end of file diff --git a/Resources/background.png b/Resources/background.png new file mode 100644 index 0000000000000000000000000000000000000000..b907e527db31837ca922108d5581207993d92dbd GIT binary patch literal 63049 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ᥖH9F7RL6q9xMQ6}c<+A85+4)XJ&i(gb~ zUy}jHO%*t9;)Z!V%`DRO_@Vgsk0_XRoKooqh!@etd2pAt? z<%GIr%rvyS5>8+g|L zha}(PttIkfs<}3z=CAB>kf{VD@dEx?#tIB6)84%%hh^5ad=;;$wizwya-9&Y<_L~6M9#9-e zBp?~5FM8|pam|VmewyQgvcp7~E6N1thYf_>d!P%6H*^y|n|5A%_6nrfq>(-(veRaN zl;|tWfQz}6EiGjD?(*kX7lvu;9B+}^*yM{8{fJkVX6E>sh~Wj4(|rv&+Fs^PtYV0A zjZ>KKt5C*u&fKd$#BB2V!b?`dvA#)oDD|mhYKXWpy?4GqB2dS;@lg3tlfhx zT#^gsLpwN&=cxQr5tXmID(B?KI1et6KaPS`@#=kf7a34UzxIC0-IQ}ak;5j@ps{GE z!Z?r|b1e@|SYgtIeV?6$&)bfy%^i4Y%!i(^C1>)qVzjAZ+<|Qbg2p&{Q zdr?u%RaA9B-{*uB3E%NCC|eqZu?;>VbHiim?E1)hpavNB8~=CMr6UGQ%%Ht*XU=1P zEm}M9FfK;c=A))lIbz1@TN(0Nm3Sdlp}a_F4*kV9r0a)$H(Jek8UPrN!8OMi1*vLE#n3nC_H~0> zGm67S%a*1}Urkq_m#>b~?!mAkLN>DYq@r)5a3%m*@!b`n;A{n=CEo#;z+Xu+W_DV1Bt*(>iT+%i}>N~T; z=?V*y0_ubu z_ub2{^a$SzCCCuhf+lq`x5z@}c%vt?IbplmX^V+I*!Ypme9K)Lt5%Dq5>e7>|6YQ* zVe}y_K@o8kgPD|b&5b(>DZC_s14!?N%&1$i&!@a?B+diX%(^8ia44SaJnEVzs@jmk zkpN%@97yPX^+iKU_Lf`rmJeIN3skCZ7u}y$9Lgdgs%Fr$Pm1zj*Fn&v##-p4uKWdb z$VFww-a2WxK(evd6fNtR(Yk|@`{$NC@kg7wCu)HqTVpg5^#{c%BY%Dv5ocH$gpBY>cXQ?_dN4D2lr=6@=gu3pJVICl^vO-pc}cMl~l z?W0>FSlcm!o=xlH%O*(M=`(#*FVKhFiTgLI_!zn^UyFTy_`ybn`j8AGNn$F{%he$H z@_a>*!VGHd4|+{*!2x1kBs@Rroiw=z1;y({t4RNtxPN3xY{gE zDJ@W0tzBk)cVBI~R5(`%a@COKjQ?Jjm@{jf_?>Z03=@ev7VPtVNp z(}h%FjvNszf8Ev(!7(;Fak(#3 z?4gOLm?+t(`A1qJutZV+hp9IYhkF0t$7eBU6m=q52Bji8RFr*YoYZKukIAl+8aW+N z#@J?2r%)IzLSbYHGqy-}Go8v7#x|sEnQSw5#xe}QSLgltUf1us{6Cl1^YwZ@?)!e+ zkNfe4b1M}=)~U=C7lN?kU6bI$WqK;Nxa3l0W@HNYwfU9fY$N7hpGCo}Oj1BEhaWT= z*P9_DKjr{F0naY`rN(=3RTl8V60$CODRo-5Dy)@jvg{77-ZC#AI5iyRiZ_?KIPy_zecD@Hm z6~rk>Y*ug1g$(;=U?U5^dCjOpWP#V$92n9zln8P0rUf~DwWsgj(DT>{`Up^t3eVpp zbj&Ob;R(OS9yEiON4lT~ob;jcljeEU|GCTNTye0>&K-u3lx{7y^|skptcFAQQ;VbR zU61v)?9=>zDdH@K`ei!=U{(4I(Go;0o}B?AU^ZI6W{J{-MS8@+IpT;A;khsRAo~$W zXKzN9F!fzJ>|)O_m!10B4R&^4G`F&dRig)g4(w-@(ztfmCLlS2A{qe;%0s{!(|C{dIbFy2Zxfr6>@<0!OVzC6BHS9)~C+XYp)l9b? zZ~EpANG$_fd8)2YD^w5G&Q$BOzt@z6jS}yT7o?aG-hyyId(&iJ-mgRa@~F18zC`>5 za_N10K}4PCd423kJ1l(sScE7Q3BDl+IgFCbFc1_1``C69p?_~^G(Zl^ApIjGH2em* z3(q5@M`m}j^W=c*6$QWue(7HueNSIEXG3r0-qVKAYQ6&sCXju3xW@>CyWx3?@(`89 z`YiwE=`?N?6>J#?mPVFy6AXPu@pc06TqZ6aV^tw-q!WkK12_ zwo4g?H7Qx^ZYZ|V^yc$yu=K2`DMgheu+RREJyeb)kMtw)_lE4rEVB0iru^s5=c*&YG4}>@(5}aUwFjLkIN5{a>2x z_FQP8M2`~tgvNcqmT7)iZL#iK=L7RcIl!9cxK9}Lr)l+9lyW+NQNjILd%yFA)|3Yb zA!S+PpI&?5^4+=9Tln&x-sVm-NWtI=P`9`8G#aKgq30B;lWQka&qY2d)P0E=G=iZM zFPbuCPfyJ5n9my;A}_Q50MEAy3z6@K708!7ltQs3*QigyhDYKZ=x$QgU)^?Lw`|+`Nqj?ik!V(7LIIzH$GU z3>tulAXV^34{&nfMWD~ou#6Zx6TA{}98Kf*U&ROwf)!(PZ-tVgaNxs=L3_OG4g%TO zEs$L@u1p|~rcji>b<3-#QZECun5b#s3dUDJE)Ie4L7J3%)izvrVUedQ69xskT%3@wHG`s#N) zC@jE(7;#acqKRTirhw+R{jN-G#x4FM3F-^~dJe#%U%u+{uPtU)hXYSiow7AS@fTzM zlJ*G;mN=+89Y1@lB(^sxC+nar^v}GlXCGdyFXDuF=+W<9FrO6C_3-ZQBqjB!kSLt; zH?j_z4^rWqKySelUPov_PIN_-*NFBUZ(WJ(Yy@bHD*IZyRv6V=cmU;t16b}Mh@}s0 zy!Z-DWcCgJZWf3go`(E+IYlmwz3l z1^n9uvGts+Sr-TJ>7@|h9lwO(1T@I76kvf8A-Uf>q2~aJ5*x${1N|c^2JPsYfFvv9 zW|)GxUITuWo7P_2e#|&zYdP>p>8TIsl5nKSr!wY5u{e<~K3uZl-?>zbcDE*_(}$o$@UKMHQsdLIte0cKaLfvHTE zS<3Z|41P-F?`5cdLAc0m-doS)=f_LF_OTagAOkz4iyrmOdR?d4O;1_{5jOKY0b#ZS zL$d2DoX3Q(+{6={fVSkHANF0|*Kcgi0Vd4qPp)`+b(jLo6umPN1ofN)#$=0ij86aq zBk<47y)!+{y&u-{*YVWmh<*&9eB(rhjKEXu_lhn2%@$8OUqB7J{=44sljtUpG-H=X zUcX?FoM+1XPomsycXC2<3bR62Mv8$kxNr92*g^2XdwRgXW;N1#_Mi16B>&BLg#(xK zH+Om;CuEARF8OS{*59%<3$wfPK~~rn7yhs54f+lAY(a565so&%uPm&814||wgpWhK z6?Ox#rDjjyWE>Q9ZZTcg8w7! zeR7(sp&X|Uw(C*9PT5~#xt>rb^+z6%K%{ug7V1$>sjE&TUoWJ84qP5k@J-xt5=zDv z8@}5}+>zXQMK9xRXc-T~yIz3*YkT>O_g>hz^`>-(Nk+@PBak<-#yD}FoPBt<+B;UP z1!LG{jvw})fpjDL?J7#*n0+{meFKC)ZJdcb3rYeXKTVO}j~k2O`+%IPf>J_$m-hLD zIU&!!rGG_!LoZnB6Rvk3%qm;KBeo?>@}Eqqi5u7#35nap!14iJ2! zMaoOXh^ip2jdRCvMqh_^`8K}NoOqZ_9l?e@sdG9NwS4#)Q~94V&<6IgX$k%mW~pYq zdembZJ~=?{s!pvucKim?#JIOO!e=p$>=cUuCH};cOyVg+^J;SZG&F-c#%;t7d)R$} z+&!cY)-8|sAHv0OAa}T%iLx$U@MAcrzoc>F{iNOjgb|QWa%tjR(KpmWQu7ofsU?xi zOfEK8YgEvPbu}A}q42XbZNPiQ|NNO0-?9|T^Ydsn2J<_#cENk(M|K}~`~914tCof( z-+d~Nus=MtZQ`EqC-tdUf@`=4Lym08;i#vN0{a}N@&h3q?PU9P@`FGr>mAaS7R>s$ z9$?Q;6yT-tH17ETBtAYxIt=?$xVr)m-QKtVCdw(jX83FHh9*cbyGr*DQ9z$XJ0bp& zcy};VA$d+!OGTU3U2dhek+O11V^LQ-b~;WpV@mnivi%DJL($WdDY36H z#E|}7OWBsE4XP1dw>$~iRMNnS9e6hCWyl&3c2E@)K@rY;-=%L+xua=tkCQ@^Pvgo^S`^hL0uqA7xJOOlvOt3M}tuV==XRO1+TwsVZY*=Yq{3 zUg*?Do7~-Tc%v=OC2~d@RJ3A-?2TlCLK2Ofn{VH^9x0MtN)suttv;--g&!j4$th!& z94)kLz&J_k#)*NQ8HvNV{Wua*MP2ZMZkVTX9#~<^gJ;hoJz>@TrXC&47R(YOLO0={ zTpPZR)9Yoya-&i2!V;dP=-lF|ov`e!HjZ~pxN-^mAo2mBi zdu;i+$f8(B_SxH&2BtP*9S))qOY(_m&gSj9Ej40F4Z)z>f!(rJ1Ovg^VXEbarwyIt z%D|dY;zZ2&EAf05-6!w<AQUz3e700o{3touYcsYe|RpQb) zK~AVUiLrrQnm)H=Y=bUyrS)2F>dv2BQ>Z##{8S0$}vmT2kBMb53%Tm&S za@GPnmRRFxJJwFUCApTWxW59G5&}${-BQq~B5AT+e|%Xe6lFJlN)+^scxbGuh(rj4;{e<0SL^!0uQS!-}f!Xmm@Td;DP;}_^#@>JY zNrVJbx_RtK_B;CZ2-rVmThj%F%2zORTy`4QQR+2~1c z0Vwncjo}uDC+UbE0pA2~t&t+`qx`;&@Pu7LfC~IaOL_9G(i+Syp9YVPFQT}g0+4fg zJsxQmQ7O)Ye7iMti*kcCH3+IPQ#TnIJ~3>DrdF5YT}B3We6ktjk7#LJ+Ul;BdG23Z zgY+MSCl_})0!kS4MVe7fyquKb6w-lokazKj#TM{iO6%-i2MXEtq;Z_1_|5;$^7qV( zvd<L}yDg ztf6enV95iB9@UU4aZQRYZmIR(s%gN1{g>Z_CDIF$Adi_S6ODCUz7r`VClHc-ZP-k} zfegbZn=Yp^eizsxzDi^yHu5T8-Nw{H4&zxzkDEc%Tqrr1jjYk0ki*GEd}rkB@uHP4 zew(>KF=HQ1ILLl)=r+$uI4W)z(Y(*8Ib?hNMB_}k_3j|-#u1r#B~q7H#ZdpZ8e|#C zKD-3}?tGo5vG#3TEKTY`waJXK`s#Oux(t&tblzeC$fFG_r3F5icn17$8udkwpeWZ3 z6~{VR^yjeg7PfwN!5=-l0)%D_&Fk!TkXkOIF-0C7_9H1XxKDCm)3GmYf`;zRB7ejB zJ8Dzg@LQTooJ}G~t11%9PEg{2__(1<6oa9xyBHR+<}E^S2i!7qv7GE&d9?ir37Y;JhsnnK>wDF2B~IJ-`!Ir4}QAj$3-`5Zf>S3UIOE3h5` zT`#JXxx;_sBorjm%zd7xD|QIu3zR&qajMYlB(;^SJ+=evlLG7W&tq~@CkT>%x z!9?-7(MI7xkm)Qv5QT}bn(zVJj}-#?B(@z_j%vtSR~>mdlWRb6N`iPuTsf-UZ4C2q z(t^gn^HQLuEVw-J5{5UcHBw&0LiU2o%Cg}>)s4CWO>ea5dFbna4;O_M7ilYlZ7kjT zgL3`)64uQJFd)OMyS+37b*&y;bfvufoJ5A1$JxlZush&eJ#8Xps;yt}(oAgb)=gE| zWtg2)RKrYD?n=4x@Qx0KI-b|EeQR^+VUpS;JXw0=_o?uYtba2WabVvgaxklMwIGk; z_`6HPr^v8^p9kt7=kersD4j;QF?XQJxLGmuNpwgkXZ^BN)2=)CVt0_E=j@wY*+mzN zlu!nyG0=!s-D!4D0d{WnoC_G6q}HYauD&+xq;@L3?rmLIJ!8&zYb*N)AP@lF98;5! z^Xc$3KkqkTPmCRI%a2UTSURC(^3v!>jH7^YPCUui=8ogVa#NlTDn=v2T2u;omonV0 zcJyzDimrf$xt%2vlMSv}!b)%cJuO&KSy)q;!?t0(C@0J&6>_pvzvuCp9QCnPrAFZG zoq31@KZZo()p5e^K;@*FBpE*)ucRT5AYE{x`Ma`p#`qk>wVIVWRQM+XUC^@bXDVTx zrc!c?5>3ApuZ?cMb3>>zZYB-@o~jl>d;abRk0}$4DiwDFBWAk{+WttLfb|?684pr|^(epG&KX zcUD@Bzo$_~d}84uHs}M)e3Y|*O`-qHK@%mP%FkQ7OE|^&XCq-DiJ?0JaO=&JdB~xw z?%dV=+iNu7Z;S=Jyv7ha7oaKirL|bn7MABX04rxMyVHqrG?D46BycywR+B->hZ13x zezWll`0ebg7@AYO8R+d|o@`6&F5+SKZyk3&1j44XZ^MJymvsqq3G`WdnK6Gj#*tjg zOL=u2E2YF)+s;AW3;94kJ780o!)kN1WX?;Dn**ZP|^GQ?T z?YX405ty?N+`hBp`d^w`Cruc)0XpWkBU=`vzGNzP0y%(NKgkI#dA_K;^u4*%xB}fO zrFLq5w>p-iz$+780dBi_d!v7dz@b$Era*UYaWt^>h#OiHQC;1+Hd%Wt;l>1g{fNL; zHWkzApD>t4Tls-lr649Hdll>m)UbWNbB6S3$G*At5WW{UvCOtqW2(NxX*`Q${Fo^b zJeGCMeSKS*J~Uq>djS&6%nWYDZS9cWO~-}?uLWAh-<$Uc@=)ig%`k{7ZUIY$n@`1A zvI+j|>0X>Le*wS#kL92{jRnOLC)N;DV@JA7NSQky?W~ryG#Kh%XU0>|?tEqc8&RS! zEp!J6zu6&1NBHn2y<$e^Zy&h1OiS69yM)q+zQHr1@mb>b9# z?7)VGS+Pt|4fvg#mnCFM1zgH)t0~(m8pdqqp*F(b$r4J=nw#Bq_rCLvCU%t4=C+CI z{K)UfL`u+S$8E#ecJxK6J2$@p0J+|%?hyVnNvU`8=wMp0>=F1q`1JF5W#WgnPEENW z3{7>}iBlL3@J-ubPwu8)M=#b^PPR0jJk%V;SzNm^R zGP`pQ958;ENz7f(9xn2Nnd+i*$-b(gSEJWF#&UrV9>60v)lZr-(renGQh~UkT-8u^j$e{Yt8iP{;b&IW399XZKI~F-N3uBH3@j;L@>U<;*}S; zTSwg`D*1P-k^kofh(>Y`XB1Gs%uu2{B@>vN#-=TEX^mbh&m`}3TnA&pNx&I50cX4m zLtAA#6(7xLpY@=z^EF z;PGShG8_MNoP;+lgzKH&jOn{r_^hi+utrnyBQ90$sJ(eotval<{lvU8f{VUPeNiA6SM_Dryvz2EytJ8*t)lLFlfW$XiXz^JbFx4d zZOmbEO#87LIqID=py>iRd_CmJv<&q-J(j+6jntO2UL5O4U@Ww1$uuGfdt+)f=pO}qF;B-$w#&zh* z98f9$3ztVXs>MsW7)5&)+RC1Ty?{seRLY!=R|}Ok4twWysQv%<0gW7?3JQ$+pEd5k zb7mlASh%74X)kDIGyAouAsCh_k-$KgLL(5{a4Tnm>BiQRsLj{pYU;OUI=D$TZQj#zD+XFpMe=%zJAjOunJ zr6}Gx<7SUZYzPV1y}d`Hl^@SaVu*ButWi3PsgY2VHLSm4UbRr(*9lq+$tsIrNHqpB zYz1!u8-eXk1>CTAvRu^3q0lVB^4Y>OJ`vNrsa?g8lY|a@BX+B00S|Luw6hnC+&j#@ zOPC5vpE5C z&6NE}zJxzFix=`qy)(CZHtcA|49I$Ml-C0!JS;W;`*y3{oH4{$xCm5D_Hmh(ewDu< ze*n}k05_o-)*eyXkW^!)C$JZTxP+sOmbmIeJn<}E%U0eNHkL*ntfqm`vf~B# zQTcf(1!)D+WJf==GJ9Gr^%yoKgav}jdX^?&4(ig z*{-`{&4dRBou$^`mo(9HfB;~z*H)BEot1XVM%4&?x6_PaCH)JnyGj{ZVG--Vg`135 z&&{yqm5Ku_9mfP+cL_JQGpjp8-%)gr6F>z^Z(gWM>KyqdmlOUTX$E>Jdii-!xK~p6 z=kXP@?@_Ir3#&gMwuY$5} z80(4><^lvTQ9Th8XNELouLaW$3uJf0{_#tNyn;AlqEw@6ma0JG%ZWXL@#1J=#Mz~^ zwlCvxtzPR*lZDh!$$x&%-?=8wMo?@Mh1E#<2_&Q=jqn>PWz!y%I@StM1fu8<%j-Q( z)ctWpamN}y+A#w|bpxt4@!nLs?Lp+0&}*9@DmK*Kt;tIRG0~Ue90PI!fjfz4DbTU# zn_zxIK|4&N2DqT`3Kj1PVhu8M|LWlMT+udSVUQgr>BOsV=}Ccg_)+AYoI}&dmFu&= z*^)Ypr9isWAR_Xcl<=P8iJ={A)ZlzQB;$r z752|{FHa>o_<}N@!RzphC592g48xqN5A(CGa>Jsu!K+jXg-Kn_R zrf1oriJG=$M>T=^ z8`)yag|@u-kz8tQZC*z$HZVS(VH-yrYPuoVKk>y@`6MV`Hg$Hvuf);Ff}zHbf*feW z2!Guy9t)l3{h?fMw=sM~$&BQ;!S&SptBCNS$U&obcs6!@$C+}nf?fB0Rtx0_eaUUA zcD+tBTFvsM=nDuhRjG>_y+vrVk{_WQ@adMjl0JFBt>kl;RAyk&PG1!wdFaZ zfe@QJA6YYDMy+p<}?dgRC*O{V|9jieU~6YYb$TCt!o zNj(W~2KC)ZR@n_b>A7g&Ny;hrfuH(p=P63?y*}p$=5G0ef|vDyI*9aDVCM(k37CUi zfm`d?#L>YT>kCZew1j)9{~(#c?(!&BV4IN+jGSM2@Tf}JN1-xJ$jYQK^otGE!2EVm zO=L)pdOj1LcQhafVwgWHtkSISG7^SgPlZM>#a;PXqO1lcXyf~?Vi`MlYSUVxQH!4S zb-`<@EvbrnmdE7zTIhlf$-OnuIJl&glRPtfwNiQGOBFip3`g3d2@e z`?x9ly{l?YR)a^vo#m!8|90MGTSl_nR*Tlk%>4&#BKD2o|8n2;zH{rD#U!MF*{_5` zCa0;~xMSdwV^rjYw{`!!OA7bw6K;6G8GLKs?y@Bhjo5KV?^2l(P2_+$2V@)PIG+<} zw%A#Z9DPntTj2B5<}+hKwkl<%MJjDMvkQ&yb zcEqUUf~LVNh!+xoU##zPhh(RywA?Drq@G)H7T|?N0FJt$n0EvHs=%UfRcW-8ZEab- zbYrD*s6XsQLC7Y)Srtgdd5O@HDuWooto>3~?l%yAW|0`NX1y1K=m&=KHC=6&VGqpN z>L-FIXO|o9C;J%(?x7Nvhu;c;vgb}0Zp)WZ^J=dP%a*c6h^J}PHX!#)4bga1PzoHVjVHu>l%^zVbPOPPapDl)cUYp(<#jQVx&O=jr=wk7s^t{w;a?Tzlud%pE zEI3=n%AlCf)>={pwg0>;Dg<@R&^P|I6x5#7gBHA_*pON{X$|_~?5m2tW}(t(?UC$} zd7VIejcg%CSo|`n?G@~(8Fzn2(dTk%ty8rb{vO%^EQ*31hsGyXX~|O((wirG&yE88i74@rzX=C5&&Bt?_S69Q4dpa-YwBUe(!*Xbhx;ZY z<2lSxOU`6J!eUXg=7K&vsAo<=5NJZs@LLi>13j1| z-WIPBo2NcZhs8jCC`s>5NLhc}i~BJ=l_I!{F<-DH4V-FUz`_QU(k`%C8UrIj0Z8E| z`8>^BY4;m;4!VEgBD!UP@BkQD^7SBc=Oo-0cMt7o;(ge^kUKst={tsr;~=jFuv0-- zoo{c7Teph%gD28q$NR1k>TN74-eb&RQTE||=0>)-h+I7vqnD^~&G41XG0=~Gr2P_3 z|4t$Sx3;!60ca|#tgd-hniKU+gGWG3jVI0mPz1MbsfAu`8W$vcfwOC<&p@gshZxtQ z_2GHE4}WYUp>n2_0ankPPEj={UTtA+GXJZMcipIDA1u{qZHq(O4lMqr>!mMm7+w#2)WWu{%uT$}$$x7L@x`Sk$MI38)2h=l^!`EiJf{%k=YX{U2 z2%jAX`IXm(ox?Lsfou?;TK+ksEMUlA1rR`;A@lH&$q%)A1Gx7mWk9pil{TmyS1^&W zqOUo>YCi7N_N7J_RC(^8&>>70gwx>pdF?@M{JiR(%dJMp?Z?eMdO4Wtm&OIVrEs{W zkBh4hI7_`>R8FG{=Zca92EP@D3HRq#`%`}HdcF4g?)iWc;BKUsN&2T-n=hOp+#JB!z}QZln2kh`i|}k5 z(2VYadV-UcbJ>Y?&4k4S=%w|kCJgC`F<<|;iSfDE+>K<=fl%N06G7X=vEr385%E&w z?Ax6tvX$rV){1K3-m}wtz^j+G63L0PiKcM&x!d+sT*h0--(BiBdPBD{{9U8*;`wM- zbv_4J&G<9cCdX@xXY9Fh{v+H+TUxv15D$x#PR_6HSyRd=*r%U~v&YCEs@Y6mKR|E> zUtJkLWk$hLvgMfdPLofdGkfkEAB8zL-D`n!*Gr1U#wl{8guI-qhFpTwh!OwG;@2*Sk`FB+507B_#12CdU; z{1IpB>jvWeqe90SrXvT;v=$S)P|%G$6nKz6RJ-QSRf%i zW`CJNf3|FLMJ{zM>o#=lWS_{vw!JZ01mO2D;AEf&rDSIwe!?kikf%gd+gMrn6+qZc ziRuIE!v6i~?POHwV-D@XONGBFlHPq|u@KGp!^lC-g;+7yY04bGE_QC?Kx#~-i>luq z_TG?mEf2Hc5uu~Ub~E&_Q^ZN_xyC^FC0*)aqkr^{6B=tsxume1%3~!rsLzX7d?N&% z+=WIz0QpM3llRUKgijk5X?mTddr&h817|DXPJ`7+nUH=V*M>zgVg%; zoJ0plc8C$$Z)!HN7d`aE3lZIOU&ii&5ff+P6-tW5ELDl;9?>SNN%o-go~n5q%s_lZ z&1RmtA7FUFlh$j05U94`Tfw#bhtBI687@B>r}P)j3J(VQZ{g#MAvae)Q$gCHO^jsi z5#2%VV``bYuUeNr?0KWq>o9wcDD2HT}``+c(3+N4~Gwxae4go|_ z_U4TS*5JG;wdw+&dhHx$%$}#0eAMC;vX|li@?hA{hjIKa;|f~mnpvx+*urgMA;Uom z@avzV&Tf73Ce~Zi(oAZQf%{j*({u5w9&dr4d)0rrGrNRr;345i9A|b zyZBM?q7OgtL)*exa!|Y)7{Qq6CG`REBGa`xC2FhDHDo^;HgfeCXS$)pteEjC-fU~f znhAPtGHxTTmv~k+pV`%?<8?M&8yM%5sM_NmdEJNHgMy_h%s<tr8ADfNFhR21eusMC=p_8hw_a@$pH zzYRzKs;P+35aQ<`$n;vq+?E*_Q>r$*%U$>_!Bpq&Ik0VLURN96sU3IfS0hM!-k$pC z9^q5ecSTsTnb5Zmu%#k}oA$_o1$B1#4Oc|vAWu*G$t&K@0LdIzeu@R~~dX>pJAK&=p1+P?fCy9@Ac_-*bDIqIu@yd~Z-!y%Nxe{K52cyT_D z(JfrnSs+S`?xbD^Z}?H;K)UN`?g|DqC)6k?EQQ5rzvKz&P$Hc&0tSQzYo-7YzdHsp z(QjUUqcITXV^4Ce_&yx%FFB$e;0zYdih4vfynK}*S+qyjdSl~a#VF|Ddgpau4^%+V z=H7rzK*_3Upsyb!J?ec1>!q*mmwVAatQ%pbETPSP+)%ll zw#j{~=k2qEn_zZjd0VmvrtEttJ;jh0+8qw;$DnI{aldzB#hHSUPe(Pp)`8b2$T$7= zFWD|ci>jjmRPDS?9ni&%eN)4-)F5#U!RJHe-TLlfg#emV(%nfDjr4_A!fdo&HLbKh z{pMCBc@K5AAZabXRUOy{oi5?q4$@!RasIs;{5Sl_WDiiIdg=V`N@nCs(EzL|k!%VM z7ijIm*x6}ZmhC#mu9o`qG+pKfcPsd(mf!`fVRBdAcaDPH)2Lg*&9pEC+kA=jO|G5% zsGvFArU)uwZNMI{{sKvd7Rh!LqI(M$_S;%!>9D?g8Ex%MJx>`xc7y=c|d9J94qU@DMsYq{`SU#}S{D%Svs4W?wxL6!D!!(0y4D(l>_?ad2+M@_F zblp}EWz%%gnsS`>^*!4X#+rn-@dE1GleUMprIiiP13#8h?#6B;P?y`om{f;4?~eQK zT+bOJzV3g${|ozi6o9oV%v0g9-N>MQ_Oosm1(=kn-oVk& z3uA|OMb|_Qz;<(mIu>wQ-HagrfX3lhkixPMExMa}9C1UvvkmlGW)iWbv#IOlHvsk; zTQyD>Wxs|>;KmgK@&Xl~1C$U2O}|9arB=K4fsHC|&sLx1Wr+`?8M1#=lWpkOc0k7N znv*0OQBIT1OYjsTdk}m&5#=@JEi*CDPmtYLlm9pjl?SDjJcj03I zo>h4Mx*TQg&aEbfMLLiic&Ox&5P)73m}WGO4-?KX7mW#fM>5bDULMO@HD3#!@I<7F zviIr_MJzSmr*4vip<}ZuUflaTujtHpT~7r~ew|3GJFulAwu+1e`ATR5h6!XU`Rs-z z_~*_9cgmq5z+`!IAP}K|Hf2>D)2`moeMMWj`1x!jWnlid4!aTS23)AN#`PsT@7H8) z-*d~8)lLnaz$^FI{GS1`73uoK;C1r*VZX~olCDzT*x%o{fY8&MSU&hj<%A!X{RuZkJ%i8gQ4GTrhi1mvCh>worWNiIK&T3D4AhrfAI zRE2{EEb&AA>I@ws}y52QWsG*qJ3 z_Di<$x|sgiUSlfSQ7)ZR5p!@`&zn(efBXwzDJKMX<2r9c-p6yw2r;e2y)IMNH%&lh zYKMHpjBBYXyp-V&Ij-hQ78Fv8+FxkiDB7W_?EsM z|4K+S$xyp(;ih=1BCr}y5Y6fFfCXh!fY_Ld?<}B6ha))<09uodh=%)cfi5y(FH_d) z)a*T47KR*j!8WcKos+rkPYM1!*S@z+(SzRqjR5w?l7PiS8@P4unhg~Zsj)$XJkryC z26Yx1n%VGM#*JUGT3$8xf!SEHDgq{J@H^4-otGhvX-lB7@Lf2@_dU2DoP|Vi?}CX* zO+S`=gNFiq8<3uz(e@yxj0p1)1G2kaz-Bl3S*0Ew;LJ!<+DbU=jSYnpac&$Vz{(Z* zqMpw(W-o~i^_x*@w+z@pcenf&B+!_Wp?*z8Z};0CB5buw+GGT5KMq{tW_u)kI!7rZ z?(R(#QD9QvBvZC%+hAZ+&3oLu{4hz?2X4*<7c?BL?5d29U?Mvs^g#9=$`j+m3je2B zbE%iv^v&7k``gDFsv={@E4yp^;}$E6mgk6!xUd7D%jE|F6KSOhW7#Yy)m3}4fE@?w zSUbp|P8_4VDaH^5xeJ`#6@1$$N}_EX9<-)1uY+!hCsJ?10vOfqAP0TO9t$Ze#!?MA zYk`5kf0zdx5^rQ&O zKD}fIE5dtEg0444bglY|D(=?s!GWS7tf8pH9Jg(+M@Wz=@ zUC_&)`Hx~C3T8Is({DSFj@D2U@iU^qL%N$qKfBojDBA@_&IV160oBgCRORhp6Zb;;x6@`p*I_-tI z$eSSp^9~)&ki#%UV&lR^+3CUcYHH$2UmNADxl6^d-8k^g#<<(rTQ#6tSX9&f!I(h* ze{e>38z(;RTx+;ru`$;&=Ql8Qm3T`&AhVvaGb`v_=e$X@yR)VqxZTAFK41!%I`#;8*ArV2qNHNctK%Um@4IG;8sTn zpWZ-#80XVPPT~W+pXVZy=(Zysh$iNE{wsT!;V)xJ0o@vTX9U;RKi17H1SrVk@qEa? z43&%3ay?LH3k@=;!(ssYY1;gc45KgBxT+A1G}33}!l+%d1&elZWt9b-3!q@YG9Elp zCA>a*Uc6^pcQAVR0-YmSz}WWNRGDW$^~}iTUz;+ogPqqcpd{FuM2D}Z@&v>ysYsxy zOo=0qv(IDQ2>LJZR!> z-aBHz@|NN4bw(p1`%6LH@d)mW>qt@e56T2V%UYSX~+H^Kp)B zLXfkDLkhR6q?&N( zaqSnQ!nvJSd=U~pzS}3sF*IQ9i{}H@t$N1#o;2+C$*`J8mzlq%yc2uFBWwZBE$u}@ zz=8kg1=y(Qb^!=L?*9ltw;FO(Te=DzR1xBeCk(umgYQ1-+f~VkP)c(_0m?5;F59Lf z2Q>caC`&>*H3BzT#l{E%3B=F9*jc-#!2EkS*60z|RN_|JM;&FLw>0XDFrdC7jdm!| zg{*5^Yi6!sWfMCOj%-5BH_b}y8f!269RKx5u;iOV^zZbv1z^+MW&-LR?E;NIE$PG8 zbsJ8`f7jY2p`mlzyZH^HWuo?Y0GP zvz6X2^`uHddk|?A;nZd?$dE<%VTee@${SlpHJmsc5s_2_EKYk?cUDjs|9w|M&60`O zwXoaPs8&}ai)sgZ3iQe5AdURmU(Q|xb!O$1G9A`>K_gfc;ykzJeMHU{QnJTOHU!6K zzC;{%bo~WbCMC~Rz!j-Qy&O?pcSLTIymy1*#nlH<4aD`BNnpUj1Ix(awC5u>Q;H9+)V`jxQ{nW@8 zP~Vol7I}!YXx1&1?l@DK#`7O`r=)~9G=^juzd9p`cv!i!qf1dOSMK6NbHHh=8ld^O z7<6e6P?!`$R4rW9!KPaJodU*pZd?Oq0!z+B_f{xdGb2k}ZG}F>dh9lkbW|>8@Fa{C z?B=EsE~^(%dK&oy*f4oeDf?9WucO6}Hp~2R&Z|&(ZBq%9+-td!0`{&})A2uD4`@rE zWUA{vDj@n}EZ;fORtirRL5!PeK1La{?GqrSDaFpmlda=E8)IQr%E=zA{t(f5tJ9pc zi8)Cph%XP>x~wll{dD^i9Rh*;D-qzl6*K3%Js|ouAk@>S`x!{_X91Y7U3MVR1s3a9 zt9*#LSOs)EkeRE~fYB`&PdY%T0S>}1;f7Myjm%jB`!+F@bj7sR=Qz|{MQ$fAPI{K+^P-pJ}+Et%@BtSy##np z2$02zUB%&4UA7|+k-;QS(gMf6SY((jOV6K;_|1c;ZpF)5Dg{lf{5{~v#)(RS9I4k9MkPCIX zfZTJ88o%)n(%fnWiw4{@M&X@+wfzYpSa@@@cz*@If*+-f+nC6;Rc-Z<4T>1!MjZ@U4-}cG z5f4$Axm8Y1^mLB8*ZDQ~QSG}`nsMI*f_J{Ihlp`6N5QiFQfr&?kr8nKD-V!(n5YDk z@Jk(k9cY7uyu?kNjVx3i;83GC_n+Kqu5LB&5FX5!=us+6>UlCHm0#vC+>Bd*>~_g& zG2z`$-XckC1a4bxd%CzK_404LP`%~i<$`uxXD-iWW}*M=rFkq3nEQJfh|JKl(=e+U z`-#s#?6=!ZOV@kC0CS@$8u(U$R$KJZ5vTj!^d zv#Jq+oSkey>t#^8I$aQGtf}4zc7pVNvuIeSBb($k_84?o0ew!)QPbvzW#0zoyrfn% zZv<;r^C`LN{Ec58(Mpx$#hXqAZt`rWS)IWGo6i6;2sD35yElL!kn+_7wFW-gThnwto3WH=*va$7wr;t`MQaF0V{+=AyFl-g2BHs1?#H?oS)K zC2RY7)K(m>)zB=O4XC`OyX)MNV=7-x{PaOSuH|Q>FWqQ1zOE(0tv%Uk=<1ls{L3-4BcJkAt?;i3(HFy+nl;xIM;sE{6%+36&n1RMe@#(To ze<{$~dRGl}QDIYL9NgQ@sIHq1xcMK^m2=yVa4xL`R`vH4!l(H zL}bI)fNOgnJH-*SSq^ln@OW4sr3dNXW)(fzj7_!D&CJu*(R7dopgNVDk*e63x-`-u zQb*fPZUsP{+~-%%sGDBGbO8b(;&u};t2 zrZj0ff!nN(`uzHA8sxcX)~mfPtblGE-s;i^`Yy0PZhg_IY;xkn_QhGq(`%Wt_=3V2 z#RCZS99ED=~oPOG;8LN;tlNTDY{1P`WlHhge}9g z>g4At{Dw)%-N5s7TM&Ig>FF3+UY z9FXCbbynemk{3%LAy#3ST8Av);as2+)f?2!F7QW!CE(i{^b|+Wa*xJuj4BTbSbIYf z$JD<1re7zgLA!j$|5vqE?|r-ZkUm5LE+?GBFTfW(<5z_s;kgkteX+!cRyR}R{rWR<=vo2YzO#!E6$X={J0wW<(E2Fs&ET%>z=)T*F9oOG4T#o3Q>x#s**?uTxjMo&6(l+HgfFKxN% z*byUU?tLssC_|oTn)6+XO;#YxA?yv0@0oF%m)02F02iOD&ZfHL`zOsMEkqJpkq$=g zEmg68K|QN^7fHcfKSYw=q!}(5-S;DmCWlf$Gue}#b8MqK?HK@}k{OXkQywBql3*AG z-r{6|o^UW)UJbi6!^x|P(U34HA9LgYB9T>X#n%=5BA5pcFe^RePjb{L+D3 zF|aeIIM8q0*DXR>^rd{d=tl)ZyjKYLuS0nAOr zWmhv-Y!ZLtA{%728aYWM)|iJuT^qIhBfiTBo{vFzQ3Uaw^4+o4DT(b5?i(4(4;&DG zEgfCVRh`{EA~fzFb1wr$jpWt`=2%rU*nqE-CaRN`gtz&z2`q?p?m@ST1H`}4Py}hK zWU4ZLQ6*h|vwzx~cMZNsd`ck%{Y+x?SqYYMA-^$S9!4nw<)8v%Py z?e$ux4hDH;SYsYeP20(ET9p+)^gKa?P`K+I$7oN6&HXFfJl7<@DCW*8b==Czyj6#r z)|P%OGHHigDoDnDyx&*p-@otj&CPJ@rwakpN)W)d$#0-VGo_5PP(TV&-ijoTmV96&jm`%X!LB=wB0HW=|P?Epk(6HhWg^{0LZ2{BSFu$M#@j8b3d%>Z2ipCTM$4>l^3bb zu*(E)`O5(erColum8f7lAa%B#OcpFLKv8{=b_xF9wlh^rxuo0`!}eErSE|yWNNV87 zoE5e&E8DrGk3R6fFiu0f=Tsu*oWWwz0HMQ5e0uHU&}FCD*c;vt1*e@~(vT+2$5WDW%Krk^p6gYA%<*IwFw<4AJ|TIr#vhMg_!4{?*s zc*sfc4kzmH#9iVa!2G{^L(NMSXQpkO!6_()*MUP(+vocxLrVV*A&a7mUH}Hyl zs$^yAP*;X9>C2#mX`)FX0|;owt<8y%@0iEB;l%ER0GA&7P8Yu0_V%dMTv7)%9>*|z5q41$%IUuvTkz<9*PZ8`cX z@7^dxpA!@EGS}`Swh%9s8i^Ul2T1X5qn4uny#(_CZg#?tQ6(aqnFQ0iTW=dZ$V zUF7<=CYRlv*)-X3JR|;kj?1NbOF&x@E2_%9t?N|>m&p}!3otp{0c9i^i@n0PFYh42 zbDqSNN1ue8EqzulwRR(4VXG~s>rnjYZp&QG%-4UqpMbJZY&s$0`3nhduk&TgD$3F8 zkcu&(Iz%edGMaXe71KuAq8aVLo3BSm3OKpuv&(=Nue`Sh&AB2#`%~L6)m(AiK7HsaxsKmH8l=KE1*d2WKF*(Nu;Hh@{ZC%)32Ld)!gq3lRyA)e~=bp+K;R1Y>2kbv~gFY`#MuaHWSld8c zPTBYPrN(7yD0^gJk!VCU$^DnCsK(QIfa^Rrs^uR``8Q(pvIrxxqV@$`C92Dee>Zxa z4W(v9Kd0^u`Don9iVX#i66Sk<)=qSux72tXiZ4c4Nyf}bpnI>=87xtID-dy-hv*15 zj*4D$I;HmVXmlG9G%m3&yvBnk{;d=j&#ijguD4heGwiZ*?{x%F8dTx@0o*b{yB-0} z{EVq0u&J_%LDm>?;~(^BBs|*z5+j$4+^b7d8Fy}vJ|(af+Ry;kE!}K=5z_5SHLUD+ zPlkBcS#?Ht7h2SQ!frh792%DuhjlwZX$epI!2rMiC_MdU$GU58+0 zmB#0!IxlQ_59XHj+$JVgce9KsZzTqep36HU1L||T{wQRsfvz5> zdo3gS9fFEr=U-VH%sEjXQ?+GA@DCul14h`mvwXH(&7s8(hczUQ=>!vptlITwsx9oz zhkpJv-r(h`)7L}xZ?Pg3Hy(6L>T9eDJePAyZs5rlwRUZg(VrB?IlY@aBtBCM>j0&Ww{-*dVSUyyU5i9 z=UDI+!)z}(z+J*q(_hVV?xu!+Wo&x&;|_w zoMdEP)lsi?bDRbbTElpr#`)LyblwrNU%-n9aWhOALjE@~WFhfN1@NIZW;fSe3{3$2 zYyV>t%0js@#!xy!{O;g7nSD%DG}i$y5z0@w`Mjy(Vc>W2yk2LQP@;tyvT^x`x*zH! z65D`S2zvt_T`gBEfJNFvi@{R2pD5({Au^!faXDvuP_P48OS!5Q^Qd`T{<`wVjvZv_ zajhT+@zl}C)jkX)zGt1$u2+G~Spj$<(08Moznk2KzNa!e#r0@+g8)AV|8El>=dG1O zk>~#&&BNaQ#vJpYJ?NrOh;jxN*nkBL$0&;9=z4yBeQQiN7nqcJC13Tu9ved2YWJ^ z=^o!2Y9crXiou~fziC+WNnl}s{3DtFxbLo$>Q_#kOF;Wj^>1c%jr{7RFt}&wC;+nr z)fqmbSXi_W3jn&?xB7mp`V$!3x=G^3u_9>^-7ukwlt_Jcc7Q=o1!v|-R}06YqZjt} zmrCPqYLtF`shVEz);~Ujfqa4g8ITNS+p?CCLaIYtb4#R{bI_$Uqn^Ycg8VXmFx|BD zLQ91*{~dfQ+#DRn=3}%IPfyHZ8>&dvSHVj=G5v_qXv zUtyk>ng5bFz-5!rWKoT}a+)}9H)sMsETX`#Uo`VjVTLDRby@V^_K}{y)I446kIsy= zbh+ssdufn77awD(cw?&RW=ZXQ+20W7U+a9GI4suu(xR&Y|0jTzH(RbsfE0eR>ZX6a z>*>-X^~S-j#u zu3Q<;v*s^q2B(kQR8~26tW9|BjB|W@L2c7vf?u=_Dk5Ku&YiU#Ss&yqekN*K{O`AV zPHjT%S9=i71;Qw)N8~wyo<*oFj;eebH50aJFIj63^YY<28&LwxH)Ft7nS%6(h77kx z)Dd5EMel|s+GrMx=dctrgjHWwBv-%C*LOb4ji5||=jSsZru%dH_BPh1IhF6XSr;xE zE&~xunEmv*R~BYX8{h=+``LTet%JK%pw{E$imHQsGj}Rd8fl-y)?23wET zblY8P5i~x+go%Rjgsacsa{{&|qzTzp|Bx!HUEdZHwH&YQ$%2F|@QBW1pQRzF?@T3e z?4meg#8=;0!;>&jMe5z`E%#9PA&Bu?bApa_dDQHxjL!Vg@X$P2a?Y9Yj4uBA3ektrwP6Ow4IstS<<-Z^ z&CF0LR+8;^U>>f}wdSY}i5uHELQui5AhidG8A#~-%j{-(qelO|roLSpd@KjK2MJnz zUaXjZACaTtnqZkT{-p!Og(3Tm3nArkzlP5o7Pl`(siNzA0jFcZX38bc7uMe3pRk7S z1e5Z_v<#CM{J2opmE;LVCb}z`nlYQwB$v({jIvba)&xL}`9%*uK!!4s!SJ(-ee3~{ z;S_c(ofnspwyG+~w~?~0Lf)^lPh`Ho4vhc42mji8PD{3^+$yUi2fHMSXI2u3^ukx< zYDmuDjn8MFJOI{%hXBCtr8@*|eWsdtH`yjmvLfN3#?!=6(8lgP>-}dxpE@xlEpmLN zCEZ_x*hJr;`NA172`}1MoqZcBS489Blv4e*wcB-f1>$VSFiXD=8TRd z#(%K2m~0UeD@s-SjhuykTU>qoXDQBopO|^Q_7h&`e83Qs$rG1$9=qb8uTT=wSa|0tI%SQc{u+qL}0m6t|;{d$7@86afUv& zc&3pt%+sLV-WvijWF0x=?uRy)PMDQmAoQKKpX}~|`mUySn(8l~oGg#E)32;z%64pO ziNCB`ffF8%Jea=+8^~BFyCE8w^gaX}0Zp@i&d=J~$&TFC)iL0Wtxe4vHMz!L5+HHw zrE`V<#s7xqD-+suDjN^RZY)!ph@_Pgx

6!f zL$jUhv0X>RoZXVs(q!)~{wH#@-)ulXm5il6b7C05vl$?*I%T}fvA2*z{g3Pf;Y}bP zY0iBElIa{7{Pk#ME4AQ#yKV4c2oU3K6)$vsxFHj58SwfL{Wf{k`*;H7)Gp_*>$W9- zO-7LYYc0tFWRWtYuj(Il%zIov;lWZ`2-Orm0WtH^)QkdQ6cc*rhg6-xcKe)z9|uvd-JE7v)CK ziX=?+S=QM?hSa7epg$R!uXFY4GayeE9s3_m)f|pZ4RKKq4h$yeW#CkM70GzuD@-O zchiXav+5a5%z_mm#C^r%wZTQk|AesW@R!eGIUA4WLm$$P_{d1%v9Hh1DriuBhb~Itj}E_r66yl41z+5$yMSc{*e;TB44;q} zHdNz(RcVq7CE3!KCF0yOQ`=fd-Cz)O$^93%T>Cv(KG=5nK# z>6G3K(Y`a>XP``G>7F;(1?s%6tb10dBpmNZ_n*{c00v4mzw5X?DEm|r1M^9(6>J~4 z=Gsp7)`_xFOm*ESx|M#Krkdg1z6UHFZ!p7Vp%2rpKEHu=)!CA7S19cyA5yV@NH@nw z991DzI#fs{&sQ&vr`<{41kV>$3Td7jS#sYyYX*}XofzEw+AQ+!AkPITba$bBr&`~v zEl%?BY|W;NUG0-qk+(%5s0+%8JF$KAIcfVBjp10wlq7P@Fn;)?YqQCe-!s_Vj}JtC zEf1=FPMRwiUuCfkH{RSyju1VoM<~z>4zlqvlJcFIk_MKgb@(Y>aZ)67^#9)mJ;vT_ zJC56KF#(=C)G$%+r@$;VB}V$#5{J@hMe{>eNyxkaR~bq1M#HWH@Dk9WJdoi#LoX- z!Ii|@r4;pJ$D{v`cgrttqzp&_oH}%TN^~BZBLv9}JH~+dDJf5F5urEM!OnFfI;zT@ za#hzyJQNima3eYJ-wDm3Y2K-R8{k$gZCvQ8#B0|NkQ{fh5k;`7fPOobjX)1USo>-z zZ+1uUC1@`&O%W9*z5~X0A$@i|SN^H=F7ir_qXi-Ykd4+KE3Ly_Isen3SdcobMlV78 z3m$|460$x+59u|uJ!V4p>-fF4;>)w*UO&H(sk;lktC{?9uw`KQ(~2QWd?;F=GUzOY z1U>!Hs;%v5KCU^%koCJMDTwH9;kBA0DCw%AA#^Qcp$9^A*<>MWAJGqDv>5R%kObc6 z9&WI!^GG5$4EEOrdc(l7-axrY9i@Q#LkbEi%EZJWoSGFl-jl_A-rkT-BQM}!0@3rNj|$5Ke$lHD@>maer;1x%Ar8=2=+8-8l)0ZbTxY+!vYBqSy;`rjP-)eF!Z zNopi{d4WO!X$*$|%o%?u84|FU%GDWUtCG61vWN{!hCG=F@)c(mn{xR)Io;djGIiW! z@d=VJBGKw{$ayLVCy1J1Uv?4=^?j#&TpLA|<|d^m(I@byV0j~Waed27B|w)Yb7^;M zs8O^B^;pnjKak(hBF&utHS~Cex*U0N7BI=(2VFPisveI^w3-D=ekiOWk?JFht0dF6 zBCj9(x|$l=-iQp}n+59eViP_asM%S~ON_ggMIM1uyLpoUqmX{wuF5xO+e&5u)&Pt# z$dT<24y@a?#i;lzw8YK~L^}3RVBy>Fm@G`r3CPY<-OV7tv9Avx4(ars#G3?4A6cyf z+O^tO_5r->HQ3R!&>C?m4APKk;CDF?m!tf6ZzOuuquU`3zzP}ULlqzGTcvdf)i0QC?wxSxl=cp`f+!u>z+l; zo||O+`*ojF6hrfX9u|(A8w=q1ee?;dH}#rRf7ORnpQXtDyNmOC>*usAXVa;+wbLcp z_em+G%!2?DhNF~#Uru@d)(}B9s+2&!aG*d%vAc0e5s;evc@&6fSa~?q7b@;? z+5!1laigoy%&~gN-5dJK$qx4YVrp@_b&lW!>I@nX6z!{Sq{?vPheqhKt*6>|5*<5i zQvR`j{seTYKcO4|+c4GD6uqJ%*V~Uu6w6NWZwFrOH_#sl7=RbO+-O8~8cjo@RfiQr zZ4c_w*vUahRyK0?lL6>Z@_?dd;F;QX?fQ;w5Vv(*t9Cv5ccR5xlnl%NnjDP%zxpJy?~iC z7M*had;7@#Spm}ZYJ8pJQkD;JWrHd4P*9=UNyI3uhrfj5b}kaK(euX8h6Jy-VdZ9v zo5LU7g(i-75#=N_wNyDoqjvU09v1j;*of&UE^a+qG&#r5qG+!o$bsR@xz&mUvZI4G z!sqNr75xby7SD1?5baW*XB=p>iV@~RF$^k*W{V>>nn4eCuScYuQ9RKzsYSg8g=61eNgi2*h zGgZYMNFm_l^dEC^B{>+LU=09t~#Vm2CFBSDbNL6Whs$1f~TbqgVr0pXG2X#6GyMAqh5nR+)iM&RcK`|IfY%~n+K)MLX>6wSv;?b~NK ztTLe&h^}H*+KRWTomEx5!MI|OTUqll{?*3LI7@RhMDZaKY~SulAqJvsyczdi3|kMk z+d^#dep<}yEgdx!T55x+0Rm|y@+P^=461lYXQ)#K>PC|lLgCz3l$jv&ygq#I}K0pBW+#n!RZ%Bc5Z zlQGd?6z$&1NeI0suVkuqrW%u<3+w+LnuMW=uIb&^C>HWIDR$i19wNNm#P0`Y|3BVA zBVoIU-NqD@bDUYLyBqOl-Kxq-Q%JaXJ=TyQ9Ry{7Af8ZPTwyb%njtD5h%Fw|m znIP^;7C&O{&)-|l&K!9^4Xx}wWT(Gk@FN|j?fPzceUKe%BkCD<5E1)sW>L>UbNK4d z8u1`;oqk`<_;G(-b~_Pj=P+m(EioPIbiq)+z{~h*>y8%r<}5nS+c9hp{^xZ)w{dc; z_@i>qkAr@V&bd8yu-uCq4$U|RElkL5-J%rYxyfr>+^?v!Tv4YYO^g4})dpZ2F{vN; z`Ubb~iYr-u5hT~|S*ShP@*EH#_G(5fx%)EP zjJ_x3xr<%`pKb@qXYXl)D?w=ft><3{LUKx4@DaDakS_F=a?gOzkV3e>;ox$bLgZmN zbAI?n{M#>$YbU=9*k1j4Wg%+65Eq=`9&Lv|2@n{(U{H}~D6a!6kdEHlvM1ab;(3SM zW6;NSBxRda*)|I7os@GtAGdf-yN`2i%Avu?u(5MoLvs*IKT@1Iy4Z4S=~|da_g(7N zo_3oNtoAwWU~b&z9&8ArUpT9$&#Si7rz2VrbiYc-pybU8J#X7W?BbPnCz{c(0&?8^ z$UKVgD*suP&*n!AAi)iGN@olBY%de+0`_3LWr!6f7D|EN%BN(_+PYb@Yc(qyw13aX zYu4Gy2jeUUykk*RsbjwFS(3bLY6JAyLoQ-zRYz*HIpk^Qy)t@pm7;#3B&mnS zsFrRrqy0gB%OGf7bQX;_u7@7yH|Wt%whDMowMA7tH*rZr-3uv*U zeoaTq{tG=*ATy;T>g|K{P9K3n8@=3Eu=kd`TF8V{gzvC7?e5IRmGF)c;IbGxS#$HD zFR2^Fuh9u^CmS`8Rg3vF2n_yIw9iOc)+Uvg!cb?3UHBOC#**@-_K{>%{ESZo@3*|} z$&5ITuBR_|=+6YmV+~1rk@iB8O4=jZ%W2K=}5$imv0>%RpK+cSl?d^ZNQkEE%qqS@1B z_E^*gZ^c33sxP06p0e0OR%`8m4>5vf@ssz{&7IMTj?F-C&iBru#zm{wjIpR+1Bm?F z0>`(U*n#(x6f3CCS#h}EWC@~|{ z>K^Sex^)~`QI>S08pnE73(kDDTsD0YpFV5B^M^l@ z#5uc-xcDW69!?%ZcfFGh^(m`*v31;Lt2J$G6WSxC)qC5n;m5NfZvCKe(kFC%hHsj= z^=ag0d}J9-%lGy#vCDqw}1vLg4qof^Q5~=h+2BVY~T6@j03|!8L$R z%tWbujx5LA9tBoElkod<%(x^W@om3zpaDZ1GiTvg!e9xdJ=4AjjLq&*zi%t^ zlaxmoo%UA|XVA0k*<5i((?Pi#VEX(VVXueas>K78uDfBpV^Ee;8{FdQ06&_xH_mrl z-u`+0{tjEw{UKLo`O&*BntsQl1ee)F*cr^thDsPyL?(WoVqQH=l^+d?SvNHS{9w$F z+y`D==%`xV5Ok2GdCW$$EcE=g(uPSReu0~K{?}*A!V0pu0=b-ihi?`)<=1ct^4B#T z5z#1|P0p>g8TFv<(fKTVdKl1{Voz6FykT5Bq@~>0Z^pSA9Q;f9-;VNH$|ezE;SHnM zxAhH5Ox9+SQSjv|N$v*Ow_6`W-J+q>p)03UTWPW=d!^aGRS)vbqObh#2O~Z?wAmF`VuGbxv7CI@$)EZWTEv-|gnVm}dqDT- w{)L!5VwNjAWp3>1GP0ktVl~-ACiX3B+gNFN3_H{aA>iK;53fUI2ZC<>e|wfB(EtDd literal 0 HcmV?d00001 diff --git a/Source/ParamListener.h b/Source/ParamListener.h new file mode 100644 index 0000000..b6d19a9 --- /dev/null +++ b/Source/ParamListener.h @@ -0,0 +1,25 @@ +/* + ============================================================================== + + ParamListener.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +class ParamListener : public juce::AudioProcessorValueTreeState::Listener { +public: + ParamListener(XenosAudioProcessor& aP_) : aP(aP_) {} + + void parameterChanged(const juce::String& parameterID, float newValue) + { + aP.xenosAudioSource.setParam(parameterID, newValue); + } +private: + XenosAudioProcessor& aP; +}; diff --git a/Source/ParamMenu.h b/Source/ParamMenu.h new file mode 100644 index 0000000..4ebd790 --- /dev/null +++ b/Source/ParamMenu.h @@ -0,0 +1,25 @@ +/* + ============================================================================== + + ParamMenu.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include "ParamListener.h" + +struct ParamMenu : juce::ComboBox { + juce::Label label; + std::unique_ptr + attachment; + ParamListener* listener; + std::string param, disp; + + ParamMenu() {} +}; diff --git a/Source/ParamSlider.h b/Source/ParamSlider.h new file mode 100644 index 0000000..635843b --- /dev/null +++ b/Source/ParamSlider.h @@ -0,0 +1,25 @@ +/* + ============================================================================== + + ParamSlider.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include "ParamListener.h" + +struct ParamSlider : juce::Slider { + juce::Label label; + std::unique_ptr + attachment; + ParamListener* listener; + std::string param, disp; + + ParamSlider() {} +}; diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp new file mode 100644 index 0000000..757c547 --- /dev/null +++ b/Source/PluginEditor.cpp @@ -0,0 +1,309 @@ +/* + ============================================================================== + + PluginEditor.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include "PluginProcessor.h" +#include "PluginEditor.h" + +//============================================================================== +XenosAudioProcessorEditor::XenosAudioProcessorEditor( + XenosAudioProcessor& p, juce::AudioProcessorValueTreeState& vts) + : AudioProcessorEditor(&p) + , audioProcessor(p) + , valueTreeState(vts) + , customButton("load...") + , keyboardComponent(p.keyboardState, + juce::MidiKeyboardComponent::horizontalKeyboard) +{ + setSize(700, 560); + + red = juce::Colours::red; + green = juce::Colours::lawngreen; + blue = juce::Colours::cornflowerblue; + + formatHeaderLabel(pitchLabel, "PITCH"); + + initParamSlider(pitchWidth, "pitchWidth", "WIDTH", vertical, red); + initParamSlider(pitchBarrier, "pitchBarrier", "BARRIER", vertical, red); + initParamSlider(pitchStep, "pitchStep", "STEP", vertical, red); + + initParamMenu(pitchDistribution, "pitchDistribution", "DISTRIBUTION"); + initParamMenu(pitchWalk, "pitchWalk", "WALK"); + initParamSlider(pitchAlpha, "pitchAlpha", "α", horizontal, red); + initParamSlider(pitchBeta, "pitchBeta", "β", horizontal, red); + + formatHeaderLabel(amplitudeLabel, "AMPLITUDE"); + + initParamSlider(ampGain, "ampGain", "GAIN", vertical, green); + initParamSlider(ampBarrier, "ampBarrier", "BARRIER", vertical, green); + initParamSlider(ampStep, "ampStep", "STEP", vertical, green); + + initParamMenu(ampDistribution, "ampDistribution", "DISTRIBUTION"); + initParamMenu(ampWalk, "ampWalk", "WALK"); + initParamSlider(ampAlpha, "ampAlpha", "α", horizontal, green); + initParamSlider(ampBeta, "ampBeta", "β", horizontal, green); + + formatHeaderLabel(envelopeLabel, "GLOBAL"); + + initParamSlider(attack, "attack", "A", vertical, blue); + initParamSlider(decay, "decay", "D", vertical, blue); + initParamSlider(sustain, "sustain", "S", vertical, blue); + initParamSlider(release, "release", "R", vertical, blue); + + initParamSlider(segments, "segments", "SEGMENTS", horizontal, blue); + initParamMenu(scale, "scale", "SCALE", + 29.16675f); // ideally refactor to use relative pixel value + scale.setItemEnabled(customScaleMenuIndex, false); + initParamSlider(root, "root", "ROOT", horizontal, blue); + + if (!audioProcessor.customScaleData.isEmpty()) { + scale.changeItemText(customScaleMenuIndex, + audioProcessor.customScaleName); + scale.setItemEnabled(customScaleMenuIndex, true); + if (dynamic_cast( + valueTreeState.getParameter("scale")) + ->getIndex() + == customScaleParamIndex) { + scale.setSelectedId(customScaleMenuIndex); + } + } + + customButton.setLookAndFeel(&xenosLookAndFeel); + addAndMakeVisible(customButton); + customButton.addListener(this); + + addAndMakeVisible(keyboardComponent); +} + +XenosAudioProcessorEditor::~XenosAudioProcessorEditor() {} + +//============================================================================== +void XenosAudioProcessorEditor::paint(juce::Graphics& g) +{ + g.fillAll( + getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId)); + juce::Image background = juce::ImageCache::getFromMemory( + BinaryData::background_png, BinaryData::background_pngSize); + g.drawImageAt(background, 0, 0); + + double w = getWidth(); + double h = getHeight(); + auto header = h / 16; + auto margin = w / 64; + auto panel1W = w / 3 - margin * 2; + + g.setColour(juce::Colours::white); + auto line1X = 2 * margin + panel1W; + auto line2X = line1X * 2; + auto lineY = header / 2; + g.drawLine(line1X, lineY, line1X, 25 * h / 32, 2.0f); + g.drawLine(line2X, lineY, line2X, 25 * h / 32, 2.0f); + + g.setFont(9.0f); + juce::String copyr = juce::String::fromUTF8(u8"\u00A9"); + g.drawText( + "Copyright " + copyr + " 2022 Raphael Radna. All rights reserved.", + margin, h - margin, w - margin * 2, margin, juce::Justification::right); +} + +void XenosAudioProcessorEditor::resized() +{ + double w = getWidth(); + double h = getHeight(); + + auto header = h / 16; + auto margin = w / 64; + auto panel1W = w / 3 - margin * 2; + auto panel1H = 8 * h / 16; + pitchLabel.setBounds(margin, 0, panel1W, header); + + auto sliderStep = panel1W / 3 + ((panel1W / 3) - (panel1W / 4)) / 2; + auto vSliderY = header + margin; + auto vSliderH = panel1H - margin * 2; + pitchWidth.setBounds(margin, vSliderY, panel1W / 4, vSliderH); + pitchBarrier.setBounds(margin + sliderStep, vSliderY, panel1W / 4, + vSliderH); + pitchStep.setBounds(margin + 2 * sliderStep, vSliderY, panel1W / 4, + vSliderH); + + auto panel1X2 = w / 3 + margin; + amplitudeLabel.setBounds(panel1X2, 0, panel1W, header); + + ampGain.setBounds(panel1X2, vSliderY, panel1W / 4, vSliderH); + ampBarrier.setBounds(panel1X2 + sliderStep, vSliderY, panel1W / 4, + vSliderH); + ampStep.setBounds(panel1X2 + 2 * sliderStep, vSliderY, panel1W / 4, + vSliderH); + + auto panel1X3 = 2 * w / 3 + margin; + envelopeLabel.setBounds(panel1X3, 0, panel1W, header); + + attack.setBounds(panel1X3, vSliderY, panel1W / 4, vSliderH); + decay.setBounds(panel1X3 + panel1W / 4, vSliderY, panel1W / 4, vSliderH); + sustain.setBounds(panel1X3 + 2 * panel1W / 4, vSliderY, panel1W / 4, + vSliderH); + release.setBounds(panel1X3 + 3 * panel1W / 4, vSliderY, panel1W / 4, + vSliderH); + + auto panel2Y = 9 * h / 16 + margin * 1.5; + auto panel2H = 4 * h / 16 - margin; + auto menuH = panel2H / 8; + auto menuW = panel1W / 2 - margin / 2; + auto hSliderYOffset = panel2H / 3; + auto hSliderW = panel1W + margin / 2; + pitchDistribution.setBounds(margin, panel2Y, menuW, menuH); + pitchWalk.setBounds(margin + panel1W / 2 + margin / 2, panel2Y, menuW, + menuH); + pitchAlpha.setBounds(margin, panel2Y + hSliderYOffset, hSliderW, menuH); + pitchBeta.setBounds(margin, panel2Y + hSliderYOffset * 2, hSliderW, menuH); + + ampDistribution.setBounds(panel1X2, panel2Y, menuW, menuH); + ampWalk.setBounds(panel1X2 + panel1W / 2 + margin / 2, panel2Y, menuW, + menuH); + ampAlpha.setBounds(panel1X2, panel2Y + hSliderYOffset, hSliderW, menuH); + ampBeta.setBounds(panel1X2, panel2Y + hSliderYOffset * 2, hSliderW, menuH); + + scale.setBounds(panel1X3, panel2Y, panel1W * 0.75, menuH); + customButton.setBounds(panel1X3 + panel1W * 0.75, panel2Y, panel1W * 0.25, + menuH); + root.setBounds(panel1X3, panel2Y + hSliderYOffset, hSliderW, menuH); + segments.setBounds(panel1X3, panel2Y + hSliderYOffset * 2, hSliderW, menuH); + + auto keyboardY = 13 * h / 16; + keyboardComponent.setBounds(margin, keyboardY, w - margin * 2, + h - keyboardY - margin); +} + +//============================================================================== + +void XenosAudioProcessorEditor::formatHeaderLabel(juce::Label& label, + std::string t) +{ + label.setText(t, juce::dontSendNotification); + label.setFont(20.0f); + label.setJustificationType(juce::Justification::centred); + addAndMakeVisible(label); +} + +void XenosAudioProcessorEditor::initParamSlider(ParamSlider& slider, + std::string p, std::string d, + sliderStyle s, juce::Colour c) +{ + slider.param = p; + slider.disp = d; + + slider.attachment.reset( + new SliderAttachment(valueTreeState, slider.param, slider)); + slider.listener = new ParamListener(audioProcessor); + valueTreeState.addParameterListener(slider.param, slider.listener); + slider.setTextValueSuffix( + " " + valueTreeState.getParameter(slider.param)->getLabel()); + + slider.label.setText(slider.disp, juce::dontSendNotification); + switch (s) { + case vertical: + slider.setSliderStyle(juce::Slider::SliderStyle::LinearVertical); + slider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, 52.0f, 16.0f); + + slider.label.attachToComponent(dynamic_cast(&slider), + false); + slider.label.setJustificationType(juce::Justification::centred); + slider.label.setMinimumHorizontalScale(1.0f); + slider.label.setSize(slider.getWidth() * 1.5, slider.label.getHeight()); + slider.label.setCentrePosition(slider.getX() + slider.getWidth() / 2, + slider.label.getY() + + slider.label.getHeight() * 0.75f); + break; + case horizontal: + slider.setSliderStyle(juce::Slider::SliderStyle::LinearHorizontal); + slider.setTextBoxStyle(juce::Slider::TextBoxLeft, false, 52.0f, 16.0f); + + slider.label.attachToComponent(dynamic_cast(&slider), + false); + slider.label.setJustificationType(juce::Justification::centred); + break; + case rotary: + slider.setSliderStyle(juce::Slider::SliderStyle::Rotary); + slider.setTextBoxStyle(juce::Slider::TextBoxBelow, false, 52.0f, 16.0f); + + slider.label.attachToComponent(dynamic_cast(&slider), + false); + slider.label.setJustificationType(juce::Justification::centred); + break; + } + + slider.setLookAndFeel(&xenosLookAndFeel); + slider.setColour(juce::Slider::thumbColourId, c); + slider.setColour(juce::Slider::trackColourId, c.darker(2.0f)); + slider.setColour(juce::CaretComponent::caretColourId, c); + + addAndMakeVisible(slider); + addAndMakeVisible(slider.label); +} + +void XenosAudioProcessorEditor::initParamMenu(ParamMenu& menu, std::string p, + std::string d, float labelOffsetX) +{ + menu.param = p; + menu.disp = d; + + auto paramObject = dynamic_cast( + valueTreeState.getParameter(menu.param)); + menu.addItemList(paramObject->choices, 1); + addAndMakeVisible(menu); + menu.attachment.reset( + new ComboBoxAttachment(valueTreeState, menu.param, menu)); + menu.listener = new ParamListener(audioProcessor); + valueTreeState.addParameterListener(menu.param, menu.listener); + + // menu.label.setText(valueTreeState.getParameter(menu.param)->getName(99), + // juce::dontSendNotification); + menu.label.setText(menu.disp, juce::dontSendNotification); + menu.label.setJustificationType(juce::Justification::centred); + menu.label.attachToComponent(dynamic_cast(&menu), false); + auto labelPos = menu.label.getPosition(); + labelPos.addXY(labelOffsetX, 0.0f); + menu.label.setTopLeftPosition(labelPos); + + menu.setLookAndFeel(&xenosLookAndFeel); + menu.setColour(juce::ComboBox::backgroundColourId, + getLookAndFeel().findColour(juce::Slider::trackColourId)); + + addAndMakeVisible(menu.label); +} + +void XenosAudioProcessorEditor::buttonClicked(juce::Button* button) +{ + if (button == &customButton) loadCustomScale(); +} + +void XenosAudioProcessorEditor::loadCustomScale() +{ + juce::FileChooser chooser("Select a Scala tuning file (.scl) to load.", + juce::File{}, "*.scl"); + if (chooser.browseForFileToOpen()) { + juce::File f = chooser.getResult(); + juce::StringArray scaleData; + f.readLines(scaleData); + juce::String scaleName = f.getFileNameWithoutExtension(); + + if (audioProcessor.xenosAudioSource.loadScl(scaleData, true)) { + scale.changeItemText(customScaleMenuIndex, scaleName); + scale.setItemEnabled(customScaleMenuIndex, true); + scale.setSelectedId(customScaleMenuIndex); + + audioProcessor.customScaleName = scaleName; + audioProcessor.customScaleData = scaleData; + + audioProcessor.updateHostDisplay(); + } + } +} diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h new file mode 100644 index 0000000..a2f7ea6 --- /dev/null +++ b/Source/PluginEditor.h @@ -0,0 +1,170 @@ +/* + ============================================================================== + + PluginEditor.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include +#include "ParamMenu.h" +#include "ParamSlider.h" +#include "PluginProcessor.h" + +//============================================================================== + +enum sliderStyle { vertical, horizontal, rotary }; + +class XenosLookAndFeel : public juce::LookAndFeel_V4 { +public: + XenosLookAndFeel() + { + backgroundColor = findColour(juce::Slider::trackColourId); + outlineColor = findColour(juce::Slider::textBoxOutlineColourId); + sliderColor = findColour(juce::Slider::backgroundColourId); + + setColour(juce::Slider::backgroundColourId, backgroundColor); + setColour(juce::Slider::thumbColourId, juce::Colours::red); + setColour(juce::Slider::textBoxBackgroundColourId, backgroundColor); + setColour(juce::Slider::textBoxHighlightColourId, + outlineColor.darker(1.0f)); + } + + void drawButtonBackground(juce::Graphics& g, juce::Button& b, + const juce::Colour& backgroundColour, + bool shouldDrawButtonAsHighlighted, + bool shouldDrawButtonAsDown) override + { + juce::Colour buttonColor = (!shouldDrawButtonAsHighlighted) + ? backgroundColor + : outlineColor.darker(1.0f); + g.setColour(buttonColor); + auto w = b.getWidth(); + auto h = b.getHeight(); + g.fillRect(0, 0, w, h); + g.setColour(outlineColor); + g.drawRect(0, 0, w, h, 1); + } + + void drawComboBox(juce::Graphics& g, int width, int height, + bool isButtonDown, int buttonX, int buttonY, int buttonW, + int buttonH, juce::ComboBox& c) override + { + g.setColour(backgroundColor); + g.fillRect(0, 0, width, height); + g.setColour(outlineColor); + g.drawRect(0, 0, width, height, 1); + + int p1X = buttonX + buttonW / 3; + int p1Y = buttonY + buttonH / 3; + int p3X = buttonX + 2 * buttonW / 3; + int p2X = (p1X + p3X) / 2.f; + int p2Y = buttonY + buttonH - buttonH / 3; + int shift = 5; + + juce::Path p; + p.addTriangle(p1X + shift, p1Y, p2X + shift, p2Y, p3X + shift, p1Y); + g.fillPath(p); + } + + void positionComboBoxText(juce::ComboBox& c, + juce::Label& labelToPosition) override + { + labelToPosition.setSize(c.getWidth() - 25, c.getHeight()); + } + + juce::Font getLabelFont(juce::Label&) override { return juce::Font(12.0f); } + + juce::Font getComboBoxFont(juce::ComboBox&) override + { + return juce::Font(12.0f); + } + + void drawPopupMenuBackground(juce::Graphics& g, int width, + int height) override + { + g.setColour(backgroundColor); + g.fillRect(0, 0, width, height); + g.setColour(outlineColor); + g.drawRect(0, 0, width, height); + } + + juce::Font getPopupMenuFont() override { return juce::Font(24.0f); } +private: + juce::Colour backgroundColor, outlineColor, sliderColor; +}; + +class XenosAudioProcessorEditor + : public juce::AudioProcessorEditor + , private juce::Button::Listener { +public: + typedef juce::AudioProcessorValueTreeState::SliderAttachment + SliderAttachment; + typedef juce::AudioProcessorValueTreeState::ComboBoxAttachment + ComboBoxAttachment; + + XenosAudioProcessorEditor(XenosAudioProcessor&, + juce::AudioProcessorValueTreeState&); + ~XenosAudioProcessorEditor() override; + + //============================================================================== + void paint(juce::Graphics&) override; + void resized() override; + + //============================================================================== + void formatHeaderLabel(juce::Label& label, std::string t); + void initParamSlider(ParamSlider& slider, std::string p, std::string d, + sliderStyle s = vertical, + juce::Colour c = juce::Colours::red); + void initParamMenu(ParamMenu& menu, std::string p, std::string d, + float labelOffsetX = 0.0f); + void buttonClicked(juce::Button* button) override; + void loadCustomScale(); +private: + XenosAudioProcessor& audioProcessor; + juce::AudioProcessorValueTreeState& valueTreeState; + XenosLookAndFeel xenosLookAndFeel; + + ParamSlider pitchWidth; + ParamSlider pitchBarrier; + ParamSlider pitchStep; + ParamMenu pitchDistribution; + ParamMenu pitchWalk; + ParamSlider pitchAlpha; + ParamSlider pitchBeta; + + ParamSlider ampGain; + ParamSlider ampBarrier; + ParamSlider ampStep; + ParamMenu ampDistribution; + ParamMenu ampWalk; + ParamSlider ampAlpha; + ParamSlider ampBeta; + + ParamSlider attack; + ParamSlider decay; + ParamSlider sustain; + ParamSlider release; + ParamSlider segments; + + ParamMenu scale; + juce::TextButton customButton; + ParamSlider root; + + juce::MidiKeyboardComponent keyboardComponent; + + juce::Label pitchLabel, amplitudeLabel, envelopeLabel; + + juce::Colour red, green, blue; + + const int customScaleParamIndex = SCALE_PRESETS + 1; + const int customScaleMenuIndex = SCALE_PRESETS + 2; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(XenosAudioProcessorEditor) +}; diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp new file mode 100644 index 0000000..ec084f4 --- /dev/null +++ b/Source/PluginProcessor.cpp @@ -0,0 +1,389 @@ +/* + ============================================================================== + + PluginProcessor.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include "PluginProcessor.h" +#include "PluginEditor.h" + +//============================================================================== +XenosAudioProcessor::XenosAudioProcessor() +#ifndef JucePlugin_PreferredChannelConfigurations + : AudioProcessor( + BusesProperties() +#if !JucePlugin_IsMidiEffect +#if !JucePlugin_IsSynth +// .withInput ("Input", juce::AudioChannelSet::stereo(), +// true) +#endif + .withOutput("Output", juce::AudioChannelSet::stereo(), true) +#endif + ) + , xenosAudioSource(keyboardState) + , params( + *this, nullptr, juce::Identifier("Xenos"), + {std::make_unique( + juce::ParameterID{"segments", 1}, // parameterID, version hint + "segments", // parameter display name + 2, // minimum value + 128, // maximum value + 12), // default value + std::make_unique( + juce::ParameterID{"pitchWidth", 1}, "pitchWidth", + juce::NormalisableRange(0.0f, 96.0f, 0.0f, 1.0f), 1.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); }) + .withLabel("st")), + std::make_unique( + juce::ParameterID{"pitchBarrier", 1}, "pitchBarrier", + juce::NormalisableRange(0.0f, 1.0f, 0.0f, 0.5f), 0.1f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"pitchStep", 1}, "pitchStep", + juce::NormalisableRange(0.0f, 1.0f, 0.0f, 0.5f), 0.01f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"ampGain", 1}, "ampGain", + juce::NormalisableRange(-96.0f, 0.0f, 0.0f, 4.0f), 0.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction([](auto x, auto) { + return (x > -96.0f) ? juce::String(x, 3) : "-inf"; + }) + .withLabel("dB")), + std::make_unique( + juce::ParameterID{"ampBarrier", 1}, "ampBarrier", + juce::NormalisableRange(0.0f, 1.0f, 0.0f, 0.5f), 0.1f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"ampStep", 1}, "ampStep", + juce::NormalisableRange(0.0f, 1.0f, 0.0f, 0.5f), 0.01f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"pitchDistribution", + 1}, // parameterID, version hint + "pitchDistribution", // parameter display name + juce::StringArray{// choices + "uniform", "gaussian", "poisson", "cauchy", + "logistic", "hyperbolic cosine", "arcsine", + "exponential", "triangular", "sinus"}, + 0), // index of default value + std::make_unique( + juce::ParameterID{"pitchWalk", 1}, "pitchWalk", + juce::StringArray{"primary", "secondary"}, 1), + std::make_unique( + juce::ParameterID{"pitchAlpha", 1}, "pitchAlpha", + juce::NormalisableRange(-100.0f, 100.0f, 0.0f, 0.3f, + true), + 1.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"pitchBeta", 1}, "pitchBeta", + juce::NormalisableRange(-100.0f, 100.0f, 0.0f, 0.3f, + true), + 1.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"ampDistribution", 1}, "ampDistribution", + juce::StringArray{// choices + "uniform", "gaussian", "poisson", "cauchy", + "logistic", "hyperbolic cosine", "arcsine", + "exponential", "triangular", "sinus"}, + 0), + std::make_unique( + juce::ParameterID{"ampWalk", 1}, "ampWalk", + juce::StringArray{"primary", "secondary"}, 1), + std::make_unique( + juce::ParameterID{"ampAlpha", 1}, "ampAlpha", + juce::NormalisableRange(-100.0f, 100.0f, 0.0f, 0.3f, + true), + 1.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"ampBeta", 1}, "ampBeta", + juce::NormalisableRange(-100.0f, 100.0f, 0.0f, 0.3f, + true), + 1.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); })), + std::make_unique( + juce::ParameterID{"attack", 1}, // parameterID, version hint + "attack", // parameter display name + juce::NormalisableRange(0.001f, 100.0f, 0.0f, + 0.3f), // range + 0.1f, // default value + juce::AudioParameterFloatAttributes() // attributes + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); }) + .withLabel("s")), + std::make_unique( + juce::ParameterID{"decay", 1}, "decay", + juce::NormalisableRange(0.001f, 100.0f, 0.0f, 0.3f), 0.1f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); }) + .withLabel("s")), + std::make_unique( + juce::ParameterID{"sustain", 1}, "sustain", + juce::NormalisableRange(-96.0f, 0.0f, 0.0f, 4.0f), 0.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction([](auto x, auto) { + return (x > -96.0f) ? juce::String(x, 3) : "-inf"; + }) + .withLabel("dB")), + std::make_unique( + juce::ParameterID{"release", 1}, "release", + juce::NormalisableRange(0.001f, 100.0f, 0.0f, 0.3f), 0.1f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); }) + .withLabel("s")), + std::make_unique( + juce::ParameterID{"scale", 1}, "scale", + juce::StringArray{ + "none", "pentatonic", "pentatonic (pythagorean)", "blues", + "blues (7-limit)", "whole-tone", "major", "major (5-limit)", + "minor", "minor (5-limit)", "octatonic", "overtone", + "chromatic", "bohlen-pierce", "quarter-tone", "custom"}, + 0), + std::make_unique( + juce::ParameterID{"root", 1}, "root", + juce::NormalisableRange(0.0f, 12.0f, 0.0f, 1.0f), 0.0f, + juce::AudioParameterFloatAttributes() + .withStringFromValueFunction( + [](auto x, auto) { return juce::String(x, 3); }) + .withLabel("st"))}) +#endif +{ + segmentsParam = params.getRawParameterValue("segments"); + pitchWidthParam = params.getRawParameterValue("pitchWidth"); + pitchBarrierParam = params.getRawParameterValue("pitchBarrier"); + pitchStepParam = params.getRawParameterValue("pitchStep"); + ampGainParam = params.getRawParameterValue("ampGain"); + ampBarrierParam = params.getRawParameterValue("ampBarrier"); + ampStepParam = params.getRawParameterValue("ampStep"); + + pitchDistributionParam = params.getRawParameterValue("pitchDistribution"); + pitchWalkParam = params.getRawParameterValue("pitchWalk"); + pitchAlphaParam = params.getRawParameterValue("pitchAlpha"); + pitchBetaParam = params.getRawParameterValue("pitchBeta"); + + ampDistributionParam = params.getRawParameterValue("ampDistribution"); + ampWalkParam = params.getRawParameterValue("ampWalk"); + ampAlphaParam = params.getRawParameterValue("ampAlpha"); + ampBetaParam = params.getRawParameterValue("ampBeta"); + + attackParam = params.getRawParameterValue("attack"); + decayParam = params.getRawParameterValue("decay"); + sustainParam = params.getRawParameterValue("sustain"); + releaseParam = params.getRawParameterValue("release"); + + scaleParam = params.getRawParameterValue("scale"); + rootParam = params.getRawParameterValue("root"); +} + +XenosAudioProcessor::~XenosAudioProcessor() {} + +//============================================================================== +const juce::String XenosAudioProcessor::getName() const +{ + return JucePlugin_Name; +} + +bool XenosAudioProcessor::acceptsMidi() const +{ +#if JucePlugin_WantsMidiInput + return true; +#else + return false; +#endif +} + +bool XenosAudioProcessor::producesMidi() const +{ +#if JucePlugin_ProducesMidiOutput + return true; +#else + return false; +#endif +} + +bool XenosAudioProcessor::isMidiEffect() const +{ +#if JucePlugin_IsMidiEffect + return true; +#else + return false; +#endif +} + +double XenosAudioProcessor::getTailLengthSeconds() const { return 0.0; } + +int XenosAudioProcessor::getNumPrograms() +{ + return 1; // NB: some hosts don't cope very well if you tell them there are + // 0 programs, so this should be at least 1, even if you're not + // really implementing programs. +} + +int XenosAudioProcessor::getCurrentProgram() { return 0; } + +void XenosAudioProcessor::setCurrentProgram(int index) {} + +const juce::String XenosAudioProcessor::getProgramName(int index) { return {}; } + +void XenosAudioProcessor::changeProgramName(int index, + const juce::String& newName) +{} + +//============================================================================== +void XenosAudioProcessor::prepareToPlay(double sampleRate, int samplesPerBlock) +{ + // Use this method as the place to do any pre-playback + // initialisation that you need.. + + xenosAudioSource.prepareToPlay(samplesPerBlock, sampleRate); +} + +void XenosAudioProcessor::releaseResources() +{ + // When playback stops, you can use this as an opportunity to free up any + // spare memory, etc. + + xenosAudioSource.releaseResources(); +} + +#ifndef JucePlugin_PreferredChannelConfigurations +bool XenosAudioProcessor::isBusesLayoutSupported( + const BusesLayout& layouts) const +{ +#if JucePlugin_IsMidiEffect + juce::ignoreUnused(layouts); + return true; +#else + // This is the place where you check if the layout is supported. + // In this template code we only support mono or stereo. + // Some plugin hosts, such as certain GarageBand versions, will only + // load plugins that support stereo bus layouts. + if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono() + && layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo()) + return false; + + // This checks if the input layout matches the output layout +#if !JucePlugin_IsSynth + if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet()) + return false; +#endif + + return true; +#endif +} +#endif + +void XenosAudioProcessor::processBlock(juce::AudioBuffer& buffer, + juce::MidiBuffer& midiMessages) +{ + xenosAudioSource.setMidiBuffer(midiMessages); + juce::AudioSourceChannelInfo channelInfo(buffer); + xenosAudioSource.getNextAudioBlock(channelInfo); +} + +//============================================================================== +bool XenosAudioProcessor::hasEditor() const +{ + return true; // (change this to false if you choose to not supply an editor) +} + +juce::AudioProcessorEditor* XenosAudioProcessor::createEditor() +{ + return new XenosAudioProcessorEditor(*this, params); +} + +//============================================================================== +void XenosAudioProcessor::getStateInformation(juce::MemoryBlock& destData) +{ + // You should use this method to store your parameters in the memory block. + // You could do that either as raw data, or use the XML or ValueTree classes + // as intermediaries to make it easy to save and load complex data. + + auto state = params.copyState(); + + juce::XmlElement xmlParent("parent"); + + std::unique_ptr xmlParams(state.createXml()); + xmlParent.addChildElement(xmlParams.release()); + + juce::XmlElement* xmlScale = xmlParent.createNewChildElement( + "scaleParams"); // add custom scale data to xml tree + xmlScale->setAttribute(juce::Identifier(juce::String("CUSTOM_SCALE_DATA")), + customScaleData.joinIntoString("\n")); + xmlScale->setAttribute(juce::Identifier(juce::String("CUSTOM_SCALE_NAME")), + customScaleName); + + copyXmlToBinary(xmlParent, destData); +} + +void XenosAudioProcessor::setStateInformation(const void* data, int sizeInBytes) +{ + // You should use this method to restore your parameters from this memory + // block, whose contents will have been created by the getStateInformation() + // call. + + std::unique_ptr xmlState( + getXmlFromBinary(data, sizeInBytes)); + juce::XmlElement* xmlParams + = xmlState->getChildByName(params.state.getType()); + juce::XmlElement* xmlScale = xmlState->getChildByName("scaleParams"); + + if (xmlState.get() != nullptr) { + if (xmlParams->hasTagName(params.state.getType())) { + params.replaceState(juce::ValueTree::fromXml(*xmlParams)); + auto n = params.state.getNumChildren(); + for (int i = 0; i < n; ++i) { // recall stored parameters + auto child = params.state.getChild(i); + auto id = child["id"]; + auto value = child["value"]; + xenosAudioSource.setParam(id, value); + } + } + if (xmlScale->hasTagName(juce::StringRef("scaleParams"))) { + customScaleName = xmlScale->getStringAttribute( + juce::String("CUSTOM_SCALE_NAME"), "custom"); + juce::String scaleData = xmlScale->getStringAttribute( + juce::String("CUSTOM_SCALE_DATA"), ""); + customScaleData.clear(); + if (scaleData != "") customScaleData.addLines(scaleData); + xenosAudioSource.loadScl(customScaleData, + *scaleParam == customScaleParamIndex); + } + } +} + +//============================================================================== +// This creates new instances of the plugin.. +juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() +{ + return new XenosAudioProcessor(); +} diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h new file mode 100644 index 0000000..93da3f9 --- /dev/null +++ b/Source/PluginProcessor.h @@ -0,0 +1,103 @@ +/* + ============================================================================== + + PluginProcessor.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include +#include "Xenos.h" + +#define SCALE_PRESETS (14) + +//============================================================================== +/** + */ +class XenosAudioProcessor : public juce::AudioProcessor { +public: + //============================================================================== + XenosAudioProcessor(); + ~XenosAudioProcessor() override; + + //============================================================================== + void prepareToPlay(double sampleRate, int samplesPerBlock) override; + void releaseResources() override; + +#ifndef JucePlugin_PreferredChannelConfigurations + bool isBusesLayoutSupported(const BusesLayout& layouts) const override; +#endif + + void processBlock(juce::AudioBuffer&, juce::MidiBuffer&) override; + + //============================================================================== + juce::AudioProcessorEditor* createEditor() override; + bool hasEditor() const override; + + //============================================================================== + const juce::String getName() const override; + + bool acceptsMidi() const override; + bool producesMidi() const override; + bool isMidiEffect() const override; + double getTailLengthSeconds() const override; + + //============================================================================== + int getNumPrograms() override; + int getCurrentProgram() override; + void setCurrentProgram(int index) override; + const juce::String getProgramName(int index) override; + void changeProgramName(int index, const juce::String& newName) override; + + //============================================================================== + void getStateInformation(juce::MemoryBlock& destData) override; + void setStateInformation(const void* data, int sizeInBytes) override; + + //============================================================================== + juce::MidiKeyboardState keyboardState; + + juce::String customScaleName; + juce::StringArray customScaleData; + + XenosSynthAudioSource xenosAudioSource; +private: + //============================================================================== + juce::AudioProcessorValueTreeState params; + + std::atomic* segmentsParam = nullptr; + + std::atomic* pitchWidthParam = nullptr; + std::atomic* pitchBarrierParam = nullptr; + std::atomic* pitchStepParam = nullptr; + std::atomic* ampGainParam = nullptr; + std::atomic* ampBarrierParam = nullptr; + std::atomic* ampStepParam = nullptr; + + std::atomic* pitchDistributionParam = nullptr; + std::atomic* pitchWalkParam = nullptr; + std::atomic* pitchAlphaParam = nullptr; + std::atomic* pitchBetaParam = nullptr; + + std::atomic* ampDistributionParam = nullptr; + std::atomic* ampWalkParam = nullptr; + std::atomic* ampAlphaParam = nullptr; + std::atomic* ampBetaParam = nullptr; + + std::atomic* attackParam = nullptr; + std::atomic* decayParam = nullptr; + std::atomic* sustainParam = nullptr; + std::atomic* releaseParam = nullptr; + + std::atomic* scaleParam = nullptr; + std::atomic* rootParam = nullptr; + + const int customScaleParamIndex = SCALE_PRESETS + 1; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(XenosAudioProcessor) +}; diff --git a/Source/Quantizer.cpp b/Source/Quantizer.cpp new file mode 100644 index 0000000..97f27e0 --- /dev/null +++ b/Source/Quantizer.cpp @@ -0,0 +1,88 @@ +/* + ============================================================================== + + Quantizer.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include "Quantizer.h" +#include "Utility.h" + +void Quantizer::loadScl(juce::StringArray s, bool load) +{ + const auto nPresets = scale.size() - 1; + scale[nPresets] = Scale(s); + if (load) setScale(nPresets); +} + +void Quantizer::calcSteps() +{ + steps.clear(); + double start = calcStart(); + while (start <= pitchRange[0]) { + for (int i = 0; i < scalePtr->size(); i++) { + double q = mtos(start) / scalePtr->getInterval(i); + steps.push_back(q); + } + start += rtoc(scalePtr->getRepeatRatio()) / 100.0; + } +} + +double Quantizer::calcStart() +{ // get the highest root transposition <= pitchRange[0] + double s = root; + double repeatPointMidi = rtoc(scalePtr->getRepeatRatio()) / 100.0; + while (s < pitchRange[1] - repeatPointMidi) s += repeatPointMidi; + return s; +} + +double Quantizer::operator()(double per) +{ + if (active) { + double min = 999999; + int step = 0; + for (int i = 0; i < steps.size(); i++) { + double mag = abs(steps[i] - per); + if (mag < min) { + min = mag; + step = i; + } + } + return steps[step]; + } else { + return per; + } +} + +double Quantizer::getFactor() { return factor; } + +void Quantizer::setActive(bool a) +{ + if (active != a) active = a; +} + +void Quantizer::setFactor(double sP) { factor = (*this)(sP) / sP; } + +void Quantizer::setRange(double hi, double lo) +{ + if (hi == lo) hi += 0.000001; // quantizer misbehaves with a range of 0 + pitchRange[0] = hi; + pitchRange[1] = lo; +} + +void Quantizer::setRoot(const double r) +{ + root = (r > 11.9999999) ? 0.0 : r; + calcSteps(); +} + +void Quantizer::setScale(const unsigned char n) +{ + scalePtr = &scale[n]; + calcSteps(); +} diff --git a/Source/Quantizer.h b/Source/Quantizer.h new file mode 100644 index 0000000..fafdb22 --- /dev/null +++ b/Source/Quantizer.h @@ -0,0 +1,72 @@ +/* + ============================================================================== + + Quantizer.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include "Scale.h" + +class Quantizer { +public: + void loadScl(juce::StringArray s, bool load); + void calcSteps(); + double calcStart(); + double operator()(double per); + + double getFactor(); + void setActive(bool a); + void setFactor(double sP); + void setRange(double hi, double lo); + void setRoot(const double r); + void setScale(const unsigned char n); +private: + double root = 0.0; + double pitchRange[2] = {48.5, 47.5}; + double factor = 1.0; + std::vector steps; + bool active = false; + std::array scale = { + Scale({1., 1.122462, 1.259921, 1.498307, 1.681793}, 2), // pentatonic + Scale({1., 1.125, 1.265625, 1.5, 1.6875}, + 2), // pentatonic (pythagorean) + Scale({1., 1.189207, 1.33484, 1.414214, 1.498307, 1.781797}, + 2), // blues + Scale({1., 1.166667, 1.333333, 1.4, 1.5, 1.75}, 2), // blues (7-limit) + Scale({1., 1.122462, 1.259921, 1.414214, 1.587401, 1.781797}, + 2), // whole-tone + Scale({1., 1.122462, 1.259921, 1.33484, 1.498307, 1.681793, 1.887749}, + 2), // major + Scale({1., 1.125, 1.25, 1.333333, 1.5, 1.666667, 1.875}, + 2), // major (5-limit) + Scale({1., 1.122462, 1.189207, 1.33484, 1.498307, 1.587401, 1.781797}, + 2), // minor + Scale({1., 1.125, 1.2, 1.333333, 1.5, 1.6, 1.777778}, + 2), // minor (5-limit) + Scale({1., 1.122462, 1.189207, 1.33484, 1.414214, 1.587401, 1.681793, + 1.887749}, + 2), // octatonic + Scale({1., 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875}, 2), // overtone + Scale({1., 1.059463, 1.122462, 1.189207, 1.259921, 1.33484, 1.414214, + 1.498307, 1.587401, 1.681793, 1.781797, 1.887749}, + 2), // chromatic + Scale({1., 1.088182, 1.18414, 1.288561, 1.402189, 1.525837, 1.660388, + 1.806806, 1.966134, 2.139512, 2.328178, 2.533484, 2.756892}, + 3), // bohlen–pierce + Scale({1., 1.029302, 1.059463, 1.090508, 1.122462, 1.155353, + 1.189207, 1.224054, 1.259921, 1.29684, 1.33484, 1.373954, + 1.414214, 1.455653, 1.498307, 1.542211, 1.587401, 1.633915, + 1.681793, 1.731073, 1.781797, 1.834008, 1.887749, 1.943064}, + 2), // quarter-tone + Scale() // custom scale placeholder + }; + Scale* scalePtr = &scale[0]; + const unsigned long nPresets = scale.size(); +}; diff --git a/Source/RandomSource.cpp b/Source/RandomSource.cpp new file mode 100644 index 0000000..8b71408 --- /dev/null +++ b/Source/RandomSource.cpp @@ -0,0 +1,121 @@ +/* + ============================================================================== + + RandomSource.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#define _USE_MATH_DEFINES +#include +#include "RandomSource.h" + +double RandomSource::uniform(double a) { return uniformDist(generator) * a; } + +double RandomSource::normal(double a, double b) +{ + normalDist.param(std::normal_distribution::param_type(a, b)); + return normalDist(generator); +} + +double RandomSource::poisson(double a) +{ + if (a < 0.0) a *= -1; + poissonDist.param(std::poisson_distribution::param_type(a)); + return poissonDist(generator); +} + +double RandomSource::cauchy(double z, double a) +{ + return (a * tan((z - 0.5) * M_PI)); +} + +double RandomSource::logist(double z, double a, double b) +{ + if (a > -0.001 && a < 0.001) + a = 0.001 * ((a > 0.0) * 2 - 1); // prevent divide by 0 + return (-(log((1 - z) / z) + b) / a); +} + +double RandomSource::hyperbcos(double z, double a) +{ + return (a * log(tan(z * M_PI / 2.0))); +} + +double RandomSource::arcsine(double z, double a) +{ + return (a * (0.5 - 0.5 * sin((0.5 - z) * M_PI))); +} + +double RandomSource::exponential(double z, double a) +{ + if (a > -0.001 && a < 0.001) + a = 0.001 * ((a > 0.0) * 2 - 1); // prevent divide by 0 + return (-(log(1 - z)) / a); +} + +double RandomSource::triangle(double z, double a) +{ + return (a * (1 - sqrt(1 - z))); +} + +double RandomSource::sinus(double z, double a, double b) +{ + return (a * sin(z * (2 * M_PI) * b)); +} + +double RandomSource::operator()() +{ + double rand = uniformDist(generator); + int sign = (rand < 0.5) * 2 - 1; + double v; + switch (mode) { + case 0: + v = uniform(alpha); + v *= sign; + break; + case 1: + v = normal(alpha, beta); + v *= sign; + break; + case 2: + v = poisson(alpha); + v *= sign; + break; + case 3: + v = cauchy(rand, alpha); + break; + case 4: + v = logist(rand, alpha, beta); + v *= sign; + break; + case 5: + v = hyperbcos(rand, alpha); + break; + case 6: + v = arcsine(rand, alpha); + v *= sign; + break; + case 7: + v = exponential(rand, alpha); + v *= sign; + break; + case 8: + v = triangle(rand, alpha); + v *= sign; + break; + case 9: + v = sinus(rand, alpha, beta); + } + return v; +} + +void RandomSource::setMode(int m) { mode = m; } + +void RandomSource::setAlpha(double a) { alpha = a; } + +void RandomSource::setBeta(double b) { beta = b; } diff --git a/Source/RandomSource.h b/Source/RandomSource.h new file mode 100644 index 0000000..a526faa --- /dev/null +++ b/Source/RandomSource.h @@ -0,0 +1,42 @@ +/* + ============================================================================== + + RandomSource.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include + +class RandomSource { +public: + double uniform(double a = 1); + double normal(double a = 1, double b = 1); + double poisson(double a = 1); + double cauchy(double z, double a = 1); + double logist(double z, double a = 1, double b = 1); + double hyperbcos(double z, double a = 1); + double arcsine(double z, double a = 1); + double exponential(double z, double a = 1); + double triangle(double z, double a = 1); + double sinus(double z, double a = 1, double b = 1); + double operator()(); + + void setMode(int m); + void setAlpha(double a); + void setBeta(double b); +private: + std::random_device s; + std::default_random_engine generator{s()}; + std::uniform_real_distribution uniformDist{0.0, 1.0}; + std::normal_distribution normalDist{5, 2}; + std::poisson_distribution poissonDist{4.1}; + int mode = 0; + double alpha = 1, beta = 1; +}; diff --git a/Source/RandomWalk.cpp b/Source/RandomWalk.cpp new file mode 100644 index 0000000..4fdb7a3 --- /dev/null +++ b/Source/RandomWalk.cpp @@ -0,0 +1,154 @@ +/* + ============================================================================== + + RandomWalk.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include +#include "RandomWalk.h" +#include "Utility.h" + +void RandomWalk::initialize(int n) +{ + pri.resize(n); + sec.resize(n); +} + +void RandomWalk::reset(int i, double v) +{ + pri[i] = 0.0; + sec[i] = v; +} + +void RandomWalk::setParams(double* pR, int nP) +{ + calcSecBarriers(pR, nP); + calcPriBarriers(); + calcPriStepSize(); +} + +void RandomWalk::setParams(double v) +{ + setSecBarriers(v); + calcPriBarriers(); + calcPriStepSize(); +} + +void RandomWalk::calcSecBarriers(double* pR, int nP) +{ + secBarrier[0] = pR[1] / nP; // lo samps/hi freq + secBarrier[1] = pR[0] / nP; // hi samps/lo freq +} + +void RandomWalk::setSecBarriers(double v) +{ + secBarrier[0] = v * -1; + secBarrier[1] = v; +} + +void RandomWalk::calcPriBarriers() +{ + double secWalkSize = secBarrier[1] - secBarrier[0]; + secStepSize = secWalkSize * stepRatio; + priBarrier = secWalkSize / 2 * barrierRatio; +} + +void RandomWalk::calcPriStepSize() +{ + double priWalkSize = priBarrier * 2; + priStepSize = priWalkSize * stepRatio; +} + +void RandomWalk::step(int n, double r) +{ + if (walk) { + // scale primary walk step + double rnd = r * priStepSize; + + // do primary walk + pri[n] += rnd; + pri[n] = reflect(pri[n], priBarrier * -1, priBarrier); + + // do secondary walk + sec[n] += pri[n]; + sec[n] = reflect(sec[n], secBarrier[0], secBarrier[1]); + } else { + double rnd = r * secStepSize; + + // do secondary walk, primary style + sec[n] += rnd; + sec[n] = reflect(sec[n], secBarrier[0], secBarrier[1]); + } + sumPeriod += sec[n]; +} + +double RandomWalk::reflect(double val, double min, double max) +{ + if (min == max) { + val = min; + } else { + double space = max - min; + double diff, ref; + bool dir; + if (val > max) { + diff = val - max; + dir = static_cast(diff / space) % 2; + ref = fmod(diff, space); + + val = (dir) ? min + ref : max - ref; + } + if (val < min) { + diff = min - val; + dir = static_cast(diff / space) % 2; + ref = fmod(diff, space); + + val = (dir) ? max - ref : min + ref; + } + } + return val; +} + +double RandomWalk::realLookup(std::vector& a, double x, int nP) +{ + int x1 = std::floor(x); + int x2 = x1 + 1; + if (x2 >= nP) x2 = 0; + double w = x - x1; + return (1 - w) * a[x1] + w * a[x2]; +} + +double RandomWalk::operator()(unsigned i, double f) { return sec[i] * f; } + +double RandomWalk::operator()(double idx, int nP) +{ + return realLookup(sec, idx, nP); +} + +double RandomWalk::getSumPeriod() +{ + double temp = sumPeriod; + sumPeriod = 0; + return temp; +} + +void RandomWalk::setBarrierRatio(double bR) +{ + barrierRatio = bR; + calcPriBarriers(); + calcPriStepSize(); +} + +void RandomWalk::setStepRatio(double sR) +{ + stepRatio = sR; + calcPriBarriers(); + calcPriStepSize(); +} + +void RandomWalk::setWalk(bool w) { walk = w; } diff --git a/Source/RandomWalk.h b/Source/RandomWalk.h new file mode 100644 index 0000000..0f4e16a --- /dev/null +++ b/Source/RandomWalk.h @@ -0,0 +1,44 @@ +/* + ============================================================================== + + RandomWalk.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include + +class RandomWalk { +public: + void initialize(int n); + void reset(int i, double v); + void setParams(double* pR, int nP); + void setParams(double v); + void calcSecBarriers(double* pR, int nP); + void setSecBarriers(double v); + void calcPriBarriers(); + void calcPriStepSize(); + void step(int n, double r); + double reflect(double val, double min, double max); + double realLookup(std::vector& a, double x, int nP); + double operator()(unsigned i, double f); + double operator()(double idx, int nP); + + double getSumPeriod(); + void setBarrierRatio(double bR); + void setStepRatio(double sR); + void setWalk(bool w); +private: + double secBarrier[2]; + double secStepSize, priBarrier, priStepSize, + sumPeriod = 0.0, barrierRatio = 0.1, stepRatio = 0.01; + int distribution; + bool walk = true; + std::vector pri, sec; +}; diff --git a/Source/Scale.cpp b/Source/Scale.cpp new file mode 100644 index 0000000..591d782 --- /dev/null +++ b/Source/Scale.cpp @@ -0,0 +1,76 @@ +/* + ============================================================================== + + Scale.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include +#include "Scale.h" +#include "Utility.h" + +Scale::Scale() +{ + intervals.push_back(1); + repeatRatio = 2; +} + +Scale::Scale(std::vector _intervals, double _repeatPoint) +{ + for (int i = 0; i < _intervals.size(); i++) + intervals.push_back(_intervals[i]); + repeatRatio = _repeatPoint; +} + +Scale::Scale(juce::StringArray scalaLines) +{ + for (int i = 0; i < scalaLines.size(); i++) { + std::smatch match; + std::string str = scalaLines[i].toStdString(); + if (std::regex_search( + str, match, + std::regex("^\\s*\\d+((\\.\\d*)|(\\/\\d+))?(\\s*cents)?"))) + intervals.push_back(parseSclLine(str)); + } + intervals.erase(intervals.begin()); // remove cardinality + + if (intervals[0] == 1) { + repeatRatio = 2; + } else { + repeatRatio = intervals.back(); + intervals.pop_back(); + intervals.insert(intervals.begin(), 1); + } +} + +double Scale::parseSclLine(std::string str) +{ + std::smatch match; + double interval = 1; + if (std::regex_search(str, match, + std::regex("^\\s*(\\d+)\\/(\\d+)"))) { // ratio + interval = stod(match[1]) / stod(match[2]); + } else if (std::regex_search( + str, match, + std::regex("^\\s*(\\d+\\.\\d*)\\s*cents"))) { // cents + interval = ctor(stod(match[1])); + } else if (std::regex_search(str, match, + std::regex("^\\s*\\d+\\.\\d*"))) { // decimal + interval = ctor(stod(match[0])); + } else if (std::regex_search(str, match, + std::regex("^\\s*(\\d+)"))) { // integer + interval = stoi(match[1]); + } + return interval; +} + +unsigned long Scale::size() { return intervals.size(); } + +double Scale::getInterval(int i) { return intervals[i]; } + +double Scale::getRepeatRatio() { return repeatRatio; } diff --git a/Source/Scale.h b/Source/Scale.h new file mode 100644 index 0000000..353a8cf --- /dev/null +++ b/Source/Scale.h @@ -0,0 +1,30 @@ +/* + ============================================================================== + + Scale.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include + +class Scale { +public: + Scale(); + Scale(std::vector _intervals, double _repeatPoint); + Scale(juce::StringArray scalaLines); + + double parseSclLine(std::string str); + unsigned long size(); + double getInterval(int i); + double getRepeatRatio(); +private: + std::vector intervals; + double repeatRatio; +}; diff --git a/Source/Utility.cpp b/Source/Utility.cpp new file mode 100644 index 0000000..91ae4c2 --- /dev/null +++ b/Source/Utility.cpp @@ -0,0 +1,46 @@ +/* + ============================================================================== + + Utility.cpp + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#include +#include "Utility.h" + +double mtof(double n, double b) { return b * std::pow(2, (n - 69) / 12); } + +double ftom(double f, double b) { return 12 * std::log(f / b) / log(2) + 69; } + +double mtos(double m, double sr) +{ + double freq = mtof(m); + return sr / freq; +} + +double stom(double s, double sr) +{ + double freq = sr / s; + return ftom(freq); +} + +double rtoc(double t1, double t2) { return 1200 * std::log(t1 / t2) / log(2); } + +double ctor(double c) { return exp((c / 1200) * std::log(2)); } + +double scale(double v, double inL, double inH, double outL, double outH, + double c) +{ + if ((inL == inH) || (outL == outH)) { + return outL + (outH - outL) / 2; + } else { + double vNorm = (v - inL) / (inH - inL); + if (c != 1) vNorm = std::pow(vNorm, c); + return vNorm * (outH - outL) + outL; + } +} diff --git a/Source/Utility.h b/Source/Utility.h new file mode 100644 index 0000000..ae0886f --- /dev/null +++ b/Source/Utility.h @@ -0,0 +1,22 @@ +/* + ============================================================================== + + Utility.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +double mtof(double n, double b = 440); // midi to frequency +double ftom(double f, double b = 440); // frequency to midi +double mtos(double m, double sr = 44100); // midi to samples +double stom(double s, double sr = 44100); // samples to midi +double rtoc(double t1, double t2 = 1); // ratio to cents +double ctor(double c); // cents to ratio +double scale(double v, double inL, double inH, double outL, double outH, + double c = 1); diff --git a/Source/Xenos.h b/Source/Xenos.h new file mode 100644 index 0000000..8816654 --- /dev/null +++ b/Source/Xenos.h @@ -0,0 +1,343 @@ +/* + ============================================================================== + + Xenos.h + + Xenos: Xenharmonic Stochastic Synthesizer + Raphael Radna + This code is licensed under the GPLv3 + + ============================================================================== +*/ + +#pragma once + +#include +#include +#include "Quantizer.h" +#include "RandomWalk.h" +#include "RandomSource.h" +#include "Utility.h" + +#define MAX_POINTS (128) +#define NUM_VOICES (64) + +struct XenosCore { + void initialize(double sr) + { + sampleRate = sr; + pitchWalk.initialize(MAX_POINTS); + ampWalk.initialize(MAX_POINTS); + ampWalk.setParams(1.0); + reset(); + } + + void reset() + { + for (unsigned i = 0; i < MAX_POINTS; ++i) { + pitchWalk.reset(i, mtos(pitchCenter) / nPoints); + ampWalk.reset(i, uniform(generator)); + } + calcMetaParams(); + } + + void calcMetaParams() + { + calcPeriodRange(pitchCenter, pitchWidth); + pitchWalk.setParams(periodRange, nPoints); + quantizer.calcSteps(); + } + + void calcPeriodRange(double pC, double pW) + { + double min = pC - pW / 2; + double max = pC + pW / 2; + periodRange[0] = mtos(min); + periodRange[1] = mtos(max); + quantizer.setRange(max, min); + } + + double operator()() + { + if (index < 0.0) index = 0.0; + int intdex = floor(index); + double segmentSamps = pitchWalk(intdex, quantizer.getFactor()) * bend; + double increment = 1 / segmentSamps; + + if (intdex != _index) { + step(_index); + _index = intdex; + } + + index += increment; + + if (index >= nPoints) { + quantizer.setFactor(pitchWalk.getSumPeriod()); + index -= nPoints; + if (nPoints_ > 0) setNPoints(); + } + return ampWalk(index, nPoints); + } + + void step(int n) + { + pitchWalk.step(n, pitchSource()); + ampWalk.step(n, ampSource()); + } + + void setNPoints() + { + nPoints = nPoints_; + calcMetaParams(); + nPoints_ = 0; + } + + void setPitchCenter(float pC) + { + pitchCenter = pC; + calcMetaParams(); + } + + void setPitchWidth(float pW) + { + pitchWidth = pW; + calcMetaParams(); + } + + void setBend(double b, double r = 2.0) + { + if (b > 8191) { + bend = scale(b, 8192, 16383, 1.0, 1.0 / r); + } else { + bend = scale(b, 0, 8191, r, 1.0); + } + } + + double sampleRate = 44100.0; + float pitchCenter = 48.0f; // midi pitch + float pitchWidth = 1.0f; // semitones + double periodRange[2]; + double bend = 1.0; + int nPoints = 12; + int nPoints_ = 0; + double index = 0.0; + int _index = 0; + RandomWalk pitchWalk, ampWalk; + RandomSource pitchSource, ampSource; + Quantizer quantizer; + std::default_random_engine generator; + std::uniform_real_distribution uniform{-1.0, 1.0}; +}; + +//============================================================================== +struct XenosSound : public juce::SynthesiserSound { + XenosSound() {} + + bool appliesToNote(int) override { return true; } + bool appliesToChannel(int) override { return true; } +}; + +//============================================================================== +struct XenosVoice : public juce::SynthesiserVoice { + XenosVoice() {} + + bool canPlaySound(juce::SynthesiserSound* sound) override + { + return dynamic_cast(sound) != nullptr; + } + + void setCurrentPlaybackSampleRate(double newRate) override + { + if (newRate > 0.0) { + xenos.initialize(newRate); + adsr.setSampleRate(newRate); + updateADSR(); + } + } + + void updateADSR() + { + adsr.setParameters(juce::ADSR::Parameters(a, d, s, r)); + } + + void startNote(int note, float velocity, juce::SynthesiserSound*, + int /*currentPitchWheelPosition*/) override + { + xenos.pitchCenter = note; + adsr.noteOn(); + xenos.reset(); + } + + void stopNote(float /*velocity*/, bool allowTailOff) override + { + if (adsr.isActive()) adsr.noteOff(); + } + + void pitchWheelMoved(int newPitchWheelValue) override + { + xenos.setBend(newPitchWheelValue); + } + + void controllerMoved(int, int) override {} + + void renderNextBlock(juce::AudioSampleBuffer& outputBuffer, int startSample, + int numSamples) override + { + if (isVoiceActive()) { + while (--numSamples >= 0) { + auto currentSample + = xenos() * adsr.getNextSample() * polyGainFactor; + for (auto i = outputBuffer.getNumChannels(); --i >= 0;) + outputBuffer.addSample(i, startSample, currentSample); + ++startSample; + } + } else { + adsr.reset(); + clearCurrentNote(); + } + } + + XenosCore xenos; + juce::ADSR adsr; + float a = 0.1f, d = 0.1f, s = 1.0f, r = 0.1f; + const double polyGainFactor = 1 / sqrt(NUM_VOICES / 4); +}; + +//============================================================================== +class XenosSynthAudioSource : public juce::AudioSource { +public: + XenosSynthAudioSource(juce::MidiKeyboardState& keyState) + : keyboardState(keyState) + { + for (auto i = 0; i < NUM_VOICES; ++i) + xenosSynth.addVoice(new XenosVoice()); + + xenosSynth.addSound(new XenosSound()); + } + + void setUsingSineWaveSound() { xenosSynth.clearSounds(); } + + void prepareToPlay(int /*samplesPerBlockExpected*/, + double sampleRate) override + { + xenosSynth.setCurrentPlaybackSampleRate(sampleRate); + } + + void releaseResources() override {} + + void + getNextAudioBlock(const juce::AudioSourceChannelInfo& bufferToFill) override + { + bufferToFill.clearActiveBufferRegion(); + + keyboardState.processNextMidiBuffer(midiBuffer, + bufferToFill.startSample, + bufferToFill.numSamples, true); + + xenosSynth.renderNextBlock(*bufferToFill.buffer, midiBuffer, + bufferToFill.startSample, + bufferToFill.numSamples); + } + + void setParam(const juce::String& parameterID, float newValue) + { + for (int i = 0; i < xenosSynth.getNumVoices(); ++i) { + auto voice = dynamic_cast(xenosSynth.getVoice(i)); + XenosCore& xenos = voice->xenos; + + if (parameterID == "segments") { xenos.nPoints_ = newValue; } + if (parameterID == "pitchWidth") { + xenos.pitchWidth = newValue; + if (voice->isVoiceActive()) xenos.calcMetaParams(); + } + if (parameterID == "pitchBarrier") { + xenos.pitchWalk.setBarrierRatio(newValue); + } + if (parameterID == "pitchStep") { + xenos.pitchWalk.setStepRatio(newValue); + } + if (parameterID == "ampGain") { + auto linear = juce::Decibels::decibelsToGain(newValue, -96.0f); + xenos.ampWalk.setSecBarriers(linear); + xenos.ampWalk.calcPriBarriers(); + xenos.ampWalk.calcPriStepSize(); + } + if (parameterID == "ampBarrier") { + xenos.ampWalk.setBarrierRatio(newValue); + } + if (parameterID == "ampStep") { + xenos.ampWalk.setStepRatio(newValue); + } + + if (parameterID == "pitchDistribution") { + xenos.pitchSource.setMode(newValue); + } + if (parameterID == "pitchWalk") { + xenos.pitchWalk.setWalk(newValue); + } + if (parameterID == "pitchAlpha") { + xenos.pitchSource.setAlpha(newValue); + } + if (parameterID == "pitchBeta") { + xenos.pitchSource.setBeta(newValue); + } + + if (parameterID == "ampDistribution") { + xenos.ampSource.setMode(newValue); + } + if (parameterID == "ampWalk") { xenos.ampWalk.setWalk(newValue); } + if (parameterID == "ampAlpha") { + xenos.ampSource.setAlpha(newValue); + } + if (parameterID == "ampBeta") { xenos.ampSource.setBeta(newValue); } + + if (parameterID == "attack") { + voice->a = newValue; + voice->updateADSR(); + } + if (parameterID == "decay") { + voice->d = newValue; + voice->updateADSR(); + } + if (parameterID == "sustain") { + auto linear = juce::Decibels::decibelsToGain(newValue, -96.0f); + voice->s = linear; + voice->updateADSR(); + } + if (parameterID == "release") { + voice->r = newValue; + voice->updateADSR(); + } + + if (parameterID == "scale") { + if (newValue == 0) { + xenos.quantizer.setActive(0); + } else { + xenos.quantizer.setScale(newValue - 1); + xenos.quantizer.setActive(1); + } + } + if (parameterID == "root") { xenos.quantizer.setRoot(newValue); } + } + } + + void setMidiBuffer(juce::MidiBuffer& mB) { midiBuffer = mB; } + + bool loadScl(juce::StringArray& s, bool load) + { + bool result = false; + if (!s.isEmpty()) { + for (int i = 0; i < xenosSynth.getNumVoices(); ++i) { + auto voice = dynamic_cast(xenosSynth.getVoice(i)); + XenosCore& xenos = voice->xenos; + xenos.quantizer.loadScl(s, load); + } + result = true; + } + return result; + } +private: + juce::MidiKeyboardState& keyboardState; + juce::MidiBuffer midiBuffer; + juce::Synthesiser xenosSynth; +}; diff --git a/Xenos.jucer b/Xenos.jucer new file mode 100644 index 0000000..e7b7001 --- /dev/null +++ b/Xenos.jucer @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +