Reaper
Leandro Facchinetti’s REAPER effects and scripts
Install / Use
/learn @leafac/ReaperREADME
<!--
When exploding tracks that make up a ‘.mkv’ file, preserve the tracks names. (https://forum.cockos.com/showthread.php?p=2598861#post2598861)
// Tale
desc:JSFX mouse cursors
slider1:1<1,14,1{None*,Arrow,Text,Wait*,Crosshair*,Arrow Up,Size NW/SE,Size NE/SW,Size W/E,Size N/S,Size All,No,Hand,App Start*,Help*}>Cursor
@init
mem_set_values(tbl,
// 32511 or any other undefined resource ID.
32511, // None*
32512, // Arrow
32513, // Text
32514, // Wait*
32515, // Crosshair*
32516, // Arrow Up
32642, // Size NW/SE
32643, // Size NE/SW
32644, // Size W/E
32645, // Size N/S
32646, // Size All
32648, // No
32649, // Hand
32650, // App Start*
32651 // Help*
);
// * Not available on macOS.
@gfx
gfx_setcursor(tbl[slider1]);
Bug in Scripts/leafac_Explode multistream (multitrack) media file to new one-stream (one-track) media files.lua:
Streams may be something other than video or audio. They may also be subtitles, attachments (data), and so forth. Right now, the script will try to treat them as audio and crash. These other streams should probably be ignored. (Report back to Ockenden)
Image to MIDI conversion
Maybe multichannel is bad because it affects Sidechains for later plugins
Test what denormalization is doing: adding noise (like dither) or a fixed small value (like ReEQ)
On rms, don’t compute the root and convert to db directly
Generate pink noise with stochastic model: inverse fft of magnitude with 3db slope and random phase
Waveform visualizer for any plug-in (just sandwich)
Yin
Plugin doctor
Idea of how to make circular buffers faster: have a notion of item size, so that you can store structs directly and cut one memory dereference
Idea pf optmization for rms: dont store the size, store its reciprocal, so that a division turns into a multiplication
just call getchar so that mouse modifiers work
Digital hardware (like lexicon) has adc and dac. So if you have several in the chain, doesn’t it mean a lot of latency? What about modular synths?
Draw a piano keyboard
Frequency to midi note and back
What does spectral reversal sound like (not applied to a filter kernel, but to a signal)
Correlation meter
Ping pong ball drop https://www.youtube.com/watch?app=desktop&v=ZGcpOFo_HDA
Use “play or stop” on MIDI editor
ADD TO REAPACK
leafac_Unselect (clear selection of) all tracks, items, envelope points, time selection, and loop points
MAP
esc: leafac_Unselect (clear selection of) all tracks, items, envelope points, time selection, and loop points
Prepare project for video/audio editing: Set BPM to 240 so 1 measure is one second. (See comment on https://reaperblog.net/2017/02/custom-grid-size-toolbar/)
Leslie https://www.youtube.com/watch?v=vUaScoPXW28
Controlling REAPER with AutoHotkey
- [ ] https://www.youtube.com/watch?v=ipL7H02G8bs&lc=UgzfLHisYi3GLBVVCUl4AaABAg
- [ ] OBS ↔ REAPER
- [ ] Abort recording & pre-roll & stuff: https://forum.cockos.com/showthread.php?p=2455092#post2455092
REAPER ↔ OBS
- [ ] Abort recording: https://forum.cockos.com/showpost.php?p=2430380&postcount=29
- [ ] Don’t show user-generated values in GetUserInputs, use ShowConsoleMsg instead
- [ ] You would need to add a short reference to the console-window in the title of GetUserInputs, so blind people know, there's a second window to look for additional information.
- [ ] Use Mespotine’s scripts
- [ ] LTC
- [ ] https://www.youtube.com/watch?v=E4R4wlfKdcw&lc=UgxRZeB539r1oGd__lt4AaABAg
- [ ] Add better error messages:
- [ ] When OBS isn’t running
- [ ] When you’re already recording and try to start
- [ ] When you’re not recording and try to stop
- [ ] https://www.youtube.com/watch?v=dxfM4ftB1hM&lc=UgyzzfiAV-l2CMDhUF14AaABAg
- [ ] Pre-roll/count-in/loop recording: https://forum.cockos.com/showpost.php?p=2421273&postcount=27
- [ ] Don’t change the recording path in OBS https://forum.cockos.com/showpost.php?p=2476104&postcount=8
- [ ] Add as a new take, not new track (Adding the video as a new take to an item if there is already a video recorded there.) https://forum.cockos.com/showpost.php?p=2476736&postcount=44 / stefhambrook@gmail.com
- [ ] Cancel recording (and discard audio and video files into the trash) triode
- [ ] Multicam OBS with multiple OBS instances https://www.youtube.com/watch?v=E4R4wlfKdcw&lc=UgyS-NHJoZkEdwLFj3N4AaABAg
- [ ] Add YouTube links to ReaScripts
JSFX
- [ ] Ping-pong delay
- [ ] Detect chords
- [ ] Blow air into mic game
- [ ] Flappy bird game (Flappy Square)
- [ ] Airwindows: Convert to JSFX: Spiral or Mojo
- Focus, an all-in-one distortion suite that includes, among others, the Spiral and Mojo algorithms (you may also try Distortion, which is pretty similar except without the frequency selection)
- PurestGain, as JSFX's ability to type exact values would work wonders on this
- Preponderant, a plugin that does the opposite of popular resonance-removing plugins like Soothe, TEOTE and the freeware Vastaus (we need to implement an "Inverse" function in the Dry/Wet just like in other Airwindows plugins, so it does actually function as a Soothe-like plugin)
- DeBess, as it is an excellent de-esser but its structure may not be easy to understand for beginners (same with Pressure4)
- Infinity2 (so you can kill the feedback with a button instead of dragging the Feedback fader to the left)
- CStrip may be good for JSFX, and I'd like to try its TimeLag function with exact values
Fotis Ky <seethisworld@gmail.com>
- [ ] Control dry/wet depending on gain (think about how reverb works in a hall: louder means more reverb)
- [ ] Fernando Imperator (https://twitter.com/imperat) Feature idea: If you ever develop a version that instead of rendering the multicam video, just creates an XML to import to Adobe Premiere or DaVinci, it'd be awesome.
- [ ] Run Doom in JSFX
Scripts
- [ ] That ADR item naming thing
A VST that connects to WebRTC
- [ ] https://forum.cockos.com/private.php?do=showpm&pmid=205857
- [ ] Re: Build a jsfx plugin question
- [ ] https://forum.cockos.com/showthread.php?t=249449
- [ ] https://sonobus.net
- [ ] https://audiomovers.com/wp/
- [ ] https://www.landr.com/en/sessions
- [ ] Use reaper.GetCursorContext() to create ReaScript that consolidates Item: Duplicate items and Track: Duplicate tracks
- [ ] Upload rendered video to YouTube
- [ ] Sync footage
- [ ] Multicam
- [ ] Create ReaScripts to switch items on a dedicated track: https://www.youtube.com/watch?v=1BvuRgKNnqc&lc=UgxKIx95LJ9-nLCd-5d4AaABAg
- [ ] ReaScript to set up tracks & dedicated video processor item
- [ ] Add support for clicking on thumbnails in preview to switch to another scene
- [ ] When switching with ReaScript if you didn’t select items, look for an item under the cursor (and maybe even if you did select items, really)
- [ ] Structured data
- [ ] Structures
- [ ] Arrays
- [ ] Objects
- [ ] Multi-dimensional arrays
- [ ] For example, lists of one buffer per channel
- [ ] Circular buffers
- [ ] One field for current position, another for buffer itself
- [ ] Uses
- [ ] Applications
- [ ] Automixer
- [ ] Oscilloscope
- [ ] Implementation techniques
- [ ] Pseudo-objects
- [ ] Good because it puts together things that belong together
- [ ] Bad because it doesn’t work with dynamically allocated structures (for example, one circular buffer per channel)
- [ ] Arrays with fixed positions (for example, my_object[field_index], my_multi_dimensional_array[index_x][index_y])
- [ ] Functions that calculate indexes (for example, my_multi_dimensional_array[my_multi_dimensional_array_index(x, y, width, height)]
- [ ] Good because multiplication is faster than multiple memory lookups of the technique above
- [ ] Bad because it’s more cumbersome to use (you have to keep repeating the width and height, but it may be a good thing to avoid out-of-bounds errors)
function begin_memory_allocation() global(next_available_memory_address) (
next_available_memory_address = 0;
);
function array(size) local(address) global(next_available_memory_address) (
address = next_available_memory_address;
next_available_memory_address += size;
address;
);
function end_memory_allocation() global(next_available_memory_address) (
freembuf(next_available_memory_address + 1);
);
begin_memory_allocation();
buffer1 = array(100);
buffer1[20] = array(20);
buffer2 = array(200);
end_memory_allocation();
- [ ] Better tooling
- [ ] Formatter
- [ ] Visual Studio Code support
- [ ] Syntax highlighter
- [ ] Refactoring tools
- [ ] Unit tests
- [ ] Null tests
Automixer
- https://forums.prosoundweb.com/index.php/topic,158018.0.html
- https://forum.audulus.com/t/gain-sharing-auto-mixer/1744
- [ ] Plugin Delay Compensation should be 0 samples when there’s no lookahead (hard-code a special case)
- [ ] max(gain reduction with lookahead, gain reduction without lookahead) https://www.youtube.com/watch?v=p7Ol5FPvHfs
- [ ] Draw dB scale on meters
- [ ] Envelope (Attack, Hold, Release)
- [ ] More appealing visuals
- [ ] Background
- [ ] Title
- [ ] Tone generator: Part 3
- [ ] Invert square wave
- [ ] Refactor the thing that draws on Y axis
- [ ] LFO controls
- [ ] Test with enveloper
- [ ] Mention frequency bound problem
- [ ] Hull Moving Average as a low-pass filter
- [ ] Hilbert curve
- [ ] Flappy Bird controlled by voice!
- [ ] Shepard’s tone generator
- [ ] NES emulation
- [ ] Load ROM as audio!
- [ ] A Vocal Rider clone
- [ ] Sound visualizations
- [ ] DC offset fixer
- [ ] LV2 effect: https://news.ycombinator.com/item?id=25046869
- [ ] Oscilloscope
- [ ] Plot channels as a stack of oscilloscopes (that’s what the main REAPER interface does)
- [ ] Draw scale
- [ ] GUI knob: https://forum.cockos.com/showpost.php?p=2357022
