├── .github ├── FUNDING.yml └── workflows │ └── cmake.yml ├── .gitmodules ├── CMakeLists.txt ├── LICENSE.txt ├── README.md ├── Source ├── CMakeLists.txt ├── PluginEditor.cpp ├── PluginEditor.h ├── PluginProcessor.cpp ├── PluginProcessor.h ├── RTNeuralLSTM.cpp ├── RTNeuralLSTM.h ├── myLookAndFeel.cpp └── myLookAndFeel.h ├── aax_builds.sh ├── installers ├── linux │ └── build_deb.sh ├── mac │ ├── Intro.txt │ ├── TS-M1N3.pkgproj │ └── build_mac_installer.sh └── windows │ ├── TS-M1N3_Install_Script.iss │ └── build_win_installer.sh ├── mac_builds.sh ├── models ├── model_ts9_48k_cond2.json └── model_ts9_cond2.json ├── modules ├── CMakeLists.txt └── cmake │ ├── SubprojectVersion.cmake │ └── WarningFlags.cmake ├── resources ├── CMakeLists.txt ├── TS-M1N3.ico ├── TS-M1N3.png ├── app.jpg ├── black_knob.png ├── footswitch_down.png ├── footswitch_up.png ├── knob2.png ├── knob_hex.png ├── led_red_off.png ├── led_red_on.png ├── logo.png ├── ts_background.jpg └── ts_background_black.jpg ├── validate.sh └── win_builds.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [GuitarML] 4 | patreon: GuitarML 5 | custom: https://www.paypal.com/donate?business=H22K2S7B7ACMJ&no_recurring=0&item_name=Support+GuitarML¤cy_code=USD 6 | -------------------------------------------------------------------------------- /.github/workflows/cmake.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - develop 8 | pull_request: 9 | branches: 10 | - main 11 | - develop 12 | 13 | workflow_dispatch: 14 | 15 | jobs: 16 | build_and_test: 17 | if: contains(toJson(github.event.commits), '***NO_CI***') == false && contains(toJson(github.event.commits), '[ci skip]') == false && contains(toJson(github.event.commits), '[skip ci]') == false 18 | name: Test plugin on ${{ matrix.os }} 19 | runs-on: ${{ matrix.os }} 20 | strategy: 21 | fail-fast: false # show all errors for each platform (vs. cancel jobs on error) 22 | matrix: 23 | os: [ubuntu-latest, windows-2019, macOS-latest] 24 | 25 | steps: 26 | - name: Install Linux Deps 27 | if: runner.os == 'Linux' 28 | run: | 29 | sudo apt-get update 30 | sudo apt install libasound2-dev libcurl4-openssl-dev libx11-dev libxinerama-dev libxext-dev libfreetype6-dev libwebkit2gtk-4.0-dev libglu1-mesa-dev libjack-jackd2-dev lv2-dev 31 | sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 9 32 | sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 9 33 | - name: Get latest CMake 34 | uses: lukka/get-cmake@latest 35 | 36 | - name: Checkout code 37 | uses: actions/checkout@v2 38 | with: 39 | submodules: recursive 40 | 41 | - name: Configure 42 | shell: bash 43 | run: cmake -Bbuild 44 | 45 | - name: Build 46 | shell: bash 47 | run: cmake --build build --config Release --parallel 4 48 | 49 | # Failing validation, fix 50 | #- name: Validate 51 | # if: runner.os == 'Windows' 52 | # run: bash validate.sh 53 | 54 | - name: Upload Linux Artifact GitHub Action 55 | if: runner.os == 'Linux' 56 | uses: actions/upload-artifact@v2 57 | with: 58 | name: linux-assets 59 | path: /home/runner/work/TS-M1N3/TS-M1N3/build/TS-M1N3_artefacts 60 | 61 | - name: Upload Mac Artifact GitHub Action 62 | if: runner.os == 'macOS' 63 | uses: actions/upload-artifact@v2 64 | with: 65 | name: mac-assets 66 | path: /Users/runner/work/TS-M1N3/TS-M1N3/build/TS-M1N3_artefacts 67 | 68 | - name: Upload Windows Artifact GitHub Action 69 | if: runner.os == 'Windows' 70 | uses: actions/upload-artifact@v2 71 | with: 72 | name: win-assets 73 | path: D:/a/TS-M1N3/TS-M1N3/build/TS-M1N3_artefacts 74 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "modules/json"] 2 | path = modules/json 3 | url = https://github.com/nlohmann/json.git 4 | [submodule "modules/chowdsp_utils"] 5 | path = modules/chowdsp_utils 6 | url = https://github.com/Chowdhury-DSP/chowdsp_utils 7 | [submodule "modules/libsamplerate"] 8 | path = modules/libsamplerate 9 | url = https://github.com/libsndfile/libsamplerate 10 | [submodule "modules/JUCE"] 11 | path = modules/JUCE 12 | url = https://github.com/juce-framework/JUCE.git 13 | [submodule "modules/RTNeural"] 14 | path = modules/RTNeural 15 | url = https://github.com/jatinchowdhury18/RTNeural.git 16 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.15) 2 | set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment target") 3 | project(TS-M1N3 VERSION 1.2.0) 4 | 5 | set(CMAKE_CXX_STANDARD 17) 6 | 7 | add_subdirectory(modules) 8 | include_directories(modules) 9 | 10 | #juce_set_aax_sdk_path(C:/SDKs/AAX_SDK/) 11 | 12 | set(JUCE_FORMATS AU VST3) 13 | 14 | # Build LV2 only on Linux 15 | if(UNIX AND NOT APPLE) 16 | message(STATUS "Building LV2 plugin format") 17 | list(APPEND JUCE_FORMATS LV2) 18 | endif() 19 | 20 | # Build AAX if SDK target exists 21 | if(TARGET juce_aax_sdk) 22 | message(STATUS "Building AAX plugin format") 23 | list(APPEND JUCE_FORMATS AAX) 24 | endif() 25 | 26 | juce_add_plugin(TS-M1N3 27 | COMPANY_NAME GuitarML 28 | PLUGIN_MANUFACTURER_CODE GtML 29 | PLUGIN_CODE Tsm3 30 | FORMATS ${JUCE_FORMATS} 31 | ProductName "TS-M1N3" 32 | LV2URI https://github.com/GuitarML/TS-M1N3 33 | ICON_BIG resources/logo.png 34 | MICROPHONE_PERMISSION_ENABLED TRUE 35 | ) 36 | 37 | # create JUCE header 38 | juce_generate_juce_header(TS-M1N3) 39 | 40 | # add sources 41 | add_subdirectory(Source) 42 | include_directories(Source) 43 | add_subdirectory(resources) 44 | 45 | target_compile_definitions(TS-M1N3 46 | PUBLIC 47 | JUCE_DISPLAY_SPLASH_SCREEN=0 48 | JUCE_REPORT_APP_USAGE=0 49 | JUCE_WEB_BROWSER=0 50 | JUCE_USE_CURL=0 51 | JUCE_VST3_CAN_REPLACE_VST2=0 52 | ) 53 | 54 | target_link_libraries(TS-M1N3 PUBLIC 55 | juce_plugin_modules 56 | ) 57 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TS-M1N3 2 | 3 | [![CI](https://github.com/GuitarML/TS-M1N3/actions/workflows/cmake.yml/badge.svg)](https://github.com/GuitarML/TS-M1N3/actions/workflows/cmake.yml) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-brightgreen.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Downloads](https://img.shields.io/github/downloads/GuitarML/TS-M1N3/total)](https://somsubhra.github.io/github-release-stats/?username=GuitarML&repository=TS-M1N3&page=1&per_page=30) 4 | 5 | ![app](https://github.com/GuitarML/TS-M1N3/blob/main/resources/app.jpg) 6 | 7 | TS-M1N3 is a guitar plugin clone of the TS-9 Tubescreamer overdrive pedal. Machine learning was used to train a model of both the drive and tone knobs for an accurate recreation of the pedal in all possible configurations. This plugin uses two conditioned parameters during model training to recreate the entire device using machine learning, as opposed to snapshot models at a particular setting. For best results, use prior to amp -> cabinet -> reverb effects to fully simulate playing an overdrive pedal through a physical amplifier. This can be done with the [NeuralPi](https://github.com/GuitarML/NeuralPi) plugin. 8 | 9 | Check out a video demo on [Youtube](https://youtu.be/QVlmr_bECBE) 10 | 11 | ## Installing the plugin 12 | 13 | 1. Download the appropriate plugin installer [here](https://github.com/GuitarML/TS-M1N3/releases) (Windows, Mac, Linux) 14 | 2. Run the installer and follow the instructions. May need to reboot to allow your DAW to recognize the new plugin. 15 | 16 | ## Info 17 | 18 | The [Automated-GuitarAmpModelling](https://github.com/Alec-Wright/Automated-GuitarAmpModelling) project was used to train the .json models.
19 | GuitarML maintains a [fork](https://github.com/GuitarML/Automated-GuitarAmpModelling) with a few extra helpful features, including a Colab training script and wav file processing for conditioned parameters. 20 | 21 | The plugin uses [RTNeural](https://github.com/jatinchowdhury18/RTNeural), which is a highly optimized neural net inference engine intended for audio applications. 22 | 23 | For the training data, five steps for the gain and tone knobs were recorded (0.0, 0.25, 0.50, 0.75, 1.0), for a total of 25 output samples at 2 minutes each. An LSTM layer with a hidden size of 20 was used. 24 | 25 | ## Build Instructions 26 | 27 | ### Build with Cmake 28 | 29 | ```bash 30 | # Clone the repository 31 | $ git clone https://github.com/GuitarML/TS-M1N3.git 32 | $ cd TS-M1N3 33 | 34 | # initialize and set up submodules 35 | $ git submodule update --init --recursive 36 | 37 | # build with CMake 38 | $ cmake -Bbuild 39 | $ cmake --build build --config Release 40 | ``` 41 | The binaries will be located in `TS-M1N3/build/TS-M1N3_artefacts/` 42 | 43 | ### Special Thanks 44 | Special thanks to the UAH (University of Alabama in Huntsville) [MLAMSK](https://github.com/mlamsk) Senior Design Team, whose research and hard work directly impacted the development of this plugin. 45 | -------------------------------------------------------------------------------- /Source/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #add_subdirectory(headless) 2 | 3 | target_sources(TS-M1N3 PRIVATE 4 | myLookAndFeel.cpp 5 | myLookAndFeel.h 6 | PluginEditor.cpp 7 | PluginEditor.h 8 | PluginProcessor.cpp 9 | PluginProcessor.h 10 | RTNeuralLSTM.cpp 11 | RTNeuralLSTM.h 12 | ) 13 | 14 | #target_precompile_headers(TS-M1N3 PRIVATE pch.h) 15 | -------------------------------------------------------------------------------- /Source/PluginEditor.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file was auto-generated! 5 | 6 | It contains the basic framework code for a JUCE plugin editor. 7 | 8 | ============================================================================== 9 | */ 10 | 11 | #include "PluginProcessor.h" 12 | #include "PluginEditor.h" 13 | #include 14 | #include 15 | #include 16 | 17 | 18 | //============================================================================== 19 | TSM1N3AudioProcessorEditor::TSM1N3AudioProcessorEditor (TSM1N3AudioProcessor& p) 20 | : AudioProcessorEditor (&p), processor (p) 21 | { 22 | // Make sure that before the constructor has finished, you've set the 23 | // editor's size to whatever you need it to 24 | 25 | // Set Widget Graphics 26 | blackHexKnobLAF.setLookAndFeel(ImageCache::getFromMemory(BinaryData::knob2_png, BinaryData::knob2_pngSize)); 27 | 28 | addAndMakeVisible(odFootSw); 29 | odFootSw.setImages(true, true, true, 30 | ImageCache::getFromMemory(BinaryData::footswitch_up_png, BinaryData::footswitch_up_pngSize), 1.0, Colours::transparentWhite, 31 | Image(), 1.0, Colours::transparentWhite, 32 | ImageCache::getFromMemory(BinaryData::footswitch_up_png, BinaryData::footswitch_up_pngSize), 1.0, Colours::transparentWhite, 33 | 0.0); 34 | odFootSw.addListener(this); 35 | 36 | addAndMakeVisible(odLED); 37 | odLED.setImages(true, true, true, 38 | ImageCache::getFromMemory(BinaryData::led_red_on_png, BinaryData::led_red_on_pngSize), 1.0, Colours::transparentWhite, 39 | Image(), 1.0, Colours::transparentWhite, 40 | ImageCache::getFromMemory(BinaryData::led_red_on_png, BinaryData::led_red_on_pngSize), 1.0, Colours::transparentWhite, 41 | 0.0); 42 | odLED.addListener(this); 43 | 44 | gainSliderAttach = std::make_unique(processor.treeState, GAIN_ID, ampGainKnob); 45 | addAndMakeVisible(ampGainKnob); 46 | ampGainKnob.setLookAndFeel(&blackHexKnobLAF); 47 | ampGainKnob.addListener(this); 48 | ampGainKnob.setSliderStyle(juce::Slider::SliderStyle::RotaryVerticalDrag); 49 | ampGainKnob.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, false, 50, 20); 50 | ampGainKnob.setDoubleClickReturnValue(true, 0.5); 51 | 52 | toneSliderAttach = std::make_unique(processor.treeState, TONE_ID, ampToneKnob); 53 | addAndMakeVisible(ampToneKnob); 54 | ampToneKnob.setLookAndFeel(&blackHexKnobLAF); 55 | ampToneKnob.addListener(this); 56 | ampToneKnob.setSliderStyle(juce::Slider::SliderStyle::RotaryVerticalDrag); 57 | ampToneKnob.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, false, 50, 20 ); 58 | ampToneKnob.setDoubleClickReturnValue(true, 0.5); 59 | 60 | masterSliderAttach = std::make_unique(processor.treeState, MASTER_ID, ampMasterKnob); 61 | addAndMakeVisible(ampMasterKnob); 62 | ampMasterKnob.setLookAndFeel(&blackHexKnobLAF); 63 | ampMasterKnob.addListener(this); 64 | ampMasterKnob.setSliderStyle(juce::Slider::SliderStyle::RotaryVerticalDrag); 65 | ampMasterKnob.setTextBoxStyle(juce::Slider::TextEntryBoxPosition::NoTextBox, false, 50, 20 ); 66 | ampMasterKnob.setDoubleClickReturnValue(true, 0.5); 67 | 68 | addAndMakeVisible(versionLabel); 69 | versionLabel.setText("v1.2", juce::NotificationType::dontSendNotification); 70 | versionLabel.setJustificationType(juce::Justification::left); 71 | versionLabel.setColour(juce::Label::textColourId, juce::Colours::white); 72 | auto font = versionLabel.getFont(); 73 | float height = font.getHeight(); 74 | font.setHeight(height); // 0.75 75 | versionLabel.setFont(font); 76 | 77 | 78 | // Size of plugin GUI 79 | setSize(340, 500); 80 | resetImages(); 81 | } 82 | 83 | TSM1N3AudioProcessorEditor::~TSM1N3AudioProcessorEditor() 84 | { 85 | ampGainKnob.setLookAndFeel(nullptr); 86 | ampToneKnob.setLookAndFeel(nullptr); 87 | ampMasterKnob.setLookAndFeel(nullptr); 88 | } 89 | 90 | //============================================================================== 91 | void TSM1N3AudioProcessorEditor::paint (Graphics& g) 92 | { 93 | // Workaround for graphics on Windows builds (clipping code doesn't work correctly on Windows) 94 | #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) 95 | g.drawImageAt(background, 0, 0); // Debug Line: Redraw entire background image 96 | #else 97 | // Redraw only the clipped part of the background image 98 | juce::Rectangle ClipRect = g.getClipBounds(); 99 | g.drawImage(background, ClipRect.getX(), ClipRect.getY(), ClipRect.getWidth(), ClipRect.getHeight(), ClipRect.getX(), ClipRect.getY(), ClipRect.getWidth(), ClipRect.getHeight()); 100 | #endif 101 | 102 | } 103 | 104 | void TSM1N3AudioProcessorEditor::resized() 105 | { 106 | // This is generally where you'll want to lay out the positions of any 107 | // subcomponents in your editor.. 108 | 109 | // Amp Widgets 110 | ampGainKnob.setBounds(20, 13, 125, 95); 111 | ampMasterKnob.setBounds(196, 13, 125, 95); 112 | ampToneKnob.setBounds(110, 91, 125, 95); 113 | 114 | odLED.setBounds(152, 315, 40, 40); 115 | odFootSw.setBounds(133, 365, 80, 80); 116 | versionLabel.setBounds(302, 488, 60, 10); 117 | } 118 | 119 | 120 | 121 | void TSM1N3AudioProcessorEditor::buttonClicked(juce::Button* button) 122 | { 123 | if (button == &odFootSw) { 124 | if (processor.fw_state == 0) 125 | processor.fw_state = 1; 126 | else 127 | processor.fw_state = 0; 128 | 129 | resetImages(); 130 | } 131 | } 132 | 133 | 134 | void TSM1N3AudioProcessorEditor::sliderValueChanged(Slider* slider) 135 | { 136 | // Amp 137 | /* 138 | if (slider == &GainKnob) 139 | processor.setDrive(slider->getValue()); 140 | else if (slider == &MasterKnob) 141 | processor.setMaster(slider->getValue()); 142 | else if (slider == &ToneKnob) 143 | processor.setTone(slider->getValue()); 144 | */ 145 | } 146 | 147 | 148 | void TSM1N3AudioProcessorEditor::resetImages() 149 | { 150 | if (processor.fw_state == 0) { 151 | odFootSw.setImages(true, true, true, 152 | ImageCache::getFromMemory(BinaryData::footswitch_up_png, BinaryData::footswitch_up_pngSize), 1.0, Colours::transparentWhite, 153 | Image(), 1.0, Colours::transparentWhite, 154 | ImageCache::getFromMemory(BinaryData::footswitch_up_png, BinaryData::footswitch_up_pngSize), 1.0, Colours::transparentWhite, 155 | 0.0); 156 | odLED.setImages(true, true, true, 157 | ImageCache::getFromMemory(BinaryData::led_red_off_png, BinaryData::led_red_off_pngSize), 1.0, Colours::transparentWhite, 158 | Image(), 1.0, Colours::transparentWhite, 159 | ImageCache::getFromMemory(BinaryData::led_red_off_png, BinaryData::led_red_off_pngSize), 1.0, Colours::transparentWhite, 160 | 0.0); 161 | } 162 | else { 163 | odFootSw.setImages(true, true, true, 164 | ImageCache::getFromMemory(BinaryData::footswitch_down_png, BinaryData::footswitch_down_pngSize), 1.0, Colours::transparentWhite, 165 | Image(), 1.0, Colours::transparentWhite, 166 | ImageCache::getFromMemory(BinaryData::footswitch_down_png, BinaryData::footswitch_down_pngSize), 1.0, Colours::transparentWhite, 167 | 0.0); 168 | odLED.setImages(true, true, true, 169 | ImageCache::getFromMemory(BinaryData::led_red_on_png, BinaryData::led_red_on_pngSize), 1.0, Colours::transparentWhite, 170 | Image(), 1.0, Colours::transparentWhite, 171 | ImageCache::getFromMemory(BinaryData::led_red_on_png, BinaryData::led_red_on_pngSize), 1.0, Colours::transparentWhite, 172 | 0.0); 173 | } 174 | } -------------------------------------------------------------------------------- /Source/PluginEditor.h: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file was auto-generated! 5 | 6 | It contains the basic framework code for a JUCE plugin editor. 7 | 8 | ============================================================================== 9 | */ 10 | 11 | #pragma once 12 | 13 | #include "../JuceLibraryCode/JuceHeader.h" 14 | #include "PluginProcessor.h" 15 | #include "myLookAndFeel.h" 16 | #include 17 | 18 | //============================================================================== 19 | /** 20 | */ 21 | class TSM1N3AudioProcessorEditor : public AudioProcessorEditor, 22 | private Button::Listener, 23 | private Slider::Listener 24 | { 25 | public: 26 | TSM1N3AudioProcessorEditor (TSM1N3AudioProcessor&); 27 | ~TSM1N3AudioProcessorEditor(); 28 | 29 | //============================================================================== 30 | void paint (Graphics&) override; 31 | void resized() override; 32 | 33 | void resetImages(); 34 | 35 | myLookAndFeel blackHexKnobLAF; 36 | ImageButton odFootSw; 37 | ImageButton odLED; 38 | 39 | private: 40 | // This reference is provided as a quick way for your editor to 41 | // access the processor object that created it. 42 | TSM1N3AudioProcessor& processor; 43 | 44 | Image background = ImageCache::getFromMemory(BinaryData::ts_background_black_jpg, BinaryData::ts_background_black_jpgSize); 45 | 46 | // Amp Widgets 47 | Slider ampGainKnob; 48 | Slider ampMasterKnob; 49 | Slider ampToneKnob; 50 | Label versionLabel; 51 | 52 | virtual void buttonClicked(Button* button) override; 53 | 54 | //void updateToggleState(juce::Button* button, juce::String name); 55 | virtual void sliderValueChanged(Slider* slider) override; 56 | 57 | //AudioProcessorParameter* getParameter(const String& paramId); 58 | 59 | //float getParameterValue(const String& paramId); 60 | //void setParameterValue(const String& paramId, float value); 61 | 62 | 63 | public: 64 | std::unique_ptr gainSliderAttach; 65 | std::unique_ptr toneSliderAttach; 66 | std::unique_ptr masterSliderAttach; 67 | 68 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TSM1N3AudioProcessorEditor) 69 | }; 70 | -------------------------------------------------------------------------------- /Source/PluginProcessor.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file was auto-generated! 5 | 6 | It contains the basic framework code for a JUCE plugin processor. 7 | 8 | ============================================================================== 9 | */ 10 | 11 | #include "PluginProcessor.h" 12 | #include "PluginEditor.h" 13 | #include 14 | #include 15 | 16 | //============================================================================== 17 | TSM1N3AudioProcessor::TSM1N3AudioProcessor() 18 | #ifndef JucePlugin_PreferredChannelConfigurations 19 | : AudioProcessor(BusesProperties() 20 | #if ! JucePlugin_IsMidiEffect 21 | #if ! JucePlugin_IsSynth 22 | .withInput("Input", AudioChannelSet::stereo(), true) 23 | #endif 24 | .withOutput("Output", AudioChannelSet::stereo(), true) 25 | #endif 26 | ), 27 | treeState(*this, nullptr, "PARAMETER", { std::make_unique(GAIN_ID, GAIN_NAME, NormalisableRange(0.0f, 1.0f, 0.01f), 0.5f), 28 | std::make_unique(TONE_ID, TONE_NAME, NormalisableRange(0.0f, 1.0f, 0.01f), 0.5f), 29 | std::make_unique(MASTER_ID, MASTER_NAME, NormalisableRange(0.0f, 1.0f, 0.01f), 0.5) }) 30 | 31 | #endif 32 | { 33 | driveParam = treeState.getRawParameterValue (GAIN_ID); 34 | masterParam = treeState.getRawParameterValue (MASTER_ID); 35 | toneParam = treeState.getRawParameterValue (TONE_ID); 36 | } 37 | 38 | 39 | TSM1N3AudioProcessor::~TSM1N3AudioProcessor() 40 | { 41 | } 42 | 43 | //============================================================================== 44 | const String TSM1N3AudioProcessor::getName() const 45 | { 46 | return JucePlugin_Name; 47 | } 48 | 49 | bool TSM1N3AudioProcessor::acceptsMidi() const 50 | { 51 | #if JucePlugin_WantsMidiInput 52 | return true; 53 | #else 54 | return false; 55 | #endif 56 | } 57 | 58 | bool TSM1N3AudioProcessor::producesMidi() const 59 | { 60 | #if JucePlugin_ProducesMidiOutput 61 | return true; 62 | #else 63 | return false; 64 | #endif 65 | } 66 | 67 | bool TSM1N3AudioProcessor::isMidiEffect() const 68 | { 69 | #if JucePlugin_IsMidiEffect 70 | return true; 71 | #else 72 | return false; 73 | #endif 74 | } 75 | 76 | double TSM1N3AudioProcessor::getTailLengthSeconds() const 77 | { 78 | return 0.0; 79 | } 80 | 81 | int TSM1N3AudioProcessor::getNumPrograms() 82 | { 83 | return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs, 84 | // so this should be at least 1, even if you're not really implementing programs. 85 | } 86 | 87 | int TSM1N3AudioProcessor::getCurrentProgram() 88 | { 89 | return 0; 90 | } 91 | 92 | void TSM1N3AudioProcessor::setCurrentProgram (int index) 93 | { 94 | } 95 | 96 | const String TSM1N3AudioProcessor::getProgramName (int index) 97 | { 98 | return {}; 99 | } 100 | 101 | void TSM1N3AudioProcessor::changeProgramName (int index, const String& newName) 102 | { 103 | } 104 | 105 | //============================================================================== 106 | void TSM1N3AudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) 107 | { 108 | // Use this method as the place to do any pre-playback 109 | // initialisation that you need.. 110 | LSTM.reset(); 111 | LSTM2.reset(); 112 | 113 | // prepare resampler for target sample rate: 48 kHz 114 | constexpr double targetSampleRate = 48000.0; 115 | resampler.prepareWithTargetSampleRate ({ sampleRate, (uint32) samplesPerBlock, 2 }, targetSampleRate); 116 | 117 | // load 48 kHz sample rate model 118 | MemoryInputStream jsonInputStream(BinaryData::model_ts9_48k_cond2_json, BinaryData::model_ts9_48k_cond2_jsonSize, false); 119 | nlohmann::json weights_json = nlohmann::json::parse(jsonInputStream.readEntireStreamAsString().toStdString()); 120 | 121 | LSTM.load_json3(weights_json); 122 | LSTM2.load_json3(weights_json); 123 | 124 | // set up DC blocker 125 | //dcBlocker.coefficients = dsp::IIR::Coefficients::makeHighPass(sampleRate, 35.0f); 126 | //dsp::ProcessSpec spec{ sampleRate, static_cast (samplesPerBlock), 2 }; 127 | //dcBlocker.prepare(spec); 128 | } 129 | 130 | void TSM1N3AudioProcessor::releaseResources() 131 | { 132 | // When playback stops, you can use this as an opportunity to free up any 133 | // spare memory, etc. 134 | } 135 | 136 | #ifndef JucePlugin_PreferredChannelConfigurations 137 | bool TSM1N3AudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const 138 | { 139 | #if JucePlugin_IsMidiEffect 140 | ignoreUnused (layouts); 141 | return true; 142 | #else 143 | // This is the place where you check if the layout is supported. 144 | // In this template code we only support mono or stereo. 145 | if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono() 146 | && layouts.getMainOutputChannelSet() != AudioChannelSet::stereo()) 147 | return false; 148 | 149 | // This checks if the input layout matches the output layout 150 | #if ! JucePlugin_IsSynth 151 | if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet()) 152 | return false; 153 | #endif 154 | 155 | return true; 156 | #endif 157 | } 158 | #endif 159 | 160 | 161 | void TSM1N3AudioProcessor::processBlock (AudioBuffer& buffer, MidiBuffer& midiMessages) 162 | { 163 | ScopedNoDenormals noDenormals; 164 | 165 | // Setup Audio Data 166 | const int numSamples = buffer.getNumSamples(); 167 | 168 | auto driveValue = static_cast (driveParam->load()); 169 | auto toneValue = static_cast (toneParam->load()); 170 | auto masterValue = static_cast (masterParam->load()); 171 | 172 | // Amp ============================================================================= 173 | if (fw_state == 1) { 174 | //Apply default gain 175 | buffer.applyGain(3.0); 176 | 177 | // resample to target sample rate 178 | dsp::AudioBlock block(buffer); 179 | //auto block = dsp::AudioBlock(buffer.getArrayOfWritePointers(), 1, numSamples); 180 | auto block48k = resampler.processIn(block); 181 | 182 | // Apply LSTM model 183 | for (int ch = 0; ch < buffer.getNumChannels(); ++ch) 184 | { 185 | // Apply LSTM model 186 | if (ch == 0) { 187 | LSTM.process(block48k.getChannelPointer(0), driveValue, toneValue, block48k.getChannelPointer(0), (int) block48k.getNumSamples()); 188 | } 189 | else if (ch == 1) { 190 | LSTM2.process(block48k.getChannelPointer(1), driveValue, toneValue, block48k.getChannelPointer(1), (int) block48k.getNumSamples()); 191 | } 192 | } 193 | 194 | // resample back to original sample rate 195 | resampler.processOut(block48k, block); 196 | 197 | // Master Volume 198 | // Apply ramped changes for gain smoothing 199 | if (masterValue == previousMasterValue) 200 | { 201 | buffer.applyGain(masterValue); 202 | } 203 | else { 204 | buffer.applyGainRamp(0, (int) buffer.getNumSamples(), previousMasterValue, masterValue); 205 | previousMasterValue = masterValue; 206 | } 207 | } 208 | } 209 | 210 | //============================================================================== 211 | bool TSM1N3AudioProcessor::hasEditor() const 212 | { 213 | return true; // (change this to false if you choose to not supply an editor) 214 | } 215 | 216 | AudioProcessorEditor* TSM1N3AudioProcessor::createEditor() 217 | { 218 | return new TSM1N3AudioProcessorEditor (*this); 219 | } 220 | 221 | //============================================================================== 222 | void TSM1N3AudioProcessor::getStateInformation (MemoryBlock& destData) 223 | { 224 | // You should use this method to store your parameters in the memory block. 225 | // You could do that either as raw data, or use the XML or ValueTree classes 226 | // as intermediaries to make it easy to save and load complex data. 227 | 228 | auto state = treeState.copyState(); 229 | std::unique_ptr xml (state.createXml()); 230 | xml->setAttribute ("fw_state", fw_state); 231 | copyXmlToBinary (*xml, destData); 232 | } 233 | 234 | void TSM1N3AudioProcessor::setStateInformation (const void* data, int sizeInBytes) 235 | { 236 | // You should use this method to restore your parameters from this memory block, 237 | // whose contents will have been created by the getStateInformation() call. 238 | 239 | std::unique_ptr xmlState (getXmlFromBinary (data, sizeInBytes)); 240 | 241 | if (xmlState.get() != nullptr) 242 | { 243 | if (xmlState->hasTagName (treeState.state.getType())) 244 | { 245 | treeState.replaceState (juce::ValueTree::fromXml (*xmlState)); 246 | fw_state = xmlState->getBoolAttribute ("fw_state"); 247 | if (auto* editor = dynamic_cast (getActiveEditor())) 248 | editor->resetImages(); 249 | } 250 | } 251 | } 252 | 253 | 254 | //============================================================================== 255 | // This creates new instances of the plugin.. 256 | AudioProcessor* JUCE_CALLTYPE createPluginFilter() 257 | { 258 | return new TSM1N3AudioProcessor(); 259 | } 260 | -------------------------------------------------------------------------------- /Source/PluginProcessor.h: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | This file was auto-generated! 5 | 6 | It contains the basic framework code for a JUCE plugin processor. 7 | 8 | ============================================================================== 9 | */ 10 | 11 | #include 12 | #include "RTNeuralLSTM.h" 13 | 14 | #pragma once 15 | 16 | #include "../JuceLibraryCode/JuceHeader.h" 17 | 18 | #define GAIN_ID "drive" 19 | #define GAIN_NAME "Drive" 20 | #define MASTER_ID "level" 21 | #define MASTER_NAME "Level" 22 | #define TONE_ID "tone" 23 | #define TONE_NAME "Tone" 24 | 25 | 26 | //============================================================================== 27 | class TSM1N3AudioProcessor : public AudioProcessor 28 | { 29 | public: 30 | //============================================================================== 31 | TSM1N3AudioProcessor(); 32 | ~TSM1N3AudioProcessor(); 33 | 34 | //============================================================================== 35 | void prepareToPlay (double sampleRate, int samplesPerBlock) override; 36 | void releaseResources() override; 37 | 38 | #ifndef JucePlugin_PreferredChannelConfigurations 39 | bool isBusesLayoutSupported (const BusesLayout& layouts) const override; 40 | #endif 41 | 42 | void processBlock (AudioBuffer&, MidiBuffer&) override; 43 | 44 | //============================================================================== 45 | AudioProcessorEditor* createEditor() override; 46 | bool hasEditor() const override; 47 | 48 | //============================================================================== 49 | const String getName() const override; 50 | 51 | bool acceptsMidi() const override; 52 | bool producesMidi() const override; 53 | bool isMidiEffect() const override; 54 | double getTailLengthSeconds() const override; 55 | 56 | //============================================================================== 57 | int getNumPrograms() override; 58 | int getCurrentProgram() override; 59 | void setCurrentProgram (int index) override; 60 | const String getProgramName (int index) override; 61 | void changeProgramName (int index, const String& newName) override; 62 | 63 | //============================================================================== 64 | void getStateInformation (MemoryBlock& destData) override; 65 | void setStateInformation (const void* data, int sizeInBytes) override; 66 | 67 | //float convertLogScale(float in_value, float x_min, float x_max, float y_min, float y_max); 68 | 69 | //float decibelToLinear(float dbValue); 70 | 71 | //void setDrive(float paramDrive); 72 | //void setTone(float paramTone); 73 | //void setMaster(float db_ampMaster); 74 | 75 | // Pedal/amp states 76 | int fw_state = 1; // 0 = off, 1 = on 77 | //float driveValue = 0.5; 78 | //float toneValue = 0.5; 79 | //float masterValue = 0.5; 80 | //float previousMasterValue = 0.5; 81 | 82 | bool lstm_state = true; 83 | 84 | RT_LSTM LSTM; 85 | RT_LSTM LSTM2; 86 | 87 | AudioProcessorValueTreeState treeState; 88 | 89 | private: 90 | 91 | //float driveValue = 0.5; 92 | //float toneValue = 0.5; 93 | //float masterValue = 0.5; 94 | 95 | std::atomic* driveParam = nullptr; 96 | std::atomic* toneParam = nullptr; 97 | std::atomic* masterParam = nullptr; 98 | 99 | float previousMasterValue = 0.5; 100 | 101 | chowdsp::ResampledProcess> resampler; 102 | 103 | //dsp::IIR::Filter dcBlocker; // Unused for TS-M1N3 plugin, leaving commented as template for future plugins 104 | 105 | //============================================================================== 106 | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TSM1N3AudioProcessor) 107 | }; 108 | -------------------------------------------------------------------------------- /Source/RTNeuralLSTM.cpp: -------------------------------------------------------------------------------- 1 | #include "RTNeuralLSTM.h" 2 | 3 | using Vec2d = std::vector>; 4 | 5 | Vec2d transpose(const Vec2d& x) 6 | { 7 | auto outer_size = x.size(); 8 | auto inner_size = x[0].size(); 9 | Vec2d y(inner_size, std::vector(outer_size, 0.0f)); 10 | 11 | for (size_t i = 0; i < outer_size; ++i) 12 | { 13 | for (size_t j = 0; j < inner_size; ++j) 14 | y[j][i] = x[i][j]; 15 | } 16 | 17 | return y; 18 | } 19 | 20 | 21 | void RT_LSTM::load_json3(const nlohmann::json& weights_json) 22 | { 23 | auto& lstm = model_cond2.get<0>(); 24 | auto& dense = model_cond2.get<1>(); 25 | 26 | // read a JSON file 27 | //std::ifstream i2(jsonFile); 28 | //nlohmann::json weights_json; 29 | //i2 >> weights_json; 30 | 31 | 32 | Vec2d lstm_weights_ih = weights_json["/state_dict/rec.weight_ih_l0"_json_pointer]; 33 | lstm.setWVals(transpose(lstm_weights_ih)); 34 | 35 | Vec2d lstm_weights_hh = weights_json["/state_dict/rec.weight_hh_l0"_json_pointer]; 36 | lstm.setUVals(transpose(lstm_weights_hh)); 37 | 38 | std::vector lstm_bias_ih = weights_json["/state_dict/rec.bias_ih_l0"_json_pointer]; 39 | std::vector lstm_bias_hh = weights_json["/state_dict/rec.bias_hh_l0"_json_pointer]; 40 | for (int i = 0; i < 128; ++i) 41 | lstm_bias_hh[i] += lstm_bias_ih[i]; 42 | lstm.setBVals(lstm_bias_hh); 43 | 44 | Vec2d dense_weights = weights_json["/state_dict/lin.weight"_json_pointer]; 45 | dense.setWeights(dense_weights); 46 | 47 | std::vector dense_bias = weights_json["/state_dict/lin.bias"_json_pointer]; 48 | dense.setBias(dense_bias.data()); 49 | } 50 | 51 | void RT_LSTM::reset() 52 | { 53 | model_cond2.reset(); 54 | } 55 | 56 | void RT_LSTM::process(const float* inData, float param1, float param2, float* outData, int numSamples) 57 | { 58 | // Check for parameter changes for smoothing calculations 59 | if (param1 != previousParam1) { 60 | steppedValue1 = (param1 - previousParam1) / numSamples; 61 | changedParam1 = true; 62 | } else { 63 | changedParam1 = false; 64 | } 65 | if (param2 != previousParam2) { 66 | steppedValue2 = (param2 - previousParam2) / numSamples; 67 | changedParam2 = true; 68 | } else { 69 | changedParam2 = false; 70 | } 71 | 72 | for (int i = 0; i < numSamples; ++i) { 73 | inArray[0] = inData[i]; 74 | 75 | // Perform ramped value calculations to smooth out sound 76 | if (changedParam1 == true) { 77 | inArray[1] = previousParam1 + (i + 1) * steppedValue1; 78 | } else { 79 | inArray[1] = param1; 80 | } 81 | // Perform ramped value calculations to smooth out sound 82 | if (changedParam2 == true) { 83 | inArray[2] = previousParam2 + (i + 1) * steppedValue2; 84 | } else { 85 | inArray[2] = param2; 86 | } 87 | // Run forward pass through neural network 88 | outData[i] = model_cond2.forward(inArray) + inData[i]; 89 | } 90 | previousParam1 = param1; 91 | previousParam2 = param2; 92 | } 93 | -------------------------------------------------------------------------------- /Source/RTNeuralLSTM.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | class RT_LSTM 7 | { 8 | public: 9 | RT_LSTM() = default; 10 | 11 | void reset(); 12 | //void load_json3(const char* jsonFile); 13 | void load_json3(const nlohmann::json& weights_json); 14 | 15 | //void process(const float* inData, float* outData, int numSamples); 16 | void process(const float* inData, float param1, float param2, float* outData, int numSamples); 17 | 18 | int input_size = 3; 19 | 20 | float previousParam1 = 0.0; 21 | float previousParam2 = 0.0; 22 | float steppedValue1 = 0.0; 23 | float steppedValue2 = 0.0; 24 | bool changedParam1 = false; 25 | bool changedParam2 = false; 26 | 27 | private: 28 | RTNeural::ModelT, 30 | RTNeural::DenseT> model_cond2; 31 | 32 | float inArray alignas(16)[3] = { 0.0, 0.0, 0.0 }; 33 | //float inArray[2] = { 0.0, 0.0, 0.0 }; 34 | }; 35 | -------------------------------------------------------------------------------- /Source/myLookAndFeel.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | Created: 14 Dec 2017 10:16:04am 5 | Author: Stefan Remberg 6 | 7 | Modified by keyth72 8 | 9 | ============================================================================== 10 | */ 11 | 12 | #include "myLookAndFeel.h" 13 | 14 | //============================================================================== 15 | myLookAndFeel::myLookAndFeel() 16 | { 17 | } 18 | 19 | //============================================================================== 20 | void myLookAndFeel::setLookAndFeel(Image inputImage) 21 | { 22 | img = inputImage; 23 | } 24 | 25 | 26 | //============================================================================== 27 | void myLookAndFeel::drawRotarySlider(Graphics& g, 28 | int x, int y, int width, int height, float sliderPos, 29 | float rotaryStartAngle, float rotaryEndAngle, Slider& slider) 30 | { 31 | const double rotation = (slider.getValue() 32 | - slider.getMinimum()) 33 | / (slider.getMaximum() 34 | - slider.getMinimum()); 35 | 36 | const int frames = img.getHeight() / img.getWidth(); 37 | const int frameId = (int)ceil(rotation * ((double)frames - 1.0)); 38 | const float radius = jmin(width / 2.0f, height / 2.0f); 39 | const float centerX = x + width * 0.5f; 40 | const float centerY = y + height * 0.5f; 41 | const float rx = centerX - radius - 1.0f; 42 | const float ry = centerY - radius; 43 | 44 | g.drawImage(img, 45 | (int)rx, 46 | (int)ry, 47 | 2 * (int)radius, 48 | 2 * (int)radius, 49 | 0, 50 | frameId*img.getWidth(), 51 | img.getWidth(), 52 | img.getWidth()); 53 | } 54 | -------------------------------------------------------------------------------- /Source/myLookAndFeel.h: -------------------------------------------------------------------------------- 1 | /* 2 | ============================================================================== 3 | 4 | Created: 14 Dec 2017 10:16:04am 5 | Author: Stefan Remberg 6 | 7 | Modified by keyth72 8 | 9 | ============================================================================== 10 | */ 11 | 12 | #pragma once 13 | #include "../JuceLibraryCode/JuceHeader.h" 14 | 15 | 16 | //============================================================================== 17 | class myLookAndFeel : public LookAndFeel_V4 18 | { 19 | 20 | public: 21 | myLookAndFeel(); 22 | void setLookAndFeel(Image inputImage); 23 | void drawRotarySlider(Graphics& g, int x, int y, int width, int height, float sliderPos, 24 | float rotaryStartAngle, float rotaryEndAngle, Slider& slider) override; 25 | 26 | private: 27 | Image img; 28 | 29 | }; 30 | -------------------------------------------------------------------------------- /aax_builds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit on failure 4 | set -e 5 | 6 | # need to run in sudo mode on Mac 7 | if [[ "$OSTYPE" == "darwin"* ]]; then 8 | if [ "$EUID" -ne 0 ]; then 9 | echo "This script must be run in sudo mode! Exiting..." 10 | exit 1 11 | fi 12 | fi 13 | 14 | if [[ "$*" = *debug* ]]; then 15 | echo "Making DEBUG build" 16 | build_config="Debug" 17 | else 18 | echo "Making RELEASE build" 19 | build_config="Release" 20 | fi 21 | 22 | # clean up old builds 23 | if [[ $* = *clean* ]]; then 24 | echo "Cleaning previous build..." 25 | rm -rf build-aax/ 26 | fi 27 | 28 | sed_cmakelist() 29 | { 30 | sed_args="$1" 31 | 32 | if [[ "$OSTYPE" == "darwin"* ]]; then 33 | sed -i '' "$sed_args" CMakeLists.txt 34 | else 35 | sed -i -e "$sed_args" CMakeLists.txt 36 | fi 37 | } 38 | 39 | # set up OS-dependent variables 40 | if [[ "$OSTYPE" == "darwin"* ]]; then 41 | echo "Building for MAC" 42 | AAX_PATH=~/Developer/AAX_SDK/ 43 | ilok_pass=$(more ~/Developer/ilok_pass) 44 | aax_target_dir="/Library/Application Support/Avid/Audio/Plug-Ins" 45 | TEAM_ID=$(more ~/Developer/mac_id) 46 | TARGET_DIR="Mac" 47 | 48 | else # Windows 49 | echo "Building for WINDOWS" 50 | AAX_PATH=C:/SDKs/AAX_SDK/ 51 | ilok_pass=$(cat /c/SDKs/ilok_pass) 52 | aax_target_dir="/c/Program Files/Common Files/Avid/Audio/Plug-Ins" 53 | TARGET_DIR="Win64" 54 | fi 55 | 56 | # set up build AAX 57 | #sed_cmakelist "s~# juce_set_aax_sdk_path.*~juce_set_aax_sdk_path(${AAX_PATH})~" 58 | 59 | # cmake new builds 60 | if [[ "$OSTYPE" == "darwin"* ]]; then 61 | cmake -Bbuild-aax -GXcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="Developer ID Application" \ 62 | -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM="$TEAM_ID" \ 63 | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE="Manual" \ 64 | -D"CMAKE_OSX_ARCHITECTURES=x86_64" \ 65 | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO \ 66 | -DCMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS="--timestamp" \ 67 | -DMACOS_RELEASE=ON 68 | 69 | cmake --build build-aax --config $build_config --target TS-M1N3_AAX | xcpretty 70 | 71 | else # Windows 72 | cmake -Bbuild-aax -G"Visual Studio 16 2019" -A x64 73 | cmake --build build-aax --config $build_config --parallel $(nproc) --target TS-M1N3_AAX 74 | fi 75 | 76 | # sign with PACE 77 | aax_location=build-aax/TS-M1N3_artefacts/$build_config/AAX/TS-M1N3.aaxplugin 78 | wcguid="E9587400-8ED1-11EC-AA74-00505692AD3E" # Update 79 | if [[ "$OSTYPE" == "darwin"* ]]; then 80 | /Applications/PACEAntiPiracy/Eden/Fusion/Current/bin/wraptool sign --verbose \ 81 | --account keyth72 \ 82 | --password "$ilok_pass" \ 83 | --wcguid $wcguid \ 84 | --dsig1-compat off \ 85 | --signid "Developer ID Application: Keith Bloemer" \ 86 | --in $aax_location \ 87 | --out $aax_location 88 | 89 | /Applications/PACEAntiPiracy/Eden/Fusion/Current/bin/wraptool verify --verbose --in $aax_location 90 | 91 | else # Windows 92 | wraptool sign --verbose \ 93 | --account keyth72 \ 94 | --password "$ilok_pass" \ 95 | --wcguid $wcguid \ 96 | --keyfile /c/SDKs/keith_aax_cert.p12 \ 97 | --keypassword "$ilok_pass" \ 98 | --in $aax_location \ 99 | --out $aax_location 100 | 101 | wraptool verify --verbose --in $aax_location/Contents/x64/TS-M1N3.aaxplugin 102 | fi 103 | 104 | # reset AAX SDK field... 105 | #sed_cmakelist "s~juce_set_aax_sdk_path.*~# juce_set_aax_sdk_path(NONE)~" 106 | 107 | rm -rf "$aax_target_dir/TS-M1N3.aaxplugin" 108 | cp -R "$aax_location" "$aax_target_dir/TS-M1N3.aaxplugin" 109 | 110 | if [[ "$*" = *deploy* ]]; then 111 | set +e 112 | 113 | ssh "smartguitarml@gmail.com" "rm -r ~/aax_builds/${TARGET_DIR}/TS-M1N3.aaxplugin" 114 | scp -r "$aax_location" "smartguitarml@gmail.com:~/aax_builds/${TARGET_DIR}/" 115 | fi 116 | -------------------------------------------------------------------------------- /installers/linux/build_deb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This script builds a .deb package for installing the VST3, and LV2 plugins on Linux 3 | 4 | # Set the app name and version here 5 | app_name=TS-M1N3 6 | version=1.2 7 | 8 | 9 | # 1. Create the package directory structure and control file 10 | 11 | mkdir -p $app_name"/DEBIAN" 12 | 13 | printf "Package: $app_name\n\ 14 | Version: $version\n\ 15 | Section: custom\n\ 16 | Priority: optional\n\ 17 | Architecture: all\n\ 18 | Essential: no\n\ 19 | Installed-Size: 16480128\n\ 20 | Maintainer: GuitarML\n\ 21 | Description: GuitarML Plugin Debian Package (VST3, LV2)\n" > $app_name"/DEBIAN/control" 22 | 23 | 24 | # 2. Copy Standalone, VST3, and LV2 plugins to the package directory (assumes project is already built) 25 | 26 | mkdir -p $app_name/usr/local/lib/vst3/ 27 | echo "Copying ../../build/"$app_name"_artefacts/Release/VST3/"$app_name".vst3" 28 | cp -r "../../build/"$app_name"_artefacts/Release/VST3/"$app_name".vst3" $app_name"/usr/local/lib/vst3/" 29 | 30 | mkdir -p $app_name/usr/local/lib/lv2/ 31 | echo "Copying ../../build/"$app_name"_artefacts/Release/LV2/"$app_name".lv2" 32 | cp -r "../../build/"$app_name"_artefacts/Release/LV2/"$app_name".lv2" $app_name"/usr/local/lib/lv2/" 33 | 34 | 35 | # 3. Build the .deb package and rename 36 | 37 | dpkg-deb --build $app_name 38 | 39 | mv $app_name.deb $app_name-Linux-x64-$version.deb 40 | -------------------------------------------------------------------------------- /installers/mac/Intro.txt: -------------------------------------------------------------------------------- 1 | This application will install the TS-M1N3 audio plugin version ##APPVERSION## to your computer. 2 | -------------------------------------------------------------------------------- /installers/mac/TS-M1N3.pkgproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PACKAGES 6 | 7 | 8 | MUST-CLOSE-APPLICATION-ITEMS 9 | 10 | MUST-CLOSE-APPLICATIONS 11 | 12 | PACKAGE_FILES 13 | 14 | DEFAULT_INSTALL_LOCATION 15 | / 16 | HIERARCHY 17 | 18 | CHILDREN 19 | 20 | 21 | CHILDREN 22 | 23 | GID 24 | 80 25 | PATH 26 | Applications 27 | PATH_TYPE 28 | 0 29 | PERMISSIONS 30 | 509 31 | TYPE 32 | 1 33 | UID 34 | 0 35 | 36 | 37 | CHILDREN 38 | 39 | 40 | CHILDREN 41 | 42 | GID 43 | 80 44 | PATH 45 | Application Support 46 | PATH_TYPE 47 | 0 48 | PERMISSIONS 49 | 493 50 | TYPE 51 | 1 52 | UID 53 | 0 54 | 55 | 56 | CHILDREN 57 | 58 | 59 | CHILDREN 60 | 61 | 62 | CHILDREN 63 | 64 | 65 | BUNDLE_CAN_DOWNGRADE 66 | 67 | BUNDLE_POSTINSTALL_PATH 68 | 69 | PATH_TYPE 70 | 0 71 | 72 | BUNDLE_PREINSTALL_PATH 73 | 74 | PATH_TYPE 75 | 0 76 | 77 | CHILDREN 78 | 79 | GID 80 | 0 81 | PATH 82 | ../../bin/Mac/TS-M1N3.component 83 | PATH_TYPE 84 | 1 85 | PERMISSIONS 86 | 493 87 | TYPE 88 | 3 89 | UID 90 | 0 91 | 92 | 93 | GID 94 | 0 95 | PATH 96 | Components 97 | PATH_TYPE 98 | 2 99 | PERMISSIONS 100 | 509 101 | TYPE 102 | 2 103 | UID 104 | 0 105 | 106 | 107 | GID 108 | 0 109 | PATH 110 | Plug-Ins 111 | PATH_TYPE 112 | 2 113 | PERMISSIONS 114 | 509 115 | TYPE 116 | 2 117 | UID 118 | 0 119 | 120 | 121 | GID 122 | 0 123 | PATH 124 | Audio 125 | PATH_TYPE 126 | 2 127 | PERMISSIONS 128 | 509 129 | TYPE 130 | 2 131 | UID 132 | 0 133 | 134 | 135 | CHILDREN 136 | 137 | GID 138 | 0 139 | PATH 140 | Automator 141 | PATH_TYPE 142 | 0 143 | PERMISSIONS 144 | 493 145 | TYPE 146 | 1 147 | UID 148 | 0 149 | 150 | 151 | CHILDREN 152 | 153 | GID 154 | 0 155 | PATH 156 | Documentation 157 | PATH_TYPE 158 | 0 159 | PERMISSIONS 160 | 493 161 | TYPE 162 | 1 163 | UID 164 | 0 165 | 166 | 167 | CHILDREN 168 | 169 | GID 170 | 0 171 | PATH 172 | Extensions 173 | PATH_TYPE 174 | 0 175 | PERMISSIONS 176 | 493 177 | TYPE 178 | 1 179 | UID 180 | 0 181 | 182 | 183 | CHILDREN 184 | 185 | GID 186 | 0 187 | PATH 188 | Filesystems 189 | PATH_TYPE 190 | 0 191 | PERMISSIONS 192 | 493 193 | TYPE 194 | 1 195 | UID 196 | 0 197 | 198 | 199 | CHILDREN 200 | 201 | GID 202 | 0 203 | PATH 204 | Frameworks 205 | PATH_TYPE 206 | 0 207 | PERMISSIONS 208 | 493 209 | TYPE 210 | 1 211 | UID 212 | 0 213 | 214 | 215 | CHILDREN 216 | 217 | GID 218 | 0 219 | PATH 220 | Input Methods 221 | PATH_TYPE 222 | 0 223 | PERMISSIONS 224 | 493 225 | TYPE 226 | 1 227 | UID 228 | 0 229 | 230 | 231 | CHILDREN 232 | 233 | GID 234 | 0 235 | PATH 236 | Internet Plug-Ins 237 | PATH_TYPE 238 | 0 239 | PERMISSIONS 240 | 493 241 | TYPE 242 | 1 243 | UID 244 | 0 245 | 246 | 247 | CHILDREN 248 | 249 | GID 250 | 0 251 | PATH 252 | LaunchAgents 253 | PATH_TYPE 254 | 0 255 | PERMISSIONS 256 | 493 257 | TYPE 258 | 1 259 | UID 260 | 0 261 | 262 | 263 | CHILDREN 264 | 265 | GID 266 | 0 267 | PATH 268 | LaunchDaemons 269 | PATH_TYPE 270 | 0 271 | PERMISSIONS 272 | 493 273 | TYPE 274 | 1 275 | UID 276 | 0 277 | 278 | 279 | CHILDREN 280 | 281 | GID 282 | 0 283 | PATH 284 | PreferencePanes 285 | PATH_TYPE 286 | 0 287 | PERMISSIONS 288 | 493 289 | TYPE 290 | 1 291 | UID 292 | 0 293 | 294 | 295 | CHILDREN 296 | 297 | GID 298 | 0 299 | PATH 300 | Preferences 301 | PATH_TYPE 302 | 0 303 | PERMISSIONS 304 | 493 305 | TYPE 306 | 1 307 | UID 308 | 0 309 | 310 | 311 | CHILDREN 312 | 313 | GID 314 | 80 315 | PATH 316 | Printers 317 | PATH_TYPE 318 | 0 319 | PERMISSIONS 320 | 493 321 | TYPE 322 | 1 323 | UID 324 | 0 325 | 326 | 327 | CHILDREN 328 | 329 | GID 330 | 0 331 | PATH 332 | PrivilegedHelperTools 333 | PATH_TYPE 334 | 0 335 | PERMISSIONS 336 | 1005 337 | TYPE 338 | 1 339 | UID 340 | 0 341 | 342 | 343 | CHILDREN 344 | 345 | GID 346 | 0 347 | PATH 348 | QuickLook 349 | PATH_TYPE 350 | 0 351 | PERMISSIONS 352 | 493 353 | TYPE 354 | 1 355 | UID 356 | 0 357 | 358 | 359 | CHILDREN 360 | 361 | GID 362 | 0 363 | PATH 364 | QuickTime 365 | PATH_TYPE 366 | 0 367 | PERMISSIONS 368 | 493 369 | TYPE 370 | 1 371 | UID 372 | 0 373 | 374 | 375 | CHILDREN 376 | 377 | GID 378 | 0 379 | PATH 380 | Screen Savers 381 | PATH_TYPE 382 | 0 383 | PERMISSIONS 384 | 493 385 | TYPE 386 | 1 387 | UID 388 | 0 389 | 390 | 391 | CHILDREN 392 | 393 | GID 394 | 0 395 | PATH 396 | Scripts 397 | PATH_TYPE 398 | 0 399 | PERMISSIONS 400 | 493 401 | TYPE 402 | 1 403 | UID 404 | 0 405 | 406 | 407 | CHILDREN 408 | 409 | GID 410 | 0 411 | PATH 412 | Services 413 | PATH_TYPE 414 | 0 415 | PERMISSIONS 416 | 493 417 | TYPE 418 | 1 419 | UID 420 | 0 421 | 422 | 423 | CHILDREN 424 | 425 | GID 426 | 0 427 | PATH 428 | Widgets 429 | PATH_TYPE 430 | 0 431 | PERMISSIONS 432 | 493 433 | TYPE 434 | 1 435 | UID 436 | 0 437 | 438 | 439 | GID 440 | 0 441 | PATH 442 | Library 443 | PATH_TYPE 444 | 0 445 | PERMISSIONS 446 | 493 447 | TYPE 448 | 1 449 | UID 450 | 0 451 | 452 | 453 | CHILDREN 454 | 455 | 456 | CHILDREN 457 | 458 | GID 459 | 0 460 | PATH 461 | Shared 462 | PATH_TYPE 463 | 0 464 | PERMISSIONS 465 | 1023 466 | TYPE 467 | 1 468 | UID 469 | 0 470 | 471 | 472 | GID 473 | 80 474 | PATH 475 | Users 476 | PATH_TYPE 477 | 0 478 | PERMISSIONS 479 | 493 480 | TYPE 481 | 1 482 | UID 483 | 0 484 | 485 | 486 | GID 487 | 0 488 | PATH 489 | / 490 | PATH_TYPE 491 | 0 492 | PERMISSIONS 493 | 493 494 | TYPE 495 | 1 496 | UID 497 | 0 498 | 499 | PAYLOAD_TYPE 500 | 0 501 | PRESERVE_EXTENDED_ATTRIBUTES 502 | 503 | SHOW_INVISIBLE 504 | 505 | SPLIT_FORKS 506 | 507 | TREAT_MISSING_FILES_AS_WARNING 508 | 509 | VERSION 510 | 5 511 | 512 | PACKAGE_SCRIPTS 513 | 514 | POSTINSTALL_PATH 515 | 516 | PATH_TYPE 517 | 0 518 | 519 | PREINSTALL_PATH 520 | 521 | PATH_TYPE 522 | 0 523 | 524 | RESOURCES 525 | 526 | 527 | PACKAGE_SETTINGS 528 | 529 | AUTHENTICATION 530 | 1 531 | CONCLUSION_ACTION 532 | 0 533 | FOLLOW_SYMBOLIC_LINKS 534 | 535 | IDENTIFIER 536 | com.GuitarML.TS-M1N3.TS-M1N3AU 537 | LOCATION 538 | 0 539 | NAME 540 | AU 541 | OVERWRITE_PERMISSIONS 542 | 543 | PAYLOAD_SIZE 544 | -1 545 | REFERENCE_PATH 546 | 547 | RELOCATABLE 548 | 549 | USE_HFS+_COMPRESSION 550 | 551 | VERSION 552 | ##APPVERSION## 553 | 554 | TYPE 555 | 0 556 | UUID 557 | 69EED16E-B119-4D35-B464-12717823DE0E 558 | 559 | 560 | MUST-CLOSE-APPLICATION-ITEMS 561 | 562 | MUST-CLOSE-APPLICATIONS 563 | 564 | PACKAGE_FILES 565 | 566 | DEFAULT_INSTALL_LOCATION 567 | / 568 | HIERARCHY 569 | 570 | CHILDREN 571 | 572 | 573 | CHILDREN 574 | 575 | GID 576 | 80 577 | PATH 578 | Applications 579 | PATH_TYPE 580 | 0 581 | PERMISSIONS 582 | 509 583 | TYPE 584 | 1 585 | UID 586 | 0 587 | 588 | 589 | CHILDREN 590 | 591 | 592 | CHILDREN 593 | 594 | GID 595 | 80 596 | PATH 597 | Application Support 598 | PATH_TYPE 599 | 0 600 | PERMISSIONS 601 | 493 602 | TYPE 603 | 1 604 | UID 605 | 0 606 | 607 | 608 | CHILDREN 609 | 610 | 611 | CHILDREN 612 | 613 | 614 | CHILDREN 615 | 616 | 617 | BUNDLE_CAN_DOWNGRADE 618 | 619 | BUNDLE_POSTINSTALL_PATH 620 | 621 | PATH_TYPE 622 | 0 623 | 624 | BUNDLE_PREINSTALL_PATH 625 | 626 | PATH_TYPE 627 | 0 628 | 629 | CHILDREN 630 | 631 | GID 632 | 0 633 | PATH 634 | ../../bin/Mac/TS-M1N3.vst3 635 | PATH_TYPE 636 | 1 637 | PERMISSIONS 638 | 493 639 | TYPE 640 | 3 641 | UID 642 | 0 643 | 644 | 645 | GID 646 | 0 647 | PATH 648 | VST3 649 | PATH_TYPE 650 | 2 651 | PERMISSIONS 652 | 509 653 | TYPE 654 | 2 655 | UID 656 | 0 657 | 658 | 659 | GID 660 | 0 661 | PATH 662 | Plug-Ins 663 | PATH_TYPE 664 | 2 665 | PERMISSIONS 666 | 509 667 | TYPE 668 | 2 669 | UID 670 | 0 671 | 672 | 673 | GID 674 | 0 675 | PATH 676 | Audio 677 | PATH_TYPE 678 | 2 679 | PERMISSIONS 680 | 509 681 | TYPE 682 | 2 683 | UID 684 | 0 685 | 686 | 687 | CHILDREN 688 | 689 | GID 690 | 0 691 | PATH 692 | Automator 693 | PATH_TYPE 694 | 0 695 | PERMISSIONS 696 | 493 697 | TYPE 698 | 1 699 | UID 700 | 0 701 | 702 | 703 | CHILDREN 704 | 705 | GID 706 | 0 707 | PATH 708 | Documentation 709 | PATH_TYPE 710 | 0 711 | PERMISSIONS 712 | 493 713 | TYPE 714 | 1 715 | UID 716 | 0 717 | 718 | 719 | CHILDREN 720 | 721 | GID 722 | 0 723 | PATH 724 | Extensions 725 | PATH_TYPE 726 | 0 727 | PERMISSIONS 728 | 493 729 | TYPE 730 | 1 731 | UID 732 | 0 733 | 734 | 735 | CHILDREN 736 | 737 | GID 738 | 0 739 | PATH 740 | Filesystems 741 | PATH_TYPE 742 | 0 743 | PERMISSIONS 744 | 493 745 | TYPE 746 | 1 747 | UID 748 | 0 749 | 750 | 751 | CHILDREN 752 | 753 | GID 754 | 0 755 | PATH 756 | Frameworks 757 | PATH_TYPE 758 | 0 759 | PERMISSIONS 760 | 493 761 | TYPE 762 | 1 763 | UID 764 | 0 765 | 766 | 767 | CHILDREN 768 | 769 | GID 770 | 0 771 | PATH 772 | Input Methods 773 | PATH_TYPE 774 | 0 775 | PERMISSIONS 776 | 493 777 | TYPE 778 | 1 779 | UID 780 | 0 781 | 782 | 783 | CHILDREN 784 | 785 | GID 786 | 0 787 | PATH 788 | Internet Plug-Ins 789 | PATH_TYPE 790 | 0 791 | PERMISSIONS 792 | 493 793 | TYPE 794 | 1 795 | UID 796 | 0 797 | 798 | 799 | CHILDREN 800 | 801 | GID 802 | 0 803 | PATH 804 | LaunchAgents 805 | PATH_TYPE 806 | 0 807 | PERMISSIONS 808 | 493 809 | TYPE 810 | 1 811 | UID 812 | 0 813 | 814 | 815 | CHILDREN 816 | 817 | GID 818 | 0 819 | PATH 820 | LaunchDaemons 821 | PATH_TYPE 822 | 0 823 | PERMISSIONS 824 | 493 825 | TYPE 826 | 1 827 | UID 828 | 0 829 | 830 | 831 | CHILDREN 832 | 833 | GID 834 | 0 835 | PATH 836 | PreferencePanes 837 | PATH_TYPE 838 | 0 839 | PERMISSIONS 840 | 493 841 | TYPE 842 | 1 843 | UID 844 | 0 845 | 846 | 847 | CHILDREN 848 | 849 | GID 850 | 0 851 | PATH 852 | Preferences 853 | PATH_TYPE 854 | 0 855 | PERMISSIONS 856 | 493 857 | TYPE 858 | 1 859 | UID 860 | 0 861 | 862 | 863 | CHILDREN 864 | 865 | GID 866 | 80 867 | PATH 868 | Printers 869 | PATH_TYPE 870 | 0 871 | PERMISSIONS 872 | 493 873 | TYPE 874 | 1 875 | UID 876 | 0 877 | 878 | 879 | CHILDREN 880 | 881 | GID 882 | 0 883 | PATH 884 | PrivilegedHelperTools 885 | PATH_TYPE 886 | 0 887 | PERMISSIONS 888 | 1005 889 | TYPE 890 | 1 891 | UID 892 | 0 893 | 894 | 895 | CHILDREN 896 | 897 | GID 898 | 0 899 | PATH 900 | QuickLook 901 | PATH_TYPE 902 | 0 903 | PERMISSIONS 904 | 493 905 | TYPE 906 | 1 907 | UID 908 | 0 909 | 910 | 911 | CHILDREN 912 | 913 | GID 914 | 0 915 | PATH 916 | QuickTime 917 | PATH_TYPE 918 | 0 919 | PERMISSIONS 920 | 493 921 | TYPE 922 | 1 923 | UID 924 | 0 925 | 926 | 927 | CHILDREN 928 | 929 | GID 930 | 0 931 | PATH 932 | Screen Savers 933 | PATH_TYPE 934 | 0 935 | PERMISSIONS 936 | 493 937 | TYPE 938 | 1 939 | UID 940 | 0 941 | 942 | 943 | CHILDREN 944 | 945 | GID 946 | 0 947 | PATH 948 | Scripts 949 | PATH_TYPE 950 | 0 951 | PERMISSIONS 952 | 493 953 | TYPE 954 | 1 955 | UID 956 | 0 957 | 958 | 959 | CHILDREN 960 | 961 | GID 962 | 0 963 | PATH 964 | Services 965 | PATH_TYPE 966 | 0 967 | PERMISSIONS 968 | 493 969 | TYPE 970 | 1 971 | UID 972 | 0 973 | 974 | 975 | CHILDREN 976 | 977 | GID 978 | 0 979 | PATH 980 | Widgets 981 | PATH_TYPE 982 | 0 983 | PERMISSIONS 984 | 493 985 | TYPE 986 | 1 987 | UID 988 | 0 989 | 990 | 991 | GID 992 | 0 993 | PATH 994 | Library 995 | PATH_TYPE 996 | 0 997 | PERMISSIONS 998 | 493 999 | TYPE 1000 | 1 1001 | UID 1002 | 0 1003 | 1004 | 1005 | CHILDREN 1006 | 1007 | 1008 | CHILDREN 1009 | 1010 | GID 1011 | 0 1012 | PATH 1013 | Shared 1014 | PATH_TYPE 1015 | 0 1016 | PERMISSIONS 1017 | 1023 1018 | TYPE 1019 | 1 1020 | UID 1021 | 0 1022 | 1023 | 1024 | GID 1025 | 80 1026 | PATH 1027 | Users 1028 | PATH_TYPE 1029 | 0 1030 | PERMISSIONS 1031 | 493 1032 | TYPE 1033 | 1 1034 | UID 1035 | 0 1036 | 1037 | 1038 | GID 1039 | 0 1040 | PATH 1041 | / 1042 | PATH_TYPE 1043 | 0 1044 | PERMISSIONS 1045 | 493 1046 | TYPE 1047 | 1 1048 | UID 1049 | 0 1050 | 1051 | PAYLOAD_TYPE 1052 | 0 1053 | PRESERVE_EXTENDED_ATTRIBUTES 1054 | 1055 | SHOW_INVISIBLE 1056 | 1057 | SPLIT_FORKS 1058 | 1059 | TREAT_MISSING_FILES_AS_WARNING 1060 | 1061 | VERSION 1062 | 5 1063 | 1064 | PACKAGE_SETTINGS 1065 | 1066 | AUTHENTICATION 1067 | 1 1068 | CONCLUSION_ACTION 1069 | 0 1070 | FOLLOW_SYMBOLIC_LINKS 1071 | 1072 | IDENTIFIER 1073 | com.GuitarML.TS-M1N3.TS-M1N3VST3 1074 | LOCATION 1075 | 0 1076 | NAME 1077 | VST3 1078 | OVERWRITE_PERMISSIONS 1079 | 1080 | PAYLOAD_SIZE 1081 | -1 1082 | REFERENCE_PATH 1083 | 1084 | RELOCATABLE 1085 | 1086 | USE_HFS+_COMPRESSION 1087 | 1088 | VERSION 1089 | ##APPVERSION## 1090 | 1091 | TYPE 1092 | 0 1093 | UUID 1094 | 17D06D06-18AD-4175-AA45-047F4984BE1A 1095 | 1096 | 1097 | MUST-CLOSE-APPLICATION-ITEMS 1098 | 1099 | MUST-CLOSE-APPLICATIONS 1100 | 1101 | PACKAGE_FILES 1102 | 1103 | DEFAULT_INSTALL_LOCATION 1104 | /Library/Application Support/Avid/Audio/Plug-Ins 1105 | HIERARCHY 1106 | 1107 | CHILDREN 1108 | 1109 | 1110 | CHILDREN 1111 | 1112 | GID 1113 | 80 1114 | PATH 1115 | Applications 1116 | PATH_TYPE 1117 | 0 1118 | PERMISSIONS 1119 | 509 1120 | TYPE 1121 | 1 1122 | UID 1123 | 0 1124 | 1125 | 1126 | CHILDREN 1127 | 1128 | 1129 | CHILDREN 1130 | 1131 | 1132 | CHILDREN 1133 | 1134 | 1135 | CHILDREN 1136 | 1137 | 1138 | CHILDREN 1139 | 1140 | 1141 | BUNDLE_CAN_DOWNGRADE 1142 | 1143 | BUNDLE_POSTINSTALL_PATH 1144 | 1145 | PATH_TYPE 1146 | 0 1147 | 1148 | BUNDLE_PREINSTALL_PATH 1149 | 1150 | PATH_TYPE 1151 | 0 1152 | 1153 | CHILDREN 1154 | 1155 | GID 1156 | 80 1157 | PATH 1158 | ../../build-aax/TS-M1N3_artefacts/Release/AAX/TS-M1N3.aaxplugin 1159 | PATH_TYPE 1160 | 1 1161 | PERMISSIONS 1162 | 493 1163 | TYPE 1164 | 3 1165 | UID 1166 | 0 1167 | 1168 | 1169 | GID 1170 | 80 1171 | PATH 1172 | Plug-Ins 1173 | PATH_TYPE 1174 | 2 1175 | PERMISSIONS 1176 | 509 1177 | TYPE 1178 | 2 1179 | UID 1180 | 0 1181 | 1182 | 1183 | GID 1184 | 80 1185 | PATH 1186 | Audio 1187 | PATH_TYPE 1188 | 2 1189 | PERMISSIONS 1190 | 509 1191 | TYPE 1192 | 2 1193 | UID 1194 | 0 1195 | 1196 | 1197 | GID 1198 | 80 1199 | PATH 1200 | Avid 1201 | PATH_TYPE 1202 | 2 1203 | PERMISSIONS 1204 | 509 1205 | TYPE 1206 | 2 1207 | UID 1208 | 0 1209 | 1210 | 1211 | GID 1212 | 80 1213 | PATH 1214 | Application Support 1215 | PATH_TYPE 1216 | 0 1217 | PERMISSIONS 1218 | 493 1219 | TYPE 1220 | 1 1221 | UID 1222 | 0 1223 | 1224 | 1225 | CHILDREN 1226 | 1227 | GID 1228 | 0 1229 | PATH 1230 | Automator 1231 | PATH_TYPE 1232 | 0 1233 | PERMISSIONS 1234 | 493 1235 | TYPE 1236 | 1 1237 | UID 1238 | 0 1239 | 1240 | 1241 | CHILDREN 1242 | 1243 | GID 1244 | 0 1245 | PATH 1246 | Documentation 1247 | PATH_TYPE 1248 | 0 1249 | PERMISSIONS 1250 | 493 1251 | TYPE 1252 | 1 1253 | UID 1254 | 0 1255 | 1256 | 1257 | CHILDREN 1258 | 1259 | GID 1260 | 0 1261 | PATH 1262 | Extensions 1263 | PATH_TYPE 1264 | 0 1265 | PERMISSIONS 1266 | 493 1267 | TYPE 1268 | 1 1269 | UID 1270 | 0 1271 | 1272 | 1273 | CHILDREN 1274 | 1275 | GID 1276 | 0 1277 | PATH 1278 | Filesystems 1279 | PATH_TYPE 1280 | 0 1281 | PERMISSIONS 1282 | 493 1283 | TYPE 1284 | 1 1285 | UID 1286 | 0 1287 | 1288 | 1289 | CHILDREN 1290 | 1291 | GID 1292 | 0 1293 | PATH 1294 | Frameworks 1295 | PATH_TYPE 1296 | 0 1297 | PERMISSIONS 1298 | 493 1299 | TYPE 1300 | 1 1301 | UID 1302 | 0 1303 | 1304 | 1305 | CHILDREN 1306 | 1307 | GID 1308 | 0 1309 | PATH 1310 | Input Methods 1311 | PATH_TYPE 1312 | 0 1313 | PERMISSIONS 1314 | 493 1315 | TYPE 1316 | 1 1317 | UID 1318 | 0 1319 | 1320 | 1321 | CHILDREN 1322 | 1323 | GID 1324 | 0 1325 | PATH 1326 | Internet Plug-Ins 1327 | PATH_TYPE 1328 | 0 1329 | PERMISSIONS 1330 | 493 1331 | TYPE 1332 | 1 1333 | UID 1334 | 0 1335 | 1336 | 1337 | CHILDREN 1338 | 1339 | GID 1340 | 0 1341 | PATH 1342 | LaunchAgents 1343 | PATH_TYPE 1344 | 0 1345 | PERMISSIONS 1346 | 493 1347 | TYPE 1348 | 1 1349 | UID 1350 | 0 1351 | 1352 | 1353 | CHILDREN 1354 | 1355 | GID 1356 | 0 1357 | PATH 1358 | LaunchDaemons 1359 | PATH_TYPE 1360 | 0 1361 | PERMISSIONS 1362 | 493 1363 | TYPE 1364 | 1 1365 | UID 1366 | 0 1367 | 1368 | 1369 | CHILDREN 1370 | 1371 | GID 1372 | 0 1373 | PATH 1374 | PreferencePanes 1375 | PATH_TYPE 1376 | 0 1377 | PERMISSIONS 1378 | 493 1379 | TYPE 1380 | 1 1381 | UID 1382 | 0 1383 | 1384 | 1385 | CHILDREN 1386 | 1387 | GID 1388 | 0 1389 | PATH 1390 | Preferences 1391 | PATH_TYPE 1392 | 0 1393 | PERMISSIONS 1394 | 493 1395 | TYPE 1396 | 1 1397 | UID 1398 | 0 1399 | 1400 | 1401 | CHILDREN 1402 | 1403 | GID 1404 | 80 1405 | PATH 1406 | Printers 1407 | PATH_TYPE 1408 | 0 1409 | PERMISSIONS 1410 | 493 1411 | TYPE 1412 | 1 1413 | UID 1414 | 0 1415 | 1416 | 1417 | CHILDREN 1418 | 1419 | GID 1420 | 0 1421 | PATH 1422 | PrivilegedHelperTools 1423 | PATH_TYPE 1424 | 0 1425 | PERMISSIONS 1426 | 1005 1427 | TYPE 1428 | 1 1429 | UID 1430 | 0 1431 | 1432 | 1433 | CHILDREN 1434 | 1435 | GID 1436 | 0 1437 | PATH 1438 | QuickLook 1439 | PATH_TYPE 1440 | 0 1441 | PERMISSIONS 1442 | 493 1443 | TYPE 1444 | 1 1445 | UID 1446 | 0 1447 | 1448 | 1449 | CHILDREN 1450 | 1451 | GID 1452 | 0 1453 | PATH 1454 | QuickTime 1455 | PATH_TYPE 1456 | 0 1457 | PERMISSIONS 1458 | 493 1459 | TYPE 1460 | 1 1461 | UID 1462 | 0 1463 | 1464 | 1465 | CHILDREN 1466 | 1467 | GID 1468 | 0 1469 | PATH 1470 | Screen Savers 1471 | PATH_TYPE 1472 | 0 1473 | PERMISSIONS 1474 | 493 1475 | TYPE 1476 | 1 1477 | UID 1478 | 0 1479 | 1480 | 1481 | CHILDREN 1482 | 1483 | GID 1484 | 0 1485 | PATH 1486 | Scripts 1487 | PATH_TYPE 1488 | 0 1489 | PERMISSIONS 1490 | 493 1491 | TYPE 1492 | 1 1493 | UID 1494 | 0 1495 | 1496 | 1497 | CHILDREN 1498 | 1499 | GID 1500 | 0 1501 | PATH 1502 | Services 1503 | PATH_TYPE 1504 | 0 1505 | PERMISSIONS 1506 | 493 1507 | TYPE 1508 | 1 1509 | UID 1510 | 0 1511 | 1512 | 1513 | CHILDREN 1514 | 1515 | GID 1516 | 0 1517 | PATH 1518 | Widgets 1519 | PATH_TYPE 1520 | 0 1521 | PERMISSIONS 1522 | 493 1523 | TYPE 1524 | 1 1525 | UID 1526 | 0 1527 | 1528 | 1529 | GID 1530 | 0 1531 | PATH 1532 | Library 1533 | PATH_TYPE 1534 | 0 1535 | PERMISSIONS 1536 | 493 1537 | TYPE 1538 | 1 1539 | UID 1540 | 0 1541 | 1542 | 1543 | CHILDREN 1544 | 1545 | 1546 | CHILDREN 1547 | 1548 | GID 1549 | 0 1550 | PATH 1551 | Shared 1552 | PATH_TYPE 1553 | 0 1554 | PERMISSIONS 1555 | 1023 1556 | TYPE 1557 | 1 1558 | UID 1559 | 0 1560 | 1561 | 1562 | GID 1563 | 80 1564 | PATH 1565 | Users 1566 | PATH_TYPE 1567 | 0 1568 | PERMISSIONS 1569 | 493 1570 | TYPE 1571 | 1 1572 | UID 1573 | 0 1574 | 1575 | 1576 | GID 1577 | 0 1578 | PATH 1579 | / 1580 | PATH_TYPE 1581 | 0 1582 | PERMISSIONS 1583 | 493 1584 | TYPE 1585 | 1 1586 | UID 1587 | 0 1588 | 1589 | PAYLOAD_TYPE 1590 | 0 1591 | PRESERVE_EXTENDED_ATTRIBUTES 1592 | 1593 | SHOW_INVISIBLE 1594 | 1595 | SPLIT_FORKS 1596 | 1597 | TREAT_MISSING_FILES_AS_WARNING 1598 | 1599 | VERSION 1600 | 5 1601 | 1602 | PACKAGE_SCRIPTS 1603 | 1604 | POSTINSTALL_PATH 1605 | 1606 | PATH_TYPE 1607 | 0 1608 | 1609 | PREINSTALL_PATH 1610 | 1611 | PATH_TYPE 1612 | 0 1613 | 1614 | RESOURCES 1615 | 1616 | 1617 | PACKAGE_SETTINGS 1618 | 1619 | AUTHENTICATION 1620 | 1 1621 | CONCLUSION_ACTION 1622 | 0 1623 | FOLLOW_SYMBOLIC_LINKS 1624 | 1625 | IDENTIFIER 1626 | com.GuitarML.TS-M1N3.TS-M1N3AAX 1627 | LOCATION 1628 | 0 1629 | NAME 1630 | AAX 1631 | OVERWRITE_PERMISSIONS 1632 | 1633 | PAYLOAD_SIZE 1634 | -1 1635 | REFERENCE_PATH 1636 | 1637 | RELOCATABLE 1638 | 1639 | USE_HFS+_COMPRESSION 1640 | 1641 | VERSION 1642 | ##APPVERSION## 1643 | 1644 | TYPE 1645 | 0 1646 | UUID 1647 | 67DBD464-3B62-45EF-964B-549829FB1466 1648 | 1649 | 1650 | PROJECT 1651 | 1652 | PROJECT_COMMENTS 1653 | 1654 | NOTES 1655 | 1656 | 1657 | 1658 | PROJECT_PRESENTATION 1659 | 1660 | BACKGROUND 1661 | 1662 | APPAREANCES 1663 | 1664 | DARK_AQUA 1665 | 1666 | LIGHT_AQUA 1667 | 1668 | 1669 | SHARED_SETTINGS_FOR_ALL_APPAREANCES 1670 | 1671 | 1672 | INSTALLATION TYPE 1673 | 1674 | HIERARCHIES 1675 | 1676 | INSTALLER 1677 | 1678 | LIST 1679 | 1680 | 1681 | CHILDREN 1682 | 1683 | DESCRIPTION 1684 | 1685 | OPTIONS 1686 | 1687 | HIDDEN 1688 | 1689 | STATE 1690 | 1 1691 | 1692 | PACKAGE_UUID 1693 | 69EED16E-B119-4D35-B464-12717823DE0E 1694 | TITLE 1695 | 1696 | TYPE 1697 | 0 1698 | UUID 1699 | 32A671B5-085A-4D25-9B73-CA9157DA33C8 1700 | 1701 | 1702 | CHILDREN 1703 | 1704 | DESCRIPTION 1705 | 1706 | OPTIONS 1707 | 1708 | HIDDEN 1709 | 1710 | STATE 1711 | 1 1712 | 1713 | PACKAGE_UUID 1714 | 17D06D06-18AD-4175-AA45-047F4984BE1A 1715 | TITLE 1716 | 1717 | TYPE 1718 | 0 1719 | UUID 1720 | 6B0DDE9A-47F8-4615-BC79-4C475F3E41F7 1721 | 1722 | 1723 | CHILDREN 1724 | 1725 | DESCRIPTION 1726 | 1727 | OPTIONS 1728 | 1729 | HIDDEN 1730 | 1731 | STATE 1732 | 1 1733 | 1734 | PACKAGE_UUID 1735 | 67DBD464-3B62-45EF-964B-549829FB1466 1736 | TITLE 1737 | 1738 | TYPE 1739 | 0 1740 | UUID 1741 | 2BBC047A-58AB-4D9C-AFC1-F8BF00186CE3 1742 | 1743 | 1744 | REMOVED 1745 | 1746 | 1747 | 1748 | MODE 1749 | 2 1750 | 1751 | INSTALLATION_STEPS 1752 | 1753 | 1754 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1755 | ICPresentationViewIntroductionController 1756 | INSTALLER_PLUGIN 1757 | Introduction 1758 | LIST_TITLE_KEY 1759 | InstallerSectionTitle 1760 | 1761 | 1762 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1763 | ICPresentationViewReadMeController 1764 | INSTALLER_PLUGIN 1765 | ReadMe 1766 | LIST_TITLE_KEY 1767 | InstallerSectionTitle 1768 | 1769 | 1770 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1771 | ICPresentationViewLicenseController 1772 | INSTALLER_PLUGIN 1773 | License 1774 | LIST_TITLE_KEY 1775 | InstallerSectionTitle 1776 | 1777 | 1778 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1779 | ICPresentationViewDestinationSelectController 1780 | INSTALLER_PLUGIN 1781 | TargetSelect 1782 | LIST_TITLE_KEY 1783 | InstallerSectionTitle 1784 | 1785 | 1786 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1787 | ICPresentationViewInstallationTypeController 1788 | INSTALLER_PLUGIN 1789 | PackageSelection 1790 | LIST_TITLE_KEY 1791 | InstallerSectionTitle 1792 | 1793 | 1794 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1795 | ICPresentationViewInstallationController 1796 | INSTALLER_PLUGIN 1797 | Install 1798 | LIST_TITLE_KEY 1799 | InstallerSectionTitle 1800 | 1801 | 1802 | ICPRESENTATION_CHAPTER_VIEW_CONTROLLER_CLASS 1803 | ICPresentationViewSummaryController 1804 | INSTALLER_PLUGIN 1805 | Summary 1806 | LIST_TITLE_KEY 1807 | InstallerSectionTitle 1808 | 1809 | 1810 | INTRODUCTION 1811 | 1812 | LOCALIZATIONS 1813 | 1814 | 1815 | LANGUAGE 1816 | English 1817 | VALUE 1818 | 1819 | PATH 1820 | Intro.txt 1821 | PATH_TYPE 1822 | 3 1823 | 1824 | 1825 | 1826 | 1827 | LICENSE 1828 | 1829 | LOCALIZATIONS 1830 | 1831 | 1832 | LANGUAGE 1833 | English 1834 | VALUE 1835 | 1836 | PATH 1837 | LICENSE.txt 1838 | PATH_TYPE 1839 | 3 1840 | 1841 | 1842 | 1843 | MODE 1844 | 0 1845 | 1846 | README 1847 | 1848 | LOCALIZATIONS 1849 | 1850 | 1851 | TITLE 1852 | 1853 | LOCALIZATIONS 1854 | 1855 | 1856 | LANGUAGE 1857 | English 1858 | VALUE 1859 | TS-M1N3 1860 | 1861 | 1862 | 1863 | 1864 | PROJECT_REQUIREMENTS 1865 | 1866 | LIST 1867 | 1868 | RESOURCES 1869 | 1870 | ROOT_VOLUME_ONLY 1871 | 1872 | 1873 | PROJECT_SETTINGS 1874 | 1875 | BUILD_FORMAT 1876 | 0 1877 | BUILD_PATH 1878 | 1879 | PATH 1880 | ../../build 1881 | PATH_TYPE 1882 | 1 1883 | 1884 | EXCLUDED_FILES 1885 | 1886 | 1887 | PATTERNS_ARRAY 1888 | 1889 | 1890 | REGULAR_EXPRESSION 1891 | 1892 | STRING 1893 | .DS_Store 1894 | TYPE 1895 | 0 1896 | 1897 | 1898 | PROTECTED 1899 | 1900 | PROXY_NAME 1901 | Remove .DS_Store files 1902 | PROXY_TOOLTIP 1903 | Remove ".DS_Store" files created by the Finder. 1904 | STATE 1905 | 1906 | 1907 | 1908 | PATTERNS_ARRAY 1909 | 1910 | 1911 | REGULAR_EXPRESSION 1912 | 1913 | STRING 1914 | .pbdevelopment 1915 | TYPE 1916 | 0 1917 | 1918 | 1919 | PROTECTED 1920 | 1921 | PROXY_NAME 1922 | Remove .pbdevelopment files 1923 | PROXY_TOOLTIP 1924 | Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. 1925 | STATE 1926 | 1927 | 1928 | 1929 | PATTERNS_ARRAY 1930 | 1931 | 1932 | REGULAR_EXPRESSION 1933 | 1934 | STRING 1935 | CVS 1936 | TYPE 1937 | 1 1938 | 1939 | 1940 | REGULAR_EXPRESSION 1941 | 1942 | STRING 1943 | .cvsignore 1944 | TYPE 1945 | 0 1946 | 1947 | 1948 | REGULAR_EXPRESSION 1949 | 1950 | STRING 1951 | .cvspass 1952 | TYPE 1953 | 0 1954 | 1955 | 1956 | REGULAR_EXPRESSION 1957 | 1958 | STRING 1959 | .svn 1960 | TYPE 1961 | 1 1962 | 1963 | 1964 | REGULAR_EXPRESSION 1965 | 1966 | STRING 1967 | .git 1968 | TYPE 1969 | 1 1970 | 1971 | 1972 | REGULAR_EXPRESSION 1973 | 1974 | STRING 1975 | .gitignore 1976 | TYPE 1977 | 0 1978 | 1979 | 1980 | PROTECTED 1981 | 1982 | PROXY_NAME 1983 | Remove SCM metadata 1984 | PROXY_TOOLTIP 1985 | Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. 1986 | STATE 1987 | 1988 | 1989 | 1990 | PATTERNS_ARRAY 1991 | 1992 | 1993 | REGULAR_EXPRESSION 1994 | 1995 | STRING 1996 | classes.nib 1997 | TYPE 1998 | 0 1999 | 2000 | 2001 | REGULAR_EXPRESSION 2002 | 2003 | STRING 2004 | designable.db 2005 | TYPE 2006 | 0 2007 | 2008 | 2009 | REGULAR_EXPRESSION 2010 | 2011 | STRING 2012 | info.nib 2013 | TYPE 2014 | 0 2015 | 2016 | 2017 | PROTECTED 2018 | 2019 | PROXY_NAME 2020 | Optimize nib files 2021 | PROXY_TOOLTIP 2022 | Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. 2023 | STATE 2024 | 2025 | 2026 | 2027 | PATTERNS_ARRAY 2028 | 2029 | 2030 | REGULAR_EXPRESSION 2031 | 2032 | STRING 2033 | Resources Disabled 2034 | TYPE 2035 | 1 2036 | 2037 | 2038 | PROTECTED 2039 | 2040 | PROXY_NAME 2041 | Remove Resources Disabled folders 2042 | PROXY_TOOLTIP 2043 | Remove "Resources Disabled" folders. 2044 | STATE 2045 | 2046 | 2047 | 2048 | SEPARATOR 2049 | 2050 | 2051 | 2052 | NAME 2053 | TS-M1N3 2054 | PAYLOAD_ONLY 2055 | 2056 | TREAT_MISSING_PRESENTATION_DOCUMENTS_AS_WARNING 2057 | 2058 | 2059 | 2060 | TYPE 2061 | 0 2062 | VERSION 2063 | 2 2064 | 2065 | 2066 | -------------------------------------------------------------------------------- /installers/mac/build_mac_installer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | script_file=TS-M1N3.pkgproj 4 | 5 | app_version=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' ../../build/CMakeCache.txt)") 6 | echo "Setting app version: $app_version..." 7 | sed -i '' "s/##APPVERSION##/${app_version}/g" $script_file 8 | sed -i '' "s/##APPVERSION##/${app_version}/g" Intro.txt 9 | 10 | echo "Copying License..." 11 | cp ../../LICENSE.txt LICENSE.txt 12 | 13 | # build installer 14 | echo Building... 15 | /usr/local/bin/packagesbuild $script_file 16 | 17 | # reset version number 18 | sed -i '' "s/${app_version}/##APPVERSION##/g" $script_file 19 | sed -i '' "s/${app_version}/##APPVERSION##/g" Intro.txt 20 | 21 | # clean up license file 22 | rm LICENSE.txt 23 | 24 | # sign the installer package 25 | echo "Signing installer package..." 26 | TEAM_ID=$(more ~/Developer/mac_id) 27 | pkg_dir=TS-M1N3_Installer_Packaged 28 | rm -Rf $pkg_dir 29 | mkdir $pkg_dir 30 | productsign -s "$TEAM_ID" ../../build/TS-M1N3.pkg $pkg_dir/TS-M1N3-signed.pkg 31 | 32 | echo "Notarizing installer package..." 33 | INSTALLER_PASS=$(more ~/Developer/mac_installer_pass) 34 | npx notarize-cli --file $pkg_dir/TS-M1N3-signed.pkg --bundle-id com.GuitarML.TS-M1N3 --asc-provider "$TEAM_ID" --username smartguitarml@gmail.com --password "$INSTALLER_PASS" 35 | 36 | echo "Building disk image..." 37 | vol_name=Install_TS-M1N3-$app_version 38 | hdiutil create "$vol_name.dmg" -fs HFS+ -srcfolder $pkg_dir -format UDZO -volname "$vol_name" 39 | -------------------------------------------------------------------------------- /installers/windows/TS-M1N3_Install_Script.iss: -------------------------------------------------------------------------------- 1 | #define MyAppPublisher "GuitarML" 2 | #define MyAppURL "https://guitarml.com" 3 | #define MyAppName "TS-M1N3" 4 | 5 | [Setup] 6 | AppName=TS-M1N3 7 | AppVersion=##APPVERSION## 8 | AppPublisher={#MyAppPublisher} 9 | AppPublisherURL={#MyAppURL} 10 | AppSupportURL={#MyAppURL} 11 | AppUpdatesURL={#MyAppURL} 12 | DisableProgramGroupPage=yes 13 | DisableWelcomePage=no 14 | DisableDirPage=yes 15 | DefaultDirName={commoncf64} 16 | DefaultGroupName=TS-M1N3 17 | OutputBaseFilename="TS-M1N3-Win-##APPVERSION##" 18 | OutputDir=. 19 | LicenseFile=../../LICENSE.txt 20 | SetupIconFile=../../resources/TS-M1N3.ico 21 | UninstallDisplayIcon=../../resources/TS-M1N3.ico 22 | UninstallFilesDir={commoncf64}\GuitarML\{#MyAppName} 23 | Compression=lzma 24 | SolidCompression=yes 25 | 26 | [Types] 27 | Name: "full"; Description: "Full installation" 28 | Name: "custom"; Description: "Custom installation"; Flags: iscustom 29 | 30 | 31 | [Components] 32 | Name: "VST3_64"; Description: "VST3 Plugin 64-bit"; Types: full 33 | Name: "AAX"; Description: "AAX Plugin"; Types: full 34 | 35 | [Files] 36 | Source: "../../bin/Win64/TS-M1N3.vst3"; DestDir: "{code:GetDir|VST3_64}"; Components: VST3_64; Flags: ignoreversion recursesubdirs createallsubdirs 37 | Source: "../../build-aax/TS-M1N3_artefacts/Release/AAX/TS-M1N3.aaxplugin"; DestDir: "{code:GetDir|AAX}"; Components: AAX; Flags: ignoreversion recursesubdirs createallsubdirs 38 | 39 | 40 | [Code] 41 | var 42 | AAXDirPage: TInputDirWizardPage; 43 | Vst3_64DirPage: TinputDirWizardPage; 44 | 45 | procedure InitializeWizard; 46 | begin 47 | Log('Initializing extra pages') 48 | //AAX Dir Page 49 | AAXDirPage := CreateInputDirPage(wpSelectComponents, 50 | 'Select AAX Install Location', 'Where would you like to install the AAX plugin?', 51 | 'AAX plugin will be installed in the following folder.'#13#10#13#10 + 52 | 'To continue, click Next. If you would like to select a different folder, click Browse.', 53 | False, 'New Folder'); 54 | 55 | AAXDirPage.add(''); 56 | AAXDirPage.values[0] := ExpandConstant('{commoncf64}\Avid\Audio\Plug-Ins'); 57 | 58 | //VST3 64-bit Dir Page 59 | Vst3_64DirPage := CreateInputDirPage(AAXDirPage.ID, 60 | 'Select Install Location for VST3 64-bit', 'Where would you like to install the plugin?', 61 | 'VST3 64-bit plugin will be installed in the following folder.'#13#10#13#10 + 62 | 'To continue, click Next. If you would like to select a different folder, click Browse.', 63 | False, 'New Folder'); 64 | 65 | Vst3_64DirPage.add(''); 66 | Vst3_64DirPage.values[0] := ExpandConstant('{commoncf64}\VST3'); 67 | 68 | 69 | end; 70 | 71 | function IsSelected(Param: String) : Boolean; 72 | begin 73 | if not (Pos(Param, WizardSelectedComponents(False)) = 0) then // WizardSelectedComponents(False)) then 74 | Result := True 75 | end; 76 | 77 | function ShouldSkipPage(PageID: Integer): Boolean; 78 | begin 79 | { Skip pages that shouldn't be shown } 80 | Result := False; 81 | 82 | if (PageID = AAXDirPage.ID) then 83 | begin 84 | Result := True; 85 | Log('Selected 1: ' + WizardSelectedComponents(False)); 86 | 87 | if IsSelected ('aax') then 88 | begin 89 | Log('Not Skipping page'); 90 | Result := False; 91 | end 92 | end 93 | 94 | else if (PageID = Vst3_64DirPage.ID) then 95 | begin 96 | Result := True; 97 | Log('Selected 2: ' + WizardSelectedComponents(False)); 98 | 99 | if IsSelected ('vst3_64') then 100 | begin 101 | Log('Not Skipping'); 102 | Result := False; 103 | end 104 | end 105 | 106 | 107 | 108 | end; 109 | 110 | function GetDir(Param: String) : String; 111 | begin 112 | if (Param = 'AAX') then 113 | Result := AAXDirPage.values[0] 114 | else if (Param = 'VST3_64') then 115 | Result := Vst3_64DirPage.values[0] 116 | end; 117 | 118 | function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, 119 | MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; 120 | var 121 | S: String; 122 | begin 123 | { Fill the 'Ready Memo' with the normal settings and the custom settings } 124 | S := ''; 125 | S := S + MemoTypeInfo + NewLine + NewLine; 126 | S := S + MemoComponentsInfo + NewLine + NewLine; 127 | S := S + 'Destination Location:' + NewLine; 128 | 129 | if IsSelected('aax') then 130 | S := S + Space + GetDir('AAX') + ' (AAX)' + NewLine; 131 | 132 | if IsSelected('vst3_64') then 133 | S := S + Space + GetDir('VST3_64') + ' (VST3 64-bit)' + NewLine; 134 | 135 | Result := S; 136 | end; 137 | -------------------------------------------------------------------------------- /installers/windows/build_win_installer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | script_file=TS-M1N3_Install_Script.iss 4 | 5 | app_version=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' ../../build/CMakeCache.txt)") 6 | echo "Setting app version: $app_version..." 7 | sed -i "s/##APPVERSION##/${app_version}/g" $script_file 8 | 9 | # build installer 10 | echo Building... 11 | $"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" $script_file 12 | 13 | # reset version number 14 | sed -i "s/${app_version}/##APPVERSION##/g" $script_file 15 | 16 | exec="TS-M1N3-Win-$app_version.exe" 17 | direc=$PWD 18 | 19 | 20 | echo SUCCESS 21 | -------------------------------------------------------------------------------- /mac_builds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit on failure 4 | set -e 5 | 6 | # clean up old builds 7 | rm -Rf build/ 8 | rm -Rf bin/*Mac* 9 | 10 | 11 | # cmake new builds 12 | TEAM_ID=$(more ~/Developer/mac_id) 13 | cmake -Bbuild -DMACOS_RELEASE=ON -GXcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="Developer ID Application" \ 14 | -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM="$TEAM_ID" \ 15 | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_STYLE="Manual" \ 16 | -D"CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ 17 | -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO \ 18 | -DCMAKE_XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS="--timestamp" \ 19 | -DMACOS_RELEASE=ON 20 | cmake --build build --config Release -j8 | xcpretty 21 | 22 | # copy builds to bin 23 | mkdir -p bin/Mac 24 | declare -a plugins=("TS-M1N3") 25 | for plugin in "${plugins[@]}"; do 26 | cp -R build/${plugin}_artefacts/Release/VST3/${plugin}.vst3 bin/Mac/${plugin}.vst3 27 | cp -R build/${plugin}_artefacts/Release/AU/${plugin}.component bin/Mac/${plugin}.component 28 | done 29 | 30 | 31 | # run auval 32 | echo "Running AU validation..." 33 | rm -Rf ~/Library/Audio/Plug-Ins/Components/${plugin}.component 34 | cp -R build/${plugin}_artefacts/Release/AU/${plugin}.component ~/Library/Audio/Plug-Ins/Components 35 | manu=$(cut -f 6 -d ' ' <<< "$(grep 'PLUGIN_MANUFACTURER_CODE' CMakeLists.txt)") 36 | code=$(cut -f 6 -d ' ' <<< "$(grep 'PLUGIN_CODE' CMakeLists.txt)") 37 | 38 | set +e 39 | auval_result=$(auval -v aufx "$code" "$manu") 40 | auval_code="$?" 41 | echo "AUVAL code: $auval_code" 42 | 43 | if [ "$auval_code" != 0 ]; then 44 | echo "$auval_result" 45 | echo "auval FAIL!!!" 46 | #exit 1 47 | else 48 | echo "auval PASSED" 49 | fi 50 | 51 | # zip builds 52 | echo "Zipping builds..." 53 | VERSION=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/CMakeCache.txt)") 54 | ( 55 | cd bin 56 | rm -f "TS-M1N3-Mac-${VERSION}.zip" 57 | zip -r "TS-M1N3-Mac-${VERSION}.zip" Mac 58 | ) 59 | 60 | # create installer 61 | echo "Creating installer..." 62 | ( 63 | cd installers/mac 64 | bash build_mac_installer.sh 65 | ) 66 | -------------------------------------------------------------------------------- /models/model_ts9_cond2.json: -------------------------------------------------------------------------------- 1 | {"model_data": {"model": "SimpleRNN", "input_size": 3, "skip": 1, "output_size": 1, "unit_type": "LSTM", "num_layers": 1, "hidden_size": 20, "bias_fl": true}, "state_dict": {"rec.weight_ih_l0": [[-0.04635179787874222, -0.12028172612190247, 0.030203932896256447], [0.009986426681280136, 0.1566564440727234, 0.10534494370222092], [0.015467206947505474, -0.0026255990378558636, -0.0003011935332324356], [0.005283253733068705, 0.318840891122818, 0.29264551401138306], [0.04878239706158638, 0.21075299382209778, 0.0833243876695633], [-0.0016762570012360811, -0.3283211886882782, 0.4700314700603485], [-0.0009922506287693977, -0.012513069435954094, -0.01703440211713314], [0.002501916838809848, 0.0017897012876346707, 0.28482428193092346], [0.07712719589471817, 0.17459408938884735, -0.004723957274109125], [0.0014437022618949413, 0.5989789366722107, 0.10804849863052368], [3.1434181437361985e-05, 0.0669524148106575, 0.013883844949305058], [-0.092007577419281, 0.08466890454292297, 0.031436748802661896], [0.1595459282398224, -0.3255889117717743, -0.31937175989151], [-0.035574447363615036, -0.6336794495582581, -0.4753260910511017], [0.032318536192178726, -0.1857484132051468, 0.20384001731872559], [-0.01384003646671772, 0.2423809915781021, 0.30077043175697327], [-0.13866092264652252, -0.017492951825261116, -0.04475424066185951], [0.022990819066762924, 0.09411457180976868, 0.008566079661250114], [0.01951640285551548, 1.210679054260254, 0.028681408613920212], [-0.042401790618896484, 0.11730389297008514, 0.5238108038902283], [-0.09019413590431213, -0.07100513577461243, 0.18257060647010803], [0.019167965278029442, 0.1828005015850067, 0.11589284986257553], [0.014342818409204483, 0.032702088356018066, 0.04300738498568535], [0.006212521344423294, 0.17755886912345886, 0.08507365733385086], [0.05575253814458847, 0.22895307838916779, 0.4136115312576294], [0.02512414939701557, 0.04125698283314705, -0.4334864020347595], [-0.00038552313344553113, -0.00577428238466382, -0.011845392175018787], [-0.04819906875491142, 0.11467450857162476, 0.41216233372688293], [0.09498705714941025, -0.03269542381167412, -0.3387550413608551], [0.030859587714076042, 0.36361947655677795, 0.08587959408760071], [0.013308098539710045, 0.2999504804611206, 0.2202034890651703], [-0.18452127277851105, 0.17941056191921234, 0.14407306909561157], [0.004558218643069267, 0.6204885840415955, 0.36834457516670227], [0.06515990942716599, 0.7702266573905945, 0.7571972608566284], [0.06358598172664642, -0.2596600353717804, 0.15622758865356445], [0.019348924979567528, 0.10853048413991928, -0.05593256652355194], [-0.18870118260383606, 0.12777851521968842, 0.006307401694357395], [0.05776561051607132, 0.14631712436676025, 0.14953497052192688], [0.051030028611421585, 0.05297712981700897, 0.07881776243448257], [-0.03978141024708748, -0.22367608547210693, 0.19055750966072083], [0.09622103720903397, 0.09289820492267609, -0.05601547285914421], [0.08999569714069366, 0.043229129165410995, 0.37293264269828796], [0.022534316405653954, 0.16720347106456757, -0.3336338996887207], [0.46571648120880127, -0.08704791218042374, -0.007935759611427784], [0.0989159494638443, 0.027563076466321945, -0.6195314526557922], [-0.4502677917480469, 0.02588506229221821, -0.15660887956619263], [-0.026722630485892296, 0.02579629234969616, -0.006158255040645599], [0.08577712625265121, -0.07119882851839066, -0.10372908413410187], [0.1292516440153122, -0.015284217894077301, -0.36436623334884644], [1.6712287664413452, -0.0027868764009326696, -0.18932713568210602], [0.03464550897479057, -0.7324827909469604, 0.11682803183794022], [-0.3258879780769348, -0.04545772448182106, 0.007831414230167866], [-0.3831159174442291, -0.01250984612852335, -0.0429002046585083], [-0.7674689292907715, 0.00012047030759276822, 0.01307568047195673], [0.029104549437761307, -0.009600901044905186, -0.0041219755075871944], [1.2805379629135132, -0.011901120655238628, 0.43285462260246277], [-0.13789384067058563, -0.15206333994865417, 0.017693322151899338], [-0.05268267169594765, 0.12042083591222763, 0.049946706742048264], [-0.3412829637527466, 0.03229436278343201, 0.06589822471141815], [-0.13506624102592468, -0.05918634682893753, 0.34389829635620117], [-0.11854573339223862, -0.045417968183755875, 0.08448829501867294], [-0.008716912008821964, 0.010914893820881844, -0.025256924331188202], [0.017487531527876854, -0.01330631598830223, 0.006563546601682901], [0.008186773397028446, 0.3736787736415863, 0.31362617015838623], [0.14702096581459045, -0.02598157711327076, 0.2463102787733078], [-0.019922178238630295, 0.18286670744419098, 0.4368596374988556], [-0.0010032771388068795, -0.012550818733870983, -0.01707855612039566], [0.03223662078380585, 0.12000880390405655, 0.37086108326911926], [0.11041534692049026, 0.11235281080007553, -0.051503948867321014], [0.025845903903245926, 0.543250560760498, 0.2006661295890808], [-0.08303453773260117, -0.05907310172915459, -0.014416788704693317], [0.02306736633181572, 0.2427717000246048, 0.1505221426486969], [-0.10165148973464966, 0.23155339062213898, 0.3347282409667969], [0.010692466050386429, -0.15382851660251617, -0.22378122806549072], [0.04784407839179039, -0.14531511068344116, 0.25438815355300903], [-0.01254111248999834, 0.23901894688606262, 0.32568973302841187], [-0.18045519292354584, 0.030453694984316826, 0.012246590107679367], [0.047679416835308075, 0.16859367489814758, 0.05255173519253731], [-0.044863130897283554, 0.18472088873386383, 0.31233635544776917], [-0.06081000342965126, 0.04384039342403412, 0.6025110483169556]], "rec.weight_hh_l0": [[0.04421716928482056, -0.07141769677400589, -0.005948415957391262, 0.09554214030504227, 0.07176054269075394, -0.04861784726381302, 0.009235989302396774, -0.09618828445672989, 0.017614657059311867, -0.17214372754096985, 0.1423105150461197, -0.02002253383398056, -0.11188827455043793, -0.058653753250837326, 0.1631273478269577, -0.1610916405916214, 0.10384668409824371, -0.10275881737470627, -0.0803932249546051, 0.04148983210325241], [0.03887520730495453, -0.04046691581606865, -0.003008555853739381, -0.015440016984939575, -0.07195568084716797, -0.009149697609245777, -0.0017976631643250585, -0.04969310760498047, 0.08853572607040405, 0.035794783383607864, -0.10228590667247772, 0.1198534369468689, 0.013258662074804306, 0.005050142295658588, -0.05213923752307892, -0.007784280460327864, 0.009693927131593227, -0.055496927350759506, 0.06715288758277893, -0.008150252513587475], [-0.005994703155010939, 0.04683505743741989, 0.005175674334168434, -0.030715985223650932, -0.007136883679777384, 0.029777642339468002, 0.003675485262647271, 0.0089969327673316, -0.01774105802178383, 0.02619381994009018, -0.04349283501505852, -0.07101549208164215, -0.0012059424770995975, 0.007083206437528133, -0.022539375349879265, 0.020210620015859604, -0.0027294557075947523, 0.02372499741613865, 0.01858651265501976, -0.013288723304867744], [-0.014093132689595222, -0.060598984360694885, -0.01471283845603466, -0.0120291318744421, -0.07364056259393692, -0.03840518370270729, 0.003853985806927085, -0.025665320456027985, 0.03359441086649895, 0.019299084320664406, -0.07018052786588669, 0.3297427296638489, 0.012878823094069958, 0.0028293991927057505, -0.04174686223268509, 0.015025680884718895, -0.02526632510125637, 0.0010042033391073346, 0.044447775930166245, -0.010018846951425076], [0.03708487004041672, 0.05720064789056778, -0.04531670734286308, 0.12573444843292236, -0.19372358918190002, 0.19463495910167694, 0.006703989114612341, -0.15489983558654785, -0.11286517232656479, -0.04240832105278969, 0.06518445909023285, -0.0736732929944992, 0.047873955219984055, 0.039067063480615616, 0.11317762732505798, -0.08673457056283951, 0.044693343341350555, 0.005710995756089687, -0.3040766417980194, 0.17525061964988708], [0.33603203296661377, 0.6803306341171265, -0.05866299942135811, 0.07166267931461334, -0.4332525432109833, -0.10831505060195923, 0.01598382741212845, -0.3222057819366455, -0.013339187018573284, -0.06726515293121338, 0.0919615775346756, -0.39008259773254395, 0.05531793087720871, 0.07274747639894485, -0.3516005575656891, 0.07197785377502441, 0.045474257320165634, 0.12389987707138062, 0.08077717572450638, 0.22126689553260803], [-0.001852448913268745, -0.004354457370936871, 0.0003377775428816676, 0.0019069985719397664, 0.010326034389436245, 0.004579446278512478, -0.00029892154270783067, 0.004880159627646208, -0.003962798975408077, -0.0023017541971057653, 0.00675585912540555, -0.011191210709512234, 0.0010804253397509456, -0.004407399799674749, 0.00018866703612729907, -0.0023390541318804026, 0.0014160779537633061, 0.001589763443917036, 0.0038964690174907446, 0.0013642068952322006], [0.061274945735931396, 0.023428505286574364, -0.031544607132673264, -0.022935213521122932, -0.16979162395000458, 0.1041615754365921, 0.030761156231164932, -0.1006660982966423, -0.10617168992757797, 0.024611245840787888, -0.037188462913036346, 0.023024069145321846, 0.008836431428790092, -0.019736992195248604, -0.03082183375954628, 0.026930777356028557, 0.015032841823995113, -0.010809925384819508, 0.16846723854541779, 0.06723611056804657], [0.0844937413930893, -0.05509844422340393, 0.009117206558585167, -0.0032529314048588276, 0.009242457337677479, -0.028332768008112907, 0.010947798378765583, -0.025495249778032303, 0.10855605453252792, 0.028990518301725388, -0.034594759345054626, 0.20633955299854279, -0.05537095293402672, -0.022184716537594795, -0.036763545125722885, 0.015040868893265724, 0.003718014108017087, -0.011068619787693024, -0.07883071154356003, -0.12135929614305496], [-0.00923952180892229, -0.2014392763376236, 0.025394970551133156, 0.03820168599486351, -0.04120402783155441, -0.024290593340992928, -0.0007756122504360974, -0.026954861357808113, 0.05733253061771393, -0.05352078378200531, -0.35510602593421936, 0.21793563663959503, -0.024665316566824913, -0.048666760325431824, 0.034088004380464554, 0.014485709369182587, -0.1748998612165451, 0.01906796731054783, -0.05104794353246689, -0.02077888324856758], [-0.048037271946668625, -0.01190804224461317, -0.004501556511968374, 0.006253138650208712, -0.03675822541117668, -0.034226398915052414, -0.0054420786909759045, -0.014544500969350338, 0.02550383098423481, 0.02100227400660515, -0.0549231618642807, 0.12173612415790558, -0.01785096526145935, -0.0366642102599144, 0.0008059545652940869, -0.008302340283989906, -0.06363866478204727, -0.01374148204922676, 0.022150536999106407, -0.01676885411143303], [0.033230412751436234, -0.023571962490677834, -0.012150946073234081, 0.012905917130410671, -0.03108486905694008, -0.0379578061401844, -0.005616190377622843, 0.007036596070975065, 0.012182439677417278, -0.022135552018880844, -0.05390453711152077, 0.1492953598499298, 0.14532779157161713, 0.07460238039493561, -0.02927144058048725, -0.06171553581953049, -0.033685650676488876, -0.010271132923662663, -0.050106231123209, -0.010748346336185932], [0.3828093111515045, 0.22811773419380188, 0.1674818992614746, -0.16854636371135712, -0.15123511850833893, 0.08219920098781586, -0.035883862525224686, -0.13539394736289978, 0.1509084850549698, 0.12709681689739227, 0.20968513190746307, -1.039934754371643, 0.2529044449329376, 0.07361429184675217, -0.3006966710090637, 0.28386732935905457, 0.8390856385231018, 0.40279027819633484, -0.05796485021710396, 0.1295495182275772], [0.13797585666179657, 0.12746156752109528, -0.0009791015181690454, -0.036444347351789474, 0.022771267220377922, 0.07126349210739136, -0.0029714496340602636, -0.0574495755136013, -0.010202229954302311, -0.016455911099910736, 0.07003413885831833, -0.623361349105835, 0.09471350163221359, 0.0049933260306715965, -0.10732091218233109, -0.0538448803126812, 0.1805979460477829, 0.02415536530315876, 1.8497690916774445e-06, 0.02326655387878418], [-0.07480036467313766, 0.022387955337762833, -0.038644030690193176, -0.16924090683460236, 0.07642509788274765, 0.13276095688343048, 0.010605165734887123, 0.14542149007320404, -0.19752246141433716, 0.12977036833763123, 0.2245076447725296, 0.05702206492424011, 0.050760842859745026, 0.015929043292999268, -0.07948298752307892, 0.1246250569820404, 0.053060587495565414, 0.06201973930001259, 0.08941475301980972, 0.05379381775856018], [0.03454774245619774, -0.11448600143194199, -0.03430379554629326, 0.012454763054847717, -0.06628473103046417, -0.028175700455904007, 0.003662983886897564, -0.04803469032049179, 0.028436455875635147, -0.01980973221361637, 0.029339758679270744, 0.34897223114967346, 0.011930696666240692, 0.020901188254356384, -0.04095029830932617, -0.01137771550565958, -0.04228688403964043, -0.0183629859238863, 0.06515193730592728, 0.00891870353370905], [0.06871841847896576, 0.05012121796607971, -0.004421025514602661, 0.20113864541053772, -0.013952065259218216, -0.03813203424215317, -0.006845653057098389, -0.012835117988288403, -6.134706200100482e-05, -0.22118037939071655, -0.03454950824379921, 0.02289891056716442, 0.0067156897857785225, -0.003420062130317092, 0.06231153756380081, -0.1356545239686966, 0.1084589883685112, -0.05935344099998474, -0.18908829987049103, -0.0504436157643795], [0.020638665184378624, 0.05385252460837364, 0.010132696479558945, -0.06225825846195221, -0.00608249194920063, 0.10369513183832169, 0.00880129262804985, -0.01428245473653078, 0.0010695024393498898, 0.04885667562484741, -0.08919771015644073, -0.029204413294792175, 0.03809692710638046, 0.004375631455332041, -0.06587892025709152, 0.019104905426502228, 0.0017289344687014818, 0.045513689517974854, 0.13602255284786224, -0.03978550061583519], [0.37553977966308594, 0.03047780878841877, 0.08028554916381836, -0.0313202403485775, -0.16133618354797363, 0.05862979218363762, -0.0019272423814982176, -0.037997424602508545, 0.04281236603856087, -0.010155324824154377, -1.040686011314392, 0.08509016782045364, 0.016015028581023216, 0.058643147349357605, -0.28007054328918457, 0.06012847647070885, -0.01481697428971529, 0.12477829307317734, 0.05860782787203789, -0.07323350757360458], [-0.0010265202727168798, 0.11446154862642288, -0.06337705999612808, 0.0067048873752355576, -0.15115423500537872, 0.029895899817347527, 0.016239991411566734, -0.10320769995450974, -0.3154681324958801, -0.03735850378870964, -0.020412525162100792, 0.1345563381910324, 0.04867388680577278, 0.03504956513643265, 0.05617348477244377, 0.020847303792834282, 0.04837682098150253, -0.01645786687731743, -0.040528133511543274, 0.12792734801769257], [-0.043119605630636215, -0.11886534094810486, -0.02245469018816948, 0.15792492032051086, 0.0295636598020792, -0.12570515275001526, 0.0033713120501488447, -0.09420420974493027, 0.014551716856658459, -0.23072662949562073, 0.051481686532497406, 0.1198454350233078, -0.0859064981341362, -0.03648998960852623, 0.21135620772838593, -0.18272696435451508, 0.06701888889074326, -0.1185833215713501, -0.12245463579893112, 0.07295145094394684], [0.0497719943523407, -0.19470274448394775, -0.008308520540595055, 0.07174982130527496, -0.014026705175638199, -0.0201998520642519, -0.008226498030126095, -0.053591519594192505, 0.16387367248535156, -0.01024711038917303, -0.043455593287944794, 0.19413885474205017, -0.034261733293533325, -0.028240613639354706, -0.07353326678276062, -0.00829863641411066, 0.0003890003717970103, -0.13111841678619385, 0.12053591012954712, -0.055234525352716446], [-0.005432089790701866, 0.03723860904574394, 0.0036883645225316286, -0.026533234864473343, -0.007699092384427786, 0.024990350008010864, 0.0022943944204598665, 0.006088858004659414, -0.015236646868288517, 0.02215726114809513, -0.030100222676992416, -0.03677324578166008, -0.0018644265364855528, 0.006771559827029705, -0.02225387655198574, 0.017940716817975044, -0.001647896715439856, 0.02278893068432808, 0.017606349661946297, -0.012195203453302383], [0.006028990261256695, -0.052932675927877426, -0.006865478120744228, -0.00402952590957284, -0.01212751492857933, -0.050978049635887146, 0.0004320491570979357, 0.00876263901591301, -0.0023522390983998775, -0.011964146047830582, -0.041376035660505295, 0.11563904583454132, 0.04318278655409813, 0.026897992938756943, 0.004367752932012081, 0.06313681602478027, 0.0555831715464592, -0.035274237394332886, -0.11418408900499344, -0.00047416373854503036], [0.10724040865898132, -0.16826856136322021, -0.12091320008039474, 0.14311739802360535, -0.154439777135849, 0.19542196393013, 0.01673908531665802, 0.03902649134397507, -0.23819398880004883, -0.012625547125935555, 0.17272058129310608, 0.23789942264556885, 0.07149281352758408, 0.07207907736301422, 0.11107807606458664, -0.03188223019242287, 0.07758715748786926, 0.015767112374305725, -0.40614572167396545, 0.19118596613407135], [0.20991860330104828, -0.5843468308448792, 0.08682188391685486, 0.045267608016729355, 0.15433600544929504, -0.16197103261947632, 0.012825260870158672, 0.11619248986244202, 0.4196266233921051, 0.13217169046401978, -0.04176437854766846, 0.5217188596725464, -0.1157684475183487, -0.15492646396160126, -0.17423005402088165, -0.20715902745723724, -0.21472467482089996, -0.04422030970454216, 0.1491759866476059, 0.23720450699329376], [-0.001418465399183333, -0.005993469152599573, 0.00028507824754342437, 0.0017361724749207497, 0.008781710639595985, 0.004712134134024382, -0.00031007465440779924, 0.004476174246519804, -0.0027923735324293375, -0.0023858712520450354, 0.000546605559065938, -0.004458999261260033, 0.0017079862300306559, -0.003681073198094964, 0.0031564768869429827, -0.004332843702286482, 0.0006704367697238922, -6.613315690628951e-06, 0.0034604505635797977, 0.0008541024872101843], [0.13230177760124207, -0.2766042947769165, -0.024702288210392, 0.09647174924612045, -0.08764144778251648, 0.0867164134979248, 0.039272502064704895, 0.04018959403038025, -0.11916622519493103, -0.08412079513072968, 0.027009548619389534, 0.168937548995018, -0.0005052177584730089, -0.033926088362932205, 0.05962497740983963, -0.018026145175099373, 0.04974958673119545, -0.01709471456706524, 0.08744927495718002, 0.13629446923732758], [0.17339496314525604, -0.17162659764289856, 0.0480121448636055, 0.07641275227069855, 0.2746141254901886, 0.054195258766412735, 0.017184454947710037, 0.07521497458219528, 0.1344127506017685, -0.0226269718259573, 0.17413099110126495, 0.13324473798274994, -0.13252121210098267, -0.03246896713972092, 0.002675495343282819, -0.014596802182495594, 0.09367486089468002, -0.02334611304104328, -0.19739659130573273, -0.24008983373641968], [-0.1457805037498474, -0.2437048852443695, 0.031724076718091965, 0.1281270682811737, 0.06674686819314957, -0.06645005941390991, 0.003563129110261798, -0.0105263227596879, 0.05888274312019348, -0.06524447351694107, -0.23496867716312408, 0.07763863354921341, -0.07836988568305969, -0.10364872962236404, 0.17734208703041077, -0.004281160421669483, -0.353933721780777, 0.01669241487979889, -0.10495878010988235, 0.005834225099533796], [-0.12686793506145477, -0.14379842579364777, -0.016440097242593765, -0.02453519217669964, -0.06443177908658981, -0.01887650415301323, -0.007905121892690659, 0.007476441562175751, 0.04555612802505493, 0.08454010635614395, -0.12019219994544983, 0.45949867367744446, -0.017626268789172173, -0.019859887659549713, -0.04379718378186226, -0.015133689157664776, -0.16086386144161224, 0.02212086133658886, 0.05897335335612297, -0.030066609382629395], [0.04290639981627464, -0.10970774292945862, -0.03435160592198372, 0.08812044560909271, -0.05898241326212883, -0.08835085481405258, -0.012552172876894474, -0.002964774612337351, 0.012360802851617336, -0.09210473299026489, -0.1252879798412323, 0.38474902510643005, 0.23253248631954193, 0.0999891385436058, -0.04342031851410866, -0.17034636437892914, -0.0881844013929367, -0.04711857810616493, -0.09203710407018661, -0.04870171099901199], [-0.18615058064460754, -0.36862656474113464, -0.0873451754450798, 0.06145624816417694, 0.03344031795859337, -0.06362925469875336, -0.019429609179496765, 0.043927211314439774, 0.1226702556014061, -0.016244981437921524, -0.26833420991897583, 0.8725668787956238, -0.09200290590524673, -0.05760393664240837, 0.1146635115146637, -0.16174259781837463, -0.15930700302124023, -0.14366281032562256, -0.11748013645410538, 0.04624446853995323], [0.02591545693576336, -0.49962812662124634, -0.07720375061035156, 0.014545074664056301, -0.05363462492823601, -0.1707509160041809, -0.01352380309253931, -0.046919163316488266, 0.17758068442344666, 0.08248013257980347, -0.11836923658847809, 1.2276151180267334, -0.012293703854084015, 0.10845919698476791, -0.11680728942155838, -0.10219363868236542, -0.14359895884990692, 0.019623827189207077, -0.09711077064275742, -0.05358893796801567], [-0.07135138660669327, -0.010282942093908787, -0.0254299845546484, -0.19808368384838104, 0.14780834317207336, 0.059971295297145844, 0.0048631480894982815, 0.20110991597175598, -0.18442663550376892, 0.15388013422489166, 0.1519412398338318, 0.004898434039205313, 0.007801562547683716, -0.024460049346089363, -0.05480320751667023, 0.20517364144325256, 0.04543304815888405, 0.030014557763934135, 0.08135899901390076, 0.03744043782353401], [0.0793289765715599, -0.2210364043712616, 0.0196794755756855, -0.1142456978559494, 0.06564240902662277, -0.08652365207672119, 0.007772153243422508, -0.005957246292382479, 0.07598831504583359, -0.0010345673654228449, 0.009433789178729057, 0.06819260120391846, -0.018573308363556862, 0.06258538365364075, 0.013868734240531921, 0.03412763029336929, -0.09174700826406479, -0.07979140430688858, -0.021342825144529343, -0.07582958787679672], [0.1275406777858734, -0.01971414126455784, 0.0014870584709569812, 0.12426818907260895, 0.02062414400279522, -0.06406762450933456, -0.011515846475958824, 0.022582417353987694, 0.015308080241084099, -0.18699167668819427, -0.03368355333805084, 0.14191727340221405, 0.12435431778430939, 0.06741839647293091, 0.06841930001974106, -0.15550675988197327, 0.17397858202457428, -0.06388342380523682, -0.21245621144771576, -0.0437362864613533], [-0.010460217483341694, -0.005539052654057741, -0.0010461675701662898, -0.11669489741325378, -0.029367435723543167, 0.13139119744300842, 0.008900447748601437, 0.034955739974975586, -0.015453373081982136, 0.10373218357563019, -0.12271437048912048, 0.10056079924106598, 0.006480889394879341, 0.014011518098413944, -0.06429685652256012, 0.04909724369645119, -0.02791638672351837, 0.07132144272327423, 0.1741943359375, 0.005661503877490759], [0.11529385298490524, -0.10912828147411346, -0.12004944682121277, 0.009074551984667778, 0.04913186654448509, -0.09167341142892838, 0.004897158592939377, -0.02501656487584114, -0.0758088082075119, 0.14623767137527466, 0.07293571531772614, 0.12480220943689346, -0.04685235023498535, 0.03085204027593136, -0.15626397728919983, 0.03999313339591026, 0.07049459964036942, -0.033704642206430435, -0.11854588985443115, 0.12226150184869766], [0.08156692236661911, 0.02115665189921856, -0.03065132535994053, 0.05907838046550751, 0.031431905925273895, 0.09652264416217804, 0.017308717593550682, 0.0012659328058362007, -0.34703078866004944, -0.0826885774731636, 0.09122700244188309, -0.07867047190666199, -0.003880939446389675, -0.0017500534886494279, 0.06620843708515167, -0.000688010361045599, 0.1539279967546463, -0.016346851363778114, -0.14508068561553955, 0.09372349083423615], [0.4098961055278778, -0.16241790354251862, -0.019324295222759247, 0.04615859314799309, 0.0017642411403357983, 0.07238787412643433, 0.0005783991073258221, -0.09625706821680069, 0.10418199747800827, -0.03495027869939804, 0.03994934260845184, -0.02565261349081993, -0.003149942494928837, -0.1250375658273697, 0.15569064021110535, -0.35305818915367126, 0.250575989484787, 0.08844374865293503, -0.6293590068817139, 0.07898962497711182], [0.05127660185098648, 0.256197452545166, -0.01152484305202961, -0.0411166176199913, -0.35342416167259216, -0.24336323142051697, -0.012018866837024689, -0.43860572576522827, 0.13724614679813385, -0.027534816414117813, -0.015996592119336128, -0.09881908446550369, 0.020412512123584747, -0.09697959572076797, 0.02637096308171749, -0.011727707460522652, 0.05141615867614746, -0.1058996394276619, 0.15206167101860046, 0.514029860496521], [0.07089240103960037, -0.17097052931785583, 0.0765347108244896, -0.011844358406960964, -0.04960403963923454, -0.0034990780986845493, -0.005031149368733168, 0.038939956575632095, 0.03628615289926529, 0.048416633158922195, -0.04467290639877319, -0.021563393995165825, -0.01158369705080986, -0.03632313385605812, 0.04576563462615013, 0.008756577968597412, 0.014474854804575443, 0.011730070225894451, 0.07576165348291397, 0.06413090229034424], [0.0017106832237914205, 0.0592423714697361, -0.015393299981951714, -0.203964963555336, 0.08641788363456726, -0.2700434923171997, -0.06893983483314514, 0.0833100751042366, -0.35802578926086426, -1.0887712240219116, -0.034759748727083206, -0.040658943355083466, 0.032491493970155716, -0.14562666416168213, -0.2928263545036316, -0.7812784314155579, -0.32525888085365295, -0.13041803240776062, 0.1916315257549286, -0.0829511359333992], [0.11336325854063034, -0.10919328033924103, 0.10801252722740173, 0.088776133954525, 0.4208846688270569, -0.042242541909217834, 0.019609645009040833, 0.12583515048027039, 0.10045772790908813, 0.058680154383182526, 0.25132328271865845, -0.04624668136239052, 0.03999587893486023, -0.1594492346048355, 0.19305942952632904, -0.19936484098434448, -0.04852932319045067, 0.1027543693780899, -0.03957232087850571, 0.10728664696216583], [-0.229275643825531, -0.05605229362845421, -0.12162034958600998, 0.21774540841579437, -0.33797913789749146, 0.34899982810020447, 0.0070564234629273415, 0.46243613958358765, -0.1742914915084839, -0.04459197819232941, -0.013403991237282753, -0.08335316181182861, -0.13428688049316406, 0.019438480958342552, -0.14460523426532745, 0.26623502373695374, -0.09041095525026321, 0.32082441449165344, 0.25756964087486267, 0.2369786947965622], [0.002231078688055277, -0.0016585501143708825, -0.003374273655936122, 0.014907478354871273, 0.024357598274946213, -0.015741877257823944, -0.0035003991797566414, -0.011098943650722504, -0.11104916781187057, -0.0027912978548556566, 0.036786604672670364, -0.0026144536677747965, -0.004778607748448849, -0.06536483764648438, 0.02444610558450222, 0.047386396676301956, 0.0008194592082872987, -0.013318109326064587, 0.014992211945354939, 0.006517650559544563], [-0.25522446632385254, 0.14614252746105194, -0.01077986415475607, -0.1188134253025055, 0.4951520562171936, -0.058102987706661224, 0.00979151576757431, 0.36843061447143555, -0.11950226873159409, -0.048224881291389465, -0.07811394333839417, 0.021864162757992744, 0.019681768491864204, 0.23838140070438385, -0.16153398156166077, 0.15907856822013855, 0.0771159753203392, 0.11371982842683792, -0.11443299800157547, -0.4904569387435913], [0.21497097611427307, -0.24032358825206757, 0.04450947418808937, 0.3438670337200165, -0.28575488924980164, -0.12837283313274384, -0.1304033249616623, -0.17612050473690033, 0.5073782205581665, 0.3956272304058075, -0.042720381170511246, 0.10021299868822098, 0.07344678789377213, 0.02034193091094494, 0.005847373511642218, -0.09005434811115265, -0.07483707368373871, -0.16132131218910217, 0.08519995212554932, 0.5374095439910889], [-0.012747368775308132, -0.03589877113699913, -0.011703413911163807, 0.13495303690433502, -0.04270121827721596, 0.06467323005199432, -0.004100042860955, -0.14538316428661346, 0.04570028558373451, 0.23211412131786346, 0.022580204531550407, 0.27733051776885986, 0.97059166431427, -0.11939772963523865, 0.015773456543684006, 0.2278430461883545, 0.07452700287103653, -0.03911514952778816, -0.06351347267627716, 0.2467915117740631], [0.0714818462729454, -0.2737368941307068, -0.02046823315322399, 0.02006424218416214, -0.10583015531301498, -0.09328146278858185, 0.05116770789027214, -0.0019341387087479234, 0.10208973288536072, 0.08256427198648453, 0.4591697156429291, 0.0737372636795044, 0.07359381765127182, -0.0076726577244699, -0.09348391741514206, 0.0204763300716877, 0.1014745756983757, -0.11979644000530243, 0.01953182928264141, 0.11989609152078629], [0.04175499454140663, 0.016331655904650688, -0.043898191303014755, 0.09648896753787994, -0.04916428029537201, -0.05391891300678253, -0.013547045178711414, 0.006407108157873154, -0.0008199455332942307, -0.035628799349069595, -0.0006769936881028116, 0.11389373242855072, 0.6205298900604248, -0.00775942113250494, -0.18207013607025146, -0.17281973361968994, 0.01085840817540884, -0.05712601915001869, 0.012879309244453907, -0.06231730803847313], [-0.025702089071273804, 0.06365195661783218, -0.028718294575810432, 0.697031557559967, 0.0629933774471283, -0.06086903437972069, 0.010881893336772919, 0.042602185159921646, -0.06544577330350876, -0.4816988408565521, -0.0778050348162651, 0.06021679565310478, 0.296531081199646, 0.006241321563720703, -0.05719178542494774, -0.02343561127781868, 0.006536380387842655, -0.1261780858039856, -0.19976675510406494, -0.012509934604167938], [-0.16297540068626404, 0.12335918098688126, -0.050875961780548096, 0.04114801809191704, 0.17640571296215057, -0.8899157047271729, -0.02253882959485054, 0.2064489722251892, -0.14676925539970398, -0.07210111618041992, -0.04433091729879379, 0.12565743923187256, -0.06308654695749283, 0.32037296891212463, -0.2309965044260025, 0.8344529271125793, -0.04191632196307182, -0.11995286494493484, -0.0003930895181838423, 0.0021367003209888935], [-0.33728674054145813, -0.19933107495307922, -0.08230973780155182, 0.28367888927459717, -0.18241459131240845, 0.054440420120954514, 0.023422259837388992, 0.05074077099561691, -0.054639071226119995, -0.03886972367763519, -0.0072789425030350685, 0.0910356268286705, -0.03831781446933746, 0.0361260361969471, 0.29482561349868774, -0.2631527781486511, -0.12727028131484985, 0.09938843548297882, -0.6588230133056641, 0.15458756685256958], [0.20212092995643616, 0.07601099461317062, 0.033405106514692307, 0.33053481578826904, 0.14443673193454742, -0.17745904624462128, -0.023007353767752647, 0.34933289885520935, -0.07627811282873154, 0.3693675994873047, -0.018468406051397324, 0.06061596795916557, 0.5556288361549377, -0.11125405132770538, 0.24529756605625153, -0.11759839951992035, 0.036131374537944794, -0.003273847745731473, 0.02620142139494419, -0.7495216131210327], [-0.04614175111055374, -0.06849579513072968, -0.09009037166833878, 0.48402971029281616, 0.09206704795360565, 0.05291765555739403, 0.019631322473287582, -0.0167427696287632, -0.20339977741241455, -0.40356630086898804, 0.00020651328668463975, -0.06329821795225143, 0.1630619615316391, 0.07395932823419571, 0.06818044930696487, -0.14115436375141144, 0.17656400799751282, -0.004112111404538155, -0.15400667488574982, -0.01139003038406372], [-0.15487898886203766, 0.020334171131253242, -0.04893450066447258, 0.05588049441576004, 0.08660611510276794, 0.08099531382322311, 0.030626937747001648, 0.09267417341470718, -0.1970849335193634, 0.14821510016918182, 0.06717092543840408, -0.04381726682186127, 0.026203108951449394, 0.0921303778886795, -0.4550881087779999, 0.2778147757053375, 0.005095106549561024, 0.03526969999074936, 0.07654158771038055, -0.08862718194723129], [-0.0017150220228359103, -0.06008315831422806, 0.03221918269991875, -1.4466760158538818, -0.06580314040184021, -0.23825885355472565, 0.015553326345980167, 0.022116104140877724, 0.07047630846500397, 1.0441910028457642, 0.15859617292881012, 0.21598681807518005, 0.4499095380306244, 0.07705708593130112, 0.013881171122193336, 0.5722546577453613, -0.023953299969434738, 0.11174148321151733, 1.2299405336380005, 0.0957021415233612], [0.10438429564237595, -0.3623988628387451, -0.16045373678207397, 0.055296532809734344, -0.6392275094985962, 0.08440177142620087, -0.01423677895218134, 0.4522418677806854, -0.4781079888343811, -0.08868906646966934, 0.16335120797157288, -0.1488146036863327, -0.032449569553136826, 0.08905866742134094, 0.29111969470977783, 0.6359089016914368, -0.02006518468260765, 0.17849431931972504, -0.023388853296637535, 0.22090919315814972], [0.17559947073459625, 0.07746522128582001, -0.007428842596709728, 0.2650265395641327, -0.023619094863533974, -0.18655404448509216, 0.004709077533334494, -0.12898072600364685, 0.005720238666981459, -0.3686656653881073, -0.04943503066897392, -0.04444776102900505, -0.10968825966119766, -0.06384241580963135, 0.1775498390197754, -0.19933317601680756, 0.189494788646698, -0.1261015385389328, -0.19917123019695282, 0.05440356209874153], [-0.005872057285159826, 0.011686551384627819, -0.007197380065917969, 0.09909691661596298, -0.14012540876865387, -0.07426486909389496, -0.010653557255864143, -0.14704856276512146, 0.22042088210582733, -0.014176124706864357, 0.00542534189298749, 0.11459558457136154, -0.037354908883571625, 0.009353477507829666, -0.15413442254066467, -0.039869390428066254, -0.0465199276804924, -0.1348884105682373, -0.02787696197628975, -0.06396380066871643], [-0.0021984726190567017, 0.04196536913514137, 0.0047620185650885105, -0.02705909125506878, -0.01585155352950096, 0.028271863237023354, 0.002736110705882311, 0.014612148515880108, -0.02150600776076317, 0.02399548888206482, -0.046242665499448776, -0.09732412546873093, -0.0021236760076135397, 0.00822990108281374, -0.020945293828845024, 0.02890062890946865, -0.0012788072926923633, 0.02797883190214634, -0.0007419783505611122, -0.01600252091884613], [-0.0015782611444592476, -0.09043619781732559, -0.014102059416472912, -0.009314805269241333, -0.06845918297767639, -0.0299101322889328, 0.002327603055164218, -0.016136806458234787, 0.036957964301109314, 0.020387805998325348, -0.09681393206119537, 0.3750067353248596, 0.016265375539660454, 0.005828869063407183, -0.05787917226552963, 0.009663645178079605, -0.016587084159255028, 0.0107553880661726, 0.03653958812355995, -0.006805586628615856], [0.3094797730445862, -0.07461526989936829, -0.044843532145023346, -0.16648642718791962, -0.2103799730539322, 0.4011121988296509, 0.010002677328884602, 0.20218713581562042, -0.1381981372833252, 0.18852409720420837, 0.1306445449590683, -0.08278164267539978, 0.07501762360334396, 0.10231774300336838, 0.2398739606142044, 0.02652849443256855, 0.14560477435588837, 0.08978153020143509, -0.5288814902305603, 0.18063262104988098], [0.23572920262813568, -0.089731365442276, -0.04519845172762871, 0.08623210340738297, -0.016751296818256378, 0.05960289388895035, 0.018093936145305634, -0.032349877059459686, 0.016774600371718407, -0.14162997901439667, -0.17910484969615936, 0.190541610121727, -0.028570594266057014, -0.02718091569840908, -0.002609696239233017, 0.00897181686013937, -0.07807664573192596, 0.019721347838640213, -0.24157504737377167, 0.08285126090049744], [-0.0016381239984184504, -0.0045517804101109505, 0.00036699793417938054, 0.0007671088678762317, 0.010325531475245953, 0.004879605025053024, -0.0002998271374963224, 0.004960209131240845, -0.0037699490785598755, -0.00182716257404536, 0.006778161972761154, -0.011206059716641903, 0.0011358830379322171, -0.004471793305128813, 0.0005017017247155309, -0.001947176642715931, 0.0016903012292459607, 0.001338532892987132, 0.004042137414216995, 0.001484170788899064], [0.18345236778259277, 0.11897413432598114, -0.011793979443609715, -0.15597985684871674, -0.3782736659049988, 0.14245781302452087, 0.021793367341160774, -0.25122249126434326, 0.011363415978848934, 0.04484152793884277, -0.2452227622270584, -0.03182639181613922, -0.02540971152484417, -0.03139959275722504, -0.16244734823703766, -0.03429992124438286, 0.061010148376226425, -0.014857504516839981, 0.5783638954162598, 0.1304197460412979], [0.12639585137367249, 0.020527198910713196, 0.012250954285264015, 0.0189483854919672, -0.04123915359377861, -0.006918458268046379, 0.013882004655897617, -0.05670464038848877, 0.0804060697555542, 0.033612873405218124, -0.03266989067196846, 0.12687323987483978, -0.09114884585142136, -0.0213521346449852, -0.08602508157491684, 0.05986323952674866, 0.038246139883995056, 0.005878749769181013, 0.001886041951365769, -0.13403598964214325], [-0.021059811115264893, -0.21611885726451874, 0.012870860286056995, -0.017411580309271812, -0.03257947415113449, -0.01329797226935625, -0.0007339663570746779, -0.011917276307940483, 0.0638129711151123, 0.011912189424037933, -0.2454114854335785, 0.30368706583976746, -0.002746215322986245, -0.0047854529693722725, 9.793964272830635e-05, 0.023770514875650406, -0.13842807710170746, 0.03227158263325691, -0.0230511836707592, -0.010370657779276371], [-0.13158021867275238, -0.1201937347650528, 0.017240775749087334, 0.09073911607265472, 0.0006089116213843226, -0.061864640563726425, 0.00802505575120449, 0.020487487316131592, 0.10647819191217422, -0.0950736552476883, -0.15581227838993073, 0.015354112721979618, 0.015989869832992554, -0.08050253242254257, 0.1727890521287918, -0.12277201563119888, -0.05018864572048187, -0.06651411950588226, -0.2525562047958374, 0.03412853553891182], [0.009720312431454659, -0.07334672659635544, -0.025373801589012146, 0.07205070555210114, -0.0737094134092331, -0.0831458792090416, -0.001372365397401154, -0.04675380513072014, 0.061728496104478836, -0.07938273996114731, -0.1588570773601532, 0.43672412633895874, -0.015469037927687168, 0.03691990673542023, 0.08048009872436523, -0.15120194852352142, -0.15303654968738556, -0.11926203966140747, -0.08070686459541321, -0.00013571367890108377], [-0.11819976568222046, -0.1148245632648468, -0.03408185392618179, -0.026018468663096428, -0.1383562535047531, -0.07305968552827835, -0.007575563620775938, -0.03392064943909645, 0.03040255978703499, -0.021434510126709938, -0.09632459282875061, 0.07969736307859421, 0.21588118374347687, 0.10301551967859268, 0.021755222231149673, -0.03686333820223808, 0.1095397099852562, -0.09209543466567993, 0.03217418119311333, 0.014057168737053871], [0.09901829808950424, 0.2716503441333771, 0.03265859931707382, 0.0008183510508388281, -0.018777551129460335, 0.02424517832696438, -0.008477886207401752, -0.11150796711444855, -0.039434805512428284, -0.010561899282038212, 0.014678183011710644, -0.22558265924453735, 0.025422273203730583, 0.050389647483825684, -0.009624672122299671, 0.015077571384608746, 0.15438280999660492, 0.10000251978635788, 0.06474974006414413, 0.094304658472538], [-0.06327588856220245, 0.061816778033971786, -0.04953186959028244, -0.2115265429019928, 0.027662089094519615, 0.09855987876653671, 0.011828677728772163, 0.1760912388563156, -0.21663449704647064, 0.164633110165596, 0.16818378865718842, 0.06461546570062637, 0.04619240388274193, 0.007494460325688124, -0.11915545910596848, 0.184385284781456, 0.04088998958468437, 0.0928366556763649, 0.09113719314336777, 0.0998324528336525], [0.029927317053079605, -0.09978744387626648, -0.03723627328872681, 0.0229469183832407, -0.08036283403635025, -0.049711037427186966, 0.00451536662876606, -0.046425510197877884, 0.027971763163805008, -0.015765516087412834, 0.05541221424937248, 0.36075666546821594, 0.014511782675981522, 0.02345888316631317, -0.07709278911352158, -0.010628391057252884, -0.0335693433880806, -0.002245889510959387, 0.08501581847667694, 0.012889030389487743], [0.17395943403244019, -0.0013113958993926644, -0.010283313691616058, 0.22936992347240448, 0.02247375063598156, -0.058037783950567245, -0.0067065018229186535, -0.008331228978931904, -0.022625287994742393, -0.3062322437763214, -0.014262668788433075, 0.1026560589671135, 0.04336763173341751, -0.0026269371155649424, 0.0942625179886818, -0.16603605449199677, 0.1841352880001068, -0.08667334914207458, -0.27762213349342346, -0.04594828560948372], [0.02190548926591873, 0.05904969945549965, 0.006820851471275091, -0.11039667576551437, -0.026881029829382896, 0.07779621332883835, 0.00916898064315319, 0.0038766544312238693, 0.0004866649687755853, 0.09693154692649841, -0.13198299705982208, 0.023955272510647774, 0.050116196274757385, 0.02472466044127941, -0.09397982060909271, 0.06951505690813065, -0.014587304554879665, 0.06633114814758301, 0.1749892383813858, -0.009483201429247856], [-0.05190250277519226, 0.10159774124622345, -0.06350967288017273, -0.0535193607211113, 0.1816205531358719, 0.0695892870426178, 0.0036413490306586027, -0.02585875801742077, -0.03473803400993347, 0.09916316717863083, 0.17471350729465485, 0.06653529405593872, 0.05977547913789749, -0.04280601814389229, -0.0881098136305809, -0.08262524753808975, 0.1178509071469307, 0.027097558602690697, 0.12000086158514023, 0.09336549788713455], [-0.07246841490268707, 0.21671810746192932, -0.08306030929088593, 0.044502079486846924, -0.2897890508174896, 0.020394805818796158, 0.012017919681966305, -0.15613926947116852, -0.3774578869342804, -0.05228884518146515, 0.0018642094219103456, 0.0544469840824604, 0.07730959355831146, 0.05163512006402016, 0.018764954060316086, 0.01372483093291521, 0.08550689369440079, 0.02150348387658596, -0.0024823069106787443, 0.18140281736850739]], "rec.bias_ih_l0": [0.026818251237273216, 0.15374882519245148, -0.08230318129062653, 0.4021168351173401, -0.026925010606646538, -0.4874921441078186, -0.013831470161676407, 0.0044172233901917934, 0.2591511309146881, 0.23173798620700836, 0.14034870266914368, 0.18873231112957, -0.915726363658905, -0.8911749720573425, 0.106340192258358, 0.4261935353279114, 0.005361468531191349, -0.06459087878465652, 0.08164313435554504, 0.15907415747642517, 0.19850444793701172, 0.3435887396335602, -0.03134969621896744, 0.1512126475572586, 0.34988391399383545, 0.7783775329589844, -0.005533045623451471, 0.1656055897474289, 0.21201905608177185, 0.03438357636332512, 0.5324457883834839, 0.5119851231575012, 1.2595653533935547, 1.5908029079437256, 0.07094378769397736, 0.0752945989370346, 0.13930673897266388, 0.10540398210287094, 0.10711446404457092, -0.050404854118824005, -0.07129450142383575, -0.3022400438785553, -0.02705882303416729, 0.05712004750967026, 0.22806590795516968, -0.012073298916220665, -0.0002980013086926192, 0.12353795766830444, 0.04014577344059944, -0.06536457687616348, 0.14542271196842194, 0.29094165563583374, -0.05554856359958649, -0.045944567769765854, -0.12169405072927475, -0.11961526423692703, -0.045027151703834534, -0.0735587477684021, -0.1628679782152176, -0.10382407158613205, -0.009508027695119381, 0.21464160084724426, -0.11138502508401871, 0.45811742544174194, -0.040339622646570206, 0.2304857224225998, -0.013915956020355225, -0.07162494212388992, 0.17569755017757416, 0.35629481077194214, -0.035265929996967316, 0.5576187372207642, 0.3637457489967346, -0.18522658944129944, 0.13043811917304993, 0.44935739040374756, 0.10573168843984604, -0.00412940327078104, 0.061163824051618576, 0.06215159222483635], "rec.bias_hh_l0": [0.026818251237273216, 0.15374882519245148, -0.08230318129062653, 0.4021168351173401, -0.026831384748220444, -0.4878445267677307, -0.013831470161676407, 0.0044172233901917934, 0.2591511309146881, 0.23173798620700836, 0.14034870266914368, 0.18874916434288025, -0.9272397756576538, -0.8764629364013672, 0.106340192258358, 0.4261935353279114, 0.005361562129110098, -0.06459087878465652, 0.08164308965206146, 0.15907415747642517, 0.19850435853004456, 0.3436584174633026, -0.03134969621896744, 0.1512126475572586, 0.3447781801223755, 0.7840180993080139, -0.005533045623451471, 0.1656055897474289, 0.21201905608177185, 0.03438450023531914, 0.5324457883834839, 0.4887036383152008, 1.2605183124542236, 1.5951899290084839, 0.07094354927539825, 0.0752945989370346, 0.13930650055408478, 0.10540398210287094, 0.10585951060056686, -0.050404854118824005, -0.1091933622956276, -0.3049905002117157, -0.027057919651269913, 0.03710499033331871, 0.20085233449935913, 0.11865999549627304, -0.0002893924538511783, 0.08848839998245239, 0.04010334983468056, -0.04321299120783806, 0.15247128903865814, 0.2779974937438965, 0.03454851731657982, -0.06388292461633682, -0.05776912719011307, -0.17484824359416962, -0.07694318890571594, -0.035696640610694885, -0.052061777561903, -0.10179772973060608, -0.009508091025054455, 0.21466588973999023, -0.11138502508401871, 0.45811742544174194, -0.039371829479932785, 0.23048818111419678, -0.013915956020355225, -0.07162494212388992, 0.17569755017757416, 0.35629481077194214, -0.03526592254638672, 0.5583326816558838, 0.3637533187866211, -0.17816036939620972, 0.13043811917304993, 0.44935739040374756, 0.10573168843984604, -0.00412940327078104, 0.06321348249912262, 0.06215159222483635], "lin.weight": [[0.12511129677295685, -0.09742813557386398, 0.06532659381628036, -0.003099350491538644, -0.11158525943756104, 0.7394302487373352, -0.014783174730837345, -0.20375759899616241, 0.1258942037820816, 0.058328960090875626, 0.03528430685400963, -0.019559647887945175, 0.2132364809513092, 0.0674719288945198, 0.20412443578243256, -0.6863411068916321, 0.05810638144612312, 0.07085081934928894, 0.0031973551958799362, -0.018982794135808945]], "lin.bias": [0.018413906916975975]}} -------------------------------------------------------------------------------- /modules/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_subdirectory(JUCE) 2 | 3 | include(cmake/SubprojectVersion.cmake) 4 | subproject_version(JUCE juce_version) 5 | message(STATUS "VERSION for JUCE: ${juce_version}") 6 | 7 | # Link to libsamplerate 8 | set(BUILD_TESTING OFF CACHE BOOL "Don't build libsamplerate tests!") 9 | add_subdirectory(libsamplerate) 10 | subproject_version(libsamplerate libsamplerate_version) 11 | message(STATUS "VERSION for libsamplerate: ${libsamplerate_version}") 12 | 13 | # link to RTNeural 14 | set(RTNEURAL_XSIMD ON CACHE BOOL "Use RTNeural with this backend" FORCE) 15 | add_subdirectory(RTNeural) 16 | 17 | include(cmake/WarningFlags.cmake) 18 | add_library(juce_plugin_modules STATIC) 19 | add_subdirectory(json) 20 | add_subdirectory(chowdsp_utils) 21 | 22 | target_link_libraries(juce_plugin_modules 23 | PRIVATE 24 | BinaryData 25 | juce::juce_audio_utils 26 | juce::juce_audio_plugin_client 27 | juce::juce_dsp 28 | nlohmann_json::nlohmann_json 29 | RTNeural 30 | samplerate 31 | chowdsp_dsp 32 | PUBLIC 33 | juce::juce_recommended_config_flags 34 | juce::juce_recommended_lto_flags 35 | warning_flags 36 | ) 37 | 38 | target_compile_definitions(juce_plugin_modules 39 | PUBLIC 40 | JUCE_DISPLAY_SPLASH_SCREEN=0 41 | JUCE_REPORT_APP_USAGE=0 42 | JUCE_WEB_BROWSER=0 43 | JUCE_USE_CURL=0 44 | JUCE_VST3_CAN_REPLACE_VST2=0 45 | JucePlugin_Manufacturer="GuitarML" 46 | JucePlugin_VersionString="${CMAKE_PROJECT_VERSION}" 47 | JucePlugin_Name="${CMAKE_PROJECT_NAME}" 48 | CHOWDSP_USE_LIBSAMPLERATE=1 49 | INTERFACE 50 | $ 51 | ) 52 | 53 | target_include_directories(juce_plugin_modules 54 | PUBLIC 55 | RTNeural 56 | RTNeural/modules/xsimd/include 57 | libsamplerate/include 58 | INTERFACE 59 | $ 60 | ) 61 | 62 | set_target_properties(juce_plugin_modules PROPERTIES 63 | POSITION_INDEPENDENT_CODE TRUE 64 | VISIBILITY_INLINES_HIDDEN TRUE 65 | C_VISBILITY_PRESET hidden 66 | CXX_VISIBILITY_PRESET hidden 67 | ) 68 | -------------------------------------------------------------------------------- /modules/cmake/SubprojectVersion.cmake: -------------------------------------------------------------------------------- 1 | # subproject_version( ) 2 | # 3 | # Extract version of a sub-project, which was previously included with add_subdirectory(). 4 | function(subproject_version subproject_name VERSION_VAR) 5 | # Read CMakeLists.txt for subproject and extract project() call(s) from it. 6 | file(STRINGS "${${subproject_name}_SOURCE_DIR}/CMakeLists.txt" project_calls REGEX "[ \t]*project\\(") 7 | # For every project() call try to extract its VERSION option 8 | foreach(project_call ${project_calls}) 9 | string(REGEX MATCH "VERSION[ ]+([^ )]+)" version_param "${project_call}") 10 | if(version_param) 11 | set(version_value "${CMAKE_MATCH_1}") 12 | endif() 13 | endforeach() 14 | if(version_value) 15 | set(${VERSION_VAR} "${version_value}" PARENT_SCOPE) 16 | else() 17 | message("WARNING: Cannot extract version for subproject '${subproject_name}'") 18 | endif() 19 | 20 | endfunction(subproject_version) 21 | -------------------------------------------------------------------------------- /modules/cmake/WarningFlags.cmake: -------------------------------------------------------------------------------- 1 | add_library(warning_flags INTERFACE) 2 | 3 | if((CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") OR (CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")) 4 | target_compile_options(warning_flags INTERFACE 5 | /W4 # base warning level 6 | #/wd4458 # declaration hides class member (from Foley's GUI Magic) 7 | /wd4505 # since VS2019 doesn't handle [[ maybe_unused ]] for static functions (RTNeural::debug_print) 8 | /wd4244 # for XSIMD 9 | ) 10 | elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")) 11 | target_compile_options(warning_flags INTERFACE 12 | -Wall -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized 13 | -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion 14 | -Wconditional-uninitialized -Woverloaded-virtual -Wreorder 15 | -Wconstant-conversion -Wsign-conversion -Wunused-private-field 16 | -Wbool-conversion -Wno-extra-semi -Wunreachable-code 17 | -Wzero-as-null-pointer-constant -Wcast-align 18 | -Wno-inconsistent-missing-destructor-override -Wshift-sign-overflow 19 | -Wnullable-to-nonnull-conversion -Wno-missing-field-initializers 20 | -Wno-ignored-qualifiers -Wpedantic -Wno-pessimizing-move 21 | # These lines suppress some custom warnings. 22 | # Comment them out to be more strict. 23 | -Wno-shadow-field-in-constructor 24 | # Supress warnings from xsimd 25 | -Wno-cast-align -Wno-shadow -Wno-implicit-int-conversion 26 | -Wno-zero-as-null-pointer-constant -Wno-sign-conversion 27 | # Needed for ARM processor, OSX versions below 10.14 28 | -fno-aligned-allocation 29 | ) 30 | elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") 31 | target_compile_options(warning_flags INTERFACE 32 | -Wall -Wextra -Wstrict-aliasing -Wuninitialized -Wunused-parameter 33 | -Wsign-compare -Woverloaded-virtual -Wreorder -Wunreachable-code 34 | -Wzero-as-null-pointer-constant -Wcast-align -Wno-implicit-fallthrough 35 | -Wno-maybe-uninitialized -Wno-missing-field-initializers -Wno-pedantic 36 | -Wno-ignored-qualifiers -Wno-unused-function -Wno-pessimizing-move 37 | # From LV2 Wrapper 38 | -Wno-parentheses -Wno-deprecated-declarations -Wno-redundant-decls 39 | # For XSIMD 40 | -Wno-zero-as-null-pointer-constant 41 | # These lines suppress some custom warnings. 42 | # Comment them out to be more strict. 43 | -Wno-redundant-move 44 | ) 45 | 46 | if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "7.0.0") 47 | target_compile_options(warning_flags INTERFACE "-Wno-strict-overflow") 48 | endif() 49 | endif() 50 | -------------------------------------------------------------------------------- /resources/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | juce_add_binary_data(BinaryData SOURCES 2 | footswitch_down.png 3 | footswitch_up.png 4 | knob2.png 5 | led_red_off.png 6 | led_red_on.png 7 | logo.png 8 | ts_background_black.jpg 9 | TS-M1N3.ico 10 | TS-M1N3.png 11 | ../models/model_ts9_48k_cond2.json 12 | ../models/model_ts9_cond2.json 13 | ) 14 | 15 | # Need to build BinaryData with -fPIC flag on Linux 16 | set_target_properties(BinaryData PROPERTIES 17 | POSITION_INDEPENDENT_CODE TRUE) 18 | -------------------------------------------------------------------------------- /resources/TS-M1N3.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/TS-M1N3.ico -------------------------------------------------------------------------------- /resources/TS-M1N3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/TS-M1N3.png -------------------------------------------------------------------------------- /resources/app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/app.jpg -------------------------------------------------------------------------------- /resources/black_knob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/black_knob.png -------------------------------------------------------------------------------- /resources/footswitch_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/footswitch_down.png -------------------------------------------------------------------------------- /resources/footswitch_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/footswitch_up.png -------------------------------------------------------------------------------- /resources/knob2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/knob2.png -------------------------------------------------------------------------------- /resources/knob_hex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/knob_hex.png -------------------------------------------------------------------------------- /resources/led_red_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/led_red_off.png -------------------------------------------------------------------------------- /resources/led_red_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/led_red_on.png -------------------------------------------------------------------------------- /resources/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/logo.png -------------------------------------------------------------------------------- /resources/ts_background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/ts_background.jpg -------------------------------------------------------------------------------- /resources/ts_background_black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GuitarML/TS-M1N3/f1cf48c3188c76d7ebf0ead1d7979f7e72f12661/resources/ts_background_black.jpg -------------------------------------------------------------------------------- /validate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # install functions 4 | install_pluginval_linux() 5 | { 6 | curl -L "https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_Linux.zip" -o pluginval.zip 7 | unzip pluginval > /dev/null 8 | echo "./pluginval" 9 | } 10 | 11 | install_pluginval_mac() 12 | { 13 | curl -L "https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_macOS.zip" -o pluginval.zip 14 | unzip pluginval > /dev/null 15 | echo "pluginval.app/Contents/MacOS/pluginval" 16 | } 17 | 18 | install_pluginval_win() 19 | { 20 | powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest https://github.com/Tracktion/pluginval/releases/download/latest_release/pluginval_Windows.zip -OutFile pluginval.zip" 21 | powershell -Command "Expand-Archive pluginval.zip -DestinationPath ." 22 | echo "./pluginval.exe" 23 | } 24 | 25 | # install 26 | if [[ "$OSTYPE" == "linux-gnu"* ]]; then 27 | pluginval=$(install_pluginval_linux) 28 | plugin="Plugin/build/TS-M1N3_artefacts/Release/VST3/TS-M1N3.vst3" 29 | elif [[ "$OSTYPE" == "darwin"* ]]; then 30 | pluginval=$(install_pluginval_mac) 31 | plugin="Plugin/build/TS-M1N3_artefacts/VST3/TS-M1N3.vst3" 32 | else 33 | pluginval=$(install_pluginval_win) 34 | plugin="Plugin/build/TS-M1N3_artefacts/Release/VST3/TS-M1N3.vst3" 35 | fi 36 | 37 | echo "Pluginval installed at ${pluginval}" 38 | echo "Validating ${plugin}" 39 | 40 | n_tries=0 41 | result=1 42 | until [ "$n_tries" -ge 4 ] || [ "$result" -eq 0 ] 43 | do 44 | $pluginval --strictness-level 8 --timeout-ms 90000 --validate-in-process --skip-gui-tests --validate $plugin 45 | result=$? 46 | n_tries=$((n_tries+1)) 47 | done 48 | 49 | # clean up 50 | rm -Rf pluginval* 51 | exit $result 52 | -------------------------------------------------------------------------------- /win_builds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | build64(){ 4 | #cmake -Bbuild -G"Visual Studio 15 2017 Win64" 5 | cmake -Bbuild -G "Visual Studio 16 2019" -A x64 6 | cmake --build build --config Release -j4 7 | } 8 | 9 | 10 | # exit on failure 11 | set -e 12 | 13 | # clean up old builds 14 | rm -Rf build/ 15 | rm -Rf bin/*Win64* 16 | 17 | # set up VST and ASIO paths 18 | sed -i -e "9s/#//" CMakeLists.txt 19 | sed -i -e "10s/#//" CMakeLists.txt 20 | sed -i -e '16s/#//' CMakeLists.txt 21 | 22 | # cmake new builds 23 | build64 & 24 | wait 25 | 26 | # copy builds to bin 27 | mkdir -p bin/Win64 28 | declare -a plugins=("TS-M1N3") 29 | for plugin in "${plugins[@]}"; do 30 | cp -R build/${plugin}_artefacts/Release/VST3/${plugin}.vst3 bin/Win64/${plugin}.vst3 31 | done 32 | 33 | # reset CMakeLists.txt 34 | #git restore CMakeLists.txt 35 | 36 | # zip builds 37 | VERSION=$(cut -f 2 -d '=' <<< "$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/CMakeCache.txt)") 38 | ( 39 | cd bin 40 | rm -f "TS-M1N3-Win64-${VERSION}.zip" 41 | tar -a -c -f "TS-M1N3-Win64-${VERSION}.zip" Win64 42 | ) 43 | 44 | # create installer 45 | echo "Creating installer..." 46 | ( 47 | cd installers/windows 48 | bash build_win_installer.sh 49 | ) 50 | --------------------------------------------------------------------------------