├── .env.dev ├── assets ├── app-icon.ico ├── app-icon.png ├── app-icon.icns ├── dmg-background.png └── app-icon.iconset │ ├── icon_16x16.png │ ├── icon_32x32.png │ ├── icon_128x128.png │ ├── icon_16x16@2x.png │ ├── icon_256x256.png │ ├── icon_32x32@2x.png │ ├── icon_512x512.png │ ├── icon_128x128@2x.png │ └── icon_256x256@2x.png ├── src ├── renderer │ ├── store │ │ ├── settings │ │ │ ├── types.ts │ │ │ ├── selectors.ts │ │ │ ├── actions.ts │ │ │ └── index.ts │ │ ├── window │ │ │ ├── selectors.ts │ │ │ └── index.ts │ │ ├── hooks.ts │ │ └── store.ts │ ├── assets │ │ ├── images │ │ │ ├── add-action.png │ │ │ ├── faderport8.png │ │ │ ├── darwinGetInfo.png │ │ │ ├── copy-action-id.png │ │ │ ├── darwinCopyPath.png │ │ │ ├── plectrum.svg │ │ │ ├── about-icon.svg │ │ │ ├── home-icon.svg │ │ │ ├── clipboard-icon.svg │ │ │ └── prepare-icon.svg │ │ └── fonts │ │ │ ├── lato-300-latin.woff2 │ │ │ ├── lato-400-latin.woff2 │ │ │ ├── lato-700-latin.woff2 │ │ │ ├── lato-300-latin-ext.woff2 │ │ │ ├── lato-400-latin-ext.woff2 │ │ │ ├── lato-700-latin-ext.woff2 │ │ │ ├── lato-400-italic-latin.woff2 │ │ │ ├── lato-700-italic-latin.woff2 │ │ │ ├── lato-400-italic-latin-ext.woff2 │ │ │ └── lato-700-italic-latin-ext.woff2 │ ├── components │ │ ├── atoms │ │ │ ├── Navigation.tsx │ │ │ ├── Page.tsx │ │ │ ├── Logo.tsx │ │ │ ├── ButtonBar.tsx │ │ │ ├── SidebarContainer.tsx │ │ │ ├── MidiDevices.tsx │ │ │ ├── Key.tsx │ │ │ ├── ContentHeader.tsx │ │ │ ├── WindowActionsContainer.tsx │ │ │ ├── Version.tsx │ │ │ ├── Columns.tsx │ │ │ ├── Pre.tsx │ │ │ ├── SidebarGroup.tsx │ │ │ ├── LinkButton.tsx │ │ │ ├── Input.tsx │ │ │ ├── ToolbarButton.tsx │ │ │ ├── Button.tsx │ │ │ ├── Content.tsx │ │ │ └── NavItem.tsx │ │ ├── organisms │ │ │ └── Sidebar.tsx │ │ └── molecules │ │ │ ├── ExternalLink.tsx │ │ │ ├── MidiSelect │ │ │ ├── index.tsx │ │ │ └── MidiSelect.styled.tsx │ │ │ ├── SidebarNavigation.tsx │ │ │ └── VersionItem.tsx │ ├── public │ │ └── index.html │ ├── index.tsx │ ├── pages │ │ ├── Home.tsx │ │ └── About.tsx │ ├── hooks │ │ └── useCsiApi.ts │ ├── styles │ │ └── GlobalStyle.tsx │ └── App.tsx ├── utils │ ├── wait.ts │ ├── getNewLineChar.ts │ ├── isDev.ts │ ├── fileExists.ts │ ├── createFolder.ts │ ├── copyFile.ts │ ├── log.ts │ └── settings.ts ├── types │ ├── index.ts │ ├── import.d.ts │ └── reasonus.d.ts ├── main │ └── api │ │ ├── getInitialReaperDirectory.ts │ │ ├── getVersionNumber.ts │ │ ├── utils │ │ ├── readPage.ts │ │ ├── readAssignment.ts │ │ ├── readSurface.ts │ │ ├── createSciIniContent.ts │ │ ├── removeWhenInUse.ts │ │ ├── addCsiToReaperIni.ts │ │ └── handleCsiIni.ts │ │ ├── getReaperDirectory.ts │ │ ├── unRegisterActions.ts │ │ ├── registerAction.ts │ │ ├── downloadFiles.ts │ │ ├── getMidiDevices.ts │ │ └── installReaSonus.ts └── preload │ └── index.ts ├── resources ├── CSI │ ├── reaper_csurf_integrator.dll │ ├── reaper_csurf_integrator.dylib │ └── CSI.ini ├── src │ └── Zones │ │ └── Reasonus-Faderport │ │ ├── _FX_Zones │ │ ├── IK Multimedia │ │ │ ├── TR5_Saturator_X.vst.zon │ │ │ ├── TR5_Saturator_X.vst3.zon │ │ │ ├── TR5_Opto_Comp.vst.zon │ │ │ ├── TR5_Opto_Comp.vst3.zon │ │ │ ├── TR5_White_2A.vst.zon │ │ │ ├── TR5_White_2A.vst3.zon │ │ │ ├── TR5_One.vst.zon │ │ │ ├── TR5_One.vst3.zon │ │ │ ├── TR5_Black_76.vst.zon │ │ │ ├── TR5_Black_76.vst3.zon │ │ │ ├── TR5_VC-670.vst.zon │ │ │ ├── TR5_VC-670.vst3.zon │ │ │ ├── TR5_EQP-1A.vst.zon │ │ │ ├── TR5_EQP-1A.vst3.zon │ │ │ ├── TR5_Classic_Comp.vst.zon │ │ │ ├── TR5_Classic_Comp.vst3.zon │ │ │ ├── TR5_Bus_Compressor.vst.zon │ │ │ ├── TR5_Bus_Compressor.vst3.zon │ │ │ ├── TR5_EQ-73.vst.zon │ │ │ ├── TR5_EQ-PB.vst.zon │ │ │ ├── TR5_EQ-PB.vst3.zon │ │ │ ├── TR5_EQ-73.vst3.zon │ │ │ ├── TR5_Dyna_Mu.vst.zon │ │ │ ├── TR5_Dyna_Mu.vst.vst3.zon │ │ │ ├── TR5_White_Channel.vst.zon │ │ │ ├── TR5_White_Channel.vst3.zon │ │ │ ├── TR5_British_Channel.vst.zon │ │ │ ├── TR5_British_Channel.vst3.zon │ │ │ ├── TR5_Linear_Phase_EQ.vst.zon │ │ │ └── TR5_Linear_Phase_EQ.vst3.zon │ │ ├── SoundToys │ │ │ ├── Soundtoys_Microshift.vst.zon │ │ │ ├── Soundtoys_Devil-Loc_Deluxe.vst.zon │ │ │ ├── Soundtoys_Sie-Q.vst.zon │ │ │ ├── Soundtoys_Little_Plate.vst.zon │ │ │ ├── Soundtoys_Radiatior.vst.zon │ │ │ ├── Soundtoys_PhaseMistress.vst.zon │ │ │ ├── Soundtoys_Tremolator.vst.zon │ │ │ ├── Soundtoys_Decapitator.vst.zon │ │ │ ├── Soundtoys_Little_AlterBoy.vst.zon │ │ │ └── Soundtoys_EchoBoy_Jr.vst.zon │ │ ├── DadaLife │ │ │ └── SAUSAGE_FATTENER.vst.zon │ │ ├── Audiothing │ │ │ ├── Audiothing_Filterjam.vst3.zon │ │ │ ├── Audiothing_Things-Texture.vst3.zon │ │ │ ├── Audiothing_Valve_exciter.vst.zon │ │ │ ├── Audiothing_Valve_filter_VF-1.vst.zon │ │ │ ├── Audiothing_Valves.vst3.zon │ │ │ └── Audiothing_OuterSpace.vst3.zon │ │ ├── AIR │ │ │ ├── AIR_Chorus.vst.zon │ │ │ ├── AIR_TubeDrive.vst.zon │ │ │ ├── AIR_Ensemble.vst.zon │ │ │ ├── AIR_SpringReverb.vst.zon │ │ │ ├── AIR_Distortion.vst.zon │ │ │ ├── AIR_Non-LinearReverb.vst.zon │ │ │ ├── AIR_Phaser.vst.zon │ │ │ ├── AIR_VintageFilter.vst.zon │ │ │ ├── AIR_Saturation_Filter.vst.zon │ │ │ ├── AIR_Flanger.vst.zon │ │ │ ├── AIR_Dynamic_Delay.vst.zon │ │ │ ├── AIR_Talkbox.vst.zon │ │ │ ├── AIR_Lo-Fi.vst.zon │ │ │ └── AIR_Stereo_width.vst.zon │ │ ├── Cockos │ │ │ └── Reaverbate.vst.zon │ │ ├── PluginAlliance │ │ │ ├── bx_townhouse.vst.zon │ │ │ └── Unfiltered_Audio_Byome.vst.zon │ │ ├── Toneboosters │ │ │ ├── TB_EZQ3.vst.zon │ │ │ ├── TB_DeEsser3.vst.zon │ │ │ ├── TB_Compressor3.vst.zon │ │ │ ├── TB_Gate3.vst.zon │ │ │ ├── TB_Reverb3.vst.zon │ │ │ ├── TB_Ferox3.vst.zon │ │ │ └── TB_ReelBus3.vst.zon │ │ ├── TDR │ │ │ ├── TDR_Molotok.vst3.zon │ │ │ └── Vlad_Molot.vst.zon │ │ ├── Waves │ │ │ ├── WavesCla76(mono).vst.zon │ │ │ ├── WavesCla76(mono).vst3.zon │ │ │ ├── WavesCla76(stereo).vst.zon │ │ │ └── WavesCla76(stereo).vst3.zon │ │ ├── ValhallaDSP │ │ │ ├── ValhallaPlate.vst.zon │ │ │ ├── ValhallaShimmer.vst.zon │ │ │ ├── ValhallaSupermassive.vst3.zon │ │ │ ├── ValhallaVintageVerb.vst3.zon │ │ │ └── ValhallaFreqEcho.vst3.zon │ │ ├── Bluecat │ │ │ ├── BlueCatGain3(mono).vst3.zon │ │ │ ├── BlueCatGain3(stereo).vst3.zon │ │ │ ├── BlueCatGain3(dual).vst3.zon │ │ │ ├── BlueCatTripleEQ4(mono).vst3.zon │ │ │ ├── BlueCatTripleEQ(stereo).vst3.zon │ │ │ ├── BlueCatFreeAmp.vst3.zon │ │ │ ├── BlueCatFreqAnalyst2(mono).vst3.zon │ │ │ ├── BlueCatFreqAnalyst2(stereo).vst3.zon │ │ │ ├── BlueCatPhaser3(mono).vst3.zon │ │ │ ├── BlueCatPhaser3(stereo).vst3.zon │ │ │ ├── BlueCatTripleEQ4(dual).vst3.zon │ │ │ ├── BlueCatChorus(stereo).vst3.zon │ │ │ ├── BlueCatChorus4(Mono).vst3.zon │ │ │ ├── BlueCatFlanger3(mono).vst3.zon │ │ │ └── BlueCatFlanger3(stereo).vst3.zon │ │ ├── BabyAudio │ │ │ └── Parallel_Aggressor.vst3.zon │ │ ├── Arturia │ │ │ └── TapeMelloFi.vst3.zon │ │ ├── Klanghelm │ │ │ └── VUMTDeluxe.vst3.zon │ │ ├── TSEAudio │ │ │ └── TSE_BOD.vst.zon │ │ ├── MeldaProduction │ │ │ ├── MAutopan.vst.zon │ │ │ ├── MCompressor.vst3.zon │ │ │ ├── MCompressor.vst.zon │ │ │ └── MBandPass.vst.zon │ │ └── AnalogObsession │ │ │ └── AnalogObsessionTransature.vst.zon │ │ ├── _Instrument_Zones │ │ ├── Loopmasters │ │ │ └── LoopcloudPlay.vsti.zon │ │ ├── Cockos │ │ │ └── ReaSynth.vsti.zon │ │ ├── AIR │ │ │ └── AIR_Xpand!2.vsti.zon │ │ └── Collab │ │ │ └── CollaB3.vsti.zon │ │ ├── FP8_Panning.zon │ │ ├── FP8_Home.zon │ │ ├── FP8_MixManagement.zon │ │ ├── FP8_Transport.zon │ │ ├── FP8_NavigatorBank.zon │ │ ├── FP8_NavigatorMaster.zon │ │ ├── FP8_NavigatorZoom.zon │ │ ├── FP8_NavigatorChannel.zon │ │ ├── FP8_NavigatorMetronome.zon │ │ ├── FP8_NavigatorScroll.zon │ │ ├── FP8_FX.zon │ │ ├── FP8_NavigatorMarker.zon │ │ ├── FP8_SelectedTrackSend.zon │ │ ├── FP8_FXSlot.zon │ │ ├── FP8_SelectedTrackReceives.zon │ │ ├── FP8_Channel.zon │ │ ├── FP8_Automation.zon │ │ ├── FP8_NavigatorSection.zon │ │ └── FP8_TrackSendSlot.zon └── Scripts │ ├── always-on.lua │ ├── showAllTracks.lua │ └── showTrackBase.lua ├── .github ├── ISSUE_TEMPLATE │ ├── custom.md │ ├── feature_request.md │ └── bug_report.md ├── FUNDING.yml └── workflows │ └── build.yml ├── webpack ├── webpack.plugins.js ├── webpack.renderer.config.js ├── webpack.rules.js └── webpack.main.config.js ├── .editorconfig ├── readme.md ├── tsconfig.json ├── tools ├── add-macos-cert.sh └── create-icons.sh ├── LICENSE ├── .gitignore ├── forge.config.js └── .eslintrc.js /.env.dev: -------------------------------------------------------------------------------- 1 | GH_API_TOKEN= -------------------------------------------------------------------------------- /assets/app-icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.ico -------------------------------------------------------------------------------- /assets/app-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.png -------------------------------------------------------------------------------- /assets/app-icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.icns -------------------------------------------------------------------------------- /assets/dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/dmg-background.png -------------------------------------------------------------------------------- /src/renderer/store/settings/types.ts: -------------------------------------------------------------------------------- 1 | export enum SettingsActions { 2 | GET_REAPER_PATH = 'settings/SET_REAPER_PATH', 3 | } -------------------------------------------------------------------------------- /src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export const wait = (ms: number) => { 2 | return new Promise((resolve) => setTimeout(resolve, ms)); 3 | }; -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_16x16.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_32x32.png -------------------------------------------------------------------------------- /src/utils/getNewLineChar.ts: -------------------------------------------------------------------------------- 1 | import os from 'os'; 2 | 3 | export const getNewLineChar = () => (os.platform() === 'win32' ? '\r\n' : '\n'); 4 | -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_128x128.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_256x256.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_512x512.png -------------------------------------------------------------------------------- /resources/CSI/reaper_csurf_integrator.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/resources/CSI/reaper_csurf_integrator.dll -------------------------------------------------------------------------------- /src/renderer/assets/images/add-action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/images/add-action.png -------------------------------------------------------------------------------- /src/renderer/assets/images/faderport8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/images/faderport8.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /assets/app-icon.iconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/assets/app-icon.iconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /resources/CSI/reaper_csurf_integrator.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/resources/CSI/reaper_csurf_integrator.dylib -------------------------------------------------------------------------------- /src/renderer/assets/images/darwinGetInfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/images/darwinGetInfo.png -------------------------------------------------------------------------------- /resources/CSI/CSI.ini: -------------------------------------------------------------------------------- 1 | Page "Faderport 8" FollowMCP NoSynchPages UseScrollLink 2 | MidiSurface "Faderport 8" 5 5 "FP8.mst" "Reasonus-Faderport8" 8 8 8 0 3 | -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-300-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-300-latin.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-400-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-400-latin.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-700-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-700-latin.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/images/copy-action-id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/images/copy-action-id.png -------------------------------------------------------------------------------- /src/renderer/assets/images/darwinCopyPath.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/images/darwinCopyPath.png -------------------------------------------------------------------------------- /src/renderer/store/window/selectors.ts: -------------------------------------------------------------------------------- 1 | // import { RootState } from '../store'; 2 | 3 | // export const hasFocus = (state: RootState) => state.window.focus; 4 | -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-300-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-300-latin-ext.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-400-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-400-latin-ext.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-700-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-700-latin-ext.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-400-italic-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-400-italic-latin.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-700-italic-latin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-700-italic-latin.woff2 -------------------------------------------------------------------------------- /src/renderer/store/settings/selectors.ts: -------------------------------------------------------------------------------- 1 | import { RootState } from '../store'; 2 | 3 | export const getReaperPath = (state: RootState) => state.settings.reaperPath; 4 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/Navigation.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Navigation = styled.ul` 4 | list-style: none; 5 | padding: 0; 6 | `; -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-400-italic-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-400-italic-latin-ext.woff2 -------------------------------------------------------------------------------- /src/renderer/assets/fonts/lato-700-italic-latin-ext.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/navelpluisje/reasonus-install/HEAD/src/renderer/assets/fonts/lato-700-italic-latin-ext.woff2 -------------------------------------------------------------------------------- /src/utils/isDev.ts: -------------------------------------------------------------------------------- 1 | export const isDev = () => { 2 | if ('ELECTRON_IS_DEVS' in process.env) { 3 | return process.env.ELECTRON_IS_DEVS === 'true'; 4 | } 5 | return false; 6 | }; -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export type PortCount = '2' | '8' | '16'; 2 | 3 | export interface Action { 4 | fileName: string; 5 | displayName: string; 6 | actionId: string; 7 | register: boolean; 8 | overwrite: boolean; 9 | } -------------------------------------------------------------------------------- /src/renderer/components/atoms/Page.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Page = styled.section` 4 | display: grid; 5 | grid-template-columns: minmax(14rem, 1fr) 3fr; 6 | height: 100%; 7 | `; -------------------------------------------------------------------------------- /webpack/webpack.plugins.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); 3 | 4 | module.exports = [new ForkTsCheckerWebpackPlugin()]; 5 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/Logo.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | import logo from '../../assets/images/logo.svg'; 4 | 5 | export const Logo = styled.img.attrs({ 6 | src: logo, 7 | })` 8 | width: 12rem; 9 | `; -------------------------------------------------------------------------------- /src/renderer/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Reasonus FaderPort 7 | 8 | 9 | 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/utils/fileExists.ts: -------------------------------------------------------------------------------- 1 | import { access } from 'fs/promises'; 2 | 3 | export const fileExists = async (path: string): Promise => { 4 | try { 5 | await access(path); 6 | return true; 7 | } catch { 8 | return false; 9 | } 10 | }; -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | # Unix-style newlines with a newline ending every file 7 | [*] 8 | end_of_line = lf 9 | indent_style = space 10 | indent_size = 2 -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Saturator_X.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Saturator X (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Input Gain" 6 | Fader8 FXParam 1 "Output Gain" 7 | Fader2 FXParam 2 "Mode" 8 | ZoneEnd -------------------------------------------------------------------------------- /resources/Scripts/always-on.lua: -------------------------------------------------------------------------------- 1 | function main() 2 | isNewValue, file, sec, cmd = reaper.get_action_context() 3 | state = reaper.GetToggleCommandStateEx(sec, cmd); 4 | reaper.SetToggleCommandState(sec, cmd, 1) 5 | reaper.RefreshToolbar2(sec, cmd); 6 | end 7 | 8 | main() 9 | 10 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Saturator_X.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Saturator X (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Input Gain" 6 | Fader8 FXParam 1 "Output Gain" 7 | Fader2 FXParam 2 "Mode" 8 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/ButtonBar.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | import { Button } from './Button'; 4 | 5 | 6 | export const ButtonBar = styled.section` 7 | margin-top: 1rem; 8 | 9 | ${Button} + ${Button} { 10 | margin-left: 1rem 11 | } 12 | `; 13 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/SidebarContainer.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const SidebarContainer = styled.aside` 4 | padding: 1rem; 5 | 6 | .darwin & { 7 | -webkit-app-region: drag; 8 | padding: 3rem 1rem 1rem; 9 | } 10 | `; 11 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/MidiDevices.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const MidiDevices = styled.section` 4 | display: grid; 5 | grid-template-columns: repeat(2, 1fr); 6 | gap: 1rem; 7 | margin: 3rem 0 1rem; 8 | 9 | img { 10 | justify-self: center; 11 | } 12 | `; -------------------------------------------------------------------------------- /src/renderer/components/atoms/Key.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Key = styled.span` 4 | border: 1px solid white; 5 | border-radius: .25rem; 6 | display: inline-block; 7 | font-size: .9em; 8 | font-weight: 400; 9 | margin: 0 .25rem; 10 | padding: .125rem .5rem; 11 | `; -------------------------------------------------------------------------------- /src/utils/createFolder.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | export const createFolder = (folderName: string): boolean => { 4 | try { 5 | if (!fs.existsSync(folderName)) { 6 | fs.mkdirSync(folderName, {recursive: true}); 7 | } 8 | return true; 9 | } catch { 10 | return false; 11 | } 12 | 13 | }; -------------------------------------------------------------------------------- /src/renderer/components/atoms/ContentHeader.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | interface Props { 4 | center?: boolean 5 | } 6 | 7 | export const ContentHeader = styled.header` 8 | color: white; 9 | font-size: 1.5rem; 10 | text-align: ${({center}) => (center ? 'center' : 'left')}; 11 | `; 12 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/WindowActionsContainer.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const WindowActionsContainer = styled.header` 4 | -webkit-app-region: drag; 5 | align-items: center; 6 | display: flex; 7 | height: 50px; 8 | justify-content: flex-start; 9 | padding-left: 20px; 10 | `; 11 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/Version.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const VersionName = styled.span` 4 | `; 5 | 6 | export const VersionNumber = styled.span` 7 | font-weight: 400; 8 | `; 9 | 10 | export const Version = styled.li` 11 | display: grid; 12 | grid-template-columns: repeat(2, 1fr); 13 | `; -------------------------------------------------------------------------------- /src/renderer/components/atoms/Columns.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | interface Props { 4 | columns?: number; 5 | } 6 | 7 | export const Columns = styled.section` 8 | display: grid; 9 | grid-template-columns: repeat(${({columns = 2}) => columns}, 1fr); 10 | gap: 1rem; 11 | margin: 3rem 0 1rem; 12 | 13 | `; -------------------------------------------------------------------------------- /src/renderer/store/settings/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAsyncThunk } from '@reduxjs/toolkit'; 2 | 3 | import { SettingsActions } from './types'; 4 | 5 | export const fetchReaperPath = createAsyncThunk(SettingsActions.GET_REAPER_PATH, async () => { 6 | const reaperPath = await window.reasonusAPI.getReaperPath(); 7 | return reaperPath; 8 | }); -------------------------------------------------------------------------------- /src/main/api/getInitialReaperDirectory.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | 5 | export const getInitialReaperDirectory = () => { 6 | if (fs.existsSync(path.join(app.getPath('appData'), 'REAPER', 'reaper.ini'))) { 7 | return path.join(app.getPath('appData'), 'REAPER'); 8 | } 9 | return ''; 10 | }; -------------------------------------------------------------------------------- /src/renderer/assets/images/plectrum.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Microshift.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: MicroShift (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Mix" 7 | Fader4 FXParam 3 "Detune" 8 | Fader5 FXParam 4 "Delay" 9 | Fader2 FXParam 5 "Focus" 10 | Fader3 FXParam 6 "Style" 11 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/DadaLife/SAUSAGE_FATTENER.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: SAUSAGE FATTENER (DADA LIFE)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Fattness" 6 | Fader2 FXParam 1 "Color" 7 | Fader3 FXParam 2 "Gain" 8 | Fader4 NoAction 9 | Fader5 NoAction 10 | Fader6 NoAction 11 | Fader7 NoAction 12 | Fader8 NoAction 13 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/store/hooks.ts: -------------------------------------------------------------------------------- 1 | import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; 2 | 3 | import type { AppDispatch, RootState } from './store'; 4 | 5 | // Use throughout your app instead of plain `useDispatch` and `useSelector` 6 | export const useAppDispatch = () => useDispatch(); 7 | export const useAppSelector: TypedUseSelectorHook = useSelector; 8 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Devil-Loc_Deluxe.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Devil-Loc Deluxe (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | Select1 FXParam 5 "Release" [ 0.0 1.0 ] 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Crush" 7 | Fader2 FXParam 2 "Crunch" 8 | Fader8 FXParam 3 "Mix" 9 | Fader3 FXParam 4 "Darkness" 10 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_Filterjam.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Filterjam (AudioThing)" 2 | SelectedTrackNavigator 3 | 4 | Fader1 FXParam 0 "Frequency" 5 | Fader2 FXParam 1 "Emphasis" 6 | Fader3 FXParam 2 "Operations" 7 | Fader4 FXParam 3 "Gain" 8 | Fader8 FXParam 4 "Mix" 9 | Fader5 NoAction 10 | Fader6 NoAction 11 | Fader7 NoAction 12 | ZoneEnd -------------------------------------------------------------------------------- /src/types/import.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: string; 3 | export default content; 4 | } 5 | 6 | declare module '*.png' { 7 | const content: string; 8 | export default content; 9 | } 10 | 11 | declare module '*.woff2' { 12 | const content: string; 13 | export default content; 14 | } 15 | 16 | declare const __GITHUB_AUTH_TOKEN__: string; 17 | declare const __VERSION__: string; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Chorus.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Chorus (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Rate" 6 | Fader2 FXParam 1 "Depth" 7 | Fader4 FXParam 2 "Pre Delay" 8 | Fader3 FXParam 3 "Feedback" 9 | Fader5 FXParam 4 "Waveform" 10 | Fader6 FXParam 5 "L/R Phase" 11 | Fader7 FXParam 6 "Mix" 12 | 13 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_TubeDrive.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR TubeDrive (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Drive" 6 | Fader2 FXParam 1 "Headroom" 7 | Fader3 FXParam 2 "Saturation" 8 | Fader4 FXParam 3 "Output" 9 | Fader5 NoAction 10 | Fader6 NoAction 11 | Fader7 NoAction 12 | Fader8 NoAction 13 | 14 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Cockos/Reaverbate.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: ReaVerbate (Cockos)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Wet" 6 | Fader2 FXParam 1 "Dry" 7 | Fader3 FXParam 2 "RoomSz" 8 | Fader4 FXParam 3 "Damp" 9 | Fader5 FXParam 4 "Width" 10 | Fader6 FXParam 5 "Delay" 11 | Fader7 FXParam 6 "Lowpass" 12 | Fader8 FXParam 7 "Hipass" 13 | ZoneEnd -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | * copy needed actions 2 | * Add action in Reaper 3 | * Copy action Id 4 | * Paste ActionId to installer 5 | * download the zone and surface files 6 | * copy files to Reaper and set (dummy) actionId 7 | 8 | 9 | 10 | Thanx to: 11 | * Geoff Waddington and the CSI community 12 | * SWS for all thos wonderful scripts 13 | * Lokasenna for Lokasenna_Show only specified tracks.lua used as a base for the track selection -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Opto_Comp.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Opto Comp (IK Multimedia)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 0 "Input" 4 | Fader2 FXParam 1 "Ratio" 5 | Fader3 FXParam 2 "Attack" 6 | Fader4 FXParam 3 "Release" 7 | Fader5 NoAction 8 | Fader6 NoAction 9 | Fader7 FXParam 4 "Compression" 10 | Fader8 FXParam 5 "Output" 11 | 12 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Opto_Comp.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Opto Comp (IK Multimedia)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 0 "Input" 4 | Fader2 FXParam 1 "Ratio" 5 | Fader3 FXParam 2 "Attack" 6 | Fader4 FXParam 3 "Release" 7 | Fader5 NoAction 8 | Fader6 NoAction 9 | Fader7 FXParam 4 "Compression" 10 | Fader8 FXParam 5 "Output" 11 | 12 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/PluginAlliance/bx_townhouse.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: bx_townhouse Buss Compressor (Plugin Alliance)" 2 | SelectedTrackNavigator 3 | 4 | Fader1 FXParam 4 "Thresh" 5 | Fader2 FXParam 5 "Ratio" 6 | Fader3 FXParam 6 "Attack" 7 | Fader4 FXParam 7 "Release" 8 | Fader5 FXParam 8 "MakeUp" 9 | Fader6 FXParam 11 "SC Filter" 10 | Fader7 NoAction 11 | Fader8 NoAction 12 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/organisms/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { Logo } from '../atoms/Logo'; 4 | import { SidebarContainer } from '../atoms/SidebarContainer'; 5 | import { SidebarNavigation } from '../molecules/SidebarNavigation'; 6 | 7 | export const Sidebar = () => { 8 | return ( 9 | 10 | 11 | 12 | 13 | ); 14 | }; 15 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Ensemble.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Ensemble (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Rate" 6 | Fader2 FXParam 1 "Depth" 7 | Fader3 FXParam 2 "Modulation Delay" 8 | Fader4 FXParam 3 "Modulation Shimmer" 9 | Fader5 FXParam 4 "Stereo Width" 10 | Fader6 NoAction 11 | Fader7 NoAction 12 | Fader8 FXParam 5 "Mix" 13 | 14 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_White_2A.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 White 2A (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Gain" 6 | Fader2 FXParam 1 "Peak Reduction" 7 | Select1 FXParam 2 "Limit / Compress" [ 0 1 ] 8 | Fader3 NoAction 9 | Fader4 NoAction 10 | Fader5 NoAction 11 | Fader6 NoAction 12 | Fader7 NoAction 13 | Fader8 NoAction 14 | 15 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_White_2A.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 White 2A (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Gain" 6 | Fader2 FXParam 1 "Peak Reduction" 7 | Select1 FXParam 2 "Limit / Compress" [ 0 1 ] 8 | Fader3 NoAction 9 | Fader4 NoAction 10 | Fader5 NoAction 11 | Fader6 NoAction 12 | Fader7 NoAction 13 | Fader8 NoAction 14 | 15 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_SpringReverb.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR SpringReverb (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Pre Delay" 6 | Fader2 FXParam 1 "Reverb Time" 7 | Fader5 FXParam 2 "Low Cut" 8 | Fader3 FXParam 3 "Diffusion" 9 | Fader4 FXParam 4 "Width" 10 | Fader6 NoAction 11 | Fader7 NoAction 12 | Fader8 FXParam 5 "Mix" 13 | 14 | ZoneEnd -------------------------------------------------------------------------------- /src/main/api/getVersionNumber.ts: -------------------------------------------------------------------------------- 1 | import { settings } from '../../utils/settings'; 2 | 3 | export const getVersionNumber = (version: string) => { 4 | switch (version) { 5 | case 'installer': 6 | return process.env.VERSION || process.env.__VERSION__; 7 | 8 | case 'csi': 9 | return '3.0'; 10 | 11 | case 'reasonus': 12 | return settings.get('resourceVersion'); 13 | 14 | default: 15 | return ''; 16 | } 17 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Sie-Q.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Sie-Q (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Low Gain" 7 | Fader2 FXParam 2 "Mid Gain" 8 | Fader3 FXParam 3 "Mid Frequency" 9 | Fader4 FXParam 4 "High Gain" 10 | Fader5 FXParam 5 "Drive" 11 | Fader6 NoAction 12 | Fader7 NoAction 13 | Fader8 NoAction 14 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_EZQ3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_EZQ_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Brightns" 6 | Fader2 FXParam 1 "Tinnines" 7 | Select1 FXParam 2 "On/off" [ 0 1 ] 8 | Select2 FXParam 3 "Bypass" [ 0 1 ] 9 | Fader3 FXParam 4 "Wet" 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | ÎZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_One.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 One (IK Multimedia)" 2 | SelectedTrackNavigator 3 | Fader2 FXParam 0 "Air" 4 | Fader1 FXParam 1 "Focus" 5 | Fader3 FXParam 2 "Push" 6 | Fader2 FXParam 3 "Body" 7 | Fader4 FXParam 4 "Width" 8 | Fader5 FXParam 5 "Volume" 9 | Fader6 FXParam 6 "Transient" 10 | Fader7 FXParam 7 "Analog" 11 | Fader6 FXParam 8 "Bass Punch" 12 | Fader8 NoAction 13 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_One.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 One (IK Multimedia)" 2 | SelectedTrackNavigator 3 | Fader2 FXParam 0 "Air" 4 | Fader1 FXParam 1 "Focus" 5 | Fader3 FXParam 2 "Push" 6 | Fader2 FXParam 3 "Body" 7 | Fader4 FXParam 4 "Width" 8 | Fader5 FXParam 5 "Volume" 9 | Fader6 FXParam 6 "Transient" 10 | Fader7 FXParam 7 "Analog" 11 | Fader6 FXParam 8 "Bass Punch" 12 | Fader8 NoAction 13 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_Things-Texture.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Things Texture (AudioThing)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "MidSide" [ 0 1 ] 6 | Select2 FXParam 1 "Diffusion" [ 0 1 ] 7 | Fader3 FXParam 2 "Pitch" 8 | Fader2 FXParam 3 "Balance" 9 | Fader1 FXParam 4 "Mix" 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | 16 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/molecules/ExternalLink.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { LinkButton } from '../atoms/LinkButton'; 4 | 5 | interface Props { 6 | children: string; 7 | to: string; 8 | } 9 | 10 | 11 | export const ExternalLink: React.FC = ({children, to}) => { 12 | const handleClick = () => { 13 | window.reasonusAPI.goToExternal(to); 14 | }; 15 | 16 | return ( 17 | {children} 18 | ); 19 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Little_Plate.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Little Plate (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader8 FXParam 1 "Mix" 7 | Fader1 FXParam 2 "Decay" 8 | Fader7 FXParam 3 "Low Cut" 9 | Select7 FXParam 4 "Mod Enable" [ 0.0 1.0 ] 10 | Fader2 NoAction 11 | Fader3 NoAction 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | 16 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_DeEsser3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_DeEsser_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Xoverfrq" 6 | Fader2 FXParam 1 "Senstvty" 7 | Select1 FXParam 2 "Listen" [ 0 1 ] 8 | Select2 FXParam 3 "Splitbnd" [ 0 1 ] 9 | Fader3 FXParam 4 "Amount" 10 | Fader4 FXParam 5 "Attack" 11 | Fader5 FXParam 6 "Release" 12 | Fader6 FXParam 7 "Link" 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Distortion.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Distortion (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 1 "Pre Shape" 6 | Fader2 FXParam 2 "Drive" 7 | Select1 FXParam 7 "Stereo" [ 0 1 ] 8 | 9 | Fader3 FXParam 0 "Mode" 10 | Fader4 FXParam 5 "High Cut" 11 | 12 | Fader5 FXParam 4 "DC Bias" 13 | Fader6 FXParam 6 "Output" 14 | 15 | Fader7 FXParam 3 "Threshold" 16 | 17 | Fader8 FXParam 8 "Mix" 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_Instrument_Zones/Loopmasters/LoopcloudPlay.vsti.zon: -------------------------------------------------------------------------------- 1 | Zone "VSTi: Loopcloud Play (Loopmasters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Remote 1 Amount" 6 | Fader2 FXParam 1 "Remote 2 Amount" 7 | Fader3 FXParam 2 "Remote 3 Amount" 8 | Fader4 FXParam 3 "Remote 4 Amount" 9 | Fader5 FXParam 4 "Filt Pre Drive" 10 | Fader6 FXParam 5 "Filt Cutoff" 11 | Fader7 FXParam 6 "Filt Res" 12 | Fader8 FXParam 7 "Master Level" 13 | 14 | ZoneEnd -------------------------------------------------------------------------------- /resources/Scripts/showAllTracks.lua: -------------------------------------------------------------------------------- 1 | -- This script was generated by Lokasenna_Show only specified tracks.lua 2 | local path = ({reaper.get_action_context()})[2]:match('^.+[\\//]') 3 | package.path = path .. "?.lua" 4 | local showTracks = require("showTracksByName") 5 | 6 | local settings = { 7 | showsiblings = true, 8 | showparents = true, 9 | matchonlytop = true, 10 | search = "", 11 | showchildren = true, 12 | matchmultiple = true, 13 | } 14 | 15 | showTracks.showTracks(settings) 16 | 17 | return -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Non-LinearReverb.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Non-LinearReverb (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader2 FXParam 0 "Dry Delay" 6 | Fader1 FXParam 1 "Pre Delay" 7 | Fader3 FXParam 2 "Reverb Time" 8 | Fader4 FXParam 3 "Diffusion" 9 | Fader6 FXParam 4 "Low Cut" 10 | Fader7 FXParam 5 "High Cut" 11 | Fader5 FXParam 6 "Width" 12 | Select1 FXParam 7 "Reverse" [ 0 1 ] 13 | Fader8 FXParam 8 "Mix" 14 | 15 | ZoneEnd -------------------------------------------------------------------------------- /src/utils/copyFile.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | export const copyFile = (srcDir: string, destDir: string, fileName: string): boolean => { 5 | try { 6 | if (!fs.existsSync(destDir)) { 7 | fs.mkdirSync(destDir, {recursive: true}); 8 | } 9 | if (fs.existsSync(path.join(srcDir, fileName))) { 10 | fs.copyFileSync( path.join(srcDir, fileName), path.join(destDir, fileName)); 11 | } 12 | return true; 13 | } catch { 14 | return false; 15 | } 16 | 17 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Black_76.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Black 76 (IK Multimedia)" 2 | SelectedTrackNavigator 3 | 4 | Fader1 FXParam 0 "Input Gain" 5 | Fader4 FXParam 1 "Output Gain" 6 | Fader1 FXParam 2 "Ratio" 7 | Select1 FXParam 2 "Ratio" [ 0 0.25 0.5 0.75 1.0 ] 8 | Fader2 FXParam 3 "Attack" 9 | Fader3 FXParam 4 "Release" 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | 16 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Black_76.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Black 76 (IK Multimedia)" 2 | SelectedTrackNavigator 3 | 4 | Fader1 FXParam 0 "Input Gain" 5 | Fader4 FXParam 1 "Output Gain" 6 | Fader1 FXParam 2 "Ratio" 7 | Select1 FXParam 2 "Ratio" [ 0 0.25 0.5 0.75 1.0 ] 8 | Fader2 FXParam 3 "Attack" 9 | Fader3 FXParam 4 "Release" 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | 16 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_VC-670.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 VC-670 (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Fader1 FXParam 2 "Left Lat Time Constant" 5 | Fader2 FXParam 3 "Right Vert Time Constant" 6 | Fader3 FXParam 4 "Left Channel Input Gain" 7 | Fader4 FXParam 5 "Right Channel Input Gain" 8 | Fader5 FXParam 6 "Left Lat Threshold" 9 | Fader6 FXParam 7 "Right Vert Threshold" 10 | Fader7 NoAction 11 | Fader8 FXParam 8 "Output" 12 | 13 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_VC-670.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 VC-670 (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Fader1 FXParam 2 "Left Lat Time Constant" 5 | Fader2 FXParam 3 "Right Vert Time Constant" 6 | Fader3 FXParam 4 "Left Channel Input Gain" 7 | Fader4 FXParam 5 "Right Channel Input Gain" 8 | Fader5 FXParam 6 "Left Lat Threshold" 9 | Fader6 FXParam 7 "Right Vert Threshold" 10 | Fader7 NoAction 11 | Fader8 FXParam 8 "Output" 12 | 13 | ZoneEnd -------------------------------------------------------------------------------- /src/main/api/utils/readPage.ts: -------------------------------------------------------------------------------- 1 | const regexp = /Page "(?[a-zA-Z0-9\s-]*)"\s*(?[a-zA-Z\s]*)/; 2 | 3 | type PageResult = { 4 | name: string; 5 | options: string[], 6 | } 7 | 8 | export const readPage = (line: string): PageResult | null => { 9 | if (line.match(regexp)) { 10 | const { groups } = regexp.exec(line); 11 | const result: PageResult = { 12 | name: groups.name, 13 | options: groups.options.split(/\s+/), 14 | }; 15 | return result; 16 | } 17 | return null; 18 | }; -------------------------------------------------------------------------------- /webpack/webpack.renderer.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const rules = require('./webpack.rules'); 3 | const plugins = require('./webpack.plugins'); 4 | 5 | rules.push({ 6 | test: /\.css$/, 7 | use: [{ loader: 'style-loader' }, { loader: 'css-loader' }], 8 | }); 9 | 10 | module.exports = { 11 | module: { 12 | rules, 13 | }, 14 | plugins: [ 15 | ...plugins, 16 | ], 17 | resolve: { 18 | extensions: ['.js', '.ts', '.jsx', '.tsx', '.css'], 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /src/renderer/store/store.ts: -------------------------------------------------------------------------------- 1 | import { configureStore } from '@reduxjs/toolkit'; 2 | 3 | import settingsReducer from './settings'; 4 | 5 | export const store = configureStore({ 6 | reducer: { 7 | settings: settingsReducer, 8 | }, 9 | }); 10 | 11 | // Infer the `RootState` and `AppDispatch` types from the store itself 12 | export type RootState = ReturnType 13 | // Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState} 14 | export type AppDispatch = typeof store.dispatch 15 | -------------------------------------------------------------------------------- /src/renderer/assets/images/about-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQP-1A.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 EQP-1A (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Boost Low" 6 | Fader3 FXParam 1 "Atten Low" 7 | Fader5 FXParam 2 "Boost High" 8 | Fader7 FXParam 3 "Atten High" 9 | Fader8 FXParam 4 "Atten Sel" 10 | Fader2 FXParam 5 "CPS" 11 | Fader4 FXParam 6 "Bandwidth" 12 | Fader6 FXParam 7 "KCS" 13 | Fader8 FXParam 8 "Output" 14 | Select8 FXParam 8 "Output" [ 0.5 ] 15 | 16 | ZoneEnd 17 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQP-1A.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 EQP-1A (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Boost Low" 6 | Fader3 FXParam 1 "Atten Low" 7 | Fader5 FXParam 2 "Boost High" 8 | Fader7 FXParam 3 "Atten High" 9 | Fader8 FXParam 4 "Atten Sel" 10 | Fader2 FXParam 5 "CPS" 11 | Fader4 FXParam 6 "Bandwidth" 12 | Fader6 FXParam 7 "KCS" 13 | Fader8 FXParam 8 "Output" 14 | Select8 FXParam 8 "Output" [ 0.5 ] 15 | 16 | ZoneEnd 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "allowJs": true, 5 | "module": "commonjs", 6 | "skipLibCheck": true, 7 | "esModuleInterop": true, 8 | "noImplicitAny": true, 9 | "sourceMap": true, 10 | "baseUrl": ".", 11 | "outDir": "dist", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "paths": { 15 | "*": [ 16 | "node_modules/*" 17 | ] 18 | }, 19 | "jsx": "react" 20 | }, 21 | "include": [ 22 | "src/**/*" 23 | ] 24 | } -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Radiatior.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Radiator (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | Select1 FXParam 7 "Noise" [ 0.0 1.0 ] 5 | Select2 FXParam 6 "MicLine" [ 0.0 1.0 ] 6 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 7 | Fader1 FXParam 1 "Bass" 8 | Fader2 FXParam 2 "Treble" 9 | Fader3 NoAction 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 FXParam 3 "Input" 13 | Fader7 FXParam 4 "Output" 14 | Fader8 FXParam 5 "Mix" 15 | 16 | 17 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Phaser.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Phaser (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Sync" [ 0 1 ] 6 | Fader1 FXParam 1 "Rate" 7 | Fader2 FXParam 2 "Depth" 8 | Fader3 FXParam 3 "Feedback" 9 | Fader5 FXParam 4 "Low Cut" 10 | Fader1 FXParam 5 "Center" 11 | Fader2 FXParam 6 "Poles" 12 | Fader3 FXParam 7 "LFO Wave" 13 | Fader4 FXParam 8 "L/R Phase" 14 | Select4 FXParam 8 "L/R Phase" [ 0.5 ] 15 | Fader8 FXParam 9 "Mix" 16 | 17 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_PhaseMistress.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: PhaseMistress (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader7 FXParam 1 "InputGain" 7 | Fader8 FXParam 2 "OutputGain" 8 | Fader1 FXParam 3 "Mix" 9 | Fader2 FXParam 5 "Frequency" 10 | Fader3 FXParam 6 "Resonance" 11 | Fader4 FXParam 8 "ModulationDepth" 12 | Fader5 FXParam 9 "Style" 13 | Fader6 FXParam 12 "LFO Rate" 14 | Fader7 NoAction 15 | Fader8 NoAction 16 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_Compressor3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_Compressor_v3 (ToneBoosters)" 2 | SelectedTrackNavigator 3 | Fader2 FXParam 0 "Ratio" 4 | Fader1 FXParam 1 "Threshld" 5 | Fader2 FXParam 2 "Attack" 6 | Fader1 FXParam 3 "SC HPF" 7 | Fader3 FXParam 4 "Release" 8 | Fader4 FXParam 5 "Range" 9 | Select3 FXParam 6 "Auto rel" [ 0 1 ] 10 | Fader8 FXParam 7 "Dry wet" 11 | Fader3 FXParam 8 "MakeUp" 12 | Fader5 FXParam 9 "Algortm" 13 | Fader6 NoAction 14 | Fader7 NoAction 15 | Fader8 NoAction 16 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/Pre.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Pre = styled.pre` 4 | border-radius: .5rem; 5 | margin: .5rem 0; 6 | padding: 1rem; 7 | position: relative; 8 | 9 | &::before { 10 | background-color: hsla(177, 100%, 34%, 0.6); 11 | border-radius: .5rem; 12 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 13 | content: ''; 14 | height: 100%; 15 | mix-blend-mode: soft-light; 16 | position: absolute; 17 | top: 0; 18 | left: 0; 19 | width: 100%; 20 | } 21 | 22 | `; -------------------------------------------------------------------------------- /resources/Scripts/showTrackBase.lua: -------------------------------------------------------------------------------- 1 | -- This script was generated by Lokasenna_Show only specified tracks.lua 2 | local path = ({reaper.get_action_context()})[2]:match('^.+[\\//]') 3 | package.path = path .. "?.lua" 4 | local showTracks = require("showTracksByName") 5 | 6 | local settings = { 7 | showsiblings = %showsiblings%, 8 | showparents = %showparents%, 9 | matchonlytop = %matchonlytop%, 10 | search = "%search%", 11 | showchildren = %showchildren%, 12 | matchmultiple = %matchmultiple%, 13 | } 14 | 15 | showTracks.showTracks(settings) 16 | 17 | return -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_VintageFilter.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR VintageFilter (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader4 FXParam 0 "Mode" 6 | Fader1 FXParam 1 "Cutoff" 7 | Fader2 FXParam 2 "Resonance" 8 | Fader3 FXParam 3 "Fat" 9 | Fader3 FXParam 4 "Env Depth" 10 | Fader1 FXParam 5 "Env Attack" 11 | Fader2 FXParam 6 "Env Release" 12 | Fader5 FXParam 7 "LFO Depth" 13 | Fader4 FXParam 8 "LFO Rate" 14 | Select4 FXParam 9 "LFO Sync" [ 0 1 ] 15 | Fader8 FXParam 10 "Output" 16 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Classic_Comp.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Classic Comp (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Side Chain HPF" 6 | Fader2 FXParam 1 "Attack Time" 7 | Fader3 FXParam 2 "Release Time" 8 | Fader4 FXParam 3 "Stereo Enhancement" 9 | Fader1 FXParam 4 "Ratio" 10 | Fader2 FXParam 5 "Input Drive" 11 | Fader3 NoAction 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 NoAction 16 | Fader8 FXParam 6 "Output" 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Classic_Comp.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Classic Comp (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Side Chain HPF" 6 | Fader2 FXParam 1 "Attack Time" 7 | Fader3 FXParam 2 "Release Time" 8 | Fader4 FXParam 3 "Stereo Enhancement" 9 | Fader1 FXParam 4 "Ratio" 10 | Fader2 FXParam 5 "Input Drive" 11 | Fader3 NoAction 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 NoAction 16 | Fader8 FXParam 6 "Output" 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Bus_Compressor.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Bus Compressor (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Ratio" 6 | Fader1 FXParam 1 "Attack" 7 | Fader2 FXParam 2 "Release" 8 | Fader3 FXParam 3 "Side Chain Freq" 9 | Fader2 FXParam 4 "Threshold" 10 | Fader3 FXParam 5 "Make Up" 11 | Select1 FXParam 6 "Grit" [ 0.0 1.0 ] 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 NoAction 16 | Fader8 NoAction 17 | ZoneEnd 18 | 19 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Bus_Compressor.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Bus Compressor (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Ratio" 6 | Fader1 FXParam 1 "Attack" 7 | Fader2 FXParam 2 "Release" 8 | Fader3 FXParam 3 "Side Chain Freq" 9 | Fader2 FXParam 4 "Threshold" 10 | Fader3 FXParam 5 "Make Up" 11 | Select1 FXParam 6 "Grit" [ 0.0 1.0 ] 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 NoAction 16 | Fader8 NoAction 17 | ZoneEnd 18 | 19 | -------------------------------------------------------------------------------- /src/renderer/index.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import * as ReactDOM from 'react-dom'; 3 | import { Provider } from 'react-redux'; 4 | import { HashRouter } from 'react-router-dom'; 5 | 6 | import {App} from './App'; 7 | import { store } from './store/store'; 8 | import { GlobalStyle } from './styles/GlobalStyle'; 9 | 10 | function render() { 11 | ReactDOM.render( 12 | 13 | 14 | 15 | 16 | 17 | , document.getElementById('app')); 18 | } 19 | 20 | render(); 21 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Saturation_Filter.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR SaturationFilter (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader2 FXParam 0 "FilterType" [ 0 1 ] 6 | Fader1 FXParam 1 "FilterAlgorithm" 7 | Fader3 FXParam 2 "DistortionMode" 8 | Fader4 FXParam 3 "DistortionGain" 9 | Fader1 FXParam 4 "CutoffFrequency" 10 | Fader2 FXParam 5 "ResonanceFactor" 11 | Fader8 FXParam 6 "OutputGain" 12 | Fader3 NoAction 13 | Fader4 NoAction 14 | Fader5 NoAction 15 | Fader6 NoAction 16 | Fader7 NoAction 17 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_Valve_exciter.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Valve Exciter (AudioThing)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Valve Drive" 6 | Fader2 FXParam 1 "Valve Bias" 7 | Select1 FXParam 2 "Valve Bypass" [ 0 1 ] 8 | Select2 FXParam 3 "Valve Mode" [ 0 1 ] 9 | Fader1 FXParam 4 "Bass" 10 | Fader3 FXParam 5 "Treble" 11 | Fader2 FXParam 6 "Harmonics" 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 FXParam 8 "Input Gain" 16 | Fader8 FXParam 9 "Ouput Gain" 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQ-73.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 EQ-73 (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Mic" [ 0.0 1.0 ] 6 | Select2 FXParam 2 "Phase" [ 0.0 1.0 ] 7 | Fader1 FXParam 3 "Gain" 8 | Fader1 FXParam 4 "Low Freq" 9 | Fader2 FXParam 5 "Low" 10 | Fader5 FXParam 6 "High" 11 | Fader3 FXParam 7 "Pres Freq" 12 | Fader4 FXParam 8 "Presence" 13 | Fader6 FXParam 9 "HP Freq" 14 | Fader2 FXParam 10 "Output" 15 | Fader7 NoAction 16 | Fader8 NoAction 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQ-PB.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 EQ-PB (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader4 FXParam 0 "Hi" 6 | Fader4 FXParam 1 "Hi Freq" 7 | Fader3 FXParam 2 "Hi-Mid" 8 | Fader3 FXParam 3 "Hi-Mid Freq" 9 | Fader2 FXParam 4 "Low-Mid" 10 | Fader2 FXParam 5 "Low-Mid Freq" 11 | Fader1 FXParam 6 "Low" 12 | Fader1 FXParam 7 "Low Freq" 13 | Fader7 FXParam 8 "Gain" 14 | Fader8 FXParam 9 "Output" 15 | Select4 FXParam 10 "Hi Shelf" [ 0 1 ] 16 | Select1 FXParam 11 "Low Shelf" [ 0 1 ] 17 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQ-PB.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 EQ-PB (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader4 FXParam 0 "Hi" 6 | Fader4 FXParam 1 "Hi Freq" 7 | Fader3 FXParam 2 "Hi-Mid" 8 | Fader3 FXParam 3 "Hi-Mid Freq" 9 | Fader2 FXParam 4 "Low-Mid" 10 | Fader2 FXParam 5 "Low-Mid Freq" 11 | Fader1 FXParam 6 "Low" 12 | Fader1 FXParam 7 "Low Freq" 13 | Fader7 FXParam 8 "Gain" 14 | Fader8 FXParam 9 "Output" 15 | Select4 FXParam 10 "Hi Shelf" [ 0 1 ] 16 | Select1 FXParam 11 "Low Shelf" [ 0 1 ] 17 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/TDR/TDR_Molotok.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TDR Molotok (Tokyo Dawn Labs)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "SC Filter Freq" 6 | Select1 FXParam 1 "SC Filter On" [ 0.0 1.0 ] 7 | Fader8 FXParam 5 "Ratio" 8 | Fader1 FXParam 6 "Thresh." 9 | Fader3 FXParam 2 "Attack" 10 | Fader4 FXParam 3 "Mode" 11 | Fader5 FXParam 4 "Release" 12 | Fader8 FXParam 8 "Makeup" 13 | /resetting other stuff 14 | Fader2 NoAction 15 | Fader6 NoAction 16 | Fader7 NoAction 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Waves/WavesCla76(mono).vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: CLA-76 Mono (Waves)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 0 "Input" 4 | Fader2 FXParam 1 "Output" 5 | Fader3 FXParam 2 "Attack" 6 | Fader4 FXParam 3 "Release" 7 | Select5 FXParam 4 "Ratio" [ 0.0 0.25 0.5 0.75 1.0 ] 8 | Select6 FXParam 7 "Meter" [ 0.0 0.5 1.0 ] 9 | Select7 FXParam 5 "Analog" [ 0.0 0.5 1.0 ] 10 | Select8 FXParam 6 "Revision" [ 0.0 1.0 ] 11 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Waves/WavesCla76(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: CLA-76 Mono (Waves)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 2 "Input" 4 | Fader2 FXParam 3 "Output" 5 | Fader3 FXParam 4 "Attack" 6 | Fader4 FXParam 5 "Release" 7 | Select5 FXParam 6 "Ratio" [ 0.0 0.25 0.5 0.75 1.0 ] 8 | Select6 FXParam 9 "Meter" [ 0.0 0.5 1.0 ] 9 | Select7 FXParam 7 "Analog" [ 0.0 0.5 1.0 ] 10 | Select8 FXParam 8 "Revision" [ 0.0 1.0 ] 11 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_EQ-73.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 EQ-73 (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Mic" [ 0.0 1.0 ] 6 | Select2 FXParam 2 "Phase" [ 0.0 1.0 ] 7 | Fader1 FXParam 3 "Gain" 8 | Fader1 FXParam 4 "Low Freq" 9 | Fader2 FXParam 5 "Low" 10 | Fader5 FXParam 6 "High" 11 | Fader3 FXParam 7 "Pres Freq" 12 | Fader4 FXParam 8 "Presence" 13 | Fader6 FXParam 9 "HP Freq" 14 | Fader2 FXParam 10 "Output" 15 | Fader7 NoAction 16 | Fader8 NoAction 17 | 18 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Waves/WavesCla76(stereo).vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: CLA-76 Stereo (Waves)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 0 "Input" 4 | Fader2 FXParam 1 "Output" 5 | Fader3 FXParam 2 "Attack" 6 | Fader4 FXParam 3 "Release" 7 | Select5 FXParam 4 "Ratio" [ 0.0 0.25 0.5 0.75 1.0 ] 8 | Select6 FXParam 7 "Meter" [ 0.0 0.5 1.0 ] 9 | Select7 FXParam 5 "Analog" [ 0.0 0.5 1.0 ] 10 | Select8 FXParam 6 "Revision" [ 0.0 1.0 ] 11 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Waves/WavesCla76(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: CLA-76 Stereo (Waves)" 2 | SelectedTrackNavigator 3 | Fader1 FXParam 2 "Input" 4 | Fader2 FXParam 3 "Output" 5 | Fader3 FXParam 4 "Attack" 6 | Fader4 FXParam 5 "Release" 7 | Select5 FXParam 6 "Ratio" [ 0.0 0.25 0.5 0.75 1.0 ] 8 | Select6 FXParam 9 "Meter" [ 0.0 0.5 1.0 ] 9 | Select7 FXParam 7 "Analog" [ 0.0 0.5 1.0 ] 10 | Select8 FXParam 8 "Revision" [ 0.0 1.0 ] 11 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Flanger.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Flanger (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 1 "Sync" [ 0 1 ] 6 | Fader1 FXParam 2 "Rate" 7 | Fader2 FXParam 4 "Pre Delay" 8 | 9 | Fader3 FXParam 3 "Depth" 10 | Fader4 FXParam 8 "LFO Wave" 11 | Select2 FXParam 0 "Retrigger" [ 0 1 ] 12 | 13 | Fader5 FXParam 5 "Feedback" 14 | Fader6 FXParam 9 "LFO L/R Offset" 15 | 16 | Fader7 FXParam 7 "Low Cut" 17 | Select7 FXParam 6 "Phase Invert" [ 0 1 ] 18 | 19 | Fader8 FXParam 10 "Mix" 20 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/assets/images/home-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/main/api/utils/readAssignment.ts: -------------------------------------------------------------------------------- 1 | const regexp = /"(?[a-zA-Z0-9\s]*)"\s*(?[0-9]{1,2})\s*(?[0-9]{1,2})\s*"(?[a-zA-Z0-9]*\.mst)"\s*"(?[a-zA-Z0-9\s-]*)"\s*"(?[a-zA-Z0-9\s-]*)"\s*/; 2 | 3 | type Assignment = { 4 | name: string, 5 | nbChannels: string, 6 | offset: string, 7 | surface: string, 8 | zones: string, 9 | effects: string 10 | } 11 | 12 | export const readAssignment = (line: string): Assignment => { 13 | if (line.match(regexp)) { 14 | const { groups } = regexp.exec(line); 15 | return groups as Assignment; 16 | } 17 | return null; 18 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/ValhallaDSP/ValhallaPlate.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: ValhallaPlate (Valhalla DSP, LLC)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Mix" 6 | Fader2 FXParam 1 "PreDelay" 7 | Fader3 FXParam 2 "Decay" 8 | Fader1 FXParam 3 "Size" 9 | Fader2 FXParam 4 "Width" 10 | Fader8 FXParam 5 "ModRate" 11 | Fader8 FXParam 6 "ModDepth" 12 | Fader6 FXParam 7 "LowEQFreq" 13 | Fader6 FXParam 8 "LowEQGain" 14 | Fader7 FXParam 9 "HighEQFreq" 15 | Fader7 FXParam 10 "HighEQGain" 16 | Fader4 FXParam 11 "Type" 17 | Fader5 NoAction 18 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/SidebarGroup.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styled from 'styled-components'; 3 | 4 | interface Props { 5 | title: string 6 | } 7 | 8 | export const SidebarGroup = styled.dl.attrs(({title, children}) => ({ 9 | children: ( 10 | <> 11 |
{title}
12 | {children} 13 | 14 | ), 15 | }))` 16 | padding: 0 16px; 17 | 18 | dt { 19 | font-size: 10px; 20 | font-weight: 600; 21 | color: #999; 22 | } 23 | dd { 24 | color: white; 25 | font-size: 12px; 26 | margin-left: 16px; 27 | margin-top: 8px; 28 | } 29 | `; 30 | -------------------------------------------------------------------------------- /src/renderer/components/atoms/LinkButton.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const LinkButton = styled.button` 4 | background: none; 5 | border: none; 6 | cursor: pointer; 7 | font-size: 1rem; 8 | font-weight: 300; 9 | margin: 0; 10 | padding: 0; 11 | position: relative; 12 | 13 | &::after { 14 | position: absolute; 15 | content: ''; 16 | width: 0; 17 | height: 100%; 18 | bottom: 0; 19 | left: 0; 20 | border-bottom: 1px solid white; 21 | transition: width .3s ease; 22 | } 23 | 24 | &:hover { 25 | &::after { 26 | width: 100%; 27 | } 28 | } 29 | `; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/ValhallaDSP/ValhallaShimmer.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: ValhallaShimmer (Valhalla DSP, LLC)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "wetDry" 6 | Fader2 FXParam 1 "shift" 7 | Fader3 FXParam 2 "feedback" 8 | Fader4 FXParam 3 "diffusion" 9 | Fader5 FXParam 4 "size" 10 | Fader5 FXParam 5 "lowCut" 11 | Fader6 FXParam 6 "highCut" 12 | Fader7 FXParam 7 "modRate" 13 | Fader8 FXParam 8 "modDepth" 14 | Fader1 FXParam 9 "reverbMode" [ (0.003) ] 15 | Fader2 FXParam 10 "shiftMode" [ (0.003) ] 16 | Fader3 FXParam 11 "colorMode" [ 0.5 1.0 ] 17 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/pages/Home.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import faderport from '../assets/images/faderport8.png'; 4 | import { ContentHeader } from '../components/atoms/ContentHeader'; 5 | 6 | export const Home = () => { 7 | return ( 8 | <> 9 | Welcome to ReaSonus FaderPort 10 |
11 |

12 | 13 |

14 |

15 | Manage your FaderPort the best way possible in REAPER. 16 |

17 |
18 | 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /src/main/api/getReaperDirectory.ts: -------------------------------------------------------------------------------- 1 | import { app, dialog } from 'electron'; 2 | 3 | import { settings } from '../../utils/settings'; 4 | 5 | export const getReaperDirectory = async (browserWindow: Electron.BrowserWindow) => { 6 | const { canceled, filePaths } = await dialog.showOpenDialog(browserWindow, { 7 | defaultPath: app.getPath('appData'), 8 | message: 'Select the REAPER resource path', 9 | properties: [ 10 | 'openDirectory', 11 | 'showHiddenFiles', 12 | ], 13 | }); 14 | if (canceled) { 15 | return; 16 | } else { 17 | settings.set('reaperPath', filePaths[0]); 18 | return filePaths[0]; 19 | } 20 | }; -------------------------------------------------------------------------------- /src/renderer/components/molecules/MidiSelect/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { ChangeEvent } from 'react'; 2 | 3 | import { Label, Select, Wrapper } from './MidiSelect.styled'; 4 | 5 | interface Props { 6 | label: string; 7 | id: string; 8 | onChange: (event: ChangeEvent) => void; 9 | value: string; 10 | children: JSX.Element[] | JSX.Element; 11 | } 12 | 13 | export const MidiSelect: React.FC = ({label, id, value, onChange, children}) => ( 14 | 15 | 16 | 19 | 20 | ); -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatGain3(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Gain 3 (Mono) (Blue Cat Audio)" "BlueCat Gain Mono" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "On/Off" [ 0.0 1.0 ] 4 | Fader1 FXParam 1 "Gain" 5 | 6 | / Reset all the others, so the faders will go down 7 | Fader1 NoAction 8 | Fader2 NoAction 9 | Fader3 NoAction 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | Fader2 NoAction 16 | Fader3 NoAction 17 | Fader4 NoAction 18 | Fader5 NoAction 19 | Fader6 NoAction 20 | Fader7 NoAction 21 | Fader8 NoAction 22 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatGain3(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Gain 3 (Stereo) (Blue Cat Audio)" "BlueCat Gain Stereo" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "On/Off" [ 0.0 1.0 ] 4 | Fader1 FXParam 1 "Gain" 5 | 6 | / Reset all the others, so the faders will go down 7 | Fader1 NoAction 8 | Fader2 NoAction 9 | Fader3 NoAction 10 | Fader4 NoAction 11 | Fader5 NoAction 12 | Fader6 NoAction 13 | Fader7 NoAction 14 | Fader8 NoAction 15 | Fader2 NoAction 16 | Fader3 NoAction 17 | Fader4 NoAction 18 | Fader5 NoAction 19 | Fader6 NoAction 20 | Fader7 NoAction 21 | Fader8 NoAction 22 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/Input.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | interface Props { 4 | large?: boolean; 5 | } 6 | 7 | export const Input = styled.input` 8 | background-color: hsla(177, 100%, 34%, 0.6); 9 | border: 1px solid white; 10 | border-radius: .5rem; 11 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.125); 12 | color: var(--default-text); 13 | font-weight: 400; 14 | padding: .5rem 1rem; 15 | position: relative; 16 | width: ${({large}) => (large ? 'calc(100% - 2rem)' : 'auto')}; 17 | 18 | &::placeholder { 19 | color: rgba(255, 255, 255, .75); 20 | } 21 | + button { 22 | margin-left: 1rem; 23 | } 24 | `; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Dynamic_Delay.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Dynamic Delay (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Feedback Mode" 6 | Select1 FXParam 1 "Sync" [ 0 1 ] 7 | Shift+Fader1 FXParam 2 "Delay" 8 | Fader2 FXParam 3 "Feedback" 9 | Shift+Fader2 FXParam 4 "L/R Ratio" 10 | Fader3 FXParam 5 "Stereo Width" 11 | Shift+Fader3 FXParam 6 "Low Cut" 12 | Fader4 FXParam 7 "High Cut" 13 | Shift+Fader4 FXParam 10 "Env Mod Rate" 14 | Fader5 FXParam 8 "Env Mod: Feedback" 15 | Fader6 FXParam 9 "Env Mod: Mix" 16 | Fader8 FXParam 11 "Mix" 17 | 18 | Fader7 NoAction 19 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Tremolator.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Tremolator (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader7 FXParam 1 "InputGain" 7 | Fader8 FXParam 2 "OutputGain" 8 | Fader1 FXParam 4 "Depth" 9 | Fader2 FXParam 5 "Groove" 10 | Fader4 FXParam 6 "Accent" 11 | Fader5 FXParam 7 "Width" 12 | Fader3 FXParam 14 "Feel" 13 | Fader7 NoAction 14 | Fader4 FXParam 8 "RateMod" 15 | Fader5 FXParam 9 "DepthMod" 16 | Fader1 FXParam 10 "Threshold" 17 | Fader2 FXParam 11 "Attack" 18 | Fader3 FXParam 12 "Release" 19 | 20 | 21 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Talkbox.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Talkbox (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Vowel" 6 | Fader2 FXParam 1 "Formant" 7 | Select1 FXParam 2 "LFO Sync" [ 0 1 ] 8 | Fader1 FXParam 3 "LFO Rate" 9 | Fader2 FXParam 4 "LFO Wave" 10 | Fader3 FXParam 5 "LFO Depth" 11 | Fader3 FXParam 5 "LFO Depth" 12 | Fader4 FXParam 6 "Env Threshold" 13 | Fader5 FXParam 7 "Env Attack" 14 | Fader6 FXParam 8 "Env Release" 15 | Fader4 FXParam 9 "Env Depth" 16 | Fader8 FXParam 10 "Mix" 17 | 18 | Fader5 NoAction 19 | Fader6 NoAction 20 | Fader7 NoAction 21 | 22 | ZoneEnd 23 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_Valve_filter_VF-1.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Valve Filter VF-1 (AudioThing)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Valve Drive" 6 | Fader2 FXParam 1 "Valve Bias" 7 | Select1 FXParam 2 "Valve Bypass" [ 0 1 ] 8 | Select2 FXParam 3 "Valve Mode" [ 0 1 ] 9 | Fader1 FXParam 4 "Filter Cutoff" 10 | Fader2 FXParam 5 "Filter Resonanc" 11 | Fader3 FXParam 6 "Filter Type" 12 | Select3 FXParam 6 "Filter Type" [ 0 1 ] 13 | Fader7 FXParam 8 "Input Gain" 14 | Fader8 FXParam 9 "Ouput Gain" 15 | Fader3 NoAction 16 | Fader4 NoAction 17 | Fader5 NoAction 18 | Fader6 NoAction 19 | 20 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_Gate3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_Gate_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader4 FXParam 0 "Threshld" 6 | Fader1 FXParam 1 "Attack" 7 | Fader2 FXParam 2 "Hold" 8 | Fader3 FXParam 3 "Release" 9 | Fader1 FXParam 4 "SC HPF" 10 | Fader2 FXParam 5 "SC LPF" 11 | Select1 FXParam 6 "SC filt" [ 0 1 ] 12 | Select2 FXParam 7 "SC mon" [ 0 1 ] 13 | Fader3 FXParam 8 "Det time" 14 | Fader4 FXParam 9 "Clsdgain" 15 | Select8 FXParam 10 "Bypass" [ 0 1 ] 16 | FXParam 11 "Wet" 17 | Fader5 NoAction 18 | Fader6 NoAction 19 | Fader7 NoAction 20 | Fader8 NoAction 21 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/ToolbarButton.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | interface Props { 4 | color: 'green' | 'yellow' | 'red'; 5 | } 6 | 7 | const colors = { 8 | green: '#62c554', 9 | red: '#ed6a5f', 10 | yellow: '#f4bf4f', 11 | }; 12 | 13 | export const ToolBarButton = styled.button.attrs({ 14 | type: 'button', 15 | })` 16 | border: none; 17 | background-color: ${({color}) => colors[color]}; 18 | border-radius: 50%; 19 | height: 12px; 20 | margin: 0; 21 | padding: 0; 22 | width: 12px; 23 | 24 | & + button { 25 | margin-left: 8px; 26 | } 27 | 28 | &:disabled { 29 | background-color: #4f4f50; 30 | } 31 | `; 32 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Decapitator.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Decapitator (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader2 FXParam 1 "Style" 7 | Fader1 FXParam 2 "Drive" 8 | Select1 FXParam 3 "Punish" [ 0.0 1.0 ] 9 | Fader3 FXParam 4 "LowCut" 10 | Fader4 FXParam 5 "Tone" 11 | Select4 FXParam 5 "Tone" [ 0.5 ] 12 | Fader5 FXParam 6 "HighCut" 13 | Select7 FXParam 8 "AutoGain" [ 0.0 1.0 ] 14 | Select3 FXParam 9 "LowThump" [ 0.0 1.0 ] 15 | Select5 FXParam 10 "HighSlope" [ 0.0 1.0 ] 16 | Fader7 FXParam 11 "OutputTrim" 17 | Fader8 FXParam 7 "Mix" 18 | 19 | 20 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/ValhallaDSP/ValhallaSupermassive.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: ValhallaSupermassive (Valhalla DSP, LLC)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Mix" 6 | Select1 FXParam 0 "Mix" [ 1 ] 7 | 8 | Select2 FXParam 1 "DelaySync" [ 0.25 0.5 0.75 1.0 ] 9 | Fader2 FXParam 2 "DelayNote" 10 | Fader2 FXParam 3 "Delay_Ms" 11 | Fader3 FXParam 4 "DelayWarp" 12 | Fader4 FXParam 6 "Feedback" 13 | Fader5 FXParam 7 "Density" 14 | Fader2 FXParam 8 "Width" 15 | Fader8 FXParam 9 "LowCut" 16 | Fader7 FXParam 10 "HighCut" 17 | Fader5 FXParam 11 "ModRate" 18 | Fader6 FXParam 12 "ModDepth" 19 | Fader1 FXParam 13 "Mode" 20 | 21 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_Little_AlterBoy.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Little AlterBoy (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select8 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Pitch" 7 | Fader2 FXParam 2 "Formant" 8 | Fader4 FXParam 3 "Drive" 9 | Fader8 FXParam 4 "Mix" 10 | Fader3 FXParam 5 "ShiftMode" [ 0.0 0.5 0.75 ] 11 | Select1 FXParam 6 "FormantLink" [ 0.0 1.0 ] 12 | Select2 FXParam 6 "FormantLink" [ 0.0 1.0 ] 13 | Fader1 NoAction 14 | Fader2 NoAction 15 | Fader3 NoAction 16 | Fader4 NoAction 17 | Fader5 NoAction 18 | Fader6 NoAction 19 | Fader7 NoAction 20 | Fader8 NoAction 21 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/SoundToys/Soundtoys_EchoBoy_Jr.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: EchoBoy Jr (Soundtoys)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Bypass" [ 0.0 1.0 ] 6 | Fader7 FXParam 1 "InputGain" 7 | Fader8 FXParam 2 "OutputGain" 8 | Fader1 FXParam 3 "Mix" 9 | Fader1 FXParam 4 "Mode" 10 | Fader4 FXParam 5 "Style" 11 | Fader3 FXParam 6 "Glide" [ 0.0 1.0 ] 12 | Select3 FXParam 6 "Glide" [ 0.0 1.0 ] 13 | Fader2 FXParam 9 "EchoTime" 14 | Fader3 FXParam 10 "Feedback" 15 | Fader6 FXParam 11 "Saturation" 16 | Fader7 FXParam 12 "LowCut" 17 | Fader8 FXParam 13 "HighCut" 18 | Fader5 NoAction 19 | Fader6 NoAction 20 | ZoneEnd 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: 'enhancement' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src/renderer/store/window/index.ts: -------------------------------------------------------------------------------- 1 | // import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 2 | 3 | // export interface WindowState { 4 | // focus: boolean 5 | // } 6 | 7 | // const initialState: WindowState = { 8 | // focus: true, 9 | // }; 10 | 11 | // export const windowSlice = createSlice({ 12 | // initialState: initialState, 13 | // name: 'window', 14 | // reducers: { 15 | // setFocus: (state, action: PayloadAction) => { 16 | // state.focus = action.payload; 17 | // }, 18 | // }, 19 | // }); 20 | 21 | // // Action creators are generated for each case reducer function 22 | // export const { setFocus } = windowSlice.actions; 23 | 24 | // export default windowSlice.reducer; 25 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatGain3(dual).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Gain 3 (Dual) (Blue Cat Audio)" "BlueCat Gain Dual" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "On/Off" [ 0.0 1.0 ] 4 | Fader1 FXParam 2 "Gain L" 5 | Fader2 FXParam 3 "Gain R" 6 | Select2 FXParam 1 "Stereo Mode" [ 0.0 1.0 ] 7 | 8 | / Reset all the others, so the faders will go down 9 | Fader1 NoAction 10 | Fader2 NoAction 11 | Fader3 NoAction 12 | Fader4 NoAction 13 | Fader5 NoAction 14 | Fader6 NoAction 15 | Fader7 NoAction 16 | Fader8 NoAction 17 | Fader3 NoAction 18 | Fader4 NoAction 19 | Fader5 NoAction 20 | Fader6 NoAction 21 | Fader7 NoAction 22 | Fader8 NoAction 23 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_Panning.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_Panning.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // What to say about Panning 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "Panning" 11 | SelectedTrackNavigator 12 | 13 | RotarySmall TrackPan 14 | RotarySmallPush Reaper _XENAKIOS_PANTRACKSCENTER // Xenakios/SWS: Pan selected tracks to center 15 | ScrollLeftSmall NoAction 16 | ScrollRightSmall NoAction 17 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/Button.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | 4 | export const Button = styled.button` 5 | background-color: transparent; 6 | border: 1px solid white; 7 | border-radius: .5rem; 8 | color: var(--default-text); 9 | font-size: 1rem; 10 | padding: .5rem 1rem; 11 | position: relative; 12 | 13 | &::after { 14 | background-color: hsla(177, 100%, 34%, 0.6); 15 | border-radius: .5rem; 16 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 17 | content: ''; 18 | height: 100%; 19 | left: 0; 20 | mix-blend-mode: soft-light; 21 | position: absolute; 22 | top: 0; 23 | width: 100%; 24 | } 25 | 26 | &:disabled { 27 | opacity: 0.5; 28 | } 29 | `; 30 | -------------------------------------------------------------------------------- /src/renderer/hooks/useCsiApi.ts: -------------------------------------------------------------------------------- 1 | // import { Listener } from '../../types'; 2 | // import { setFocus } from '../store/window'; 3 | // import { setIni } from '../store/ini'; 4 | // import { useAppDispatch } from '../store/hooks'; 5 | // import { useEffect } from 'react'; 6 | 7 | export const useCsiApi = () => { 8 | // const dispatch = useAppDispatch(); 9 | 10 | // const setAppFocus: Listener = (_, focus) => dispatch(setFocus(focus)); 11 | 12 | // const getIni = async () => { 13 | // const result = await window.electronAPI.getCsiIni(); 14 | // dispatch(setIni(result)); 15 | // }; 16 | 17 | // useEffect(() => { 18 | // window.electronAPI.appFocus(setAppFocus); 19 | // getIni(); 20 | // }); 21 | 22 | }; 23 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_Home.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_Home.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Home is where all the fun starts 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone Home 11 | LeftShft Shift 12 | RightShft Option 13 | 14 | IncludedZones 15 | "MixManagement" 16 | "Panning" 17 | "NavigatorChannel" 18 | "Navigators" 19 | "Automation" 20 | "Transport" 21 | "Channel" 22 | IncludedZonesEnd 23 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/ValhallaDSP/ValhallaVintageVerb.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: ValhallaVintageVerb (Valhalla DSP, LLC)" 2 | 3 | SelectedTrackNavigator 4 | 5 | 6 | Fader1 FXParam 16 "ReverbMode" 7 | Fader2 FXParam 1 "PreDelay" 8 | Fader3 FXParam 2 "Decay" 9 | Fader4 FXParam 9 "Early Diffusion" 10 | Fader5 FXParam 10 "LateDiffusion" 11 | Fader6 FXParam 3 "Size" 12 | Fader7 FXParam 13 "HighCut" 13 | Fader8 FXParam 14 "LowCut" 14 | 15 | Fader1 FXParam 8 "HighFreq" 16 | Fader2 FXParam 7 "HighShelf" 17 | Fader3 FXParam 6 "BassXover" 18 | Fader4 FXParam 5 "BassMult" 19 | Fader5 FXParam 15 "ColorMode" 20 | Fader6 FXParam 4 "Attack" 21 | Fader7 FXParam 11 "ModRate" 22 | Fader8 FXParam 12 "ModDepth" 23 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/molecules/SidebarNavigation.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import aboutIcon from '../../assets/images/about-icon.svg'; 4 | import homeIcon from '../../assets/images/home-icon.svg'; 5 | import prepareIcon from '../../assets/images/prepare-icon.svg'; 6 | import { Navigation } from '../atoms/Navigation'; 7 | import { NavItem } from '../atoms/NavItem'; 8 | 9 | export const SidebarNavigation = () => { 10 | return ( 11 | 18 | ); 19 | }; 20 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/BabyAudio/Parallel_Aggressor.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Parallel Aggressor (BABY Audio)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 1 "Spank Intensity" 6 | Fader2 FXParam 2 "Spank Level" 7 | Fader3 FXParam 3 "Dry Level" 8 | Fader4 FXParam 4 "Heat Level" 9 | Fader5 FXParam 5 "Heat Intensity" 10 | Fader6 FXParam 6 "Solo" 11 | Fader7 NoAction 12 | Fader8 NoAction 13 | Fader1 FXParam 7 "Punchy Mode" 14 | Fader2 FXParam 8 "Smack Mode" 15 | Fader3 FXParam 9 "Spank SC Filter" 16 | Fader4 FXParam 10 "Spank Mono" 17 | Fader5 FXParam 15 "Extra Hot" 18 | Fader6 FXParam 16 "Heat Tone" 19 | Fader7 FXParam 17 "Heat Hpf" 20 | Fader8 FXParam 18 "Heat Lpf" 21 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatTripleEQ4(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Triple EQ 4 (Mono) (Blue Cat Audio)" "BlueCat Triple EQ Mono" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "ByPass " [ 0.0 1.0 ] 4 | Fader1 FXParam 1 "Gain" 5 | Fader2 FXParam 2 "Frequency" 6 | Fader3 FXParam 3 "Bandwidth" 7 | Fader4 FXParam 4 "Low" 8 | Fader5 FXParam 5 "Mid" 9 | Fader6 FXParam 6 "High" 10 | 11 | / Reset all the others, so the faders will go down 12 | Fader1 NoAction 13 | Fader2 NoAction 14 | Fader3 NoAction 15 | Fader4 NoAction 16 | Fader5 NoAction 17 | Fader6 NoAction 18 | Fader7 NoAction 19 | Fader8 NoAction 20 | Fader7 NoAction 21 | Fader8 NoAction 22 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatTripleEQ(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Triple EQ 4 (Stereo) (Blue Cat Audio)" "BlueCat Triple EQ Stereo" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "ByPass " [ 0.0 1.0 ] 4 | Fader1 FXParam 1 "Gain" 5 | Fader2 FXParam 2 "Frequency" 6 | Fader3 FXParam 3 "Bandwidth" 7 | Fader4 FXParam 4 "Low" 8 | Fader5 FXParam 5 "Mid" 9 | Fader6 FXParam 6 "High" 10 | 11 | / Reset all the others, so the faders will go down 12 | Fader1 NoAction 13 | Fader2 NoAction 14 | Fader3 NoAction 15 | Fader4 NoAction 16 | Fader5 NoAction 17 | Fader6 NoAction 18 | Fader7 NoAction 19 | Fader8 NoAction 20 | Fader7 NoAction 21 | Fader8 NoAction 22 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/assets/images/clipboard-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/utils/log.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | 3 | import { isDev } from './isDev'; 4 | 5 | const info = (file: string, message: string, ...args: any[]) => { 6 | if (isDev()) { 7 | console.log(`${chalk.bgBlue.white(` [ ${file} ] `)} ${message}`, ...args); 8 | } 9 | }; 10 | 11 | const warn = (file: string, message: string, ...args: any[]) => { 12 | if (isDev()) { 13 | console.log(`${chalk.bgYellow.black(` [ ${file} ] `)} ${message}`, ...args); 14 | } 15 | }; 16 | 17 | const error = (file: string, message: string, ...args: any[]) => { 18 | if (isDev()) { 19 | console.log(`${chalk.bgRed.white(` [ ${file} ] `)} ${message}`, ...args); 20 | } 21 | }; 22 | 23 | export const log = { 24 | error, 25 | info, 26 | warn, 27 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Lo-Fi.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR Lo-Fi (AIR Music Technology)" AIR Lo-Fi 2 | SelectedTrackNavigator 3 | Fader1 FXParam 4 "Sample Rate" 4 | Fader2 FXParam 0 "Bit Depth" 5 | Fader3 FXParam 11 "LFO Depth" 6 | Fader4 FXParam 14 "Env Mod Depth" 7 | Fader5 FXParam 1 "Clip" 8 | Fader6 FXParam 3 "Noise" 9 | Fader7 FXParam 2 "Rectify" 10 | Fader8 FXParam 15 "Mix" 11 | Select1 FXParam 5 "Anti-Alias" [ 0.0 1.0 ] 12 | Fader1 FXParam 6 "Pre" 13 | Fader2 FXParam 7 "Post" 14 | Select3 FXParam 8 "LFO Sync" [ 0.0 1.0 ] 15 | Fader3 FXParam 9 "LFO Rate" 16 | Fader4 FXParam 10 "LFO Wave" 17 | Fader5 FXParam 12 "Attack" 18 | Fader6 FXParam 13 "Release" 19 | 20 | ZoneEnd -------------------------------------------------------------------------------- /tools/add-macos-cert.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | KEY_CHAIN=build.keychain 4 | MACOS_CERT_P12_FILE=certificate.p12 5 | 6 | # Recreate the certificate from the secure environment variable 7 | echo $MACOS_CERT_P12 | base64 --decode > $MACOS_CERT_P12_FILE 8 | 9 | #create a keychain 10 | security create-keychain -p actions $KEY_CHAIN 11 | 12 | # Make the keychain the default so identities are found 13 | security default-keychain -s $KEY_CHAIN 14 | 15 | # Unlock the keychain 16 | security unlock-keychain -p actions $KEY_CHAIN 17 | 18 | security import $MACOS_CERT_P12_FILE -k $KEY_CHAIN -P $MACOS_CERT_PASSWORD -T /usr/bin/codesign; 19 | 20 | security set-key-partition-list -S apple-tool:,apple: -s -k actions $KEY_CHAIN 21 | 22 | # remove certs 23 | rm -fr *.p12 -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_Reverb3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_Reverb_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader8 FXParam 0 "Dry/wet" 6 | Select8 FXParam 0 "Dry/wet" [ 1 ] 7 | Fader5 FXParam 1 "Width" 8 | Fader1 FXParam 2 "T60" 9 | Fader3 FXParam 3 "Dampchar" 10 | Fader2 FXParam 4 "Dampfreq" 11 | Fader2 FXParam 5 "Roomsize" 12 | Fader1 FXParam 6 "Roomshpe" 13 | Fader3 FXParam 7 "Diffusn" 14 | Fader4 FXParam 8 "Predelay" 15 | Fader6 FXParam 9 "HP freq" 16 | Fader7 FXParam 10 "LP freq" 17 | Fader6 FXParam 11 "EarlyRef" 18 | Select1 FXParam 12 "Modulate" [ 0 1 ] 19 | FXParam 13 "HQ mode" 20 | FXParam 14 "Bypass" 21 | FXParam 15 "Wet" 22 | Fader4 NoAction 23 | Fader5 NoAction 24 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/Content.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Content = styled.main` 4 | border-radius: .5rem; 5 | margin: 1rem; 6 | padding: 1rem; 7 | position: relative; 8 | 9 | display: grid; 10 | grid-template-rows: 2.5rem 1fr; 11 | &::before { 12 | background-color: hsla(177, 100%, 34%, 0.6); 13 | border-radius: .5rem; 14 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 15 | content: ''; 16 | height: 100%; 17 | mix-blend-mode: soft-light; 18 | position: absolute; 19 | top: 0; 20 | left: 0; 21 | width: 100%; 22 | } 23 | 24 | 25 | img { 26 | border-radius: .5rem; 27 | filter: drop-shadow(0 .25rem .25rem rgba(0, 0, 0, 0.25)); 28 | max-width: 50%; 29 | } 30 | `; 31 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Arturia/TapeMelloFi.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Tape MELLO-FI (Arturia)" "Tape MELLO-FI" 2 | SelectedTrackNavigator 3 | 4 | Select1 FXParam 0 "On/Off" [ 0.0 1.0 ] 5 | ScribbleLine1_1 FXParamNameDisplay 0 "On/Off" 6 | ScribbleLine2_1 FXParamValueDisplay 0 7 | 8 | Fader1 FXParam 1 "Drive" 9 | ScribbleLine3_1 FXParamNameDisplay 1 "Drive" 10 | ScribbleLine4_1 FXParamValueDisplay 1 11 | 12 | Select2 FXParam 2 "Boost" [ 0.0 1.0 ] 13 | ScribbleLine1_2 FXParamNameDisplay 2 "Boost" 14 | ScribbleLine2_2 FXParamValueDisplay 2 15 | 16 | Fader2 FXParam 3 "Tone" 17 | ScribbleLine3_2 FXParamNameDisplay 3 "Tone" 18 | ScribbleLine4_2 FXParamValueDisplay 3 19 | 20 | 21 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatFreeAmp.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Free Amp (Blue Cat Audio)" "Blue Cat Free Amp" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Gain" 7 | Fader2 FXParam 3 "Drive" 8 | Fader3 FXParam 4 "Bass" 9 | Fader4 FXParam 5 "Mid" 10 | Fader5 FXParam 6 "Treble" 11 | Fader6 FXParam 7 "Tone" 12 | Fader7 FXParam 8 "Volume" 13 | Select8 FXParam 2 "Model" [ 0.0 0.5 1.0 ] 14 | 15 | / Rest all the other stuff 16 | Fader1 NoAction 17 | Fader2 NoAction 18 | Fader3 NoAction 19 | Fader4 NoAction 20 | Fader5 NoAction 21 | Fader6 NoAction 22 | Fader7 NoAction 23 | Fader8 NoAction 24 | ZoneEnd 25 | -------------------------------------------------------------------------------- /src/main/api/utils/readSurface.ts: -------------------------------------------------------------------------------- 1 | const v1Regexp = /MidiSurface "(?[a-zA-Z0-9\s]*)"\s*(?[0-9]{1,2})\s*(?[0-9]{1,2})\s*"(?[a-zA-Z0-9]*\.mst)"\s*"(?[a-zA-Z0-9\-\s]*)"\s*(?[0-9]{1,2})\s*[0-9]{1,2}\s*[0-9]{1,2}\s*(?[0-9]{1,2})/; 2 | const v2Regexp = /MidiSurface "(?[a-zA-Z0-9\s]*)"\s*(?[0-9]{1,2})\s*(?[0-9]{1,2})/; 3 | 4 | export const readSurface = >(line: string): T => { 5 | if (line.match(v1Regexp)) { 6 | const { groups } = v1Regexp.exec(line); 7 | return { 8 | ...groups, 9 | } as T; 10 | } 11 | if (line.match(v2Regexp)) { 12 | const { groups } = v2Regexp.exec(line); 13 | return { 14 | ...groups, 15 | } as T; 16 | } 17 | return null; 18 | }; -------------------------------------------------------------------------------- /src/renderer/assets/images/prepare-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatFreqAnalyst2(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's FreqAnalyst 2 (Mono) (Blue Cat Audio)" "Blue Cat FreqAnalyst" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Precision" [ 0.0>1.0 (0.1) ] 7 | Fader2 FXParam 2 "Speed" 8 | Fader3 FXParam 3 "Attack" 9 | Fader4 FXParam 4 "Release" 10 | Fader5 FXParam 5 "Peek Reset" 11 | Fader6 FXParam 6 "Absolute" 12 | Fader7 FXParam 7 "Relative" 13 | 14 | / Rest all the other stuff 15 | Fader1 NoAction 16 | Fader2 NoAction 17 | Fader3 NoAction 18 | Fader4 NoAction 19 | Fader5 NoAction 20 | Fader6 NoAction 21 | Fader7 NoAction 22 | Fader8 NoAction 23 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatFreqAnalyst2(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's FreqAnalyst 2 (Stereo) (Blue Cat Audio)" "Blue Cat FreqAnalyst" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Precision" [ 0.0>1.0 (0.1) ] 7 | Fader2 FXParam 2 "Speed" 8 | Fader3 FXParam 3 "Attack" 9 | Fader4 FXParam 4 "Release" 10 | Fader5 FXParam 5 "Peek Reset" 11 | Fader6 FXParam 6 "Absolute" 12 | Fader7 FXParam 7 "Relative" 13 | 14 | / Rest all the other stuff 15 | Fader1 NoAction 16 | Fader2 NoAction 17 | Fader3 NoAction 18 | Fader4 NoAction 19 | Fader5 NoAction 20 | Fader6 NoAction 21 | Fader7 NoAction 22 | Fader8 NoAction 23 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatPhaser3(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Phaser 3 (Mono) (Blue Cat Audio)" "Blue Cat Phaser" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Gain" 7 | Fader2 FXParam 5 "Stages" 8 | Fader3 FXParam 6 "Depth" 9 | Fader4 FXParam 7 "Rate" 10 | Fader6 FXParam 2 "Dry" 11 | Fader7 FXParam 3 "Feed Fwd" 12 | Fader8 FXParam 4 "FeedBack" 13 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 14 | 15 | / Rest all the other stuff 16 | Fader1 NoAction 17 | Fader2 NoAction 18 | Fader3 NoAction 19 | Fader4 NoAction 20 | Fader5 NoAction 21 | Fader6 NoAction 22 | Fader7 NoAction 23 | Fader8 NoAction 24 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AIR/AIR_Stereo_width.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: AIR StereoWidth (AIR Music Technology)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Mode" 6 | Fader1 FXParam 1 "Width" 7 | Fader2 FXParam 2 "Low" 8 | Select2 FXParam 2 "Low" [ 0.5 ] 9 | Fader2 FXParam 2 "Low" 10 | Fader3 FXParam 3 "Mid" 11 | Select3 FXParam 3 "Mid" [ 0.5 ] 12 | Fader3 FXParam 3 "Mid" 13 | Fader4 FXParam 4 "High" 14 | Select4 FXParam 4 "High" [ 0.5 ] 15 | Fader4 FXParam 4 "High" 16 | Fader5 FXParam 5 "Delay" 17 | Fader5 FXParam 5 "Delay" 18 | Fader7 FXParam 6 "Level Trim" 19 | Select7 FXParam 6 "Level Trim" [ 0.5 ] 20 | Fader8 FXParam 7 "Pan Trim" 21 | Select8 FXParam 7 "Pan Trim" [ 0.5 ] 22 | Fader6 NoAction 23 | Fader7 NoAction 24 | Fader8 NoAction 25 | ZoneEnd -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: ['https://www.buymeacoffee.com/navelpluisje'] 14 | -------------------------------------------------------------------------------- /src/types/reasonus.d.ts: -------------------------------------------------------------------------------- 1 | export declare global { 2 | interface Window { 3 | reasonusAPI: { 4 | selectFolder: () => Promise; 5 | getReaperPath: () => Promise; 6 | installActions: (midiInput: string, midiOutput: string) => Promise; 7 | installReaSonus: () => Promise; 8 | goToExternal: (url: string) => Promise 9 | getOS: () => Promise 10 | setReaperPath: (path: string) => Promise, 11 | copyToClipboard: (text: string) => Promise 12 | downloadFiles: () => Promise 13 | getInitialReaperPath: () => Promise 14 | getMidiDevices: () => Promise 15 | getVersionNumber: (version: string) => Promise 16 | getDevice: () => 'FP2' | 'FP8' | 'FP16' 17 | }; 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatPhaser3(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Phaser 3 (Stereo) (Blue Cat Audio)" "Blue Cat Phaser" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | Fader1 FXParam 1 "Gain" 7 | Fader2 FXParam 5 "Stages" 8 | Fader3 FXParam 6 "Depth" 9 | Fader4 FXParam 7 "Rate" 10 | Fader5 FXParam 9 "Spread" 11 | Fader6 FXParam 2 "Dry" 12 | Fader7 FXParam 3 "Wet" 13 | Fader8 FXParam 4 "FeedBack" 14 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 15 | 16 | / Rest all the other stuff 17 | Fader1 NoAction 18 | Fader2 NoAction 19 | Fader3 NoAction 20 | Fader4 NoAction 21 | Fader5 NoAction 22 | Fader6 NoAction 23 | Fader7 NoAction 24 | Fader8 NoAction 25 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_MixManagement.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_MixManagement.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Decide the tracks you want to see 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "MixManagement" 11 | AudioBtn Reaper %dummyAction% { 20 20 20 20 20 20 } 12 | AudioBtn GoZone "TracksByName" 13 | BusBtn Reaper _RS41911fd95421e45fbd0728187a326cdffffea934 { 20 20 20 20 20 20 } // Script: Show All Top Level Tracks 14 | AllBtn Reaper _RS49ae0e927bf59f8dd797f91fdc19daa0bb1dc022 { 20 20 20 20 20 20 } // Script: Show All Tracks 15 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/store/settings/index.ts: -------------------------------------------------------------------------------- 1 | import { createSlice, PayloadAction } from '@reduxjs/toolkit'; 2 | 3 | import { fetchReaperPath } from './actions'; 4 | 5 | export interface SettingsState { 6 | reaperPath: string | null, 7 | } 8 | 9 | const initialState: SettingsState = { 10 | reaperPath: null, 11 | }; 12 | 13 | export const settingsSlice = createSlice({ 14 | extraReducers: (builder) => { 15 | builder.addCase(fetchReaperPath.fulfilled, (state, action) => { 16 | state.reaperPath = action.payload; 17 | }); 18 | }, 19 | initialState: initialState, 20 | name: 'settings', 21 | reducers: { 22 | setReaperPath(state, action: PayloadAction) { 23 | state.reaperPath = action.payload; 24 | }, 25 | }, 26 | }); 27 | 28 | export const { setReaperPath } = settingsSlice.actions; 29 | 30 | export default settingsSlice.reducer; 31 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Dyna_Mu.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Dyna-Mu (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Input L" 6 | Fader2 FXParam 1 "Input R" 7 | Fader1 FXParam 2 "Threshold L" 8 | Fader2 FXParam 3 "Threshold R" 9 | Fader3 FXParam 4 "Attack L" 10 | Fader4 FXParam 5 "Attack R" 11 | Fader5 FXParam 6 "Release L" 12 | Fader6 FXParam 7 "Release R" 13 | Fader7 FXParam 8 "Output L" 14 | Fader8 FXParam 9 "Output R" 15 | Select3 FXParam 10 "Hard L" [ 0 1 ] 16 | Fader3 FXParam 10 "Hard L" 17 | Select3 FXParam 11 "Hard R" [ 0 1 ] 18 | Fader3 FXParam 11 "Hard R" 19 | Select4 FXParam 12 "HP Side Ch L" [ 0 1 ] 20 | Fader4 FXParam 12 "HP Side Ch L" 21 | Select4 FXParam 13 "HP Side Ch R" [ 0 1 ] 22 | Fader4 FXParam 12 "HP Side Ch L" 23 | Fader7 NoAction 24 | Fader8 NoAction 25 | 26 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Dyna_Mu.vst.vst3.zon: -------------------------------------------------------------------------------- 1 | 2 | Zone "VST3: TR5 Dyna-Mu (IK Multimedia)" 3 | 4 | SelectedTrackNavigator 5 | 6 | Fader1 FXParam 0 "Input L" 7 | Fader2 FXParam 1 "Input R" 8 | Fader1 FXParam 2 "Threshold L" 9 | Fader2 FXParam 3 "Threshold R" 10 | Fader3 FXParam 4 "Attack L" 11 | Fader4 FXParam 5 "Attack R" 12 | Fader5 FXParam 6 "Release L" 13 | Fader6 FXParam 7 "Release R" 14 | Fader7 FXParam 8 "Output L" 15 | Fader8 FXParam 9 "Output R" 16 | Select3 FXParam 10 "Hard L" [ 0 1 ] 17 | Fader3 FXParam 10 "Hard L" 18 | Select3 FXParam 11 "Hard R" [ 0 1 ] 19 | Fader3 FXParam 11 "Hard R" 20 | Select4 FXParam 12 "HP Side Ch L" [ 0 1 ] 21 | Fader4 FXParam 12 "HP Side Ch L" 22 | Select4 FXParam 13 "HP Side Ch R" [ 0 1 ] 23 | Fader4 FXParam 12 "HP Side Ch L" 24 | Fader7 NoAction 25 | Fader8 NoAction 26 | 27 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/PluginAlliance/Unfiltered_Audio_Byome.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Unfiltered Audio Byome (Plugin Alliance)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Macro 1" 6 | Fader2 FXParam 1 "Macro 2" 7 | Fader3 FXParam 2 "Macro 3" 8 | Fader4 FXParam 3 "Macro 4" 9 | Fader5 FXParam 4 "Macro 5" 10 | Fader6 FXParam 5 "Macro 6" 11 | Fader7 FXParam 6 "Macro 7" 12 | Fader8 FXParam 7 "Macro 8" 13 | Shift+Fader1 FXParam 8 "In Gain" 14 | Select1 FXParam 8 "In Gain" [ 0.5 ] 15 | Shift+Fader2 FXParam 9 "Sample Rate" 16 | Select2 FXParam 9 "Sample Rate" [ 1 ] 17 | Shift+Fader3 FXParam 10 "AGC" 18 | Select3 FXParam 10 "AGC" [ 0 ] 19 | Shift+Fader4 FXParam 11 "Dry/Wet" 20 | Select4 FXParam 11 "Dry/Wet" [ 1 ] 21 | Shift+Fader5 FXParam 12 "Out Gain" 22 | Select5 FXParam 12 "Out Gain" [ 0.5 ] 23 | 24 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_Ferox3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_Ferox_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader1 FXParam 0 "Drive" 6 | Fader3 FXParam 1 "FB level" 7 | Fader4 FXParam 2 "FB delay" 8 | Fader6 FXParam 3 "Compress" 9 | Fader7 FXParam 4 "Release" 10 | Fader1 FXParam 5 "HighPass" 11 | Fader2 FXParam 6 "LowPass" 12 | Select1 FXParam 7 "Filter" [ 0 1 ] 13 | Fader3 FXParam 8 "Saturate" 14 | Fader4 FXParam 9 "Hystrsis" 15 | Select4 FXParam 10 "Ovrsmpl" [ 0 1 ] 16 | Fader8 FXParam 11 "Outgain" 17 | Select8 FXParam 12 "Power" [ 0 1 ] 18 | Select3 FXParam 13 "Mode" [ 0 1 ] 19 | Select2 FXParam 14 "Mono" [ 0 1 ] 20 | FXParam 15 "Bypass" [ 0 1 ] 21 | FXParam 16 "Wet" 22 | Fader5 NoAction 23 | Fader8 NoAction 24 | Fader5 NoAction 25 | Fader6 NoAction 26 | Fader7 NoAction 27 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_Instrument_Zones/Cockos/ReaSynth.vsti.zon: -------------------------------------------------------------------------------- 1 | Zone "VSTi: ReaSynth (Cockos)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Rotary1 FXParam 0 "Attack" 6 | Rotary4 FXParam 1 "Release" 7 | Fader4 FXParam 2 "Square" 8 | Fader6 FXParam 3 "Saw" 9 | Fader7 FXParam 4 "Triangle" 10 | Rotary8 FXParam 5 "Volume" 11 | RotaryPush8 FXParam 5 "Volume" [ 0.75 ] 12 | Rotary2 FXParam 6 "Decay" 13 | Fader8 FXParam 7 "Extrasin" 14 | Rotary7 FXParam 8 "sine2tun" 15 | RotaryPush7 FXParam 8 "sine2tun" [ 0.5 ] 16 | Rotary3 FXParam 9 "Sustain" 17 | Fader5 FXParam 10 "Pulse Wi" 18 | Rotary6 FXParam 11 "detune" 19 | RotaryPush6 FXParam 11 "detune" [ 0.5 ] 20 | FXParam 12 "legacytu" 21 | Rotary5 FXParam 13 "Portamen" 22 | RotaryPush5 FXParam 13 "Portamen" [ 0 ] 23 | Fader1 NoAction 24 | Fader2 NoAction 25 | Fader3 NoAction 26 | ZoneEnd 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: 'bug' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Operating System** 21 | - [] Windows 10 22 | - [] Max OS 23 | 24 | **Versions** 25 | Versions can be found on the About page of the installer 26 | - Reasonus Installer: ... 27 | - Reasonus Resources: ... 28 | - CSI (ReaSonus): ... 29 | 30 | **Expected behavior** 31 | A clear and concise description of what you expected to happen. 32 | 33 | **Screenshots** 34 | If applicable, add screenshots to help explain your problem. 35 | 36 | **Additional context** 37 | Add any other context about the problem here. 38 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_Transport.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_Transport.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Handle your transport buttons 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "Transport" 11 | Loop CycleTimeline 12 | Rewind Reaper "40084" // Transport: Rewind a little bit 13 | Hold+Rewind Reaper "40042" // Go to the project start 14 | FastForward Reaper "40085" // Transport: Fast forward a little bit 15 | Hold+FastForward Reaper "40043" // Go to the project end 16 | Play Play 17 | Stop Stop 18 | Record Record 19 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_Valves.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Valves (AudioThing)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Select1 FXParam 0 "Valve Enable" [ 0 1 ] 6 | Select2 FXParam 1 "Valve Mode" [ 0 1 ] 7 | Fader1 FXParam 2 "Valve Drive" 8 | Fader1 FXParam 3 "Valve Bias" 9 | Fader1 FXParam 4 "Valve Tone" [ 0.5 1 ] 10 | Select6 FXParam 5 "Cabinet EQ Enable" [ 0 1 ] 11 | Fader6 FXParam 6 "Cabinet EQ Type" 12 | Fader7 FXParam 7 "Cabinet EQ Bass" 13 | Fader8 FXParam 8 "Cabinet EQ Treble" 14 | Select3 FXParam 9 "Filter Enable" [ 0 1 ] 15 | Select4 FXParam 10 "Filter Mode" [ 0 1 ] 16 | Fader3 FXParam 11 "Filter Type" 17 | Fader3 FXParam 11 "Filter Type" 18 | Fader4 FXParam 12 "Filter Cutoff" 19 | Fader5 FXParam 13 "Filter Resonance" 20 | Fader6 FXParam 14 "Input" 21 | Fader8 FXParam 15 "Output" 22 | Fader7 FXParam 16 "Mix" 23 | Select8 FXParam 17 "Soft Clip" [ 0 1 ] 24 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/molecules/VersionItem.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | 3 | import { Version, VersionName, VersionNumber } from '../atoms/Version'; 4 | 5 | interface Props { 6 | version: 'reasonus' | 'csi' | 'installer'; 7 | } 8 | 9 | const labels = { 10 | csi: 'CSI', 11 | installer: 'ReaSonus Installer', 12 | reasonus: 'Reasonus Resources', 13 | }; 14 | 15 | export const VersionItem: React.FC = ({version}) => { 16 | const [versionNumber, setVersionNumber] = useState(''); 17 | 18 | useEffect(() => { 19 | const getVersionNumber = async () => { 20 | const number = await window.reasonusAPI.getVersionNumber(version); 21 | setVersionNumber(number); 22 | }; 23 | getVersionNumber(); 24 | }, [version]); 25 | 26 | return ( 27 | 28 | {labels[version]} 29 | {versionNumber} 30 | 31 | ); 32 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_White_Channel.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 White Channel (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader7 FXParam 6 "HP Freq" 6 | Select7 FXParam 2 "FLT In" [ 0.0 1.0 ] 7 | Fader8 FXParam 7 "LP Freq" 8 | Fader1 FXParam 16 "LF Gain" 9 | Shift+Fader1 FXParam 17 "LF Freq" 10 | Fader2 FXParam 13 "LMF Gain" 11 | Fader3 FXParam 14 "LMF Freq" 12 | Shift+Fader3 FXParam 15 "LMF Q 13 | Fader4 FXParam 10 "HMF Gain" 14 | Fader5 FXParam 11 "HMF Freq" 15 | Shift+Fader5 FXParam 12 "HMF Q" 16 | Fader6 FXParam 8 "HF Gain" 17 | Shift+Fader6 FXParam 9 "HF Freq" 18 | 19 | Fader7 FXParam 21 "In Gain" 20 | Fader8 FXParam 22 "Out Gain" 21 | Fader4 FXParam 23 "Threshold (Comp)" 22 | Fader6 FXParam 24 "Ratio" 23 | Fader5 FXParam 25 "Release (Comp)" 24 | Fader1 FXParam 28 "Threshold (Exp)" 25 | Fader3 FXParam 29 "Hold" 26 | Fader2 FXParam 30 "Range" 27 | 28 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_White_Channel.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 White Channel (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader7 FXParam 6 "HP Freq" 6 | Select7 FXParam 2 "FLT In" [ 0.0 1.0 ] 7 | Fader8 FXParam 7 "LP Freq" 8 | Fader1 FXParam 16 "LF Gain" 9 | Shift+Fader1 FXParam 17 "LF Freq" 10 | Fader2 FXParam 13 "LMF Gain" 11 | Fader3 FXParam 14 "LMF Freq" 12 | Shift+Fader3 FXParam 15 "LMF Q 13 | Fader4 FXParam 10 "HMF Gain" 14 | Fader5 FXParam 11 "HMF Freq" 15 | Shift+Fader5 FXParam 12 "HMF Q" 16 | Fader6 FXParam 8 "HF Gain" 17 | Shift+Fader6 FXParam 9 "HF Freq" 18 | 19 | Fader7 FXParam 21 "In Gain" 20 | Fader8 FXParam 22 "Out Gain" 21 | Fader4 FXParam 23 "Threshold (Comp)" 22 | Fader6 FXParam 24 "Ratio" 23 | Fader5 FXParam 25 "Release (Comp)" 24 | Fader1 FXParam 28 "Threshold (Exp)" 25 | Fader3 FXParam 29 "Hold" 26 | Fader2 FXParam 30 "Range" 27 | 28 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_British_Channel.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 British Channel (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader7 FXParam 6 "HP Freq" 6 | Select7 FXParam 2 "FLT In" [ 0.0 1.0 ] 7 | Fader8 FXParam 7 "LP Freq" 8 | Fader1 FXParam 16 "LF Gain" 9 | Shift+Fader1 FXParam 17 "LF Freq" 10 | Fader2 FXParam 13 "LMF Gain" 11 | Fader3 FXParam 14 "LMF Freq" 12 | Shift+Fader3 FXParam 15 "LMF Q 13 | Fader4 FXParam 10 "HMF Gain" 14 | Fader5 FXParam 11 "HMF Freq" 15 | Shift+Fader5 FXParam 12 "HMF Q" 16 | Fader6 FXParam 8 "HF Gain" 17 | Shift+Fader6 FXParam 9 "HF Freq" 18 | 19 | Fader7 FXParam 21 "In Gain" 20 | Fader8 FXParam 22 "Out Gain" 21 | Fader4 FXParam 23 "Threshold (Comp)" 22 | Fader6 FXParam 24 "Ratio" 23 | Fader5 FXParam 25 "Release (Comp)" 24 | Fader1 FXParam 28 "Threshold (Exp)" 25 | Fader3 FXParam 29 "Range" 26 | Fader2 FXParam 30 "Release (Exp)" 27 | 28 | ZoneEnd -------------------------------------------------------------------------------- /tools/create-icons.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | input_filepath="../assets/app-icon.png" 4 | output_iconset_name="../assets/app-icon.iconset" 5 | 6 | mkdir $output_iconset_name 7 | 8 | sips -z 16 16 $input_filepath --out "${output_iconset_name}/icon_16x16.png" 9 | sips -z 32 32 $input_filepath --out "${output_iconset_name}/icon_16x16@2x.png" 10 | sips -z 32 32 $input_filepath --out "${output_iconset_name}/icon_32x32.png" 11 | sips -z 64 64 $input_filepath --out "${output_iconset_name}/icon_32x32@2x.png" 12 | sips -z 128 128 $input_filepath --out "${output_iconset_name}/icon_128x128.png" 13 | sips -z 256 256 $input_filepath --out "${output_iconset_name}/icon_128x128@2x.png" 14 | sips -z 256 256 $input_filepath --out "${output_iconset_name}/icon_256x256.png" 15 | sips -z 512 512 $input_filepath --out "${output_iconset_name}/icon_256x256@2x.png" 16 | sips -z 512 512 $input_filepath --out "${output_iconset_name}/icon_512x512.png" 17 | 18 | iconutil -c icns $output_iconset_name -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_British_Channel.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 British Channel (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader7 FXParam 6 "HP Freq" 6 | Select7 FXParam 2 "FLT In" [ 0.0 1.0 ] 7 | Fader8 FXParam 7 "LP Freq" 8 | Fader1 FXParam 16 "LF Gain" 9 | Shift+Fader1 FXParam 17 "LF Freq" 10 | Fader2 FXParam 13 "LMF Gain" 11 | Fader3 FXParam 14 "LMF Freq" 12 | Shift+Fader3 FXParam 15 "LMF Q 13 | Fader4 FXParam 10 "HMF Gain" 14 | Fader5 FXParam 11 "HMF Freq" 15 | Shift+Fader5 FXParam 12 "HMF Q" 16 | Fader6 FXParam 8 "HF Gain" 17 | Shift+Fader6 FXParam 9 "HF Freq" 18 | 19 | Fader7 FXParam 21 "In Gain" 20 | Fader8 FXParam 22 "Out Gain" 21 | Fader4 FXParam 23 "Threshold (Comp)" 22 | Fader6 FXParam 24 "Ratio" 23 | Fader5 FXParam 25 "Release (Comp)" 24 | Fader1 FXParam 28 "Threshold (Exp)" 25 | Fader3 FXParam 29 "Range" 26 | Fader2 FXParam 30 "Release (Exp)" 27 | 28 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Toneboosters/TB_ReelBus3.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TB_ReelBus_v3 (ToneBoosters)" 2 | 3 | SelectedTrackNavigator 4 | 5 | Fader2 FXParam 0 "Reclevel" 6 | Select8 FXParam 1 "AutoMkup" [ 0 1 ] 7 | Fader4 FXParam 2 "HissLvl" 8 | Fader5 FXParam 3 "AspNoise" 9 | Fader3 FXParam 4 "TapeSpec" 10 | Fader4 FXParam 5 "Saturate" 11 | Fader1 FXParam 6 "Wow&Flut" 12 | Fader3 FXParam 7 "CircClip" 13 | Fader1 FXParam 8 "Device" 14 | Fader2 FXParam 9 "Overbias" 15 | Select4 FXParam 10 "Hiss-30" [ 0 1 ] 16 | Select5 FXParam 11 "AspN-30" [ 0 1 ] 17 | Fader8 FXParam 12 "OutGain" 18 | Select1 FXParam 13 "Mono" [ 0 1 ] 19 | Select7 FXParam 14 "PreEmph" [ 0 1 ] 20 | Fader7 FXParam 15 "MidSide" 21 | Fader8 FXParam 16 "LowHigh" 22 | FXParam 17 "Legacy" 23 | FXParam 18 "Bypass" 24 | FXParam 19 "Bypass" 25 | FXParam 20 "Wet" 26 | Fader5 NoAction 27 | Fader6 NoAction 28 | Fader7 NoAction 29 | 30 | ZoneEnd -------------------------------------------------------------------------------- /webpack/webpack.rules.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | // Add support for native node modules 3 | { 4 | // We're specifying native_modules in the test because the asset relocator loader generates a 5 | // "fake" .node file which is really a cjs file. 6 | test: /native_modules\/.+\.node$/, 7 | use: 'node-loader', 8 | }, 9 | { 10 | parser: { amd: false }, 11 | test: /\.(m?js|node)$/, 12 | use: { 13 | loader: '@vercel/webpack-asset-relocator-loader', 14 | options: { 15 | outputAssetBase: 'native_modules', 16 | }, 17 | }, 18 | }, 19 | { 20 | exclude: /(node_modules|\.webpack)/, 21 | test: /\.tsx?$/, 22 | use: { 23 | loader: 'ts-loader', 24 | options: { 25 | transpileOnly: true, 26 | }, 27 | }, 28 | }, 29 | { 30 | test: /\.svg/, 31 | type: 'asset/resource', 32 | }, 33 | { 34 | test: /\.png/, 35 | type: 'asset/resource', 36 | }, 37 | { 38 | test: /\.woff2/, 39 | type: 'asset/resource', 40 | }, 41 | ]; 42 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_Instrument_Zones/AIR/AIR_Xpand!2.vsti.zon: -------------------------------------------------------------------------------- 1 | Zone "VSTi: Xpand!2 (AIR Music Technology)" 2 | /Smart knobs mapped to first 5 faders (no fine pitch). FX Send 1, 2 and A-Part Volume on last 3 faders 3 | /Part A knobs mapped to first 6 knobs 4 | 5 | SelectedTrackNavigator 6 | 7 | Fader1 FXParam 0 "Attack" 8 | Fader2 FXParam 1 "Decay" 9 | Fader3 FXParam 2 "Release" 10 | Fader4 FXParam 3 "Cutoff" 11 | Fader5 FXParam 4 "Env Depth" 12 | Fader6 FXParam 16 "Part A FX1 Send" 13 | Fader7 FXParam 17 "Part A FX2 Send" 14 | Fader8 FXParam 13 "Part A Level" 15 | Rotary1 FXParam 7 "Part A Edit 1" 16 | Rotary2 FXParam 8 "Part A Edit 2" 17 | Rotary3 FXParam 9 "Part A Edit 3" 18 | Rotary4 FXParam 10 "Part A Edit 4" 19 | Rotary5 FXParam 11 "Part A Edit 5" 20 | Rotary6 FXParam 12 "Part A Edit 6" 21 | Rotary7 FXParam 14 "Part A Pan" 22 | RotaryPush7 FXParam 14 "Part A Pan" [ 0.5 ] 23 | Rotary8 FXParam 6 "Master Level" 24 | RotaryPush8 FXParam 6 "Master Level" [ 0.7 ] 25 | 26 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_Instrument_Zones/Collab/CollaB3.vsti.zon: -------------------------------------------------------------------------------- 1 | Zone "VSTi: CollaB3 (Collab)" CollaB3 2 | SelectedTrackNavigator 3 | 4 | Rotary1 FXParam 0 "Volume" 5 | RotaryPush2 FXParam 1 "Perc on/off" [ 0.0 1.0 ] 6 | RotaryPush3 FXParam 2 "Perc 2/3" [ 0.0 1.0 ] 7 | Rotary4 FXParam 3 "Leakage" 8 | RotaryPush4 FXParam 4 "Rotary" [ 0.0 0.5 1.0 ] 9 | RotaryPush5 FXParam 5 "Chorus" [ 0.0 1.0 ] 10 | 11 | Fader1 FXParam 6 "Drawbar 16" 12 | Fader2 FXParam 7 "Drawbar 8" 13 | Fader3 FXParam 8 "Drawbar 5 1/3" 14 | Fader4 FXParam 9 "Drawbar 4" 15 | Fader5 FXParam 10 "Drawbar 2 2/3" 16 | Fader6 FXParam 11 "Drawbar 2" 17 | Fader7 FXParam 12 "Drawbar 1 3/6" 18 | Fader8 FXParam 13 "Drawbar 1 1/3" 19 | Option+Fader8 FXParam 14 "Drawbar 1" 20 | 21 | / Rest all the other stuff 22 | Rotary5 NoAction 23 | Rotary6 NoAction 24 | Rotary7 NoAction 25 | Rotary8 NoAction 26 | ZoneEnd 27 | 28 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatTripleEQ4(dual).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Triple EQ 4 (Dual) (Blue Cat Audio)" "BlueCat Triple EQ Dual" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 4 | Fader1 FXParam 1 "Gain" 5 | Fader2 FXParam 2 "Frequency" 6 | Fader3 FXParam 3 "Bandwidth" 7 | Fader4 FXParam 4 "Low" 8 | Fader5 FXParam 5 "Mid" 9 | Fader6 FXParam 6 "High" 10 | Option+Fader1 FXParam 7 "Gain" 11 | Option+Fader2 FXParam 8 "Frequency" 12 | Option+Fader3 FXParam 9 "Bandwidth" 13 | Option+Fader4 FXParam 10 "Low" 14 | Option+Fader5 FXParam 11 "Mid" 15 | Option+Fader6 FXParam 12 "High" 16 | 17 | / Reset all the others, so the faders will go down 18 | Fader1 NoAction 19 | Fader2 NoAction 20 | Fader3 NoAction 21 | Fader4 NoAction 22 | Fader5 NoAction 23 | Fader6 NoAction 24 | Fader7 NoAction 25 | Fader8 NoAction 26 | Fader7 NoAction 27 | Fader8 NoAction 28 | ZoneEnd -------------------------------------------------------------------------------- /src/preload/index.ts: -------------------------------------------------------------------------------- 1 | import {contextBridge, ipcRenderer} from 'electron'; 2 | 3 | contextBridge.exposeInMainWorld('reasonusAPI', { 4 | downloadFiles: () => ipcRenderer.invoke('global:downloadFiles' ), 5 | getDevice: () => ipcRenderer.invoke('settings:getDevice'), 6 | getInitialReaperPath: () => ipcRenderer.invoke('global:getInitialReaperPath'), 7 | getMidiDevices: () => ipcRenderer.invoke('reasonus:getMidiDevices'), 8 | getOS: () => ipcRenderer.invoke('global:getOS'), 9 | getReaperPath: () => ipcRenderer.invoke('settings:getReaperPath'), 10 | getVersionNumber: (version: string) => ipcRenderer.invoke('settings:getVersionNumber', version), 11 | goToExternal: (url: string) => ipcRenderer.invoke('navigate:goTo', url), 12 | installActions: (midiInput: string, midiOutpput: string) => ipcRenderer.invoke('reasonus:installActions', midiInput, midiOutpput), 13 | installReaSonus: () => ipcRenderer.invoke('reasonus:install'), 14 | selectFolder: () => ipcRenderer.invoke('dialog:openDirectory'), 15 | setReaperPath: (path: string) => ipcRenderer.invoke('settings:setReaperPath', path), 16 | }); -------------------------------------------------------------------------------- /src/main/api/utils/createSciIniContent.ts: -------------------------------------------------------------------------------- 1 | import { Assignment, IniData, Page, Surface } from './readIniData'; 2 | 3 | const createAssignmentLine = (assignment: Assignment) => { 4 | return `\t"${assignment.name}" ${assignment.nbChannels} ${assignment.offset} "${assignment.surface}" "${assignment.zones}" "${assignment.effects}"\n`; 5 | }; 6 | 7 | const createPageLine = (page: Page) => { 8 | return `Page "${page.name}" ${page.options.join(' ')}\n`; 9 | }; 10 | 11 | const createSurfaceLine = (surface: Surface) => { 12 | return `MidiSurface "${surface.deviceName}" ${surface.portIn} ${surface.portOut}\n`; 13 | }; 14 | 15 | export const createSciIniContent = (iniData: IniData) => { 16 | let fileData = 'Version 3.0\n\n'; 17 | for (const surface of iniData.surfaces) { 18 | fileData += createSurfaceLine(surface); 19 | } 20 | fileData += '\n'; 21 | 22 | for (const page of iniData.pages) { 23 | fileData += createPageLine(page); 24 | 25 | for (const assignment of page.assignments) { 26 | fileData += createAssignmentLine(assignment); 27 | } 28 | fileData += '\n'; 29 | } 30 | 31 | return fileData; 32 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Navelpluisje 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /webpack/webpack.main.config.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | const path = require('path'); 3 | const webpack = require('webpack'); 4 | require('dotenv').config(); 5 | 6 | module.exports = { 7 | /** 8 | * This is the main entry point for your application, it's the first file 9 | * that runs in the main process. 10 | */ 11 | entry: { 12 | index: './src/main/index.ts', 13 | preload: './src/preload/index.ts', 14 | }, 15 | // Put your normal webpack config below here 16 | module: { 17 | rules: require('./webpack.rules.js'), 18 | }, 19 | output: { 20 | filename: '[name].js', 21 | libraryTarget: 'commonjs2', 22 | path: path.resolve(__dirname, '../.webpack', 'main'), 23 | }, 24 | plugins: [ 25 | new webpack.EnvironmentPlugin({ 26 | __GITHUB_AUTH_TOKEN__: process.env.GH_API_TOKEN, 27 | __RESOURCES__: 28 | process.env.VERSION.indexOf('-') > 0 || process.env.ELECTRON_IS_DEVS === 'true' 29 | ? 'v0.1.0' 30 | : 'latest', 31 | }), 32 | ], 33 | resolve: { 34 | extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'], 35 | }, 36 | }; 37 | -------------------------------------------------------------------------------- /src/main/api/utils/removeWhenInUse.ts: -------------------------------------------------------------------------------- 1 | import { IniData } from './readIniData'; 2 | 3 | export const removeWhenInUse = (iniData: IniData, portIn: string, portOut: string) => { 4 | let inUseIndex = -1; 5 | let inUsePage = -1; 6 | let inUseAssignment = -1; 7 | let inUseName = ''; 8 | 9 | iniData.surfaces.forEach((surface, index) => { 10 | if (inUseIndex === -1 && portIn === surface.portIn && portOut === surface.portOut) { 11 | inUseIndex = index; 12 | inUseName = surface.deviceName; 13 | } 14 | }); 15 | 16 | if (inUseIndex > -1) { 17 | iniData.surfaces.splice(inUseIndex, 0); 18 | iniData.pages.forEach((page, index) => { 19 | page.assignments.forEach((assignment, id) => { 20 | if (inUseName === assignment.name) { 21 | inUseAssignment = id; 22 | } 23 | }); 24 | if (inUseAssignment > -1) { 25 | if (page.assignments.length > 1) { 26 | page.assignments.splice(inUseAssignment, 0); 27 | } 28 | inUsePage = index; 29 | } 30 | }); 31 | if (inUsePage > -1) { 32 | iniData.pages.splice(inUsePage, 0); 33 | } 34 | } 35 | 36 | return iniData; 37 | }; -------------------------------------------------------------------------------- /src/renderer/styles/GlobalStyle.tsx: -------------------------------------------------------------------------------- 1 | import { createGlobalStyle } from 'styled-components'; 2 | 3 | import background from '../assets/images/background.svg'; 4 | import {fonts} from './fonts'; 5 | 6 | export const GlobalStyle = createGlobalStyle` 7 | ${fonts}; 8 | 9 | :root { 10 | --default-text: #fff; 11 | --alternate-text: #333; 12 | --primary-color: #00529C; 13 | --secondary-color: #00ADA4; 14 | } 15 | 16 | body { 17 | background-image: url('${background}'); 18 | background-position: center; 19 | background-size: cover; 20 | font-weight: 300; 21 | height: 100vh; 22 | margin: 0; 23 | padding: 0; 24 | background-color: var(--secondary-color); 25 | } 26 | 27 | * { 28 | color: var(--default-text); 29 | font-size: 1rem; 30 | line-height: 1.4; 31 | text-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 32 | 33 | &:not(code):not(pre) { 34 | font-family: 'Lato', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; 35 | } 36 | } 37 | 38 | h2 { 39 | font-size: 1.5rem; 40 | font-weight: 300; 41 | } 42 | 43 | li { 44 | margin-bottom: .5rem; 45 | } 46 | 47 | #app { 48 | height: 100%; 49 | width: 100%; 50 | } 51 | 52 | `; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Klanghelm/VUMTDeluxe.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: VUMTdeluxe (Klanghelm)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | 6 | Select1 FXParam 0 "TrimL" [ 0.5 ] 7 | Fader1 FXParam 0 "TrimL" 8 | Select2 FXParam 1 "TrimR" [ 0.5 ] 9 | Fader2 FXParam 1 "TrimR" 10 | FXParam 2 "TrimMid" 11 | FXParam 3 "TrimSide" 12 | FXParam 4 "Link" 13 | FXParam 5 "Monitor" 14 | FXParam 6 "PolarityL" 15 | FXParam 7 "PolarityR" 16 | FXParam 8 "MuteL" 17 | FXParam 9 "MuteR" 18 | Select3 FXParam 10 "FilterOn" [ 0 1 ] 19 | Shift+Fader3 FXParam 11 "FilterHPFtype" 20 | Fader3 FXParam 12 "FilterHPF" 21 | Shift+Fader4 FXParam 13 "FilterLPFtype" 22 | Fader4 FXParam 14 "FilterLPF" 23 | Select5 FXParam 15 "DynEqOn" [ 0 1 ] 24 | Select6 FXParam 16 "DynEqListen" 25 | Shift+Fader5 FXParam 17 "DynEqType" 26 | Fader5 FXParam 18 "DynEqFreq" 27 | Fader6 FXParam 19 "DynEqDepth" 28 | Select7 FXParam 20 "MonoMakerOn" [ 0 1 ] 29 | Fader7 FXParam 21 "MonoMakerFreq" 30 | Fader8 FXParam 22 "MonoMakerAmountPct" 31 | Fader1 NoAction 32 | Fader2 NoAction 33 | Fader3 NoAction 34 | Fader4 NoAction 35 | Fader5 NoAction 36 | Fader6 NoAction 37 | Fader7 NoAction 38 | Fader8 NoAction 39 | 40 | ZoneEnd 41 | -------------------------------------------------------------------------------- /src/renderer/components/molecules/MidiSelect/MidiSelect.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Wrapper = styled.div` 4 | align-items: center; 5 | display: flex; 6 | flex-direction: column; 7 | justify-content: center; 8 | position: relative; 9 | 10 | &::before { 11 | background-color: hsla(177, 100%, 34%, 0.6); 12 | border-radius: .5rem; 13 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 14 | content: ''; 15 | mix-blend-mode: soft-light; 16 | height: 100%; 17 | position: absolute; 18 | width: 100%; 19 | } 20 | 21 | & + div { 22 | margin-top: 1.5rem; 23 | } 24 | `; 25 | 26 | export const Label = styled.label` 27 | font-weight: 400; 28 | padding: .25rem; 29 | `; 30 | 31 | export const Select = styled.select` 32 | background-color: hsla(0, 0%, 95%, .6); 33 | border: none; 34 | border-radius: .5rem; 35 | box-sizing: border-box; 36 | color: var(--alternate-text); 37 | padding: .5rem; 38 | text-align: center; 39 | text-shadow: none; 40 | width: 100%; 41 | z-index: 1; 42 | 43 | &:focus { 44 | outline: none; 45 | } 46 | 47 | &::selection { 48 | background-color: var(--secondary-color); 49 | color: var(--default-text); 50 | } 51 | `; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorBank.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorBank.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Bank Navigation 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorBank 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev TrackBank -8 15 | Next TrackBank 8 16 | Shift+Prev NoAction 17 | Shift+Next NoAction 18 | ScrollLeft TrackBank -1 19 | ScrollRight TrackBank 1 20 | Shift+ScrollLeft TrackBank -8 21 | Shift+ScrollRight TrackBank 8 22 | 23 | RotaryBigPush NoAction 24 | Shift+RotaryBigPush NoAction 25 | Option+RotaryBigPush NoAction 26 | RotaryBig NoAction 27 | 28 | Bank Reaper %dummyAction% // Dummy Action 29 | Shift+Bank Reaper 40271 // View: Show FX browser window 30 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/components/atoms/NavItem.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NavLink } from 'react-router-dom'; 3 | import styled from 'styled-components'; 4 | 5 | const NavItemWrapper = styled.li` 6 | list-style: none; 7 | margin: .5rem 0; 8 | padding: 0; 9 | 10 | a { 11 | align-items: center; 12 | display: grid; 13 | font-size: 1.25rem; 14 | font-weight: 300; 15 | gap: 1rem; 16 | grid-template-columns: 1.75rem 1fr; 17 | padding: .5rem; 18 | position: relative; 19 | text-decoration: none; 20 | 21 | &:hover, &.active { 22 | &::before { 23 | background-color: hsla(177, 100%, 34%, 0.6); 24 | border-radius: .5rem; 25 | box-shadow: 0 .25rem .25rem rgba(0, 0, 0, 0.25); 26 | content: ''; 27 | height: 100%; 28 | mix-blend-mode: soft-light; 29 | position: absolute; 30 | width: 100%; 31 | } 32 | 33 | } 34 | } 35 | `; 36 | 37 | interface Props { 38 | to: string; 39 | image: string; 40 | children: string; 41 | } 42 | 43 | export const NavItem: React.FC = ({to, children, image}) => ( 44 | 45 | 46 | 47 | {children} 48 | 49 | 50 | ); 51 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorMaster.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorMaster.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Master volume and bank selection 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorMaster 11 | MasterTrackNavigator 12 | // =========================================== 13 | // BUTTONS AND SCROLL 14 | // =========================================== 15 | Prev TrackBank -8 16 | Next TrackBank 8 17 | Shift+Prev NoAction 18 | Shift+Next NoAction 19 | ScrollLeft NoAction 20 | ScrollRight NoAction 21 | Shift+ScrollLeft NoAction 22 | Shift+ScrollRight NoAction 23 | 24 | RotaryBigPush NoAction 25 | Shift+RotaryBigPush NoAction 26 | Option+RotaryBigPush NoAction 27 | RotaryBig TrackVolume 28 | 29 | Master Reaper %dummyAction% // Dummy Action 30 | Shift+Master Reaper 40326 // View: Show region/marker manager window 31 | ZoneEnd -------------------------------------------------------------------------------- /src/main/api/unRegisterActions.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import { getNewLineChar } from '../../utils/getNewLineChar'; 5 | import { settings } from '../../utils/settings'; 6 | 7 | /** 8 | * Unregister any action not available in the provided list 9 | * 10 | * @param actionIds string[]; Array of actionIds to keep 11 | * @returns boolean; True on success, false otherwise 12 | */ 13 | export const unRegisterActions = (actionIds: string[]) => { 14 | const newLine = getNewLineChar(); 15 | const reaperPath = settings.get('reaperPath') as string; 16 | 17 | try { 18 | let reaperKbIni = ''; 19 | let lines: string[] = []; 20 | if (fs.existsSync(path.join(reaperPath, 'reaper-kb.ini'))) { 21 | reaperKbIni = fs.readFileSync(path.join(reaperPath, 'reaper-kb.ini')).toString(); 22 | lines = reaperKbIni.split(newLine); 23 | } 24 | 25 | const filteredLines = lines.filter((line) => { 26 | const regexpVal = line.match(/SCR 4 0 ([A-Z0-9_]*) "Reasonus:/); 27 | if (regexpVal === null) { 28 | return true; 29 | } 30 | return actionIds.includes(regexpVal[1]); 31 | }); 32 | 33 | fs.writeFileSync(path.join(reaperPath, 'reaper-kb.ini'), filteredLines.join(newLine)); 34 | return true; 35 | } catch (e) { 36 | return false; 37 | } 38 | }; -------------------------------------------------------------------------------- /src/main/api/registerAction.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import { Action } from '../../types'; 5 | import { getNewLineChar } from '../../utils/getNewLineChar'; 6 | import { settings } from '../../utils/settings'; 7 | 8 | const actionAlreadyRegistered = (actionPath: string, lines: string[]) => ( 9 | lines.some((line) => line.search(actionPath) !== -1) 10 | ); 11 | 12 | export const registerAction = (action: Action) => { 13 | const newLine = getNewLineChar(); 14 | const reaperPath = settings.get('reaperPath') as string; 15 | const reaperKbIniPath = path.join(reaperPath, 'reaper-kb.ini'); 16 | 17 | try { 18 | let reaperKbIni = ''; 19 | let lines: string[] = []; 20 | if (fs.existsSync(reaperKbIniPath)) { 21 | reaperKbIni = fs.readFileSync(reaperKbIniPath).toString(); 22 | lines = reaperKbIni.split(newLine); 23 | } 24 | 25 | if (actionAlreadyRegistered(`Reasonus/${action.fileName}`, lines)) { 26 | return false; 27 | } 28 | const filteredLines = lines.filter((line) => line.length > 5); 29 | filteredLines.push(`SCR 4 0 ${action.actionId} "Reasonus: ${action.displayName}" "Reasonus/${action.fileName}"`); 30 | 31 | fs.writeFileSync(reaperKbIniPath, filteredLines.join(newLine)); 32 | return true; 33 | } catch (e) { 34 | return false; 35 | } 36 | }; -------------------------------------------------------------------------------- /src/utils/settings.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | 5 | import { PortCount } from '../types'; 6 | 7 | interface AppSettings { 8 | reaperPath: string; 9 | dummyAction: string; 10 | resourceVersion: string; 11 | nbChannels: PortCount; 12 | } 13 | 14 | export class Settings { 15 | data: AppSettings; 16 | path: string; 17 | 18 | constructor() { 19 | const userDataPath = app.getPath('userData'); 20 | this.path = path.join(userDataPath, 'settings.json'); 21 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 22 | // @ts-ignore 23 | this.data = {}; 24 | 25 | if (!fs.existsSync(this.path)) { 26 | fs.writeFileSync(this.path, JSON.stringify({})); 27 | } else { 28 | this.data = parseDataFile(this.path); 29 | } 30 | 31 | } 32 | 33 | get(key: keyof AppSettings) { 34 | return this.data[key]; 35 | } 36 | 37 | set(key: keyof AppSettings, val: T) { 38 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 39 | // @ts-ignore 40 | this.data[key] = val; 41 | fs.writeFileSync(this.path, JSON.stringify(this.data)); 42 | } 43 | } 44 | 45 | export const settings = new Settings(); 46 | 47 | function parseDataFile(filePath: string) { 48 | try { 49 | return JSON.parse(fs.readFileSync(filePath).toString()); 50 | } catch (error) { 51 | return {}; 52 | } 53 | } 54 | 55 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorZoom.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorZoom.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Zoom Navigation, handle zooming 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorZoom 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev Reaper 1011 // View: Zoom out horizontal 15 | Next Reaper 1012 // View: Zoom in horizontal 16 | Shift+Prev Reaper 40112 // View: Zoom out vertical 17 | Shift+Next Reaper 40111 // View: Zoom in vertical 18 | ScrollLeft Reaper 1011 // View: Zoom out horizontal 19 | ScrollRight Reaper 1012 // View: Zoom in horizontal 20 | Shift+ScrollLeft Reaper 40112 // View: Zoom out vertical 21 | Shift+ScrollRight Reaper 40111 // View: Zoom in vertical 22 | 23 | RotaryBigPush Reaper 40110 // View: Toggle track zoom to minimum height 24 | RotaryBig NoAction 25 | 26 | Zoom Reaper %dummyAction% // Dummy Action 27 | Shift+Zoom Reaper 50124 // Media explorer: Show/hide media explorer 28 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorChannel.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorChannel.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Channel Navigation 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorChannel 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev Reaper 40286 // Track: Go to previous track 15 | Next Reaper 40285 // Track: Go to next track 16 | Shift+Prev NoAction 17 | Shift+Next NoAction 18 | ScrollLeft Reaper 40286 // Track: Go to previous track 19 | ScrollRight Reaper 40285 // Track: Go to next track 20 | Shift+ScrollLeft Reaper 40288 // Track: Go to previous track (leaving other tracks selected) 21 | Shift+ScrollRight Reaper 40287 // Track: Go to next track (leaving other tracks selected) 22 | 23 | RotaryBigPush NoAction 24 | Shift+RotaryBigPush NoAction 25 | Option+RotaryBigPush NoAction 26 | RotaryBig NoAction 27 | 28 | Channel Reaper %dummyAction% // Dummy Action 29 | Shift+Channel Reaper 40078 //View: Toggle mixer visible 30 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorMetronome.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorBank.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Metronome management. Set speed and open the edit 8 | // Setting volume seems broken after one of the latest Reaper updates 9 | //------------------------------------------------------------------------------ 10 | 11 | Zone NavigatorMetronome 12 | // =========================================== 13 | // BUTTONS AND SCROLL 14 | // =========================================== 15 | Prev Reaper 42457 // Options: Set metronome speed to 2x 16 | Next Reaper 42458 // Options: Set metronome speed to 4x 17 | Shift+Prev NoAction 18 | Shift+Next NoAction 19 | / TODO: Not quite sure if the scripts are working correct 20 | ScrollLeft Reaper _S&M_METRO_VOL_DOWN // SWS/S&M: Decrease metronome volume 21 | ScrollRight Reaper _S&M_METRO_VOL_UP // SWS/S&M: Increase metronome volume 22 | Shift+ScrollLeft NoAction 23 | Shift+ScrollRight NoAction 24 | 25 | RotaryBigPush Reaper 42456 // Options: Set metronome speed to 1x 26 | Shift+RotaryBigPush Reaper 40363 // Options: Show metronome/pre-roll settings 27 | Option+RotaryBigPush NoAction 28 | RotaryBig NoAction 29 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/TSEAudio/TSE_BOD.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: BOD (TSE AUDIO)" "BOD" 2 | SelectedTrackNavigator 3 | 4 | ScribbleLine1_1 NoAction 5 | ScribbleLine2_1 NoAction 6 | ScribbleLine3_1 FXParamNameDisplay 1 7 | ScribbleLine4_1 FXParamValueDisplay 1 8 | Fader1 FXParam 1 "Level" 9 | 10 | ScribbleLine1_2 NoAction 11 | ScribbleLine2_2 NoAction 12 | ScribbleLine3_2 FXParamNameDisplay 2 13 | ScribbleLine4_2 FXParamValueDisplay 2 14 | Fader2 FXParam 2 "Drive" 15 | 16 | ScribbleLine1_3 NoAction 17 | ScribbleLine2_3 NoAction 18 | ScribbleLine3_3 FXParamNameDisplay 3 19 | ScribbleLine4_3 FXParamValueDisplay 3 20 | Fader3 FXParam 3 "Low" 21 | 22 | ScribbleLine1_4 NoAction 23 | ScribbleLine2_4 NoAction 24 | ScribbleLine3_4 FXParamNameDisplay 4 25 | ScribbleLine4_4 FXParamValueDisplay 4 26 | Fader4 FXParam 4 "High" 27 | 28 | ScribbleLine1_5 NoAction 29 | ScribbleLine2_5 NoAction 30 | ScribbleLine3_5 FXParamNameDisplay 5 31 | ScribbleLine4_5 FXParamValueDisplay 5 32 | Fader5 FXParam 5 "Presence" 33 | 34 | ScribbleLine1_6 NoAction 35 | ScribbleLine2_6 NoAction 36 | ScribbleLine3_6 FXParamNameDisplay 6 37 | ScribbleLine4_6 FXParamValueDisplay 6 38 | Fader6 FXParam 6 "Blend" 39 | 40 | ScribbleLine1_7 NoAction 41 | ScribbleLine2_7 NoAction 42 | ScribbleLine3_7 NoAction 43 | ScribbleLine4_7 NoAction 44 | Fader7 NoAction 45 | 46 | ScribbleLine1_8 NoAction 47 | ScribbleLine2_8 NoAction 48 | ScribbleLine3_8 NoAction 49 | ScribbleLine4_8 NoAction 50 | Fader8 NoAction 51 | ZoneEnd 52 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorScroll.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorScroll.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Scroll through the main view 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorScroll 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev Reaper 40286 // Track: Go to previous track 15 | Next Reaper 40285 // Track: Go to next track 16 | Shift+Prev NoAction 17 | Shift+Next NoAction 18 | ScrollLeft Reaper 40139 // View: Scroll view down 19 | ScrollRight Reaper 40138 // View: Scroll view up 20 | Shift+ScrollLeft Reaper 40140 // View: Scroll view left 21 | Shift+ScrollRight Reaper 40141 // View: Scroll view right 22 | 23 | RotaryBigPush Reaper 40913 // Track: Vertical scroll selected tracks into view 24 | Shift+RotaryBigPush Reaper _SWS_HSCROLLPLAY50 // SWS: Horizontal scroll to put play cursor at 50% 25 | Option+RotaryBigPush NoAction 26 | RotaryBig NoAction 27 | 28 | Scroll Reaper %dummyAction% // Dummy Action 29 | Shift+Scroll Reaper 40251 // View: Show routing matrix window 30 | ZoneEnd -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | .DS_Store 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # TypeScript cache 43 | *.tsbuildinfo 44 | 45 | # Optional npm cache directory 46 | .npm 47 | 48 | # Optional eslint cache 49 | .eslintcache 50 | 51 | # Optional REPL history 52 | .node_repl_history 53 | 54 | # Output of 'npm pack' 55 | *.tgz 56 | 57 | # Yarn Integrity file 58 | .yarn-integrity 59 | 60 | # dotenv environment variables file 61 | .env 62 | .env.test 63 | 64 | # parcel-bundler cache (https://parceljs.org/) 65 | .cache 66 | 67 | # next.js build output 68 | .next 69 | 70 | # nuxt.js build output 71 | .nuxt 72 | 73 | # vuepress build output 74 | .vuepress/dist 75 | 76 | # Serverless directories 77 | .serverless/ 78 | 79 | # FuseBox cache 80 | .fusebox/ 81 | 82 | # DynamoDB Local files 83 | .dynamodb/ 84 | 85 | # Webpack 86 | .webpack/ 87 | 88 | # Electron-Forge 89 | out/ 90 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/MeldaProduction/MAutopan.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: MAutopan (MeldaProduction)" MAutopan 2 | SelectedTrackNavigator 3 | DisplayZone1 FixedTextDisplay "Effect" 4 | DisplayEffect1 FixedTextDisplay "MAutopan" 5 | 6 | Fader1 FXParam 0 "Depth" 7 | ScribbleLine3_1 FXParamNameDisplay 0 "Depth" 8 | ScribbleLine4_1 FXParamValueDisplay 0 9 | 10 | Fader2 FXParam 1 "Rate" 11 | ScribbleLine3_2 FXParamNameDisplay 1 "Rate" 12 | ScribbleLine4_2 FXParamValueDisplay 1 13 | 14 | Fader3 FXParam 2 "Pan" 15 | ScribbleLine3_3 FXParamNameDisplay 2 "Pan" 16 | ScribbleLine4_3 FXParamValueDisplay 2 17 | 18 | Select3 FXParam 3 "LFO Override" [ 0.0 1.0 ] 19 | ScribbleLine1_3 FXParamNameDisplay 3 "#LFO Overwrite" 20 | ScribbleLine2_3 FXParamValueDisplay 3 21 | 22 | Select4 FXParam 4 "Synchronise" [ 0.0 1.0 ] 23 | ScribbleLine1_4 FXParamNameDisplay 4 "#Sync" 24 | ScribbleLine2_4 FXParamValueDisplay 4 25 | 26 | Fader4 FXParam 5 "Sync length" / Needs fixing on values 27 | ScribbleLine3_4 FXParamNameDisplay 5 "Sync Length" 28 | ScribbleLine4_4 FXParamValueDisplay 5 29 | 30 | Fader5 FXParam 6 "Sync Type" / Needs fixing on values 31 | ScribbleLine3_5 FXParamNameDisplay 6 "Dry/Wet" 32 | ScribbleLine4_5 FXParamValueDisplay 6 33 | 34 | Fader6 FXParam 7 "Sync Phase" 35 | ScribbleLine3_6 FXParamNameDisplay 7 "Sync Phase" 36 | ScribbleLine4_6 FXParamValueDisplay 7 37 | 38 | / Rest all the other stuff 39 | Fader7 NoAction 40 | Fader8 NoAction 41 | ZoneEnd 42 | 43 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/ValhallaDSP/ValhallaFreqEcho.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: ValhallaFreqEcho (Valhalla DSP, LLC)" FreqEcho 2 | SelectedTrackNavigator 3 | Option Option 4 | DisplayZone1 FixedTextDisplay "Effect" 5 | DisplayEffect1 FixedTextDisplay "FreqEcho" 6 | 7 | Fader1 FXParam 0 "WetDry" 8 | ScribbleLine1_1 FXParamNameDisplay 0 "Wet/Dry" 9 | ScribbleLine2_1 FXParamValueDisplay 0 10 | 11 | Fader1 FXParam 7 "stereo" [ 0.0 1.0 ] 12 | Select1 FXParam 7 "stereo" [ 0.0 1.0 ] 13 | ScribbleLine3_1 FXParamNameDisplay 7 "stereo" 14 | ScribbleLine4_1 FXParamValueDisplay 7 15 | 16 | Fader2 FXParam 3 "sync" 17 | Select2 FXParam 3 "sync" [ 0 0.26 ] 18 | ScribbleLine3_2 FXParamNameDisplay 3 "sync" 19 | ScribbleLine4_2 FXParamValueDisplay 3 20 | 21 | Fader2 FXParam 2 "delay" 22 | ScribbleLine1_2 FXParamNameDisplay 2 "Delay" 23 | ScribbleLine2_2 FXParamValueDisplay 2 24 | 25 | Fader3 FXParam 1 "shift" 26 | ScribbleLine1_3 FXParamNameDisplay 1 "Shift" 27 | ScribbleLine2_3 FXParamValueDisplay 1 28 | 29 | Fader4 FXParam 4 "feedback" 30 | ScribbleLine1_4 FXParamNameDisplay 4 "Feedback" 31 | ScribbleLine2_4 FXParamValueDisplay 4 32 | 33 | Fader5 FXParam 5 "lowcut" 34 | ScribbleLine1_5 FXParamNameDisplay 5 "lowcut" 35 | ScribbleLine2_5 FXParamValueDisplay 5 36 | 37 | Fader6 FXParam 6 "highCut" 38 | ScribbleLine1_6 FXParamNameDisplay 6 "highCut" 39 | ScribbleLine2_6 FXParamValueDisplay 6 40 | 41 | Fader7 NoAction 42 | Fader8 NoAction 43 | 44 | ZoneEnd 45 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build & Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | pull_request: 8 | 9 | permissions: 10 | contents: write 11 | 12 | jobs: 13 | build: 14 | if: startsWith(github.ref, 'refs/tags/') 15 | name: Build (${{ matrix.os }} - ${{ matrix.arch }}) 16 | runs-on: ${{ matrix.os }} 17 | strategy: 18 | matrix: 19 | include: 20 | - os: macOS-latest 21 | arch: universal 22 | - os: windows-latest 23 | arch: x64 24 | steps: 25 | - uses: actions/checkout@v3 26 | - name: Setup Node.js 27 | uses: actions/setup-node@v3.1.1 28 | with: 29 | node-version: 12.x 30 | cache: yarn 31 | - name: Install 32 | run: yarn --network-timeout 100000 || yarn --network-timeout 100000 || yarn --network-timeout 100000 33 | - name: Make 34 | if: startsWith(github.ref, 'refs/tags/') 35 | run: yarn make --arch=${{ matrix.arch }} 36 | env: 37 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 38 | GH_API_TOKEN: ${{ secrets.GH_API_TOKEN }} 39 | VERSION: ${{ github.ref_name }} 40 | - name: Archive production artifacts 41 | uses: actions/upload-artifact@v2 42 | with: 43 | name: ${{ matrix.os }} 44 | path: out/make/**/* 45 | - name: Release 46 | uses: softprops/action-gh-release@v1 47 | if: startsWith(github.ref, 'refs/tags/') 48 | env: 49 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 50 | with: 51 | draft: true 52 | files: | 53 | out/**/*setup*.exe 54 | out/**/*.zip 55 | out/**/RELEASES 56 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Audiothing/Audiothing_OuterSpace.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Outer Space (AudioThing)" 2 | /Black knobs on knobs 3 | /Green knobs on faders 4 | /Toggles on RotaryPush 5 | 6 | SelectedTrackNavigator 7 | 8 | Fader2 FXParam 0 "Repeat Rate Global" 9 | FXParam 1 "Repeat Rate Head 1" 10 | FXParam 2 "Repeat Rate Head 2" 11 | FXParam 3 "Repeat Rate Head 3" 12 | Select3 FXParam 4 "Sync" [ 0 1 ] 13 | Fader3 FXParam 5 "Intensity" 14 | Fader5 FXParam 6 "Echo Volume" 15 | Fader1 FXParam 7 "Mode" 16 | Fader4 FXParam 8 "Wow Flutter" 17 | Select8 FXParam 9 "Tape Type" [ 0 0.5 1 ] 18 | FXParam 10 "Pre Emphasis" 19 | Fader6 FXParam 11 "Bass" 20 | Select6 FXParam 11 "Bass" [ 0.5 ] 21 | Fader7 FXParam 12 "Treble" 22 | Select7 FXParam 12 "Treble" [ 0.5 ] 23 | Fader8 FXParam 13 "Reverb Volume" 24 | Fader5 FXParam 14 "Decay" [ 0 1 ] 25 | FXParam 15 "Noise" 26 | FXParam 16 "Noise Envelope" 27 | Fader1 FXParam 17 "Input Volume" 28 | Fader2 FXParam 18 "Output Volume" 29 | Select1 FXParam 19 "Wet Only" [ 0 1 ] 30 | FXParam 20 "Send" 31 | Select2 FXParam 21 "Stereo" [ 0 1 ] 32 | FXParam 22 "Bypass" 33 | FXParam 23 "Volume Head 1" 34 | FXParam 24 "Volume Head 2" 35 | FXParam 25 "Volume Head 3" 36 | FXParam 26 "Pan Head 1" 37 | FXParam 27 "Pan Head 2" 38 | FXParam 28 "Pan Head 3" 39 | FXParam 29 "LowCut" 40 | FXParam 30 "HiCut" 41 | FXParam 31 "Ducking" 42 | FXParam 32 "Rate Ballistic" 43 | FXParam 33 "Variable Speed" 44 | FXParam 34 "Stereo Delay" 45 | FXParam 35 "Noise Tone" 46 | FXParam 36 "PreAmp" 47 | FXParam 37 "Meter Gain" 48 | Select5 FXParam 38 "Reverb Type" [ 0 1 ] 49 | FXParam 39 "Bypass" 50 | FXParam 40 "Bypass" 51 | FXParam 41 "Wet" 52 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/pages/About.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { Columns } from '../components/atoms/Columns'; 4 | import { ContentHeader } from '../components/atoms/ContentHeader'; 5 | import { ExternalLink } from '../components/molecules/ExternalLink'; 6 | import { VersionItem } from '../components/molecules/VersionItem'; 7 | 8 | export const About: React.FC = () => ( 9 | <> 10 | About 11 |
12 |

ReaSonus FaderPort is created to make the use of your FaderPort with Reaper as easy as possible. 13 | It is build on top of CSI version 3, a tool for connecting controllers to REAPER with a huge flexibility.

14 |

Therefor a big thank you goes out to Geoff Waddington and the CSI community

15 |

I work on ReaSonus in my spare time and is Open Source, so if you want to, feel free to add code.

16 |

You may also donate if you appreciate this project.

17 | 18 |
19 |

Links

20 |
    21 |
  • Documentation
  • 22 |
  • Donate
  • 23 |
  • CSI Project
  • 24 |
25 |
26 |
27 |

Versions

28 |
29 | 30 | 31 | 32 |
33 |
34 |
35 |
36 | 37 | ); 38 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_FX.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_FX.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // MCU style Effects control. Every channel shows one of the 8 | // effects or instruments of the current selected track 9 | //------------------------------------------------------------------------------ 10 | 11 | 12 | Zone "SelectedTrackFXMenu" 13 | SelectedTrackFXMenuNavigator 14 | 15 | ScribbleLine1_| NoAction 16 | ScribbleLine1_1 FixedTextDisplay "Effects" 17 | ScribbleLine1_2 TrackNameDisplay 18 | ScribbleLine2_| NoAction 19 | ScribbleLine3_| FXMenuNameDisplay 20 | ScribbleLine4_| NoAction 21 | 22 | Mute| Reaper _S&M_FXBYP| 23 | Solo| GoFXSlot 24 | Solo| Reaper "_S&M_WNCLS5" { 0 20 0 0 255 0 } 25 | Solo| Reaper _S&M_TOGLFLOATFX| 26 | 27 | 28 | // =========================================== 29 | // TRACK NAVIGATION 30 | // =========================================== 31 | Track NoAction 32 | Track GoZone "Home" 33 | 34 | Plugin Reaper %dummyAction% // Dummy Action 35 | Plugin GoZone "Home" 36 | Plugin MapTrackFXMenusSlotToWidgets 37 | 38 | Send NoAction 39 | Send MapSelectedTrackSendsToWidgets 40 | Shift+Send MapTrackSendsSlotToWidgets 41 | 42 | Pan NoAction 43 | Pan MapSelectedTrackReceivesToWidgets 44 | Shift+Pan MapTrackReceivesSlotToWidgets 45 | ZoneEnd 46 | -------------------------------------------------------------------------------- /src/main/api/downloadFiles.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | import { Octokit } from '@octokit/rest'; 3 | import download from 'download'; 4 | import { app } from 'electron'; 5 | import fs from 'fs'; 6 | import os from 'os'; 7 | import path from 'path'; 8 | 9 | import { settings } from '../../utils/settings'; 10 | 11 | const octokit = new Octokit({ 12 | auth: process.env.__GITHUB_AUTH_TOKEN__, 13 | }); 14 | 15 | export const downloadFiles = async () => { 16 | // const resourcesTag = process.env.__RESOURCES__; 17 | const userDataPath = app.getPath('userData'); 18 | const resourceVersion = settings.get('resourceVersion'); 19 | // let release; 20 | 21 | // if (resourcesTag === 'latest') { 22 | // if (resourcesTag === 'latest') { 23 | // release = await octokit.repos.getLatestRelease({ 24 | // owner: 'navelpluisje', 25 | // repo: 'reasonus-faderport', 26 | // }); 27 | // } else { 28 | const release = await octokit.repos.getReleaseByTag({ 29 | owner: 'navelpluisje', 30 | repo: 'reasonus-faderport', 31 | tag: 'v2.0.0-3', 32 | // tag: resourcesTag, 33 | }); 34 | // } 35 | 36 | if (resourceVersion === release.data.tag_name) { 37 | return; 38 | } 39 | 40 | try { 41 | await download(release.data.assets[0].browser_download_url, 42 | path.join(userDataPath, 'resources'), 43 | { 44 | extract: true, 45 | }); 46 | settings.set('resourceVersion', release.data.tag_name); 47 | } catch (e) { 48 | console.log('Error while downloading', e); 49 | } 50 | 51 | if (os.platform() === 'darwin' && fs.existsSync(path.join(userDataPath, 'resources', '__MACOSX'))) { 52 | fs.rmdirSync(path.join(userDataPath, 'resources', '__MACOSX'), { 53 | recursive: true, 54 | }); 55 | } 56 | 57 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/AnalogObsession/AnalogObsessionTransature.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TRANSATURE (AnalogObsession)" TRANSATURE 2 | SelectedTrackNavigator 3 | Fader1 FXParam 0 "Input" 4 | ScribbleLine3_1 FXParamNameDisplay 0 "Input" 5 | ScribbleLine4_1 FXParamValueDisplay 0 6 | 7 | Select2 FXParam 2 "Mode" [ 0.0 0.33 0.66 1.0 ] 8 | ScribbleLine1_2 FXParamNameDisplay 2 "#Mode" 9 | ScribbleLine2_2 FXParamValueDisplay 2 10 | 11 | Fader3 FXParam 1 "Output" 12 | ScribbleLine3_3 FXParamNameDisplay 1 "Output" 13 | ScribbleLine4_3 FXParamValueDisplay 1 14 | 15 | Select4 FXParam 3 "Oversampling" [ 0.0 1.0 ] 16 | ScribbleLine1_4 FXParamNameDisplay 3 "#Oversampling" 17 | ScribbleLine2_4 FXParamValueDisplay 3 18 | 19 | Select5 FXParam 4 "ByPass" [ 0.0 1.0 ] 20 | ScribbleLine1_5 FXParamNameDisplay 4 "#Bypass" 21 | ScribbleLine2_5 FXParamValueDisplay 4 22 | 23 | ScribbleLine1_1 NoAction 24 | ScribbleLine2_1 NoAction 25 | ScribbleLine1_3 NoAction 26 | ScribbleLine2_3 NoAction 27 | ScribbleLine1_6 NoAction 28 | ScribbleLine2_6 NoAction 29 | ScribbleLine1_7 NoAction 30 | ScribbleLine2_7 NoAction 31 | ScribbleLine1_8 NoAction 32 | ScribbleLine2_8 NoAction 33 | ScribbleLine3_2 NoAction 34 | ScribbleLine4_2 NoAction 35 | ScribbleLine3_4 NoAction 36 | ScribbleLine4_4 NoAction 37 | ScribbleLine3_5 NoAction 38 | ScribbleLine4_5 NoAction 39 | ScribbleLine3_6 NoAction 40 | ScribbleLine4_6 NoAction 41 | ScribbleLine3_7 NoAction 42 | ScribbleLine4_7 NoAction 43 | ScribbleLine3_8 NoAction 44 | ScribbleLine4_8 NoAction 45 | 46 | ZoneEnd 47 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Linear_Phase_EQ.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: TR5 Linear Phase EQ (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader1 FXParam 0 "Band 1 Gain" 6 | Fader1 FXParam 1 "Band 1 LP/HP Resonance" 7 | FXParam 2 "Band 1 Active" 8 | Fader1 FXParam 3 "Band 1 Freq" 9 | Shift+Fader1 FXParam 4 "Band 1 Q (Peaking)" 10 | Shift+Fader1 FXParam 5 "Band 1 Q (Shelving)" 11 | Fader2 FXParam 6 "Band 2 Gain" 12 | Fader2 FXParam 7 "Band 2 LP/HP Resonance" 13 | FXParam 8 "Band 2 Active" 14 | Fader2 FXParam 9 "Band 2 Freq" 15 | Shift+Fader2 FXParam 10 "Band 2 Q (Peaking)" 16 | Shift+Fader2 FXParam 11 "Band 2 Q (Shelving)" 17 | Fader3 FXParam 12 "Band 3 Gain" 18 | Fader3 FXParam 13 "Band 3 LP/HP Resonance" 19 | FXParam 14 "Band 3 Active" 20 | Fader3 FXParam 15 "Band 3 Freq" 21 | Shifft+Fader3 FXParam 16 "Band 3 Q (Peaking)" 22 | Shift+Fader3 FXParam 17 "Band 3 Q (Shelving)" 23 | Fader4 FXParam 18 "Band 4 Gain" 24 | Fader4 FXParam 19 "Band 4 LP/HP Resonance" 25 | FXParam 20 "Band 4 Active" 26 | Fader4 FXParam 21 "Band 4 Freq" 27 | Shift+Fader4 FXParam 22 "Band 4 Q (Peaking)" 28 | Shift+Fader4 FXParam 23 "Band 4 Q (Shelving)" 29 | Fader5 FXParam 24 "Band 5 Gain" 30 | Fader5 FXParam 25 "Band 5 LP/HP Resonance" 31 | FXParam 26 "Band 5 Active" 32 | Fader5 FXParam 27 "Band 5 Freq" 33 | Shift+Fader5 FXParam 28 "Band 5 Q (Peaking)" 34 | Shift+Fader5 FXParam 29 "Band 5 Q (Shelving)" 35 | Fader6 FXParam 30 "Band 6 Gain" 36 | Fader6 FXParam 31 "Band 6 LP/HP Resonance" 37 | FXParam 32 "Band 6 Active" 38 | Fader6 FXParam 33 "Band 6 Freq" 39 | Shift+Fader6 FXParam 34 "Band 6 Q (Peaking)" 40 | Shift+Fader6 FXParam 35 "Band 6 Q (Shelving)" 41 | Fader7 NoAction 42 | Fader8 FXParam 36 "OutputLevel" 43 | 44 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/IK Multimedia/TR5_Linear_Phase_EQ.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: TR5 Linear Phase EQ (IK Multimedia)" 2 | 3 | SelectedTrackNavigator 4 | Option Shift 5 | Fader1 FXParam 0 "Band 1 Gain" 6 | Fader1 FXParam 1 "Band 1 LP/HP Resonance" 7 | FXParam 2 "Band 1 Active" 8 | Fader1 FXParam 3 "Band 1 Freq" 9 | Shift+Fader1 FXParam 4 "Band 1 Q (Peaking)" 10 | Shift+Fader1 FXParam 5 "Band 1 Q (Shelving)" 11 | Fader2 FXParam 6 "Band 2 Gain" 12 | Fader2 FXParam 7 "Band 2 LP/HP Resonance" 13 | FXParam 8 "Band 2 Active" 14 | Fader2 FXParam 9 "Band 2 Freq" 15 | Shift+Fader2 FXParam 10 "Band 2 Q (Peaking)" 16 | Shift+Fader2 FXParam 11 "Band 2 Q (Shelving)" 17 | Fader3 FXParam 12 "Band 3 Gain" 18 | Fader3 FXParam 13 "Band 3 LP/HP Resonance" 19 | FXParam 14 "Band 3 Active" 20 | Fader3 FXParam 15 "Band 3 Freq" 21 | Shifft+Fader3 FXParam 16 "Band 3 Q (Peaking)" 22 | Shift+Fader3 FXParam 17 "Band 3 Q (Shelving)" 23 | Fader4 FXParam 18 "Band 4 Gain" 24 | Fader4 FXParam 19 "Band 4 LP/HP Resonance" 25 | FXParam 20 "Band 4 Active" 26 | Fader4 FXParam 21 "Band 4 Freq" 27 | Shift+Fader4 FXParam 22 "Band 4 Q (Peaking)" 28 | Shift+Fader4 FXParam 23 "Band 4 Q (Shelving)" 29 | Fader5 FXParam 24 "Band 5 Gain" 30 | Fader5 FXParam 25 "Band 5 LP/HP Resonance" 31 | FXParam 26 "Band 5 Active" 32 | Fader5 FXParam 27 "Band 5 Freq" 33 | Shift+Fader5 FXParam 28 "Band 5 Q (Peaking)" 34 | Shift+Fader5 FXParam 29 "Band 5 Q (Shelving)" 35 | Fader6 FXParam 30 "Band 6 Gain" 36 | Fader6 FXParam 31 "Band 6 LP/HP Resonance" 37 | FXParam 32 "Band 6 Active" 38 | Fader6 FXParam 33 "Band 6 Freq" 39 | Shift+Fader6 FXParam 34 "Band 6 Q (Peaking)" 40 | Shift+Fader6 FXParam 35 "Band 6 Q (Shelving)" 41 | Fader7 NoAction 42 | Fader8 FXParam 36 "OutputLevel" 43 | 44 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorMarker.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorMarker.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Marker Navigation and management 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorMarker 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev Reaper _SWS_SELPREVMORR // SWS: Goto/select previous marker/region 15 | Next Reaper _SWS_SELNEXTMORR // SWS: Goto/select next marker/region 16 | Shift+Prev NoAction 17 | Shift+Next NoAction 18 | ScrollLeft Reaper 41045 // Move edit cursor back one beat 19 | ScrollRight Reaper 41044 // Move edit cursor forward one beat 20 | Shift+ScrollLeft Reaper 40104 // View: Move cursor left one pixel 21 | Shift+ScrollRight Reaper 40105 // View: Move cursor right one pixel 22 | Option+ScrollLeft NoAction 23 | Option+ScrollRight NoAction 24 | 25 | RotaryBigPush Reaper 40157 // Markers: Insert marker at current position 26 | Shift+RotaryBigPush Reaper 40171 // Markers: Insert and/or edit marker at current position 27 | Option+RotaryBigPush Reaper 40613 // Markers: Delete marker near cursor 28 | RotaryBig NoAction 29 | 30 | Marker Reaper %dummyAction% // Dummy Action 31 | Shift+Marker Reaper 41074 // Toggle show all floating windows 32 | ZoneEnd -------------------------------------------------------------------------------- /src/main/api/utils/addCsiToReaperIni.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import ini from 'ini'; 3 | import path from 'path'; 4 | 5 | import { settings } from '../../../utils/settings'; 6 | 7 | const cleanupUnusedCsiLines = (ini: Record) => { 8 | const regex = /^csurf_([0-9]{1,3})/; 9 | let modified = false; 10 | 11 | const maxIndex = parseInt(ini.REAPER.csurf_cnt, 10) - 1 || 0; 12 | const reaperIni = Object.entries(ini.REAPER).reduce((acc, [key, value]) => { 13 | const match = key.match(regex); 14 | 15 | if (parseInt(match?.[1] || '0') > maxIndex) { 16 | return acc; 17 | } 18 | 19 | modified = true; 20 | 21 | return { 22 | ...acc, 23 | [key]: value, 24 | }; 25 | }, {}); 26 | 27 | return { 28 | modified: modified, 29 | reaperIni: { 30 | ...ini, 31 | REAPER: reaperIni, 32 | }, 33 | } 34 | ; 35 | }; 36 | 37 | export const addCsiToReaperIni = () => { 38 | const reaperPath = settings.get('reaperPath') as string; 39 | 40 | try { 41 | const rawIni = ini.decode(fs.readFileSync(path.join(reaperPath, 'reaper.ini'), 'utf8')); 42 | const index = parseInt(rawIni.REAPER.csurf_cnt, 10) || 0; 43 | 44 | const {reaperIni, modified} = cleanupUnusedCsiLines(rawIni) as typeof rawIni; 45 | 46 | const hasCSI = new Array(index).fill(undefined).some(((_, i) => { 47 | if ((reaperIni.REAPER[`csurf_${i}`] as string).indexOf('CSI') !== -1) { 48 | return true; 49 | } 50 | return false; 51 | })); 52 | 53 | if (!hasCSI) { 54 | reaperIni.REAPER[`csurf_${index}`] = 'CSI 0 0'; 55 | // eslint-disable-next-line camelcase 56 | reaperIni.REAPER.csurf_cnt = `${index + 1}`; 57 | 58 | fs.writeFileSync(path.join(reaperPath, 'reaper.ini'), ini.encode(reaperIni)); 59 | } 60 | if (modified) { 61 | fs.writeFileSync(path.join(reaperPath, 'reaper.ini'), ini.encode(reaperIni)); 62 | } 63 | 64 | return true; 65 | } catch { 66 | return false; 67 | } 68 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/MeldaProduction/MCompressor.vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: MCompressor (MeldaProduction)" "MCompressor" 2 | SelectedTrackNavigator 3 | 4 | Option Option 5 | DisplayZone FixedTextDisplay "Effect" 6 | DisplayName FixedTextDisplay "MCompressor" 7 | 8 | Fader1 FXParam 0 "Signal Input" 9 | ScribbleLine3_1 FXParamNameDisplay 0 "Input" 10 | ScribbleLine4_1 FXParamValueDisplay 0 11 | 12 | Fader2 FXParam 1 "Output Gain" 13 | ScribbleLine3_2 FXParamNameDisplay 1 "Output" 14 | ScribbleLine4_2 FXParamValueDisplay 1 15 | 16 | Fader3 FXParam 2 "Attack" 17 | ScribbleLine3_3 FXParamNameDisplay 2 "Attack" 18 | ScribbleLine4_3 FXParamValueDisplay 2 19 | 20 | Fader4 FXParam 3 "Release" 21 | ScribbleLine3_4 FXParamNameDisplay 3 "Release" 22 | ScribbleLine4_4 FXParamValueDisplay 3 23 | 24 | Fader5 FXParam 4 "RMS length" 25 | ScribbleLine3_5 FXParamNameDisplay 4 "RMS Length" 26 | ScribbleLine4_5 FXParamValueDisplay 4 27 | 28 | Fader6 FXParam 5 "Treshold" 29 | ScribbleLine3_6 FXParamNameDisplay 5 "Treshold" 30 | ScribbleLine4_6 FXParamValueDisplay 5 31 | 32 | Fader7 FXParam 6 "Ratio" 33 | ScribbleLine3_7 FXParamNameDisplay 6 "Ratio" 34 | ScribbleLine4_7 FXParamValueDisplay 6 35 | 36 | Fader8 FXParam 8 "Knee" 37 | ScribbleLine3_8 FXParamNameDisplay 8 "Knee" 38 | ScribbleLine4_8 FXParamValueDisplay 8 39 | 40 | / This is not working. 17 needs some attention 2 options for the same setting 41 | Select2 FXParam 10 "Maximaize 0dB" [ 0.0 1.0 ] 42 | ScribbleLine1_2 FXParamNameDisplay 10 "#Mx 0dB" 43 | ScribbleLine2_2 FXParamValueDisplay 10 44 | 45 | Select8 FXParam 7 "Knee Mode" [ 0.0 0.5 1.0 ] 46 | ScribbleLine1_8 FXParamNameDisplay 7 "#KneeMode" 47 | ScribbleLine2_8 FXParamValueDisplay 7 48 | 49 | ZoneEnd 50 | 51 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_SelectedTrackSend.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_SelectedTrackSend.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // MCU styled send handling for the selectred track 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "SelectedTrackSend" 11 | SelectedTrackSendNavigator 12 | 13 | ScribbleLine1_| NoAction 14 | ScribbleLine1_1 FixedTextDisplay "Sends" 15 | ScribbleLine1_2 TrackNameDisplay 16 | ScribbleLine2_| TrackSendNameDisplay 17 | ScribbleLine3_| TrackSendVolumeDisplay 18 | ScribbleLine4_| TrackSendPrePostDisplay 19 | Shift+ScribbleLine4_| TrackSendPanDisplay 20 | ValueBar| TrackSendPan 21 | 22 | SoloClear Reaper "40293" // Track: View routing and I/O for current/last touched track 23 | Solo| TrackSendPrePost 24 | Shift+Solo| TrackSendInvertPolarity 25 | Mute| TrackSendMute 26 | 27 | Fader| TrackSendVolume 28 | Shift+Fader| TrackSendPan 29 | TrackTouch+Fader| TrackSendVolume 30 | FaderTouch| TrackTouch 31 | 32 | // =========================================== 33 | // TRACK NAVIGATION 34 | // =========================================== 35 | Track NoAction 36 | Track GoZone "Home" 37 | 38 | Plugin NoAction 39 | Plugin MapSelectedTrackFXToMenu 40 | Shift+Plugin MapTrackFXMenusSlotToWidgets 41 | 42 | Send Reaper %dummyAction% // Dummy Action 43 | Send GoZone "Home" 44 | Send MapTrackSendsSlotToWidgets 45 | 46 | Pan NoAction 47 | Pan MapSelectedTrackReceivesToWidgets 48 | Shift+Pan MapTrackReceivesSlotToWidgets 49 | 50 | ZoneEnd 51 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/MeldaProduction/MCompressor.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: MCompressor (MeldaProduction)" "MCompressor" 2 | SelectedTrackNavigator 3 | 4 | Option Option 5 | DisplayZone1 FixedTextDisplay "Effect" 6 | DisplayEffect1 FixedTextDisplay "MCompressor" 7 | 8 | Fader1 FXParam 0 "Signal Input" 9 | ScribbleLine3_1 FXParamNameDisplay 0 "Input" 10 | ScribbleLine4_1 FXParamValueDisplay 0 11 | 12 | Fader2 FXParam 1 "Output Gain" 13 | ScribbleLine3_2 FXParamNameDisplay 1 "Output" 14 | ScribbleLine4_2 FXParamValueDisplay 1 15 | 16 | Fader3 FXParam 2 "Attack" 17 | ScribbleLine3_3 FXParamNameDisplay 2 "Attack" 18 | ScribbleLine4_3 FXParamValueDisplay 2 19 | 20 | Fader4 FXParam 3 "Release" 21 | ScribbleLine3_4 FXParamNameDisplay 3 "Release" 22 | ScribbleLine4_4 FXParamValueDisplay 3 23 | 24 | Fader5 FXParam 4 "RMS length" 25 | ScribbleLine3_5 FXParamNameDisplay 4 "RMS Length" 26 | ScribbleLine4_5 FXParamValueDisplay 4 27 | 28 | Fader6 FXParam 5 "Treshold" 29 | ScribbleLine3_6 FXParamNameDisplay 5 "Treshold" 30 | ScribbleLine4_6 FXParamValueDisplay 5 31 | 32 | Fader7 FXParam 6 "Ratio" 33 | ScribbleLine3_7 FXParamNameDisplay 6 "Ratio" 34 | ScribbleLine4_7 FXParamValueDisplay 6 35 | 36 | Fader8 FXParam 8 "Knee" 37 | ScribbleLine3_8 FXParamNameDisplay 8 "Knee" 38 | ScribbleLine4_8 FXParamValueDisplay 8 39 | 40 | / This is not working. 17 needs some attention 2 options for the same setting 41 | Select2 FXParam 10 "Maximaize 0dB" [ 0.0 1.0 ] 42 | ScribbleLine1_2 FXParamNameDisplay 10 "#Mx 0dB" 43 | ScribbleLine2_2 FXParamValueDisplay 10 44 | 45 | Select8 FXParam 7 "Knee Mode" [ 0.0 0.5 1.0 ] 46 | ScribbleLine1_8 FXParamNameDisplay 7 "#KneeMode" 47 | ScribbleLine2_8 FXParamValueDisplay 7 48 | 49 | / Rest all the other stuff 50 | ZoneEnd 51 | 52 | -------------------------------------------------------------------------------- /forge.config.js: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-var-requires 2 | const path = require('path'); 3 | 4 | module.exports = { 5 | makers: [ 6 | { 7 | config: (arch) => ({ 8 | authors: 'Navelpluisje', 9 | exe: 'reasonus-faderport.exe', 10 | iconUrl: 11 | 'https://raw.githubusercontent.com/navelpluisje/reasonus-install/main/assets/app-icon.ico', 12 | name: 'reasonus_faderport', 13 | noMsi: true, 14 | setupExe: `reasonus-faderport-win32-${arch}-${process.env.VERSION}-setup.exe`, 15 | setupIcon: path.resolve(__dirname, 'assets', 'app-icon.ico'), 16 | }), 17 | name: '@electron-forge/maker-squirrel', 18 | platforms: ['win32'], 19 | }, 20 | { 21 | name: '@electron-forge/maker-zip', 22 | platforms: [ 23 | 'darwin', 24 | ], 25 | }, 26 | { 27 | config: {}, 28 | name: '@electron-forge/maker-deb', 29 | }, 30 | { 31 | config: {}, 32 | name: '@electron-forge/maker-rpm', 33 | }, 34 | ], 35 | packagerConfig: { 36 | asar: true, 37 | executableName: 'reasonus-faderport', 38 | icon: path.resolve(__dirname, 'assets', 'app-icon'), 39 | name: 'ReaSonus FaderPort', 40 | protocols: [ 41 | { 42 | name: 'ReaSonus FaderPort Launch Protocol', 43 | schemes: ['reasonus-faderport'], 44 | }, 45 | ], 46 | win32metadata: { 47 | CompanyName: 'Navelpluisje', 48 | OriginalFilename: 'ReaSonus FaderPort', 49 | }, 50 | }, 51 | plugins: [ 52 | [ 53 | '@electron-forge/plugin-webpack', 54 | { 55 | mainConfig: './webpack/webpack.main.config.js', 56 | renderer: { 57 | config: './webpack/webpack.renderer.config.js', 58 | entryPoints: [ 59 | { 60 | html: './src/renderer/public/index.html', 61 | js: './src/renderer/index.tsx', 62 | name: 'home', 63 | }, 64 | ], 65 | }, 66 | }, 67 | ], 68 | ], 69 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_FXSlot.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_FXSlot.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // EUCon style Effects control. Every channel shows the effect of the track it is displayed on 8 | // Use the pan knob to walk through all the effects of the tracks 9 | //------------------------------------------------------------------------------ 10 | 11 | Zone "TrackFXMenuSlot" 12 | TrackFXMenuSlotNavigator 13 | 14 | ScribbleLine1_| NoAction 15 | ScribbleLine1_1 FixedTextDisplay "Effects" 16 | ScribbleLine2_| TrackNameDisplay 17 | ScribbleLine3_| NoAction 18 | ScribbleLine4_| FXMenuNameDisplay 19 | 20 | Select| TrackUniqueSelect { 0 20 0 0 255 0 } 21 | 22 | Mute| Reaper _S&M_FXBYP| 23 | Solo| GoFXSlot 24 | Solo| Reaper "_S&M_WNCLS5" 25 | Solo| Reaper _S&M_TOGLFLOATFX| 26 | 27 | 28 | RotarySmall NoAction 29 | RotarySmallPush NoAction 30 | ScrollLeftSmall FXMenuSlotBank "-1" 31 | ScrollRightSmall FXMenuSlotBank "1" 32 | 33 | // =========================================== 34 | // TRACK NAVIGATION 35 | // =========================================== 36 | Track NoAction 37 | Track GoZone "Home" 38 | 39 | Plugin Reaper %dummyAction% // Dummy Action 40 | Plugin GoZone "Home" 41 | Plugin MapSelectedTrackFXToMenu 42 | 43 | Send NoAction 44 | Send GoZone "Home" 45 | Send MapSelectedTrackSendsToWidgets 46 | Shift+Send MapTrackSendsSlotToWidgets 47 | 48 | Pan NoAction 49 | Pan GoZone "Home" 50 | Pan MapSelectedTrackReceivesToWidgets 51 | Shift+Pan MapTrackReceivesSlotToWidgets 52 | ZoneEnd 53 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/MeldaProduction/MBandPass.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: MBandPass (MeldaProduction)" "MBandPass" 2 | SelectedTrackNavigator 3 | DisplayZone1 FixedTextDisplay "Effect" 4 | DisplayEffect1 FixedTextDisplay "MBandPass" 5 | 6 | Fader1 FXParam 0 "Dry/Wet" 7 | ScribbleLine3_1 FXParamNameDisplay 0 "Dry/Wet" 8 | ScribbleLine4_1 FXParamValueDisplay 0 9 | 10 | Fader2 FXParam 1 "Gain" 11 | ScribbleLine3_2 FXParamNameDisplay 1 "Gain" 12 | ScribbleLine4_2 FXParamValueDisplay 1 13 | 14 | Select3 FXParam 2 "HPF enable" [ 0.0 1.0 ] 15 | ScribbleLine1_3 FXParamNameDisplay 2 "#HPF enable" 16 | ScribbleLine2_3 FXParamValueDisplay 2 17 | 18 | Fader3 FXParam 3 "HPF Frequency" 19 | ScribbleLine3_3 FXParamNameDisplay 3 "HPF Frequency" 20 | ScribbleLine4_3 FXParamValueDisplay 3 21 | 22 | Fader4 FXParam 4 "HPF Q" 23 | ScribbleLine3_4 FXParamNameDisplay 4 "HPF Q" 24 | ScribbleLine4_4 FXParamValueDisplay 4 25 | 26 | Fader4 FXParam 5 "HPF Slope" [ 0.0>1.0 (0.875) ] 27 | ScribbleLine1_4 FXParamNameDisplay 5 "HPF Slope" 28 | ScribbleLine2_4 FXParamValueDisplay 5 29 | 30 | Select5 FXParam 6 "LPF enable" [ 0.0 1.0 ] 31 | ScribbleLine1_5 FXParamNameDisplay 6 "#LPF enable" 32 | ScribbleLine2_5 FXParamValueDisplay 6 33 | 34 | Fader5 FXParam 7 "LPF Frequency" 35 | ScribbleLine3_5 FXParamNameDisplay 7 "LPF Frequency" 36 | ScribbleLine4_5 FXParamValueDisplay 7 37 | 38 | Fader6 FXParam 8 "LPF Q" 39 | ScribbleLine3_6 FXParamNameDisplay 8 "LPF Q" 40 | ScribbleLine4_6 FXParamValueDisplay 8 41 | 42 | Fader6 FXParam 9 "LPF Slope" [ 0.0>1.0 (0.875) ] 43 | ScribbleLine1_6 FXParamNameDisplay 9 "LPF Slope" 44 | ScribbleLine2_6 FXParamValueDisplay 9 45 | 46 | Fader8 FXParam 17 "Wet" 47 | ScribbleLine3_8 FXParamNameDisplay 17 "Wet" 48 | ScribbleLine4_8 FXParamValueDisplay 17 49 | ZoneEnd -------------------------------------------------------------------------------- /src/renderer/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | import { Navigate, Route, Routes, useLocation } from 'react-router-dom'; 3 | 4 | import { Content } from './components/atoms/Content'; 5 | import { Page } from './components/atoms/Page'; 6 | import { Sidebar } from './components/organisms/Sidebar'; 7 | import { useCsiApi } from './hooks/useCsiApi'; 8 | import { About } from './pages/About'; 9 | import { Home } from './pages/Home'; 10 | import { Install } from './pages/Install'; 11 | import { ReaperPath } from './pages/ReaperPath'; 12 | import { useAppDispatch, useAppSelector } from './store/hooks'; 13 | import { fetchReaperPath } from './store/settings/actions'; 14 | import { getReaperPath } from './store/settings/selectors'; 15 | 16 | export const App = () => { 17 | const paths = ['/home', '/functions', '/about', '/install', '/path']; 18 | const location = useLocation(); 19 | const dispatch = useAppDispatch(); 20 | const reaperPath = useAppSelector(getReaperPath); 21 | const appRoot = document.getElementById('app'); 22 | 23 | useCsiApi(); 24 | 25 | useEffect(() => { 26 | const setClass = async () => { 27 | const className = await window.reasonusAPI.getOS(); 28 | appRoot.classList.add(className); 29 | }; 30 | dispatch(fetchReaperPath()); 31 | setClass(); 32 | }, []); 33 | 34 | if (!reaperPath) { 35 | return ( 36 | 37 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | 45 | return ( 46 | 47 | 48 | 49 | 50 | } /> 51 | } /> 52 | } /> 53 | } /> 54 | {/* } /> */} 55 | 56 | {!paths.includes(location.pathname) && ( 57 | 58 | )} 59 | 60 | 61 | ); 62 | }; 63 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatChorus(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Chorus 4 (Stereo) (Blue Cat Audio)" "Blue Cat Chorus" 2 | SelectedTrackNavigator 3 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 4 | ScribbleLine1_1 FXParamNameDisplay 0 "#ByPass" 5 | ScribbleLine2_1 FXParamValueDisplay 0 6 | 7 | Fader1 FXParam 1 "Gain" 8 | ScribbleLine3_1 FXParamNameDisplay 1 "Gain" 9 | ScribbleLine4_1 FXParamValueDisplay 1 10 | 11 | Fader2 FXParam 4 "Delay" 12 | ScribbleLine3_2 FXParamNameDisplay 4 "Delay" 13 | ScribbleLine4_2 FXParamValueDisplay 4 14 | 15 | Fader3 FXParam 5 "Depth" 16 | ScribbleLine3_3 FXParamNameDisplay 5 "Depth" 17 | ScribbleLine4_3 FXParamValueDisplay 5 18 | 19 | Fader4 FXParam 6 "Rate" 20 | ScribbleLine3_4 FXParamNameDisplay 6 "Rate" 21 | ScribbleLine4_4 FXParamValueDisplay 6 22 | 23 | Fader5 FXParam 7 "Spread" 24 | ScribbleLine3_5 FXParamNameDisplay 7 "Spread" 25 | ScribbleLine4_5 FXParamValueDisplay 7 26 | 27 | Fader6 FXParam 2 "Dry" 28 | ScribbleLine3_6 FXParamNameDisplay 2 "Dry" 29 | ScribbleLine4_6 FXParamValueDisplay 2 30 | 31 | Fader7 FXParam 3 "Wet" 32 | ScribbleLine3_7 FXParamNameDisplay 3 "Wet" 33 | ScribbleLine4_7 FXParamValueDisplay 3 34 | 35 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 36 | ScribbleLine1_8 FXParamNameDisplay 8 "#Shape" 37 | ScribbleLine2_8 FXParamValueDisplay 8 38 | 39 | / Rest all the other stuff 40 | ScribbleLine3_8 NoAction 41 | ScribbleLine4_8 NoAction 42 | ScribbleLine1_2 NoAction 43 | ScribbleLine2_2 NoAction 44 | ScribbleLine1_3 NoAction 45 | ScribbleLine2_3 NoAction 46 | ScribbleLine1_4 NoAction 47 | ScribbleLine2_4 NoAction 48 | ScribbleLine1_5 NoAction 49 | ScribbleLine2_5 NoAction 50 | ScribbleLine1_6 NoAction 51 | ScribbleLine2_6 NoAction 52 | ScribbleLine1_7 NoAction 53 | ScribbleLine2_7 NoAction 54 | 55 | Fader8 NoAction 56 | 57 | ZoneEnd 58 | 59 | -------------------------------------------------------------------------------- /src/main/api/utils/handleCsiIni.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | 4 | import { log } from '../../../utils/log'; 5 | import { createSciIniContent } from './createSciIniContent'; 6 | import { IniData, Page, readIniData, Surface } from './readIniData'; 7 | import { removeWhenInUse } from './removeWhenInUse'; 8 | 9 | export const handleSciIni = ( 10 | channels: '2' | '8' | '16', 11 | csiDir: string, 12 | midiInput: string, 13 | midiOutput: string, 14 | ) => { 15 | log.info('handleSciIni', 'started'); 16 | let hasIni = false; 17 | let iniData: IniData; 18 | const version = channels === '2' ? 'v2' : channels; 19 | const nbChannels = channels === '2' ? '1' : channels; 20 | const newPage: Page = { 21 | assignments: [{ 22 | effects: 'ReasonusFaderPort', 23 | name: `FaderPort ${version}`, 24 | nbChannels: nbChannels, 25 | offset: '0', 26 | surface: `FP${channels}.mst`, 27 | zones: 'ReasonusFaderPort', 28 | }], 29 | name: `ReaSonus FaderPort ${version}`, 30 | options: ['NoSynchPages', 'UseScrollLink', 'UseScrollSynch'], 31 | }; 32 | const newSurface: Surface = { 33 | deviceName: `Faderport ${version}`, 34 | portIn: midiInput, 35 | portOut: midiOutput, 36 | }; 37 | 38 | try { 39 | log.info('handleSciIni', 'Creating the CSI.ini file'); 40 | if (fs.existsSync(path.join(csiDir, 'CSI.ini'))) { 41 | hasIni = true; 42 | fs.copyFileSync(path.join(csiDir, 'CSI.ini'), path.join(csiDir, 'CSI.ini.bu')); 43 | iniData = readIniData(fs.readFileSync(path.join(csiDir, 'CSI.ini')).toString()); 44 | } 45 | 46 | if (hasIni) { 47 | log.info('handleSciIni', 'Check if midi device is already in use'); 48 | iniData = removeWhenInUse(iniData, midiInput, midiOutput); 49 | } else { 50 | iniData = { 51 | pages: [newPage], 52 | surfaces: [newSurface], 53 | }; 54 | } 55 | 56 | fs.writeFileSync(path.join(csiDir, 'CSI.ini'), createSciIniContent(iniData)); 57 | return true; 58 | } catch (error) { 59 | log.error('handleSciIni', 'Creating the CSI.ini file', error); 60 | return false; 61 | } 62 | }; 63 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatChorus4(Mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Chorus 4 (Mono) (Blue Cat Audio)" "Blue Cat Chorus" 2 | SelectedTrackNavigator 3 | DisplayZone1 FixedTextDisplay "Effect" 4 | DisplayEffect1 FixedTextDisplay "BC Chorus" 5 | 6 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 7 | ScribbleLine1_1 FXParamNameDisplay 0 "#ByPass" 8 | ScribbleLine2_1 FXParamValueDisplay 0 9 | 10 | Fader1 FXParam 1 "Gain" 11 | ScribbleLine3_1 FXParamNameDisplay 1 "Gain" 12 | ScribbleLine4_1 FXParamValueDisplay 1 13 | 14 | Fader2 FXParam 4 "Delay" 15 | ScribbleLine3_2 FXParamNameDisplay 4 "Delay" 16 | ScribbleLine4_2 FXParamValueDisplay 4 17 | 18 | Fader3 FXParam 5 "Depth" 19 | ScribbleLine3_3 FXParamNameDisplay 5 "Depth" 20 | ScribbleLine4_3 FXParamValueDisplay 5 21 | 22 | Fader4 FXParam 6 "Rate" 23 | ScribbleLine3_4 FXParamNameDisplay 6 "Rate" 24 | ScribbleLine4_4 FXParamValueDisplay 6 25 | 26 | Fader5 FXParam 2 "Dry" 27 | ScribbleLine3_5 FXParamNameDisplay 2 "Dry" 28 | ScribbleLine4_5 FXParamValueDisplay 2 29 | 30 | Fader6 FXParam 3 "Wet" 31 | ScribbleLine3_6 FXParamNameDisplay 3 "Wet" 32 | ScribbleLine4_6 FXParamValueDisplay 3 33 | 34 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 35 | ScribbleLine1_8 FXParamNameDisplay 8 "#Shape" 36 | ScribbleLine2_8 FXParamValueDisplay 8 37 | 38 | / Rest all the other stuff 39 | Fader7 NoAction 40 | Fader8 NoAction 41 | 42 | ScribbleLine3_7 NoAction 43 | ScribbleLine4_7 NoAction 44 | ScribbleLine3_8 NoAction 45 | ScribbleLine4_8 NoAction 46 | ScribbleLine1_2 NoAction 47 | ScribbleLine2_2 NoAction 48 | ScribbleLine1_3 NoAction 49 | ScribbleLine2_3 NoAction 50 | ScribbleLine1_4 NoAction 51 | ScribbleLine2_4 NoAction 52 | ScribbleLine1_5 NoAction 53 | ScribbleLine2_5 NoAction 54 | ScribbleLine1_6 NoAction 55 | ScribbleLine2_6 NoAction 56 | ScribbleLine1_7 NoAction 57 | ScribbleLine2_7 NoAction 58 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_SelectedTrackReceives.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_SelectedTrackReceive.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // MCU style receive handling of the selected track 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "SelectedTrackReceive" 11 | SelectedTrackReceiveNavigator 12 | 13 | ScribbleLine1_| NoAction 14 | ScribbleLine1_1 FixedTextDisplay "Receives" 15 | ScribbleLine1_2 TrackNameDisplay 16 | ScribbleLine2_| TrackReceiveNameDisplay 17 | ScribbleLine3_| TrackReceiveVolumeDisplay 18 | ScribbleLine4_| TrackReceivePrePostDisplay 19 | Shift+ScribbleLine4_| TrackReceivePanDisplay 20 | ValueBar| TrackReceivePan 21 | 22 | SoloClear Reaper "40293" // Track: View routing and I/O for current/last touched track 23 | Solo| TrackReceivePrePost 24 | Shift+Solo| TrackReceiveInvertPolarity 25 | Mute| TrackReceiveMute 26 | 27 | Fader| TrackReceiveVolume 28 | Shift+Fader| TrackReceivePan 29 | TrackTouch+Fader| TrackReceiveVolume 30 | FaderTouch| TrackTouch 31 | 32 | // =========================================== 33 | // TRACK NAVIGATION 34 | // =========================================== 35 | Track NoAction 36 | Track GoZone "Home" 37 | 38 | Plugin NoAction 39 | Plugin MapSelectedTrackFXToMenu 40 | Shift+Plugin MapTrackFXMenusSlotToWidgets 41 | 42 | Send NoAction 43 | Send MapSelectedTrackSendsToWidgets 44 | Shift+Send MapTrackSendsSlotToWidgets 45 | 46 | Pan Reaper %dummyAction% // Dummy Action 47 | Pan GoZone "Home" 48 | Pan MapTrackReceivesSlotToWidgets 49 | 50 | ZoneEnd 51 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatFlanger3(mono).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Flanger 3 (Mono) (Blue Cat Audio)" "Blue Cat Flanger" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | ScribbleLine1_1 FXParamNameDisplay 0 "#ByPass" 7 | ScribbleLine2_1 FXParamValueDisplay 0 8 | 9 | Fader1 FXParam 1 "Gain" 10 | ScribbleLine3_1 FXParamNameDisplay 1 "Gain" 11 | ScribbleLine4_1 FXParamValueDisplay 1 12 | 13 | Fader2 FXParam 5 "Delay" 14 | ScribbleLine3_2 FXParamNameDisplay 5 "Delay" 15 | ScribbleLine4_2 FXParamValueDisplay 5 16 | 17 | Fader3 FXParam 6 "Depth" 18 | ScribbleLine3_3 FXParamNameDisplay 6 "Depth" 19 | ScribbleLine4_3 FXParamValueDisplay 6 20 | 21 | Fader4 FXParam 7 "Rate" 22 | ScribbleLine3_4 FXParamNameDisplay 7 "Rate" 23 | ScribbleLine4_4 FXParamValueDisplay 7 24 | 25 | Fader6 FXParam 2 "Dry" 26 | ScribbleLine3_6 FXParamNameDisplay 2 "Dry" 27 | ScribbleLine4_6 FXParamValueDisplay 2 28 | 29 | Fader7 FXParam 3 "Feed Fwd" 30 | ScribbleLine3_7 FXParamNameDisplay 3 "Feed Fwd" 31 | ScribbleLine4_7 FXParamValueDisplay 3 32 | 33 | Fader8 FXParam 4 "FeedBack" 34 | ScribbleLine3_8 FXParamNameDisplay 4 "FeedBack" 35 | ScribbleLine4_8 FXParamValueDisplay 4 36 | 37 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 38 | ScribbleLine1_8 FXParamNameDisplay 8 "Shape" 39 | ScribbleLine2_8 FXParamValueDisplay 8 40 | 41 | Fader5 NoAction 42 | / Rest all the other stuff 43 | ScribbleLine1_2 NoAction 44 | ScribbleLine2_2 NoAction 45 | ScribbleLine1_3 NoAction 46 | ScribbleLine2_3 NoAction 47 | ScribbleLine1_4 NoAction 48 | ScribbleLine2_4 NoAction 49 | ScribbleLine1_5 NoAction 50 | ScribbleLine2_5 NoAction 51 | ScribbleLine3_5 NoAction 52 | ScribbleLine4_5 NoAction 53 | ScribbleLine1_6 NoAction 54 | ScribbleLine2_6 NoAction 55 | ScribbleLine1_7 NoAction 56 | ScribbleLine2_7 NoAction 57 | 58 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/Bluecat/BlueCatFlanger3(stereo).vst3.zon: -------------------------------------------------------------------------------- 1 | Zone "VST3: Blue Cat's Flanger 3 (Stereo) (Blue Cat Audio)" "Blue Cat Flanger" 2 | SelectedTrackNavigator 3 | Option Option 4 | 5 | Select1 FXParam 0 "ByPass" [ 0.0 1.0 ] 6 | ScribbleLine1_1 FXParamNameDisplay 0 "#ByPass" 7 | ScribbleLine2_1 FXParamValueDisplay 0 8 | 9 | Fader1 FXParam 1 "Gain" 10 | ScribbleLine3_1 FXParamNameDisplay 1 "Gain" 11 | ScribbleLine4_1 FXParamValueDisplay 1 12 | 13 | Fader2 FXParam 5 "Delay" 14 | ScribbleLine3_2 FXParamNameDisplay 5 "Delay" 15 | ScribbleLine4_2 FXParamValueDisplay 5 16 | 17 | Fader3 FXParam 6 "Depth" 18 | ScribbleLine3_3 FXParamNameDisplay 6 "Depth" 19 | ScribbleLine4_3 FXParamValueDisplay 6 20 | 21 | Fader4 FXParam 7 "Rate" 22 | ScribbleLine3_4 FXParamNameDisplay 7 "Rate" 23 | ScribbleLine4_4 FXParamValueDisplay 7 24 | 25 | Fader5 FXParam 9 "Spread" 26 | ScribbleLine3_6 FXParamNameDisplay 9 "Spread" 27 | ScribbleLine4_6 FXParamValueDisplay 9 28 | 29 | Fader6 FXParam 2 "Dry" 30 | ScribbleLine3_6 FXParamNameDisplay 2 "Dry" 31 | ScribbleLine4_6 FXParamValueDisplay 2 32 | 33 | Fader7 FXParam 3 "Feed Fwd" 34 | ScribbleLine3_7 FXParamNameDisplay 3 "Feed Fwd" 35 | ScribbleLine4_7 FXParamValueDisplay 3 36 | 37 | Fader8 FXParam 4 "FeedBack" 38 | ScribbleLine3_8 FXParamNameDisplay 4 "FeedBack" 39 | ScribbleLine4_8 FXParamValueDisplay 4 40 | 41 | Select8 FXParam 8 "Shape" [ 0.0 1.0 ] 42 | ScribbleLine1_8 FXParamNameDisplay 8 "Shape" 43 | ScribbleLine2_8 FXParamValueDisplay 8 44 | 45 | 46 | / Rest all the other stuff 47 | ScribbleLine1_2 NoAction 48 | ScribbleLine2_2 NoAction 49 | ScribbleLine1_3 NoAction 50 | ScribbleLine2_3 NoAction 51 | ScribbleLine1_4 NoAction 52 | ScribbleLine2_4 NoAction 53 | ScribbleLine1_5 NoAction 54 | ScribbleLine2_5 NoAction 55 | ScribbleLine1_6 NoAction 56 | ScribbleLine2_6 NoAction 57 | ScribbleLine1_7 NoAction 58 | ScribbleLine2_7 NoAction 59 | 60 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_Channel.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_Channel.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // File contains handling the Channel 8 | //------------------------------------------------------------------------------ 9 | 10 | 11 | Zone "Channel" 12 | TrackNavigator 13 | 14 | Arm Control 15 | // Some display stuff 16 | ScribbleLine1_| TrackNameDisplay 17 | ScribbleLine2_| TrackVolumeDisplay 18 | ScribbleLine3_| NoAction 19 | ScribbleLine4_| TrackPanDisplay 20 | ValueBar| TrackPan 21 | / VUMeter| TrackOutputMeter 22 | 23 | 24 | Mute| TrackMute 25 | Solo| TrackSolo 26 | Select| TrackUniqueSelect { 20 20 20 255 255 255 } 27 | Shift+Select| TrackSelect { 20 20 20 255 255 255 } 28 | Option+Select| TrackSelect { 20 20 20 255 255 255 } 29 | Control+Select| TrackRecordArm { 20 0 0 255 0 0 } 30 | Shift+Arm Reaper 40490 // Track: Arm all tracks for recording 31 | Option+Arm Reaper 40491 // Track: Unarm all tracks for recording 32 | 33 | SoloClear Reaper 40340 // Track: Unsolo all tracks 34 | MuteClear Reaper 40339 // Track: Unmute all tracks 35 | 36 | Shift+Fader| TrackPan 37 | Fader| TrackVolume 38 | FaderTouch+Fader| TrackVolume 39 | FaderTouch| TrackTouch 40 | 41 | 42 | // =========================================== 43 | // TRACK NAVIGATION 44 | // =========================================== 45 | Track Reaper %dummyAction% // Dummy Action 46 | 47 | Plugin NoAction 48 | Plugin MapSelectedTrackFXToMenu 49 | Shift+Plugin MapTrackFXMenusSlotToWidgets 50 | 51 | Send NoAction 52 | Send MapSelectedTrackSendsToWidgets 53 | Shift+Send MapTrackSendsSlotToWidgets 54 | 55 | Pan NoAction 56 | Pan MapSelectedTrackReceivesToWidgets 57 | Shift+Pan MapTrackReceivesSlotToWidgets 58 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/_FX_Zones/TDR/Vlad_Molot.vst.zon: -------------------------------------------------------------------------------- 1 | Zone "VST: Molot (Vladislav Goncharov)" "Molot" 2 | SelectedTrackNavigator 3 | Option Option 4 | DisplayZone1 FixedTextDisplay "Effect" 5 | DisplayEffect1 FixedTextDisplay "Molot" 6 | 7 | Fader1 FXParam 0 "Filter" 8 | ScribbleLine3_1 FXParamNameDisplay 0 "Filter" 9 | ScribbleLine4_1 FXParamValueDisplay 0 10 | 11 | Fader1 FXParam 6 "Limiter" 12 | ScribbleLine1_1 FXParamNameDisplay 6 "Limiter" 13 | ScribbleLine2_1 FXParamValueDisplay 6 14 | 15 | Fader2 FXParam 3 "Attack" 16 | ScribbleLine3_2 FXParamNameDisplay 3 "Attack" 17 | ScribbleLine4_2 FXParamValueDisplay 3 18 | 19 | Fader2 FXParam 8 "Mid Scoop" 20 | ScribbleLine1_2 FXParamNameDisplay 8 "Mid Scoop" 21 | ScribbleLine2_2 FXParamValueDisplay 8 22 | 23 | Select2 FXParam 12 "Alpha/Sigma" [ 0.0 1.0 ] 24 | Option+ScribbleLine3_2 FXParamNameDisplay 12 "Alp/Sig" 25 | Option+ScribbleLine4_2 FXParamValueDisplay 12 26 | 27 | Fader3 FXParam 4 "Release" 28 | ScribbleLine3_3 FXParamNameDisplay 4 "Release" 29 | ScribbleLine4_3 FXParamValueDisplay 4 30 | 31 | Fader3 FXParam 10 "Mode" [ 0.08 0.4 0.73 0.56 0.88 0.24 1 ] 32 | ScribbleLine1_3 FXParamNameDisplay 10 "Mode" 33 | ScribbleLine2_3 FXParamValueDisplay 10 34 | 35 | Fader4 FXParam 5 "Ratio" 36 | ScribbleLine3_4 FXParamNameDisplay 5 "Ratio" 37 | ScribbleLine4_4 FXParamValueDisplay 5 38 | 39 | Fader4 FXParam 11 "Upsampling" [ 0 0.33 0.66 1 ] 40 | ScribbleLine1_4 FXParamNameDisplay 11 "Upsampling" 41 | ScribbleLine2_4 FXParamValueDisplay 11 42 | 43 | Fader5 FXParam 1 "Treshold" 44 | ScribbleLine3_5 FXParamNameDisplay 1 "Treshold" 45 | ScribbleLine4_5 FXParamValueDisplay 1 46 | 47 | Fader6 FXParam 2 "Knee" 48 | ScribbleLine3_6 FXParamNameDisplay 2 "Knee" 49 | ScribbleLine4_6 FXParamValueDisplay 2 50 | 51 | Fader7 FXParam 7 "Makeup" 52 | ScribbleLine3_7 FXParamNameDisplay 7 "Makeup" 53 | ScribbleLine4_7 FXParamValueDisplay 7 54 | 55 | Fader8 FXParam 9 "Dry/Wet" 56 | ScribbleLine3_8 FXParamNameDisplay 9 "Dry/Wet" 57 | ScribbleLine4_8 FXParamValueDisplay 9 58 | ZoneEnd -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | const OFF = 0; 2 | const WARN = 1; 3 | const ERROR = 2; 4 | 5 | module.exports = { 6 | env: { 7 | browser: true, 8 | es6: true, 9 | node: true, 10 | }, 11 | extends: [ 12 | 'eslint:recommended', 13 | 'plugin:import/recommended', 14 | 'plugin:@typescript-eslint/eslint-recommended', 15 | 'plugin:@typescript-eslint/recommended', 16 | 'plugin:import/recommended', 17 | 'plugin:import/electron', 18 | 'plugin:import/typescript', 19 | ], 20 | parser: '@typescript-eslint/parser', 21 | plugins: [ 22 | 'sort-keys-fix', 23 | 'simple-import-sort', 24 | 'import', 25 | ], 26 | rules: { 27 | // '@typescript/no-unused-vars': [ERROR, { args: 'after-used', caughtErrors: 'none', ignoreRestSiblings: true }], 28 | 'arrow-parens': ERROR, 29 | 'arrow-spacing': ERROR, 30 | 'block-spacing': ERROR, 31 | 'brace-style': [ERROR, '1tbs', { allowSingleLine: true }], 32 | 'camelcase': [ERROR, { ignoreDestructuring: true }], 33 | 'comma-dangle': [ERROR, 'always-multiline'], 34 | 'comma-spacing': ERROR, 35 | 'complexity': [ERROR, 10], 36 | 'curly': ERROR, 37 | 'default-case': ERROR, 38 | 'default-case-last': ERROR, 39 | 'dot-notation': ERROR, 40 | 'eqeqeq': ERROR, 41 | 'func-call-spacing': [ERROR, 'never'], 42 | 'function-paren-newline': [ERROR, { minItems: 4 }], 43 | 'implicit-arrow-linebreak': [ERROR, 'beside'], 44 | 'indent': [ERROR, 2, { SwitchCase: 1 }], 45 | 'keyword-spacing': ERROR, 46 | 'no-confusing-arrow': ERROR, 47 | 'no-constant-condition': ERROR, 48 | 'no-useless-rename': ERROR, 49 | 'object-shorthand': ['error', 'consistent-as-needed'], 50 | 'quote-props': ['error', 'consistent-as-needed'], 51 | 'quotes': [ERROR, 'single', { avoidEscape: true }], 52 | 'require-await': ERROR, 53 | 'semi': [ERROR, 'always'], 54 | 'simple-import-sort/imports': ERROR, 55 | 'sort-keys-fix/sort-keys-fix': ERROR, 56 | 'sort-vars': ['error', { ignoreCase: true }], 57 | 'space-before-blocks': ERROR, 58 | 'space-infix-ops': ERROR, 59 | 'switch-colon-spacing': ERROR, 60 | }, 61 | settings: { 62 | 'import/resolver': { 63 | node: { 64 | paths: ['src', 'utils'], 65 | }, 66 | typescript: { 67 | alwaysTryTypes: true, 68 | paths: './tsconfig.json', 69 | }, 70 | }, 71 | }, 72 | }; 73 | -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_Automation.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_Automation.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // File contains handling the track and Global Automation functionality 8 | // Also Save, Undo and Redo are working 9 | // User Actions are not yet implemented 10 | //------------------------------------------------------------------------------ 11 | 12 | Zone "Automation" 13 | SelectedTrackNavigator 14 | 15 | // =========================================== 16 | // TRACK AUTOMATION 17 | // =========================================== 18 | Latch TrackAutoMode 4 { 5 0 20 53 0 255 } // Latch 19 | Hold+Latch TrackAutoMode 5 { 0 5 20 0 55 255 } // Latch Preview 20 | Trim TrackAutoMode 0 { 20 20 20 255 255 255 } // Trim 21 | Touch TrackAutoMode 2 { 20 20 0 255 255 0 } // Touch 22 | Write TrackAutoMode 3 { 20 0 0 255 0 0 } 23 | Read TrackAutoMode 1 { 0 20 0 0 255 0 } 24 | Off NoAction 25 | 26 | 27 | // =========================================== 28 | // GLOBAL AUTOMATION 29 | // =========================================== 30 | Option+Latch GlobalAutoMode 4 { 5 0 20 53 0 255 } // Latch 31 | Option+Off GlobalAutoMode 5 { 0 5 20 0 55 255 } // Latch Preview 32 | Option+Trim GlobalAutoMode 0 { 20 20 20 255 255 255 } // Trim 33 | Option+Touch GlobalAutoMode 2 { 20 20 0 255 255 0 } // Touch 34 | Option+Write GlobalAutoMode 3 { 20 0 0 255 0 0 } 35 | Option+Read GlobalAutoMode 1 { 0 20 0 0 255 0 } 36 | Hold+Off Reaper 40876 { 20 20 20 255 255 255 } // Global automation override: No override (set automation modes per track) 37 | 38 | 39 | // =========================================== 40 | // ACTIONS 41 | // =========================================== 42 | Shift+Latch Reaper 40897 { 0 20 0 0 20 0 } // File: Save all projects 43 | Shift+Trim Reaper 40030 { 0 5 20 0 5 20 } // Edit: Redo 44 | Shift+Off Reaper 40029 { 0 5 20 0 5 20 } // Edit: Undo 45 | Shift+Touch NoAction 46 | Shift+Write NoAction 47 | Shift+Read NoAction 48 | ZoneEnd -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_NavigatorSection.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_NavigatorSection.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // Section Navigation, manage Regions 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone NavigatorSection 11 | // =========================================== 12 | // BUTTONS AND SCROLL 13 | // =========================================== 14 | Prev Reaper _SWS_SELPREVMORR // SWS: Goto/select previous marker/region 15 | Next Reaper _SWS_SELNEXTMORR // SWS: Goto/select next marker/region 16 | Shift+Prev Reaper 40625 // Time selection: Set start point 17 | Shift+Next Reaper 40626 // Time selection: Set end point 18 | ScrollLeft Reaper 41045 // Move edit cursor back one beat 19 | ScrollRight Reaper 41044 // Move edit cursor forward one beat 20 | Shift+ScrollLeft Reaper 40104 // View: Move cursor left one pixel 21 | Shift+ScrollRight Reaper 40105 // View: Move cursor right one pixel 22 | Option+ScrollLeft Reaper 40102 // Time selection: Move cursor left, creating time selection 23 | Option+ScrollRight Reaper 40103 // Time selection: Move cursor left, creating time selection 24 | 25 | RotaryBigPush Reaper 40616 // Markers: Edit region near cursor 26 | Hold+Shift+RotaryBigPush Reaper 40306 // Markers: Insert region from time selection and edit... 27 | Shift+RotaryBigPush Reaper 41041 // Move edit cursor to start of current measure 28 | Option+RotaryBigPush Reaper 40615 // Markers: Delete region near cursor 29 | RotaryBig NoAction 30 | 31 | Section Reaper %dummyAction% // Dummy Action 32 | Hold+Section Reaper 40020 // Time selection: Remove (unselect) time selection and loop points 33 | Shift+Section Reaper 40378 // View: Show big clock window 34 | ZoneEnd -------------------------------------------------------------------------------- /src/main/api/getMidiDevices.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import os from 'os'; 3 | import path from 'path'; 4 | 5 | import { getNewLineChar } from '../../utils/getNewLineChar'; 6 | import { settings } from '../../utils/settings'; 7 | 8 | const midilineRegex = /(?[i|o])(?[a-z])(?[0-9]{1,2})=(?.*)/; 9 | 10 | const labels: Record = { 11 | i: 'input', 12 | n: 'name', 13 | o: 'output', 14 | t: 'code', 15 | x: 'fullName', 16 | }; 17 | 18 | const deviceFilter = (deviceName = ''): boolean => { 19 | if (os.platform() === 'darwin') { 20 | if (deviceName.indexOf('Port 1') === 0) { 21 | return true; 22 | } 23 | return deviceName.indexOf('PreSonus FP2') === 0; 24 | } else { 25 | return deviceName.indexOf('PreSonus FP') === 0; 26 | } 27 | }; 28 | 29 | type MidiData = { 30 | [io: string]: { 31 | [index: string]: MidiDevice 32 | } 33 | } 34 | 35 | type MidiLine = { 36 | io: string; 37 | type: string; 38 | index: string; 39 | value: string; 40 | } 41 | 42 | type MidiDevice = { 43 | name: string, 44 | code: string, 45 | id: string, 46 | fullName: string, 47 | } 48 | 49 | export type MidiDevicesList = { 50 | in: MidiDevice[] 51 | out: MidiDevice[] 52 | } 53 | 54 | export const getMidiDevices = (): MidiDevicesList => { 55 | const newLine = getNewLineChar(); 56 | const reaperPath = settings.get('reaperPath') as string; 57 | const midiFile = fs.readFileSync(path.join(reaperPath, 'reaper-midihw.ini')).toString(); 58 | const lines = midiFile.split(newLine); 59 | 60 | const result = lines.reduce((acc, line) => { 61 | const reg = midilineRegex.exec(line); 62 | if (!reg?.groups || reg.groups.value === '' || reg.groups.value === '0') { 63 | return acc; 64 | } 65 | 66 | const groups = reg.groups as MidiLine; 67 | return { 68 | ...acc, 69 | [labels[groups.io]]: { 70 | ...(acc[labels[groups.io]] || {}), 71 | [groups.index]: { 72 | ...(acc[labels[groups.io]]?.[groups.index] || {}), 73 | [labels[groups.type]]: groups.value, 74 | id: groups.index, 75 | }, 76 | }, 77 | }; 78 | }, {} as MidiData); 79 | 80 | return { 81 | in: Object.values(result.input).filter((device) => deviceFilter(device.name)) as MidiDevice[], 82 | out: Object.values(result.output).filter((device) => deviceFilter(device.name)) as MidiDevice[], 83 | }; 84 | }; -------------------------------------------------------------------------------- /src/main/api/installReaSonus.ts: -------------------------------------------------------------------------------- 1 | import { app } from 'electron'; 2 | import fs from 'fs'; 3 | import path from 'path'; 4 | 5 | import { copyFile } from '../../utils/copyFile'; 6 | import { fileExists } from '../../utils/fileExists'; 7 | import { settings } from '../../utils/settings'; 8 | 9 | /** 10 | * Install the surface file for the correct FaderPort version, 11 | * install the zone files for the correct FaderPort version 12 | */ 13 | export const installReaSonus = () => { 14 | let faderPortZoneFiles: string[]; 15 | const nbChannels = settings.get('nbChannels'); 16 | const userDataPath = app.getPath('userData'); 17 | const reaperPath = settings.get('reaperPath') as string; 18 | const surfacePath = path.join( 19 | userDataPath, 'resources', 'CSI', 'Surfaces', 'Midi', 20 | ); 21 | const surfaceDest = path.join( 22 | reaperPath, 'CSI', 'Surfaces', 'Midi', 23 | ); 24 | const zonesPath = path.join( 25 | userDataPath, 'resources', 'CSI', 'Zones', 26 | ); 27 | const zonesDest = path.join(reaperPath, 'CSI', 'Zones'); 28 | const zoneFilesList: Record = JSON.parse(fs.readFileSync(path.join(zonesPath, 'zonefiles.json')).toString()); 29 | 30 | /** 31 | * Check the channel count, Ccopy the right surface file and set the right zone files to copy 32 | */ 33 | if (nbChannels === '16') { 34 | copyFile(surfacePath, surfaceDest, 'FP16.mst'); 35 | copyFile(surfacePath, surfaceDest, 'FP16-swapped-shift.mst'); 36 | faderPortZoneFiles = zoneFilesList.FP16; 37 | } else if (nbChannels === '8') { 38 | copyFile(surfacePath, surfaceDest, 'FP8.mst'); 39 | copyFile(surfacePath, surfaceDest, 'FP8-swapped-shift.mst'); 40 | faderPortZoneFiles = zoneFilesList.FP8; 41 | } else { 42 | copyFile(surfacePath, surfaceDest, 'FP2.mst'); 43 | faderPortZoneFiles = zoneFilesList.FP2; 44 | } 45 | 46 | /** 47 | * Copy the zone files. 48 | */ 49 | for (const zoneFile of faderPortZoneFiles) { 50 | const fileName = path.join(userDataPath, zoneFile); 51 | if (!fileExists(fileName)) { 52 | continue; 53 | } 54 | copyFile(zonesPath, zonesDest, zoneFile); 55 | } 56 | 57 | /** 58 | * Cleaning up the zone files 59 | */ 60 | const currentZoneFiles = fs.readdirSync(zonesDest); 61 | for (const zoneFile of currentZoneFiles) { 62 | if (!faderPortZoneFiles.includes(zoneFile)) { 63 | if (fs.lstatSync(path.join(zonesDest, zoneFile)).isFile() ) { 64 | fs.rmSync(path.join(zonesDest, zoneFile)); 65 | } 66 | } 67 | } 68 | }; -------------------------------------------------------------------------------- /resources/src/Zones/Reasonus-Faderport/FP8_TrackSendSlot.zon: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // File: FP8_TrackSendSlot.zon 3 | // Author: Erwin Goossen 4 | // Version: 1.0.0 5 | //------------------------------------------------------------------------------ 6 | // Description: 7 | // euCon style strack send management 8 | //------------------------------------------------------------------------------ 9 | 10 | Zone "TrackSendSlot" 11 | TrackSendSlotNavigator 12 | 13 | ScribbleLine1_| NoAction 14 | ScribbleLine1_1 FixedTextDisplay "Sends" 15 | ScribbleLine2_| TrackNameDisplay 16 | ScribbleLine3_| TrackSendNameDisplay 17 | ScribbleLine4_| TrackSendVolumeDisplay 18 | 19 | Shift+ScribbleLine1_| TrackNameDisplay 20 | Shift+ScribbleLine2_| TrackSendNameDisplay 21 | Shift+ScribbleLine3_| TrackSendVolumeDisplay 22 | Shift+ScribbleLine4_| TrackSendPrePostDisplay 23 | 24 | ValueBar| TrackSendPan 25 | 26 | Select| TrackUniqueSelect { 20 20 0 255 255 0 } 27 | Hold+Select| Reaper 40293 // Track: View routing and I/O for current/last touched track 28 | 29 | Fader| TrackSendVolume 30 | Solo| TrackSendPrePost 31 | Shift+Solo| TrackSendInvertPolarity 32 | Mute| TrackSendMute 33 | Fader| TrackSendVolume 34 | Shift+Fader| TrackSendPan 35 | 36 | 37 | RotarySmall NoAction 38 | RotarySmallPush NoAction 39 | ScrollLeftSmall SendSlotBank "-1" 40 | ScrollRightSmall SendSlotBank "1" 41 | 42 | // =========================================== 43 | // TRACK NAVIGATION 44 | // =========================================== 45 | Track NoAction 46 | Track GoZone "Home" 47 | 48 | Plugin NoAction 49 | Plugin GoZone "Home" 50 | Plugin MapSelectedTrackFXToMenu 51 | Shift+Plugin MapTrackFXMenusSlotToWidgets 52 | 53 | Send Reaper %dummyAction% // Dummy Action 54 | Send GoZone "Home" 55 | Send MapSelectedTrackSendsToWidgets 56 | 57 | Pan NoAction 58 | Pan GoZone "Home" 59 | Pan MapSelectedTrackReceivesToWidgets 60 | Shift+Pan MapTrackReceivesSlotToWidgets 61 | 62 | ZoneEnd 63 | --------------------------------------------------------------------------------