REAPER API Functions PDF
REAPER API Functions PDF
0-dev
REAPER provides an API (advanced programming interface) for users and third parties to create extended functionality. API functions can be called from a compiled C/C++ dynamic
library that is loaded by REAPER, or at run-time by user-created ReaScripts that can be written using REAPER's own editor.
ReaScripts can be written in EEL, a specialized language that is also used to write JSFX; Lua, a popular scripting language; or Python, another scripting language. EEL and Lua are
embedded within REAPER and require no additional downloads or settings. Python must be downloaded and installed separately, and enabled in REAPER preferences.
ReaScript/EEL API
Parameters that return information are effectively passed by reference, not value. If an API returns a string value, it will usually be as the first parameter.
Examples:
// function returning a single (scalar) value:
sec = parse_timestr("1:12");
ReaScript/EEL can import functions from other reascripts using @import filename.eel -- note that only the file's functions will be imported, normal code in that file will not be
executed.
In addition to the standard API functions, Reascript/EEL also has these built-in functions available:
ReaScript/Lua API
Some functions return multiple values. In many cases, some function parameters are ignored, especially when similarly named parameters are present in the returned values.
Examples:
function returning a single (scalar) value:
sec = reaper.parse_timestr("1:12")
ReaScript/Lua can import functions from other ReaScripts using require. If the files are not being found, it is probably a path problem (remember that lua paths are wildcard patterns,
not just directory listings, see details here).
In addition to the standard API functions, Reascript/Lua also has these built-in functions available:
ReaScript/Python API
python34.dll is installed.
ReaScript/Python requires a recent version of Python installed on this machine. Python is available from multiple sources as a free download. After installing Python, REAPER may
detect the Python dynamic library automatically. If not, you can enter the path in the ReaScript preferences page, at Options/Preferences/Plug-Ins/ReaScript.
All parameters are passed by value, not reference. API functions that cannot return information in the parameter list will return a single value. API functions that can return any
information in the parameter list will return a list of values; The first value in the list will be the function return value (unless the function is declared to return void).
Examples:
# function returning a single (scalar) value:
sec = RPR_parse_timestr("1:12")
You can create and save modules of useful functions that you can import into other ReaScripts. For example, if you create a file called reascript_utility.py that contains the function
helpful_function(), you can import that file into any Python ReaScript with the line:
import reascript_utility
Note that ReaScripts must explicitly import the REAPER python module, even if the script is imported into another ReaScript:
from reaper_python import *
In addition to the standard API functions, Reascript/Python also has these built-in functions available:
GetCurrentProjectInLoadSave
AddMediaItemToTrack GetTrackState SelectProjectInstance
GetSetMediaTrackInfo_String
DestroyAudioAccessor NamedCommandLookup TrackFX_GetParam
C: int AddProjectMarker(ReaProject* proj, bool isrgn, double pos, double rgnend, const char* name, int wantidx)
EEL: int AddProjectMarker(ReaProject proj, bool isrgn, pos, rgnend, "name", int wantidx)
Lua: integer reaper.AddProjectMarker(ReaProject proj, boolean isrgn, number pos, number rgnend, string name, integer wantidx)
Python: Int RPR_AddProjectMarker(ReaProject proj, Boolean isrgn, Float pos, Float rgnend, String name, Int wantidx)
Returns the index of the created marker/region, or -1 on failure. Supply wantidx>=0 if you want a particular index number, but you'll get a different index number a region and wantidx
is already in use.
C: int AddProjectMarker2(ReaProject* proj, bool isrgn, double pos, double rgnend, const char* name, int wantidx, int color)
EEL: int AddProjectMarker2(ReaProject proj, bool isrgn, pos, rgnend, "name", int wantidx, int color)
Lua: integer reaper.AddProjectMarker2(ReaProject proj, boolean isrgn, number pos, number rgnend, string name, integer wantidx, integer color)
Python: Int RPR_AddProjectMarker2(ReaProject proj, Boolean isrgn, Float pos, Float rgnend, String name, Int wantidx, Int color)
Returns the index of the created marker/region, or -1 on failure. Supply wantidx>=0 if you want a particular index number, but you'll get a different index number a region and wantidx
is already in use. color should be 0 or RGB(x,y,z)|0x1000000
C: bool AddTempoTimeSigMarker(ReaProject* proj, double timepos, double bpm, int timesig_num, int timesig_denom, bool lineartempochange)
EEL: bool AddTempoTimeSigMarker(ReaProject proj, timepos, bpm, int timesig_num, int timesig_denom, bool lineartempochange)
Lua: boolean reaper.AddTempoTimeSigMarker(ReaProject proj, number timepos, number bpm, integer timesig_num, integer timesig_denom, boolean lineartempochange)
Python: Boolean RPR_AddTempoTimeSigMarker(ReaProject proj, Float timepos, Float bpm, Int timesig_num, Int timesig_denom, Boolean lineartempochange)
C: void APITest()
EEL: APITest()
Lua: reaper.APITest()
Python: RPR_APITest()
C: bool ApplyNudge(ReaProject* project, int nudgeflag, int nudgewhat, int nudgeunits, double value, bool reverse, int copies)
EEL: bool ApplyNudge(ReaProject project, int nudgeflag, int nudgewhat, int nudgeunits, value, bool reverse, int copies)
Lua: boolean reaper.ApplyNudge(ReaProject project, integer nudgeflag, integer nudgewhat, integer nudgeunits, number value, boolean reverse, integer copies)
Python: Boolean RPR_ApplyNudge(ReaProject project, Int nudgeflag, Int nudgewhat, Int nudgeunits, Float value, Boolean reverse, Int copies)
C: int Audio_IsPreBuffer()
EEL: int Audio_IsPreBuffer()
is in pre-buffer? threadsafe
C: int Audio_IsRunning()
Validates the current state of the audio accessor -- must ONLY call this from the main thread. Returns true if the state changed.
C: void ClearAllRecArmed()
EEL: ClearAllRecArmed()
Lua: reaper.ClearAllRecArmed()
Python: RPR_ClearAllRecArmed()
C: void ClearPeakCache()
EEL: ClearPeakCache()
Lua: reaper.ClearPeakCache()
Python: RPR_ClearPeakCache()
count the number of items in the project (proj=0 for active project)
C: int CountProjectMarkers(ReaProject* proj, int* num_markersOut, int* num_regionsOut)
Python: (Int retval, ReaProject proj, Int num_markersOut, Int num_regionsOut) = RPR_CountProjectMarkers(proj, num_markersOut, num_regionsOut)
count the number of selected items in the project (proj=0 for active project)
count the number of selected tracks in the project (proj=0 for active project)
See GetTakeEnvelope
Count the number of FX parameter knobs displayed on the track control panel.
Count the number of tempo/time signature markers in the project. See GetTempoTimeSigMarker, SetTempoTimeSigMarker, AddTempoTimeSigMarker.
see GetTrackEnvelope
count the number of tracks in the project (proj=0 for active project)
C: MediaItem* CreateNewMIDIItemInProj(MediaTrack* track, double starttime, double endtime, const bool* qnInOptional)
Lua: MediaItem reaper.CreateNewMIDIItemInProj(MediaTrack track, number starttime, number endtime, optional boolean qnInOptional)
Python: MediaItem RPR_CreateNewMIDIItemInProj(MediaTrack track, Float starttime, Float endtime, const bool qnInOptional)
Create a new MIDI media item, containing no MIDI events. Time is in seconds unless qn is set.
Create an audio accessor object for this take. Must only call from the main thread. See CreateTrackAudioAccessor, DestroyAudioAccessor, GetAudioAccessorHash,
GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
Create an audio accessor object for this track. Must only call from the main thread. See CreateTakeAudioAccessor, DestroyAudioAccessor, GetAudioAccessorHash,
GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
call this to force flushing of the undo states after using CSurf_On*Change()
EEL: CSurf_GoEnd()
Lua: reaper.CSurf_GoEnd()
Python: RPR_CSurf_GoEnd()
C: void CSurf_GoStart()
EEL: CSurf_GoStart()
Lua: reaper.CSurf_GoStart()
Python: RPR_CSurf_GoStart()
Lua: number reaper.CSurf_OnPanChangeEx(MediaTrack trackid, number pan, boolean relative, boolean allowGang)
Python: Float RPR_CSurf_OnPanChangeEx(MediaTrack trackid, Float pan, Boolean relative, Boolean allowGang)
C: void CSurf_OnPause()
EEL: CSurf_OnPause()
Lua: reaper.CSurf_OnPause()
Python: RPR_CSurf_OnPause()
C: void CSurf_OnPlay()
EEL: CSurf_OnPlay()
Lua: reaper.CSurf_OnPlay()
Python: RPR_CSurf_OnPlay()
EEL: CSurf_OnPlayRateChange(playrate)
C: void CSurf_OnRecord()
EEL: CSurf_OnRecord()
Lua: reaper.CSurf_OnRecord()
Python: RPR_CSurf_OnRecord()
C: double CSurf_OnRecvPanChange(MediaTrack* trackid, int recv_index, double pan, bool relative)
Lua: number reaper.CSurf_OnRecvPanChange(MediaTrack trackid, integer recv_index, number pan, boolean relative)
Python: Float RPR_CSurf_OnRecvPanChange(MediaTrack trackid, Int recv_index, Float pan, Boolean relative)
Lua: number reaper.CSurf_OnRecvVolumeChange(MediaTrack trackid, integer recv_index, number volume, boolean relative)
Python: Float RPR_CSurf_OnRecvVolumeChange(MediaTrack trackid, Int recv_index, Float volume, Boolean relative)
Lua: number reaper.CSurf_OnSendPanChange(MediaTrack trackid, integer send_index, number pan, boolean relative)
Python: Float RPR_CSurf_OnSendPanChange(MediaTrack trackid, Int send_index, Float pan, Boolean relative)
Lua: number reaper.CSurf_OnSendVolumeChange(MediaTrack trackid, integer send_index, number volume, boolean relative)
Python: Float RPR_CSurf_OnSendVolumeChange(MediaTrack trackid, Int send_index, Float volume, Boolean relative)
C: void CSurf_OnStop()
EEL: CSurf_OnStop()
Lua: reaper.CSurf_OnStop()
Python: RPR_CSurf_OnStop()
EEL: CSurf_OnTempoChange(bpm)
Lua: number reaper.CSurf_OnVolumeChangeEx(MediaTrack trackid, number volume, boolean relative, boolean allowGang)
Python: Float RPR_CSurf_OnVolumeChangeEx(MediaTrack trackid, Float volume, Boolean relative, Boolean allowGang)
Lua: number reaper.CSurf_OnWidthChangeEx(MediaTrack trackid, number width, boolean relative, boolean allowGang)
Python: Float RPR_CSurf_OnWidthChangeEx(MediaTrack trackid, Float width, Boolean relative, Boolean allowGang)
EEL: CSurf_ResetAllCachedVolPanStates()
Lua: reaper.CSurf_ResetAllCachedVolPanStates()
Python: RPR_CSurf_ResetAllCachedVolPanStates()
EEL: CSurf_ScrubAmt(amt)
C: void CSurf_SetTrackListChange()
EEL: CSurf_SetTrackListChange()
Lua: reaper.CSurf_SetTrackListChange()
Python: RPR_CSurf_SetTrackListChange()
C: double DB2SLIDER(double x)
Delete the extended state value for a specific section and key. persist=true means the value should remain deleted the next time REAPER is opened. See SetExtState, GetExtState,
HasExtState.
Differs from DeleteProjectMarker only in that markrgnidx is 0 for the first marker/region, 1 for the next, etc (see EnumProjectMarkers3), rather than representing the displayed
marker/region ID number (see SetProjectMarker4).
Deletes one or more stretch markers. Returns number of stretch markers deleted.
deletes a track
Destroy an audio accessor. Must only call from the main thread. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, GetAudioAccessorHash, GetAudioAccessorStartTime,
GetAudioAccessorEndTime, GetAudioAccessorSamples.
updates preference for docker window ident_str to be in dock whichDock on next open
C: int DockIsChildOfDock(HWND hwnd, bool* isFloatingDockerOut)
C: void DockWindowAdd(HWND hwnd, const char* name, int pos, bool allowShow)
C: void DockWindowAddEx(HWND hwnd, const char* name, const char* identstr, bool allowShow)
C: void DockWindowRefresh()
EEL: DockWindowRefresh()
Lua: reaper.DockWindowRefresh()
Python: RPR_DockWindowRefresh()
call with a saved window rect for your window and it'll correct any positioning info.
Start querying modes at 0, returns FALSE when no more modes possible, sets strOut to NULL if a mode is currently unsupported
C: int EnumProjectMarkers(int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut)
EEL: int EnumProjectMarkers(int idx, bool &isrgnOut, &posOut, &rgnendOut, #nameOut, int &markrgnindexnumberOut)
Lua: integer retval, boolean isrgnOut, number posOut, number rgnendOut, string nameOut, number markrgnindexnumberOut reaper.EnumProjectMarkers(integer idx)
Python: (Int retval, Int idx, Boolean isrgnOut, Float posOut, Float rgnendOut, String nameOut, Int markrgnindexnumberOut) = RPR_EnumProjectMarkers(idx, isrgnOut,
posOut, rgnendOut, nameOut, markrgnindexnumberOut)
C: int EnumProjectMarkers2(ReaProject* proj, int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut)
EEL: int EnumProjectMarkers2(ReaProject proj, int idx, bool &isrgnOut, &posOut, &rgnendOut, #nameOut, int &markrgnindexnumberOut)
Lua: integer retval, boolean isrgnOut, number posOut, number rgnendOut, string nameOut, number markrgnindexnumberOut reaper.EnumProjectMarkers2(ReaProject proj,
integer idx)
Python: (Int retval, ReaProject proj, Int idx, Boolean isrgnOut, Float posOut, Float rgnendOut, String nameOut, Int markrgnindexnumberOut) =
RPR_EnumProjectMarkers2(proj, idx, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut)
C: int EnumProjectMarkers3(ReaProject* proj, int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut, int*
colorOut)
EEL: int EnumProjectMarkers3(ReaProject proj, int idx, bool &isrgnOut, &posOut, &rgnendOut, #nameOut, int &markrgnindexnumberOut, int &colorOut)
Lua: integer retval, boolean isrgnOut, number posOut, number rgnendOut, string nameOut, number markrgnindexnumberOut, number colorOut reaper.EnumProjectMarkers3
(ReaProject proj, integer idx)
Python: (Int retval, ReaProject proj, Int idx, Boolean isrgnOut, Float posOut, Float rgnendOut, String nameOut, Int markrgnindexnumberOut, Int colorOut) =
RPR_EnumProjectMarkers3(proj, idx, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut)
Python: (ReaProject retval, Int idx, String projfn, Int projfn_sz) = RPR_EnumProjects(idx, projfn, projfn_sz)
idx=-1 for current project,projfn can be NULL if not interested in filename. use idx 0x40000000 for currently rendering project, if any.
C: bool EnumProjExtState(ReaProject* proj, const char* extname, int idx, char* keyOutOptional, int keyOutOptional_sz, char* valOutOptional, int
valOutOptional_sz)
EEL: bool EnumProjExtState(ReaProject proj, "extname", int idx, optional #keyOutOptional, optional #valOutOptional)
Lua: boolean retval, optional string keyOutOptional, optional string valOutOptional reaper.EnumProjExtState(ReaProject proj, string extname, integer idx)
Python: (Boolean retval, ReaProject proj, String extname, Int idx, String keyOutOptional, Int keyOutOptional_sz, String valOutOptional, Int valOutOptional_sz) =
RPR_EnumProjExtState(proj, extname, idx, keyOutOptional, keyOutOptional_sz, valOutOptional, valOutOptional_sz)
Enumerate the data stored with the project for a specific extname. Returns false when there is no more data. See SetProjExtState, GetProjExtState.
Enumerate which tracks will be rendered within this region when using the region render matrix. When called with rendertrack==0, the function returns the first track that will be
rendered (which may be the master track); rendertrack==1 will return the next track rendered, and so on. The function returns NULL when there are no more tracks that will be rendered
within this region.
Lua: boolean retval, string programName reaper.EnumTrackMIDIProgramNames(integer track, integer programNumber, string programName)
Python: (Boolean retval, Int track, Int programNumber, String programName, Int programName_sz) = RPR_EnumTrackMIDIProgramNames(track, programNumber, programName,
programName_sz)
returns false if there are no plugins on the track that support MIDI programs,or if all programs have been enumerated
C: bool EnumTrackMIDIProgramNamesEx(ReaProject* proj, MediaTrack* track, int programNumber, char* programName, int programName_sz)
Lua: boolean retval, string programName reaper.EnumTrackMIDIProgramNamesEx(ReaProject proj, MediaTrack track, integer programNumber, string programName)
Python: (Boolean retval, ReaProject proj, MediaTrack track, Int programNumber, String programName, Int programName_sz) = RPR_EnumTrackMIDIProgramNamesEx(proj,
track, programNumber, programName, programName_sz)
returns false if there are no plugins on the track that support MIDI programs,or if all programs have been enumerated
C: int Envelope_Evaluate(TrackEnvelope* envelope, double time, double samplerate, int samplesRequested, double* valueOutOptional, double* dVdSOutOptional,
double* ddVdSOutOptional, double* dddVdSOutOptional)
EEL: int Envelope_Evaluate(TrackEnvelope envelope, time, samplerate, int samplesRequested, optional &valueOutOptional, optional &dVdSOutOptional, optional
&ddVdSOutOptional, optional &dddVdSOutOptional)
Lua: integer retval, optional number valueOutOptional, optional number dVdSOutOptional, optional number ddVdSOutOptional, optional number dddVdSOutOptional
reaper.Envelope_Evaluate(TrackEnvelope envelope, number time, number samplerate, integer samplesRequested)
Python: (Int retval, TrackEnvelope envelope, Float time, Float samplerate, Int samplesRequested, Float valueOutOptional, Float dVdSOutOptional, Float
ddVdSOutOptional, Float dddVdSOutOptional) = RPR_Envelope_Evaluate(envelope, time, samplerate, samplesRequested, valueOutOptional, dVdSOutOptional,
ddVdSOutOptional, dddVdSOutOptional)
Get the effective envelope value at a given time position. samplesRequested is how long the caller expects until the next call to Envelope_Evaluate (often, the buffer block size). The
return value is how many samples beyond that time position that the returned values are valid. dVdS is the change in value per sample (first derivative), ddVdS is the seond derivative,
dddVdS is the third derivative. See GetEnvelopeScalingMode.
Find the tempo/time signature marker that falls at or before this time position (the marker that is in effect as of this time position).
Python: (Float tpos, String buf, Int buf_sz) = RPR_format_timestr(tpos, buf, buf_sz)
C: void format_timestr_len(double tpos, char* buf, int buf_sz, double offset, int modeoverride)
Lua: string buf reaper.format_timestr_len(number tpos, string buf, number offset, integer modeoverride)
Python: (Float tpos, String buf, Int buf_sz, Float offset, Int modeoverride) = RPR_format_timestr_len(tpos, buf, buf_sz, offset, modeoverride)
Python: (Float tpos, String buf, Int buf_sz, Int modeoverride) = RPR_format_timestr_pos(tpos, buf, buf_sz, modeoverride)
C: void genGuid(GUID* g)
EEL: genGuid(#gGUID)
Python: RPR_genGuid(GUID g)
Get the end time of the audio that can be returned from this accessor. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, GetAudioAccessorHash,
GetAudioAccessorStartTime, GetAudioAccessorSamples.
Get a short hash string (128 chars or less) that will change only if the underlying samples change. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor,
GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
C: int GetAudioAccessorSamples(AudioAccessor* accessor, int samplerate, int numchannels, double starttime_sec, int numsamplesperchannel, double* samplebuffer)
EEL: int GetAudioAccessorSamples(AudioAccessor accessor, int samplerate, int numchannels, starttime_sec, int numsamplesperchannel, buffer_ptr samplebuffer)
Lua: integer reaper.GetAudioAccessorSamples(AudioAccessor accessor, integer samplerate, integer numchannels, number starttime_sec, integer numsamplesperchannel,
reaper.array samplebuffer)
Python: (Int retval, AudioAccessor accessor, Int samplerate, Int numchannels, Float starttime_sec, Int numsamplesperchannel, Float samplebuffer) =
RPR_GetAudioAccessorSamples(accessor, samplerate, numchannels, starttime_sec, numsamplesperchannel, samplebuffer)
Get a block of samples from the audio accessor. Samples are extracted immediately pre-FX, and returned interleaved (first sample of first channel, first sample of second channel...).
Returns 0 if no audio, 1 if audio, -1 on error. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, GetAudioAccessorHash,
GetAudioAccessorStartTime, GetAudioAccessorEndTime.
This function has special handling in Python, and only returns two objects, the API function return value, and the sample buffer. Example usage:
tr = RPR_GetTrack(0, 0)
aa = RPR_CreateTrackAudioAccessor(tr)
buf = list([0]*2*1024) # 2 channels, 1024 samples each, initialized to zero
pos = 0.0
(ret, buf) = GetAudioAccessorSamples(aa, 44100, 2, pos, 1024, buf)
# buf now holds the first 2*1024 audio samples from the track.
# typically GetAudioAccessorSamples() would be called within a loop, increasing pos each time.
Get the start time of the audio that can be returned from this accessor. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, GetAudioAccessorHash,
GetAudioAccessorEndTime, GetAudioAccessorSamples.
C: ReaProject* GetCurrentProjectInLoadSave()
C: int GetCursorContext()
return the current cursor context: 0 if track panels, 1 if items, 2 if envelopes, otherwise unknown
0 if track panels, 1 if items, 2 if envelopes, otherwise unknown (unlikely when want_last_valid is true)
C: double GetCursorPosition()
returns the custom take, item, or track color that is used (according to the user preference) to color the media item. The color is returned as 0x01RRGGBB, so a return of zero means
"no color", not black.
returns the custom take, item, or track color that is used (according to the user preference) to color the media item. The color is returned as 0x01RRGGBB, so a return of zero means
"no color", not black.
C: bool GetEnvelopeName(TrackEnvelope* env, char* buf, int buf_sz)
Python: (Boolean retval, TrackEnvelope env, String buf, Int buf_sz) = RPR_GetEnvelopeName(env, buf, buf_sz)
C: bool GetEnvelopePoint(TrackEnvelope* envelope, int ptidx, double* timeOutOptional, double* valueOutOptional, int* shapeOutOptional, double*
tensionOutOptional, bool* selectedOutOptional)
EEL: bool GetEnvelopePoint(TrackEnvelope envelope, int ptidx, optional &timeOutOptional, optional &valueOutOptional, optional int &shapeOutOptional, optional
&tensionOutOptional, optional bool &selectedOutOptional)
Lua: boolean retval, optional number timeOutOptional, optional number valueOutOptional, optional number shapeOutOptional, optional number tensionOutOptional,
optional boolean selectedOutOptional reaper.GetEnvelopePoint(TrackEnvelope envelope, integer ptidx)
Python: (Boolean retval, TrackEnvelope envelope, Int ptidx, Float timeOutOptional, Float valueOutOptional, Int shapeOutOptional, Float tensionOutOptional, Boolean
selectedOutOptional) = RPR_GetEnvelopePoint(envelope, ptidx, timeOutOptional, valueOutOptional, shapeOutOptional, tensionOutOptional, selectedOutOptional)
Returns the envelope point at or immediately prior to the given time position. See GetEnvelopePoint, SetEnvelopePoint, Envelope_Evaluate.
Returns the envelope scaling mode: 0=no scaling, 1=fader scaling. All API functions deal with raw envelope point values, to convert raw from/to scaled values see
ScaleFromEnvelopeMode, ScaleToEnvelopeMode.
Lua: boolean retval, string strNeedBig reaper.GetEnvelopeStateChunk(TrackEnvelope env, string strNeedBig, boolean isundoOptional)
Python: (Boolean retval, TrackEnvelope env, String strNeedBig, Int strNeedBig_sz, Boolean isundoOptional) = RPR_GetEnvelopeStateChunk(env, strNeedBig,
strNeedBig_sz, isundoOptional)
Gets the RPPXML state of an envelope, returns true if successful. Undo flag is a performance/caching hint.
Get the extended state value for a specific section and key. See SetExtState, DeleteExtState, HasExtState.
Lua: integer retval, number tracknumberOut, number itemnumberOut, number fxnumberOut reaper.GetFocusedFX()
Python: (Int retval, Int tracknumberOut, Int itemnumberOut, Int fxnumberOut) = RPR_GetFocusedFX(tracknumberOut, itemnumberOut, fxnumberOut)
Returns 1 if a track FX window has focus, 2 if an item FX window has focus, 0 if no FX window has focus. tracknumber==0 means the master track, 1 means track 1, etc. itemnumber
and fxnumber are zero-based. See GetLastTouchedFX.
returns free disk space in megabytes, pathIdx 0 for normal, 1 for alternate.
EEL: TrackEnvelope GetFXEnvelope(MediaTrack track, int fxindex, int parameterindex, bool create)
Lua: TrackEnvelope reaper.GetFXEnvelope(MediaTrack track, integer fxindex, integer parameterindex, boolean create)
Python: TrackEnvelope RPR_GetFXEnvelope(MediaTrack track, Int fxindex, Int parameterindex, Boolean create)
Returns the FX parameter envelope. If the envelope does not exist and create=true, the envelope will be created.
C: int GetGlobalAutomationOverride()
C: double GetHZoomLevel()
returns pixels/second
Lua: boolean retval, string strNeedBig reaper.GetItemStateChunk(MediaItem item, string strNeedBig, boolean isundoOptional)
Python: (Boolean retval, MediaItem item, String strNeedBig, Int strNeedBig_sz, Boolean isundoOptional) = RPR_GetItemStateChunk(item, strNeedBig, strNeedBig_sz,
isundoOptional)
Gets the RPPXML state of an item, returns true if successful. Undo flag is a performance/caching hint.
Lua: number markeridxOut retval, number regionidxOut reaper.GetLastMarkerAndCurRegion(ReaProject proj, number time)
Python: (ReaProject proj, Float time, Int markeridxOut, Int regionidxOut) = RPR_GetLastMarkerAndCurRegion(proj, time, markeridxOut, regionidxOut)
Get the last project marker before time, and/or the project region that includes time. markeridx and regionidx are returned not necessarily as the displayed marker/region index, but as
the index that can be passed to EnumProjectMarkers. Either or both of markeridx and regionidx may be NULL. See EnumProjectMarkers.
Lua: boolean retval, number tracknumberOut, number fxnumberOut, number paramnumberOut reaper.GetLastTouchedFX()
Python: (Boolean retval, Int tracknumberOut, Int fxnumberOut, Int paramnumberOut) = RPR_GetLastTouchedFX(tracknumberOut, fxnumberOut, paramnumberOut)
Returns true if the last touched FX parameter is valid, false otherwise. tracknumber==0 means the master track, 1 means track 1, etc. fxnumber and paramnumber are zero-based. See
GetFocusedFX.
C: MediaTrack* GetLastTouchedTrack()
C: HWND GetMainHwnd()
C: int GetMasterMuteSoloFlags()
&1=master mute,&2=master solo. This is deprecated as you can just query the master track as well.
C: int GetMasterTrackVisibility()
returns &1 if the master track is visible in the TCP, &2 if visible in the mixer. See SetMasterTrackVisibility.
C: int GetMaxMidiInputs()
C: int GetMaxMidiOutputs()
get an item from a project by item count (zero-based) (proj=0 for active project)
Python: (PCM_source source, String filenamebuf, Int filenamebuf_sz) = RPR_GetMediaSourceFileName(source, filenamebuf, filenamebuf_sz)
Copies the media source filename to typebuf. Note that in-project MIDI media sources have no associated filename.
Returns the length of the source media. If the media source is beat-based, the length will be in quarter notes, otherwise it will be in seconds.
Returns the sample rate. MIDI source media will return zero.
Python: (PCM_source source, String typebuf, Int typebuf_sz) = RPR_GetMediaSourceType(source, typebuf, typebuf_sz)
Python: (Boolean retval, Int dev, String nameout, Int nameout_sz) = RPR_GetMIDIInputName(dev, nameout, nameout_sz)
Python: (Boolean retval, Int dev, String nameout, Int nameout_sz) = RPR_GetMIDIOutputName(dev, nameout, nameout_sz)
C: MediaTrack* GetMixerScroll()
C: void GetMouseModifier(const char* context, int modifier_flag, char* action, int action_sz)
Python: (String context, Int modifier_flag, String action, Int action_sz) = RPR_GetMouseModifier(context, modifier_flag, action, action_sz)
Get the current mouse modifier assignment for a specific modifier key assignment, in a specific context.
action will be filled in with the command ID number for a built-in mouse modifier
or built-in REAPER command ID, or the custom action ID string.
See SetMouseModifier for more information.
C: int GetNumAudioInputs()
C: int GetNumAudioOutputs()
C: int GetNumMIDIInputs()
C: int GetNumMIDIOutputs()
C: int GetNumTracks()
C: double GetOutputLatency()
Python: (String fn, String buf, Int buf_sz) = RPR_GetPeakFileName(fn, buf, buf_sz)
get the peak file name for a given file (can be either filename.reapeaks,or a hashed filename in another path)
C: void GetPeakFileNameEx(const char* fn, char* buf, int buf_sz, bool forWrite)
Python: (String fn, String buf, Int buf_sz, Boolean forWrite) = RPR_GetPeakFileNameEx(fn, buf, buf_sz, forWrite)
get the peak file name for a given file (can be either filename.reapeaks,or a hashed filename in another path)
C: void GetPeakFileNameEx2(const char* fn, char* buf, int buf_sz, bool forWrite, const char* peaksfileextension)
Lua: string buf reaper.GetPeakFileNameEx2(string fn, string buf, boolean forWrite, string peaksfileextension)
Python: (String fn, String buf, Int buf_sz, Boolean forWrite, String peaksfileextension) = RPR_GetPeakFileNameEx2(fn, buf, buf_sz, forWrite, peaksfileextension)
C: double GetPlayPosition()
C: double GetPlayPosition2()
C: int GetPlayState()
EEL: GetProjectPath(#buf)
Python: (ReaProject proj, String buf, Int buf_sz) = RPR_GetProjectPathEx(proj, buf, buf_sz)
deprecated
Python: (ReaProject proj, Float bpmOut, Float bpiOut) = RPR_GetProjectTimeSignature2(proj, bpmOut, bpiOut)
Gets basic time signature (beats per minute, numerator of time signature in bpi)
this does not reflect tempo envelopes but is purely what is set in the project settings.
C: int GetProjExtState(ReaProject* proj, const char* extname, const char* key, char* valOutNeedBig, int valOutNeedBig_sz)
Lua: integer retval, string valOutNeedBig reaper.GetProjExtState(ReaProject proj, string extname, string key)
Python: (Int retval, ReaProject proj, String extname, String key, String valOutNeedBig, Int valOutNeedBig_sz) = RPR_GetProjExtState(proj, extname, key,
valOutNeedBig, valOutNeedBig_sz)
Get the value previously associated with this extname and key, the last time the project was saved. See SetProjExtState, EnumProjExtState.
returns path where ini files are stored, other things are in subdirectories.
get a selected item by selected item count (zero-based) (proj=0 for active project)
get a selected track from a project by selected track count (zero-based) (proj=0 for active project)
C: void GetSet_ArrangeView2(ReaProject* proj, bool isSet, int screen_x_start, int screen_x_end, double* start_timeOut, double* end_timeOut)
EEL: GetSet_ArrangeView2(ReaProject proj, bool isSet, int screen_x_start, int screen_x_end, &start_timeOut, &end_timeOut)
Lua: number start_timeOut retval, number end_timeOut reaper.GetSet_ArrangeView2(ReaProject proj, boolean isSet, integer screen_x_start, integer screen_x_end)
Python: (ReaProject proj, Boolean isSet, Int screen_x_start, Int screen_x_end, Float start_timeOut, Float end_timeOut) = RPR_GetSet_ArrangeView2(proj, isSet,
screen_x_start, screen_x_end, start_timeOut, end_timeOut)
C: void GetSet_LoopTimeRange(bool isSet, bool isLoop, double* startOut, double* endOut, bool allowautoseek)
Python: (Boolean isSet, Boolean isLoop, Float startOut, Float endOut, Boolean allowautoseek) = RPR_GetSet_LoopTimeRange(isSet, isLoop, startOut, endOut,
allowautoseek)
C: void GetSet_LoopTimeRange2(ReaProject* proj, bool isSet, bool isLoop, double* startOut, double* endOut, bool allowautoseek)
EEL: GetSet_LoopTimeRange2(ReaProject proj, bool isSet, bool isLoop, &startOut, &endOut, bool allowautoseek)
Lua: number startOut retval, number endOut reaper.GetSet_LoopTimeRange2(ReaProject proj, boolean isSet, boolean isLoop, number startOut, number endOut, boolean
allowautoseek)
Python: (ReaProject proj, Boolean isSet, Boolean isLoop, Float startOut, Float endOut, Boolean allowautoseek) = RPR_GetSet_LoopTimeRange2(proj, isSet, isLoop,
startOut, endOut, allowautoseek)
Python: (Boolean retval, TrackEnvelope env, String str, Int str_sz) = RPR_GetSetEnvelopeState(env, str, str_sz)
Lua: boolean retval, string str reaper.GetSetEnvelopeState2(TrackEnvelope env, string str, boolean isundo)
Python: (Boolean retval, TrackEnvelope env, String str, Int str_sz, Boolean isundo) = RPR_GetSetEnvelopeState2(env, str, str_sz, isundo)
Python: (Boolean retval, MediaItem item, String str, Int str_sz) = RPR_GetSetItemState(item, str, str_sz)
Lua: boolean retval, string str reaper.GetSetItemState2(MediaItem item, string str, boolean isundo)
Python: (Boolean retval, MediaItem item, String str, Int str_sz, Boolean isundo) = RPR_GetSetItemState2(item, str, str_sz, isundo)
C: bool GetSetMediaItemTakeInfo_String(MediaItem_Take* tk, const char* parmname, char* stringNeedBig, bool setnewvalue)
Lua: boolean retval, string stringNeedBig reaper.GetSetMediaItemTakeInfo_String(MediaItem_Take tk, string parmname, string stringNeedBig, boolean setnewvalue)
Python: (Boolean retval, MediaItem_Take tk, String parmname, String stringNeedBig, Boolean setnewvalue) = RPR_GetSetMediaItemTakeInfo_String(tk, parmname,
stringNeedBig, setnewvalue)
C: bool GetSetMediaTrackInfo_String(MediaTrack* tr, const char* parmname, char* stringNeedBig, bool setnewvalue)
Lua: boolean retval, string stringNeedBig reaper.GetSetMediaTrackInfo_String(MediaTrack tr, string parmname, string stringNeedBig, boolean setnewvalue)
Python: (Boolean retval, MediaTrack tr, String parmname, String stringNeedBig, Boolean setnewvalue) = RPR_GetSetMediaTrackInfo_String(tr, parmname, stringNeedBig,
setnewvalue)
Get or set track string attributes.
P_NAME : char * : track name (on master returns NULL)
Python: (Boolean retval, MediaTrack track, String str, Int str_sz) = RPR_GetSetTrackState(track, str, str_sz)
Lua: boolean retval, string str reaper.GetSetTrackState2(MediaTrack track, string str, boolean isundo)
Python: (Boolean retval, MediaTrack track, String str, Int str_sz, Boolean isundo) = RPR_GetSetTrackState2(track, str, str_sz, isundo)
Lua: integer retval, number posOut, optional number srcposOutOptional reaper.GetTakeStretchMarker(MediaItem_Take take, integer idx)
Python: (Int retval, MediaItem_Take take, Int idx, Float posOut, Float srcposOutOptional) = RPR_GetTakeStretchMarker(take, idx, posOut, srcposOutOptional)
Gets information on a stretch marker, idx is 0..n. Returns false if stretch marker not valid. posOut will be set to position in item, srcposOutOptional will be set to source media position.
Returns index. if input index is -1, next marker is found using position (or source position if position is -1). If position/source position are used to find marker position, their values are
not updated.
C: bool GetTCPFXParm(ReaProject* project, MediaTrack* track, int index, int* fxindexOut, int* parmidxOut)
EEL: bool GetTCPFXParm(ReaProject project, MediaTrack track, int index, int &fxindexOut, int &parmidxOut)
Lua: boolean retval, number fxindexOut, number parmidxOut reaper.GetTCPFXParm(ReaProject project, MediaTrack track, integer index)
Python: (Boolean retval, ReaProject project, MediaTrack track, Int index, Int fxindexOut, Int parmidxOut) = RPR_GetTCPFXParm(project, track, index, fxindexOut,
parmidxOut)
C: bool GetTempoMatchPlayRate(PCM_source* source, double srcscale, double position, double mult, double* rateOut, double* targetlenOut)
Lua: boolean retval, number rateOut, number targetlenOut reaper.GetTempoMatchPlayRate(PCM_source source, number srcscale, number position, number mult)
Python: (Boolean retval, PCM_source source, Float srcscale, Float position, Float mult, Float rateOut, Float targetlenOut) = RPR_GetTempoMatchPlayRate(source,
srcscale, position, mult, rateOut, targetlenOut)
finds the playrate and target length to insert this item stretched to a round power-of-2 number of bars, between 1/8 and 256
C: bool GetTempoTimeSigMarker(ReaProject* proj, int ptidx, double* timeposOut, int* measureposOut, double* beatposOut, double* bpmOut, int* timesig_numOut, int*
timesig_denomOut, bool* lineartempoOut)
EEL: bool GetTempoTimeSigMarker(ReaProject proj, int ptidx, &timeposOut, int &measureposOut, &beatposOut, &bpmOut, int ×ig_numOut, int ×ig_denomOut,
bool &lineartempoOut)
Lua: boolean retval, number timeposOut, number measureposOut, number beatposOut, number bpmOut, number timesig_numOut, number timesig_denomOut, boolean
lineartempoOut reaper.GetTempoTimeSigMarker(ReaProject proj, integer ptidx)
Python: (Boolean retval, ReaProject proj, Int ptidx, Float timeposOut, Int measureposOut, Float beatposOut, Float bpmOut, Int timesig_numOut, Int
timesig_denomOut, Boolean lineartempoOut) = RPR_GetTempoTimeSigMarker(proj, ptidx, timeposOut, measureposOut, beatposOut, bpmOut, timesig_numOut,
timesig_denomOut, lineartempoOut)
Get information about a tempo/time signature marker. See CountTempoTimeSigMarkers, SetTempoTimeSigMarker, AddTempoTimeSigMarker.
See GetToggleCommandStateEx.
For the main action context, the MIDI editor, or the media explorer, returns the toggle state of the action. 0=off, 1=on, -1=NA because the action does not have on/off states. For the
MIDI editor, the action state for the most recently focused window will be returned.
C: HWND GetTooltipWindow()
gets a tooltip window,in case you want to ask it for font information. Can return NULL.
get a track from a project by track count (zero-based) (proj=0 for active project)
Returns the track color, as 0x01RRGGBB. Black is returned as 0x01000000, no color setting is returned as 0.
C: const char* GetTrackMIDINoteNameEx(ReaProject* proj, MediaTrack* track, int note, int chan)
EEL: bool GetTrackMIDINoteNameEx(#retval, ReaProject proj, MediaTrack track, int note, int chan)
Lua: string reaper.GetTrackMIDINoteNameEx(ReaProject proj, MediaTrack track, integer note, integer chan)
Python: String RPR_GetTrackMIDINoteNameEx(ReaProject proj, MediaTrack track, Int note, Int chan)
Lua: number note_loOut retval, number note_hiOut reaper.GetTrackMIDINoteRange(ReaProject proj, MediaTrack track)
Python: (ReaProject proj, MediaTrack track, Int note_loOut, Int note_hiOut) = RPR_GetTrackMIDINoteRange(proj, track, note_loOut, note_hiOut)
returns number of sends/receives/hardware outputs - category is <0 for receives, 0=sends, >0 for hardware outputs
Lua: boolean retval, string buf reaper.GetTrackReceiveName(MediaTrack track, integer recv_index, string buf)
Python: (Boolean retval, MediaTrack track, Int recv_index, String buf, Int buf_sz) = RPR_GetTrackReceiveName(track, recv_index, buf, buf_sz)
C: bool GetTrackReceiveUIMute(MediaTrack* track, int recv_index, bool* muteOut)
Python: (Boolean retval, MediaTrack track, Int recv_index, Boolean muteOut) = RPR_GetTrackReceiveUIMute(track, recv_index, muteOut)
Lua: boolean retval, number volumeOut, number panOut reaper.GetTrackReceiveUIVolPan(MediaTrack track, integer recv_index)
Python: (Boolean retval, MediaTrack track, Int recv_index, Float volumeOut, Float panOut) = RPR_GetTrackReceiveUIVolPan(track, recv_index, volumeOut, panOut)
Lua: boolean retval, string buf reaper.GetTrackSendName(MediaTrack track, integer send_index, string buf)
Python: (Boolean retval, MediaTrack track, Int send_index, String buf, Int buf_sz) = RPR_GetTrackSendName(track, send_index, buf, buf_sz)
Python: (Boolean retval, MediaTrack track, Int send_index, Boolean muteOut) = RPR_GetTrackSendUIMute(track, send_index, muteOut)
Lua: boolean retval, number volumeOut, number panOut reaper.GetTrackSendUIVolPan(MediaTrack track, integer send_index)
Python: (Boolean retval, MediaTrack track, Int send_index, Float volumeOut, Float panOut) = RPR_GetTrackSendUIVolPan(track, send_index, volumeOut, panOut)
Lua: boolean retval, string strNeedBig reaper.GetTrackStateChunk(MediaTrack track, string strNeedBig, boolean isundoOptional)
Python: (Boolean retval, MediaTrack track, String strNeedBig, Int strNeedBig_sz, Boolean isundoOptional) = RPR_GetTrackStateChunk(track, strNeedBig,
strNeedBig_sz, isundoOptional)
Gets the RPPXML state of a track, returns true if successful. Undo flag is a performance/caching hint.
Lua: boolean retval, number pan1Out, number pan2Out, number panmodeOut reaper.GetTrackUIPan(MediaTrack track)
Python: (Boolean retval, MediaTrack track, Float pan1Out, Float pan2Out, Int panmodeOut) = RPR_GetTrackUIPan(track, pan1Out, pan2Out, panmodeOut)
Python: (Boolean retval, MediaTrack track, Float volumeOut, Float panOut) = RPR_GetTrackUIVolPan(track, volumeOut, panOut)
Lua: boolean retval, string filenameNeed4096 reaper.GetUserFileNameForRead(string filenameNeed4096, string title, string defext)
Python: (Boolean retval, String filenameNeed4096, String title, String defext) = RPR_GetUserFileNameForRead(filenameNeed4096, title, defext)
returns true if the user selected a valid file, false if the user canceled the dialog
C: bool GetUserInputs(const char* title, int num_inputs, const char* captions_csv, char* retvals_csv, int retvals_csv_sz)
Lua: boolean retval, string retvals_csv reaper.GetUserInputs(string title, integer num_inputs, string captions_csv, string retvals_csv)
Python: (Boolean retval, String title, Int num_inputs, String captions_csv, String retvals_csv, Int retvals_csv_sz) = RPR_GetUserInputs(title, num_inputs,
captions_csv, retvals_csv, retvals_csv_sz)
Go to marker. If use_timeline_order==true, marker_index 1 refers to the first marker on the timeline. If use_timeline_order==false, marker_index 1 refers to the first marker with the
user-editable index of 1.
Seek to region after current region finishes playing (smooth seek). If use_timeline_order==true, region_index 1 refers to the first region on the timeline. If use_timeline_order==false,
region_index 1 refers to the first region with the user-editable index of 1.
Runs the system color chooser dialog. Returns 0 if the user cancels the dialog.
C: int GSC_mainwnd(int t)
Returns true if there exists an extended state value for a specific section and key. See SetExtState, GetExtState, DeleteExtState.
returns name of track plugin that is supplying MIDI programs,or NULL if there is none
returns name of track plugin that is supplying MIDI programs,or NULL if there is none
Python: (String in, String out, Int out_sz) = RPR_image_resolve_fn(in, out, out_sz)
C: bool InsertEnvelopePoint(TrackEnvelope* envelope, double time, double value, int shape, double tension, bool selected, bool* noSortInOptional)
EEL: bool InsertEnvelopePoint(TrackEnvelope envelope, time, value, int shape, tension, bool selected, optional bool noSortInOptional)
Lua: boolean reaper.InsertEnvelopePoint(TrackEnvelope envelope, number time, number value, integer shape, number tension, boolean selected, optional boolean
noSortInOptional)
Python: (Boolean retval, TrackEnvelope envelope, Float time, Float value, Int shape, Float tension, Boolean selected, Boolean noSortInOptional) =
RPR_InsertEnvelopePoint(envelope, time, value, shape, tension, selected, noSortInOptional)
Insert an envelope point. If setting multiple points at once, set noSort=true, and call Envelope_SortPoints when done. See GetEnvelopePoint, SetEnvelopePoint,
GetEnvelopeScalingMode.
mode: 0=add to current track, 1=add new track, 3=add to selected items as takes, &4=stretch/loop to fit time sel, &8=try to match tempo 1x, &16=try to match tempo 0.5x, &32=try to
match tempo 2x, &64=don't preserve pitch when matching tempo, &128=no loop/section if startpct/endpct set, &256=force loop regardless of global preference for looping imported
items
C: int InsertMediaSection(const char* file, int mode, double startpct, double endpct, double pitchshift)
Lua: integer reaper.InsertMediaSection(string file, integer mode, number startpct, number endpct, number pitchshift)
Python: Int RPR_InsertMediaSection(String file, Int mode, Float startpct, Float endpct, Float pitchshift)
inserts a track at idx,of course this will be clamped to 0..GetNumTracks(). wantDefaults=TRUE for default envelopes/FX,otherwise no enabled fx/env
C: bool LICE_ClipLine(int* pX1Out, int* pY1Out, int* pX2Out, int* pY2Out, int xLo, int yLo, int xHi, int yHi)
EEL: bool LICE_ClipLine(int &pX1Out, int &pY1Out, int &pX2Out, int &pY2Out, int xLo, int yLo, int xHi, int yHi)
Lua: boolean retval, number pX1Out, number pY1Out, number pX2Out, number pY2Out reaper.LICE_ClipLine(number pX1Out, number pY1Out, number pX2Out, number pY2Out,
integer xLo, integer yLo, integer xHi, integer yHi)
Python: (Boolean retval, Int pX1Out, Int pY1Out, Int pX2Out, Int pY2Out, Int xLo, Int yLo, Int xHi, Int yHi) = RPR_LICE_ClipLine(pX1Out, pY1Out, pX2Out, pY2Out,
xLo, yLo, xHi, yHi)
Move the loop selection left or right. Returns true if snap is enabled.
See Main_OnCommandEx.
Performs an action belonging to the main action section. To perform non-native actions (ReaScripts, custom or extension plugins' actions) safely, see NamedCommandLookup().
EEL: Main_openProject("name")
C: double Master_GetTempo()
Convert play rate to/from a value between 0 and 1, representing the position on the project playrate slider.
Convert the tempo to/from a value between 0 and 1, representing bpm in the range of 40-296 bpm.
Returns 1 if the track holds the item, 2 if the track is a folder containing the track that holds the item, etc.
EEL: int MIDI_CountEvts(MediaItem_Take take, int ¬ecntOut, int &ccevtcntOut, int &textsyxevtcntOut)
Lua: integer retval, number notecntOut, number ccevtcntOut, number textsyxevtcntOut reaper.MIDI_CountEvts(MediaItem_Take take)
Python: (Int retval, MediaItem_Take take, Int notecntOut, Int ccevtcntOut, Int textsyxevtcntOut) = RPR_MIDI_CountEvts(take, notecntOut, ccevtcntOut,
textsyxevtcntOut)
Count the number of notes, CC events, and text/sysex events in a given MIDI item.
Returns the index of the next selected MIDI CC event after ccidx (-1 if there are no more selected events).
Returns the index of the next selected MIDI event after evtidx (-1 if there are no more selected events).
Returns the index of the next selected MIDI note after noteidx (-1 if there are no more selected events).
Returns the index of the next selected MIDI text/sysex event after textsyxidx (-1 if there are no more selected events).
C: bool MIDI_GetCC(MediaItem_Take* take, int ccidx, bool* selectedOut, bool* mutedOut, double* ppqposOut, int* chanmsgOut, int* chanOut, int* msg2Out, int*
msg3Out)
EEL: bool MIDI_GetCC(MediaItem_Take take, int ccidx, bool &selectedOut, bool &mutedOut, &ppqposOut, int &chanmsgOut, int &chanOut, int &msg2Out, int &msg3Out)
Lua: boolean retval, boolean selectedOut, boolean mutedOut, number ppqposOut, number chanmsgOut, number chanOut, number msg2Out, number msg3Out reaper.MIDI_GetCC
(MediaItem_Take take, integer ccidx)
Python: (Boolean retval, MediaItem_Take take, Int ccidx, Boolean selectedOut, Boolean mutedOut, Float ppqposOut, Int chanmsgOut, Int chanOut, Int msg2Out, Int
msg3Out) = RPR_MIDI_GetCC(take, ccidx, selectedOut, mutedOut, ppqposOut, chanmsgOut, chanOut, msg2Out, msg3Out)
C: bool MIDI_GetEvt(MediaItem_Take* take, int evtidx, bool* selectedOut, bool* mutedOut, double* ppqposOut, char* msg, int* msg_sz)
EEL: bool MIDI_GetEvt(MediaItem_Take take, int evtidx, bool &selectedOut, bool &mutedOut, &ppqposOut, #msg)
Lua: boolean retval, boolean selectedOut, boolean mutedOut, number ppqposOut, string msg reaper.MIDI_GetEvt(MediaItem_Take take, integer evtidx, boolean
selectedOut, boolean mutedOut, number ppqposOut, string msg)
Python: (Boolean retval, MediaItem_Take take, Int evtidx, Boolean selectedOut, Boolean mutedOut, Float ppqposOut, String msg, Int msg_sz) = RPR_MIDI_GetEvt(take,
evtidx, selectedOut, mutedOut, ppqposOut, msg, msg_sz)
Lua: number retval, optional number swingOutOptional, optional number noteLenOutOptional reaper.MIDI_GetGrid(MediaItem_Take take)
Python: (Float retval, MediaItem_Take take, Float swingOutOptional, Float noteLenOutOptional) = RPR_MIDI_GetGrid(take, swingOutOptional, noteLenOutOptional)
Returns the most recent MIDI editor grid size for this MIDI take, in QN. Swing is between 0 and 1. Note length is 0 if it follows the grid size.
Lua: boolean retval, string hash reaper.MIDI_GetHash(MediaItem_Take take, boolean notesonly, string hash)
Python: (Boolean retval, MediaItem_Take take, Boolean notesonly, String hash, Int hash_sz) = RPR_MIDI_GetHash(take, notesonly, hash, hash_sz)
Get a string that only changes when the MIDI data changes. If notesonly==true, then the string changes only when the MIDI notes change. See MIDI_GetTrackHash
C: bool MIDI_GetNote(MediaItem_Take* take, int noteidx, bool* selectedOut, bool* mutedOut, double* startppqposOut, double* endppqposOut, int* chanOut, int*
pitchOut, int* velOut)
EEL: bool MIDI_GetNote(MediaItem_Take take, int noteidx, bool &selectedOut, bool &mutedOut, &startppqposOut, &endppqposOut, int &chanOut, int &pitchOut, int
&velOut)
Lua: boolean retval, boolean selectedOut, boolean mutedOut, number startppqposOut, number endppqposOut, number chanOut, number pitchOut, number velOut
reaper.MIDI_GetNote(MediaItem_Take take, integer noteidx)
Python: (Boolean retval, MediaItem_Take take, Int noteidx, Boolean selectedOut, Boolean mutedOut, Float startppqposOut, Float endppqposOut, Int chanOut, Int
pitchOut, Int velOut) = RPR_MIDI_GetNote(take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut)
Returns the MIDI tick (ppq) position corresponding to the end of the measure.
Returns the MIDI tick (ppq) position corresponding to the start of the measure.
Returns the MIDI tick (ppq) position corresponding to a specific project time in quarter notes.
Returns the MIDI tick (ppq) position corresponding to a specific project time in seconds.
Returns the project time in quarter notes corresponding to a specific MIDI tick (ppq) position.
Returns the project time in seconds corresponding to a specific MIDI tick (ppq) position.
C: bool MIDI_GetScale(MediaItem_Take* take, int* rootOut, int* scaleOut, char* name, int name_sz)
Lua: boolean retval, number rootOut, number scaleOut, string name reaper.MIDI_GetScale(MediaItem_Take take, number rootOut, number scaleOut, string name)
Python: (Boolean retval, MediaItem_Take take, Int rootOut, Int scaleOut, String name, Int name_sz) = RPR_MIDI_GetScale(take, rootOut, scaleOut, name, name_sz)
Get the active scale in the media source, if any. root 0=C, 1=C#, etc. scale &0x1=root, &0x2=minor 2nd, &0x4=major 2nd, &0x8=minor 3rd, &0xF=fourth, etc.
C: bool MIDI_GetTextSysexEvt(MediaItem_Take* take, int textsyxevtidx, bool* selectedOutOptional, bool* mutedOutOptional, double* ppqposOutOptional, int*
typeOutOptional, char* msgOptional, int* msgOptional_sz)
EEL: bool MIDI_GetTextSysexEvt(MediaItem_Take take, int textsyxevtidx, optional bool &selectedOutOptional, optional bool &mutedOutOptional, optional
&ppqposOutOptional, optional int &typeOutOptional, optional #msgOptional)
Lua: boolean retval, optional boolean selectedOutOptional, optional boolean mutedOutOptional, optional number ppqposOutOptional, optional number typeOutOptional,
optional string msgOptional reaper.MIDI_GetTextSysexEvt(MediaItem_Take take, integer textsyxevtidx, optional boolean selectedOutOptional, optional boolean
mutedOutOptional, optional number ppqposOutOptional, optional number typeOutOptional, optional string msgOptional)
Python: (Boolean retval, MediaItem_Take take, Int textsyxevtidx, Boolean selectedOutOptional, Boolean mutedOutOptional, Float ppqposOutOptional, Int
typeOutOptional, String msgOptional, Int msgOptional_sz) = RPR_MIDI_GetTextSysexEvt(take, textsyxevtidx, selectedOutOptional, mutedOutOptional,
ppqposOutOptional, typeOutOptional, msgOptional, msgOptional_sz)
Get MIDI meta-event properties. Allowable types are -1:sysex (msg should not include bounding F0..F7), 1-7:MIDI text event types.
Lua: boolean retval, string hash reaper.MIDI_GetTrackHash(MediaTrack track, boolean notesonly, string hash)
Python: (Boolean retval, MediaTrack track, Boolean notesonly, String hash, Int hash_sz) = RPR_MIDI_GetTrackHash(track, notesonly, hash, hash_sz)
Get a string that only changes when the MIDI data changes. If notesonly==true, then the string changes only when the MIDI notes change. See MIDI_GetHash
C: bool MIDI_InsertCC(MediaItem_Take* take, bool selected, bool muted, double ppqpos, int chanmsg, int chan, int msg2, int msg3)
EEL: bool MIDI_InsertCC(MediaItem_Take take, bool selected, bool muted, ppqpos, int chanmsg, int chan, int msg2, int msg3)
Lua: boolean reaper.MIDI_InsertCC(MediaItem_Take take, boolean selected, boolean muted, number ppqpos, integer chanmsg, integer chan, integer msg2, integer msg3)
Python: Boolean RPR_MIDI_InsertCC(MediaItem_Take take, Boolean selected, Boolean muted, Float ppqpos, Int chanmsg, Int chan, Int msg2, Int msg3)
C: bool MIDI_InsertEvt(MediaItem_Take* take, bool selected, bool muted, double ppqpos, const char* bytestr, int bytestr_sz)
EEL: bool MIDI_InsertEvt(MediaItem_Take take, bool selected, bool muted, ppqpos, "bytestr")
Lua: boolean reaper.MIDI_InsertEvt(MediaItem_Take take, boolean selected, boolean muted, number ppqpos, string bytestr)
Python: Boolean RPR_MIDI_InsertEvt(MediaItem_Take take, Boolean selected, Boolean muted, Float ppqpos, String bytestr, Int bytestr_sz)
C: bool MIDI_InsertNote(MediaItem_Take* take, bool selected, bool muted, double startppqpos, double endppqpos, int chan, int pitch, int vel, const bool*
noSortInOptional)
EEL: bool MIDI_InsertNote(MediaItem_Take take, bool selected, bool muted, startppqpos, endppqpos, int chan, int pitch, int vel, optional bool noSortInOptional)
Lua: boolean reaper.MIDI_InsertNote(MediaItem_Take take, boolean selected, boolean muted, number startppqpos, number endppqpos, integer chan, integer pitch,
integer vel, optional boolean noSortInOptional)
Python: Boolean RPR_MIDI_InsertNote(MediaItem_Take take, Boolean selected, Boolean muted, Float startppqpos, Float endppqpos, Int chan, Int pitch, Int vel, const
bool noSortInOptional)
Insert a new MIDI note. Set noSort if inserting multiple events, then call MIDI_Sort when done.
C: bool MIDI_InsertTextSysexEvt(MediaItem_Take* take, bool selected, bool muted, double ppqpos, int type, const char* bytestr, int bytestr_sz)
EEL: bool MIDI_InsertTextSysexEvt(MediaItem_Take take, bool selected, bool muted, ppqpos, int type, "bytestr")
Lua: boolean reaper.MIDI_InsertTextSysexEvt(MediaItem_Take take, boolean selected, boolean muted, number ppqpos, integer type, string bytestr)
Python: Boolean RPR_MIDI_InsertTextSysexEvt(MediaItem_Take take, Boolean selected, Boolean muted, Float ppqpos, Int type, String bytestr, Int bytestr_sz)
Insert a new MIDI text or sysex event. Allowable types are -1:sysex (msg should include bounding F0..F7), 1-7:MIDI text event types.
C: void midi_reinit()
EEL: midi_reinit()
Lua: reaper.midi_reinit()
Python: RPR_midi_reinit()
C: bool MIDI_SetCC(MediaItem_Take* take, int ccidx, const bool* selectedInOptional, const bool* mutedInOptional, const double* ppqposInOptional, const int*
chanmsgInOptional, const int* chanInOptional, const int* msg2InOptional, const int* msg3InOptional, const bool* noSortInOptional)
EEL: bool MIDI_SetCC(MediaItem_Take take, int ccidx, optional bool selectedInOptional, optional bool mutedInOptional, optional ppqposInOptional, optional int
chanmsgInOptional, optional int chanInOptional, optional int msg2InOptional, optional int msg3InOptional, optional bool noSortInOptional)
Lua: boolean reaper.MIDI_SetCC(MediaItem_Take take, integer ccidx, optional boolean selectedInOptional, optional boolean mutedInOptional, optional number
ppqposInOptional, optional number chanmsgInOptional, optional number chanInOptional, optional number msg2InOptional, optional number msg3InOptional, optional
boolean noSortInOptional)
Python: Boolean RPR_MIDI_SetCC(MediaItem_Take take, Int ccidx, const bool selectedInOptional, const bool mutedInOptional, const double ppqposInOptional, const int
chanmsgInOptional, const int chanInOptional, const int msg2InOptional, const int msg3InOptional, const bool noSortInOptional)
Set MIDI CC event properties. Properties passed as NULL will not be set. set noSort if setting multiple events, then call MIDI_Sort when done.
C: bool MIDI_SetEvt(MediaItem_Take* take, int evtidx, const bool* selectedInOptional, const bool* mutedInOptional, const double* ppqposInOptional, const char*
msgOptional, int msgOptional_sz, const bool* noSortInOptional)
EEL: bool MIDI_SetEvt(MediaItem_Take take, int evtidx, optional bool selectedInOptional, optional bool mutedInOptional, optional ppqposInOptional, optional
"msgOptional", optional bool noSortInOptional)
Lua: boolean reaper.MIDI_SetEvt(MediaItem_Take take, integer evtidx, optional boolean selectedInOptional, optional boolean mutedInOptional, optional number
ppqposInOptional, optional string msgOptional, optional boolean noSortInOptional)
Python: Boolean RPR_MIDI_SetEvt(MediaItem_Take take, Int evtidx, const bool selectedInOptional, const bool mutedInOptional, const double ppqposInOptional, String
msgOptional, Int msgOptional_sz, const bool noSortInOptional)
Set MIDI event properties. Properties passed as NULL will not be set. set noSort if setting multiple events, then call MIDI_Sort when done.
Set the start/end positions of a media item that contains a MIDI take.
C: bool MIDI_SetNote(MediaItem_Take* take, int noteidx, const bool* selectedInOptional, const bool* mutedInOptional, const double* startppqposInOptional, const
double* endppqposInOptional, const int* chanInOptional, const int* pitchInOptional, const int* velInOptional, const bool* noSortInOptional)
EEL: bool MIDI_SetNote(MediaItem_Take take, int noteidx, optional bool selectedInOptional, optional bool mutedInOptional, optional startppqposInOptional,
optional endppqposInOptional, optional int chanInOptional, optional int pitchInOptional, optional int velInOptional, optional bool noSortInOptional)
Lua: boolean reaper.MIDI_SetNote(MediaItem_Take take, integer noteidx, optional boolean selectedInOptional, optional boolean mutedInOptional, optional number
startppqposInOptional, optional number endppqposInOptional, optional number chanInOptional, optional number pitchInOptional, optional number velInOptional,
optional boolean noSortInOptional)
Python: Boolean RPR_MIDI_SetNote(MediaItem_Take take, Int noteidx, const bool selectedInOptional, const bool mutedInOptional, const double startppqposInOptional,
const double endppqposInOptional, const int chanInOptional, const int pitchInOptional, const int velInOptional, const bool noSortInOptional)
Set MIDI note properties. Properties passed as NULL (or negative values) will not be set. Set noSort if setting multiple events, then call MIDI_Sort when done. Setting multiple note
start positions at once is done more safely by deleting and re-inserting the notes.
C: bool MIDI_SetTextSysexEvt(MediaItem_Take* take, int textsyxevtidx, const bool* selectedInOptional, const bool* mutedInOptional, const double*
ppqposInOptional, const int* typeInOptional, const char* msgOptional, int msgOptional_sz, const bool* noSortInOptional)
EEL: bool MIDI_SetTextSysexEvt(MediaItem_Take take, int textsyxevtidx, optional bool selectedInOptional, optional bool mutedInOptional, optional
ppqposInOptional, optional int typeInOptional, optional "msgOptional", optional bool noSortInOptional)
Lua: boolean reaper.MIDI_SetTextSysexEvt(MediaItem_Take take, integer textsyxevtidx, optional boolean selectedInOptional, optional boolean mutedInOptional,
optional number ppqposInOptional, optional number typeInOptional, optional string msgOptional, optional boolean noSortInOptional)
Python: Boolean RPR_MIDI_SetTextSysexEvt(MediaItem_Take take, Int textsyxevtidx, const bool selectedInOptional, const bool mutedInOptional, const double
ppqposInOptional, const int typeInOptional, String msgOptional, Int msgOptional_sz, const bool noSortInOptional)
Set MIDI text or sysex event properties. Properties passed as NULL will not be set. Allowable types are -1:sysex (msg should not include bounding F0..F7), 1-7:MIDI text event types.
set noSort if setting multiple events, then call MIDI_Sort when done.
C: HWND MIDIEditor_GetActive()
get the mode of a MIDI editor (0=piano roll, 1=event list, -1=invalid editor)
see MIDIEditor_GetActive, MIDIEditor_OnCommand
C: bool MIDIEditor_GetSetting_str(HWND midieditor, const char* setting_desc, char* buf, int buf_sz)
Lua: boolean retval, string buf reaper.MIDIEditor_GetSetting_str(HWND midieditor, string setting_desc, string buf)
Python: (Boolean retval, HWND midieditor, String setting_desc, String buf, Int buf_sz) = RPR_MIDIEditor_GetSetting_str(midieditor, setting_desc, buf, buf_sz)
get the take that is currently being edited in this MIDI editor
Send an action command to the last focused MIDI editor. Returns false if there is no MIDI editor open, or if the view mode (piano roll or event list) does not match the input.
see MIDIEditor_OnCommand
Send an action command to a MIDI editor. Returns false if the supplied MIDI editor pointer is not valid (not an open MIDI editor).
see MIDIEditor_GetActive, MIDIEditor_LastFocused_OnCommand
Python: (String strNeed64, Float vol, Float pan) = RPR_mkvolpanstr(strNeed64, vol, pan)
EEL: my_getViewport(int &r.left, int &r.top, int &r.right, int &r.bot, int sr.left, int sr.top, int sr.right, int sr.bot, bool wantWorkArea)
Lua: reaper.my_getViewport(numberr.left, numberr.top, numberr.right, numberr.bot, number sr.left, number sr.top, number sr.right, number sr.bot, boolean
wantWorkArea)
Get the command ID number for named command that was registered by an extension such as "_SWS_ABOUT" or "_113088d11ae641c193a2b7ede3041ad5" for a ReaScript or a
custom action.
C: void OnPauseButton()
EEL: OnPauseButton()
Lua: reaper.OnPauseButton()
Python: RPR_OnPauseButton()
C: void OnPlayButton()
EEL: OnPlayButton()
Lua: reaper.OnPlayButton()
Python: RPR_OnPlayButton()
C: void OnStopButton()
EEL: OnStopButton()
Lua: reaper.OnStopButton()
Python: RPR_OnStopButton()
Send an OSC message directly to REAPER. The value argument may be NULL. The message will be matched against the default OSC patterns. Only supported if control surface
support was enabled when installing REAPER.
Deletes a PCM_source -- be sure that you remove any project reference before deleting a source
Lua: boolean retval, number offsOut, number lenOut, boolean revOut reaper.PCM_Source_GetSectionInfo(PCM_source src)
Python: (Boolean retval, PCM_source src, Float offsOut, Float lenOut, Boolean revOut) = RPR_PCM_Source_GetSectionInfo(src, offsOut, lenOut, revOut)
adds prevent_count to the UI refresh prevention state; always add then remove the same amount, or major disfunction will occur
EEL: ReaScriptError("errmsg")
Causes REAPER to display the error message after the current ReaScript finishes.
See RefreshToolbar2.
Python: (String in, String out, Int out_sz) = RPR_relative_fn(in, out, out_sz)
C: bool RenderFileSection(const char* source_filename, const char* target_filename, double start_percent, double end_percent, double playrate)
Python: Boolean RPR_RenderFileSection(String source_filename, String target_filename, Float start_percent, Float end_percent, Float playrate)
Python: (String in, String out, Int out_sz) = RPR_resolve_fn(in, out, out_sz)
C: void resolve_fn2(const char* in, char* out, int out_sz, const char* checkSubDirOptional)
Lua: string out reaper.resolve_fn2(string in, string out, optional string checkSubDirOptional)
Python: (String in, String out, Int out_sz, String checkSubDirOptional) = RPR_resolve_fn2(in, out, out_sz, checkSubDirOptional)
Get the named command for the given command ID. The returned string will not start with '_' (e.g. it will return "SWS_ABOUT"), it will be NULL if command_id is a native action.
See GetEnvelopeScalingMode.
See GetEnvelopeScalingMode.
You must use this to change the focus programmatically. mode=0 to focus track panels, 1 to focus the arrange window, 2 to focus the arrange window and select env (or env==NULL to
clear the current track/take envelope selection)
C: bool SetEnvelopePoint(TrackEnvelope* envelope, int ptidx, double* timeInOptional, double* valueInOptional, int* shapeInOptional, double* tensionInOptional,
bool* selectedInOptional, bool* noSortInOptional)
EEL: bool SetEnvelopePoint(TrackEnvelope envelope, int ptidx, optional timeInOptional, optional valueInOptional, optional int shapeInOptional, optional
tensionInOptional, optional bool selectedInOptional, optional bool noSortInOptional)
Lua: boolean reaper.SetEnvelopePoint(TrackEnvelope envelope, integer ptidx, optional number timeInOptional, optional number valueInOptional, optional number
shapeInOptional, optional number tensionInOptional, optional boolean selectedInOptional, optional boolean noSortInOptional)
Python: (Boolean retval, TrackEnvelope envelope, Int ptidx, Float timeInOptional, Float valueInOptional, Int shapeInOptional, Float tensionInOptional, Boolean
selectedInOptional, Boolean noSortInOptional) = RPR_SetEnvelopePoint(envelope, ptidx, timeInOptional, valueInOptional, shapeInOptional, tensionInOptional,
selectedInOptional, noSortInOptional)
Set attributes of an envelope point. Values that are not supplied will be ignored. If setting multiple points at once, set noSort=true, and call Envelope_SortPoints when done. See
GetEnvelopePoint, InsertEnvelopePoint, GetEnvelopeScalingMode.
C: bool SetEnvelopeStateChunk(TrackEnvelope* env, const char* str, bool isundoOptional)
Sets the RPPXML state of an envelope, returns true if successful. Undo flag is a performance/caching hint.
C: void SetExtState(const char* section, const char* key, const char* value, bool persist)
Set the extended state value for a specific section and key. persist=true means the value should be stored and reloaded the next time REAPER is opened. See GetExtState,
DeleteExtState, HasExtState.
Sets the RPPXML state of an item, returns true if successful. Undo flag is a performance/caching hint.
set &1 to show the master track in the TCP, &2 to show in the mixer. Returns the previous visibility state. See GetMasterTrackVisibility.
Scroll the mixer so that leftmosttrack is the leftmost visible track. Returns the leftmost track after scrolling, which may be different from the passed-in track if there are not enough
tracks to its right.
Set the mouse modifier assignment for a specific modifier key assignment, in a specific context.
Context is a string like "MM_CTX_ITEM". Find these strings by modifying an assignment in
Preferences/Editing/Mouse Modifiers, then looking in reaper-mouse.ini.
Modifier flag is a number from 0 to 15: add 1 for shift, 2 for control, 4 for alt, 8 for win.
(OSX: add 1 for shift, 2 for command, 4 for opt, 8 for control.)
For left-click and double-click contexts, the action can be any built-in command ID number
or any custom action ID string. Find built-in command IDs in the REAPER actions window
(enable "show action IDs" in the context menu), and find custom action ID strings in reaper-kb.ini.
For built-in mouse modifier behaviors, find action IDs (which will be low numbers)
by modifying an assignment in Preferences/Editing/Mouse Modifiers, then looking in reaper-mouse.ini.
Assigning an action of -1 will reset that mouse modifier behavior to factory default.
See GetMouseModifier.
Lua: boolean reaper.SetProjectMarker(integer markrgnindexnumber, boolean isrgn, number pos, number rgnend, string name)
Python: Boolean RPR_SetProjectMarker(Int markrgnindexnumber, Boolean isrgn, Float pos, Float rgnend, String name)
C: bool SetProjectMarker2(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name)
EEL: bool SetProjectMarker2(ReaProject proj, int markrgnindexnumber, bool isrgn, pos, rgnend, "name")
Lua: boolean reaper.SetProjectMarker2(ReaProject proj, integer markrgnindexnumber, boolean isrgn, number pos, number rgnend, string name)
Python: Boolean RPR_SetProjectMarker2(ReaProject proj, Int markrgnindexnumber, Boolean isrgn, Float pos, Float rgnend, String name)
C: bool SetProjectMarker3(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name, int color)
EEL: bool SetProjectMarker3(ReaProject proj, int markrgnindexnumber, bool isrgn, pos, rgnend, "name", int color)
Lua: boolean reaper.SetProjectMarker3(ReaProject proj, integer markrgnindexnumber, boolean isrgn, number pos, number rgnend, string name, integer color)
Python: Boolean RPR_SetProjectMarker3(ReaProject proj, Int markrgnindexnumber, Boolean isrgn, Float pos, Float rgnend, String name, Int color)
C: bool SetProjectMarker4(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name, int color, int flags)
EEL: bool SetProjectMarker4(ReaProject proj, int markrgnindexnumber, bool isrgn, pos, rgnend, "name", int color, int flags)
Lua: boolean reaper.SetProjectMarker4(ReaProject proj, integer markrgnindexnumber, boolean isrgn, number pos, number rgnend, string name, integer color, integer
flags)
Python: Boolean RPR_SetProjectMarker4(ReaProject proj, Int markrgnindexnumber, Boolean isrgn, Float pos, Float rgnend, String name, Int color, Int flags)
color should be 0 to not change, or RGB(x,y,z)|0x1000000 to set custom, flags&1 to clear name
C: bool SetProjectMarkerByIndex(ReaProject* proj, int markrgnidx, bool isrgn, double pos, double rgnend, int IDnumber, const char* name, int color)
EEL: bool SetProjectMarkerByIndex(ReaProject proj, int markrgnidx, bool isrgn, pos, rgnend, int IDnumber, "name", int color)
Lua: boolean reaper.SetProjectMarkerByIndex(ReaProject proj, integer markrgnidx, boolean isrgn, number pos, number rgnend, integer IDnumber, string name, integer
color)
Python: Boolean RPR_SetProjectMarkerByIndex(ReaProject proj, Int markrgnidx, Boolean isrgn, Float pos, Float rgnend, Int IDnumber, String name, Int color)
See SetProjectMarkerByIndex2.
C: bool SetProjectMarkerByIndex2(ReaProject* proj, int markrgnidx, bool isrgn, double pos, double rgnend, int IDnumber, const char* name, int color, int flags)
EEL: bool SetProjectMarkerByIndex2(ReaProject proj, int markrgnidx, bool isrgn, pos, rgnend, int IDnumber, "name", int color, int flags)
Lua: boolean reaper.SetProjectMarkerByIndex2(ReaProject proj, integer markrgnidx, boolean isrgn, number pos, number rgnend, integer IDnumber, string name,
integer color, integer flags)
Python: Boolean RPR_SetProjectMarkerByIndex2(ReaProject proj, Int markrgnidx, Boolean isrgn, Float pos, Float rgnend, Int IDnumber, String name, Int color, Int
flags)
Differs from SetProjectMarker4 in that markrgnidx is 0 for the first marker/region, 1 for the next, etc (see EnumProjectMarkers3), rather than representing the displayed marker/region
ID number (see SetProjectMarker3). Function will fail if attempting to set a duplicate ID number for a region (duplicate ID numbers for markers are OK). , flags&1 to clear name.
C: int SetProjExtState(ReaProject* proj, const char* extname, const char* key, const char* value)
Lua: integer reaper.SetProjExtState(ReaProject proj, string extname, string key, string value)
Python: Int RPR_SetProjExtState(ReaProject proj, String extname, String key, String value)
Save a key/value pair for a specific extension, to be restored the next time this specific project is loaded. Typically extname will be the name of a reascript or extension section. If key is
NULL or "", all extended data for that extname will be deleted. If val is NULL or "", the data previously associated with that key will be deleted. Returns the size of the state for this
extname. See GetProjExtState, EnumProjExtState.
Add (addorremove > 0) or remove (addorremove < 0) a track from this region when using the region render matrix.
C: int SetTakeStretchMarker(MediaItem_Take* take, int idx, double pos, const double* srcposInOptional)
Lua: integer reaper.SetTakeStretchMarker(MediaItem_Take take, integer idx, number pos, optional number srcposInOptional)
Python: Int RPR_SetTakeStretchMarker(MediaItem_Take take, Int idx, Float pos, const double srcposInOptional)
Adds or updates a stretch marker. If idx<0, stretch marker will be added. If idx>=0, stretch marker will be updated. When adding, if srcposInOptional is omitted, source position will be
auto-calculated. When updating a stretch marker, if srcposInOptional is omitted, srcpos will not be modified. Position/srcposition values will be constrained to nearby stretch markers.
Returns index of stretch marker, or -1 if did not insert (or marker already existed at time).
C: bool SetTempoTimeSigMarker(ReaProject* proj, int ptidx, double timepos, int measurepos, double beatpos, double bpm, int timesig_num, int timesig_denom, bool
lineartempo)
EEL: bool SetTempoTimeSigMarker(ReaProject proj, int ptidx, timepos, int measurepos, beatpos, bpm, int timesig_num, int timesig_denom, bool lineartempo)
Lua: boolean reaper.SetTempoTimeSigMarker(ReaProject proj, integer ptidx, number timepos, integer measurepos, number beatpos, number bpm, integer timesig_num,
integer timesig_denom, boolean lineartempo)
Python: Boolean RPR_SetTempoTimeSigMarker(ReaProject proj, Int ptidx, Float timepos, Int measurepos, Float beatpos, Float bpm, Int timesig_num, Int timesig_denom,
Boolean lineartempo)
Set parameters of a tempo/time signature marker. Provide either timepos (with measurepos=-1, beatpos=-1), or measurepos and beatpos (with timepos=-1). If timesig_num and
timesig_denom are zero, the previous time signature will be used. ptidx=-1 will insert a new tempo/time signature marker. See CountTempoTimeSigMarkers,
GetTempoTimeSigMarker, AddTempoTimeSigMarker.
Updates the toggle state of an action, returns true if succeeded. Only ReaScripts can have their toggle states changed programmatically. See RefreshToolbar2.
C: bool SetTrackMIDINoteName(int track, int note, int chan, const char* name)
Lua: boolean reaper.SetTrackMIDINoteName(integer track, integer note, integer chan, string name)
Python: Boolean RPR_SetTrackMIDINoteName(Int track, Int note, Int chan, String name)
C: bool SetTrackMIDINoteNameEx(ReaProject* proj, MediaTrack* track, int note, int chan, const char* name)
EEL: bool SetTrackMIDINoteNameEx(ReaProject proj, MediaTrack track, int note, int chan, "name")
Lua: boolean reaper.SetTrackMIDINoteNameEx(ReaProject proj, MediaTrack track, integer note, integer chan, string name)
Python: Boolean RPR_SetTrackMIDINoteNameEx(ReaProject proj, MediaTrack track, Int note, Int chan, String name)
Lua: boolean reaper.SetTrackSendUIPan(MediaTrack track, integer send_idx, number pan, integer isend)
Python: Boolean RPR_SetTrackSendUIPan(MediaTrack track, Int send_idx, Float pan, Int isend)
send_idx<0 for receives, isend=1 for end of edit, -1 for an instant edit (such as reset), 0 for normal tweak.
Lua: boolean reaper.SetTrackSendUIVol(MediaTrack track, integer send_idx, number vol, integer isend)
Python: Boolean RPR_SetTrackSendUIVol(MediaTrack track, Int send_idx, Float vol, Int isend)
send_idx<0 for receives, isend=1 for end of edit, -1 for an instant edit (such as reset), 0 for normal tweak.
Sets the RPPXML state of a track, returns true if successful. Undo flag is a performance/caching hint.
EEL: ShowConsoleMsg("msg")
Show a message to the user (also useful for debugging). Send "\n" for newline, "" to clear the console window.
C: HWND Splash_GetWnd()
gets the splash window, in case you want to display a message over it. Returns NULL when the sphah window is not displayed.
the original item becomes the left-hand split, the function returns the right-hand split (or NULL if the split failed)
Stuffs a 3 byte MIDI message into either the Virtual MIDI Keyboard queue, or the MIDI-as-control input queue. mode=0 for VKB, 1 for control (actions map etc), 2 for VKB-on-
current-channel.
get the effective BPM at the time (seconds) position (i.e. 2x in /8 signatures)
when does the next time map (tempo or time sig) change occur
C: double TimeMap2_timeToBeats(ReaProject* proj, double tpos, int* measuresOutOptional, int* cmlOutOptional, double* fullbeatsOutOptional, int*
cdenomOutOptional)
EEL: double TimeMap2_timeToBeats(ReaProject proj, tpos, optional int &measuresOutOptional, optional int &cmlOutOptional, optional &fullbeatsOutOptional, optional
int &cdenomOutOptional)
Lua: number retval, optional number measuresOutOptional, optional number cmlOutOptional, optional number fullbeatsOutOptional, optional number cdenomOutOptional
reaper.TimeMap2_timeToBeats(ReaProject proj, number tpos)
Python: (Float retval, ReaProject proj, Float tpos, Int measuresOutOptional, Int cmlOutOptional, Float fullbeatsOutOptional, Int cdenomOutOptional) =
RPR_TimeMap2_timeToBeats(proj, tpos, measuresOutOptional, cmlOutOptional, fullbeatsOutOptional, cdenomOutOptional)
get the effective BPM at the time (seconds) position (i.e. 2x in /8 signatures)
C: double TimeMap_GetMeasureInfo(ReaProject* proj, int measure, double* qn_startOut, double* qn_endOut, int* timesig_numOut, int* timesig_denomOut, double*
tempoOut)
EEL: double TimeMap_GetMeasureInfo(ReaProject proj, int measure, &qn_startOut, &qn_endOut, int ×ig_numOut, int ×ig_denomOut, &tempoOut)
Lua: number retval, number qn_startOut, number qn_endOut, number timesig_numOut, number timesig_denomOut, number tempoOut reaper.TimeMap_GetMeasureInfo
(ReaProject proj, integer measure)
Python: (Float retval, ReaProject proj, Int measure, Float qn_startOut, Float qn_endOut, Int timesig_numOut, Int timesig_denomOut, Float tempoOut) =
RPR_TimeMap_GetMeasureInfo(proj, measure, qn_startOut, qn_endOut, timesig_numOut, timesig_denomOut, tempoOut)
Get the QN position and time signature information for the start of a measure. Return the time in seconds of the measure start.
Lua: integer retval, string pattern reaper.TimeMap_GetMetronomePattern(ReaProject proj, number time, string pattern)
Python: (Int retval, ReaProject proj, Float time, String pattern, Int pattern_sz) = RPR_TimeMap_GetMetronomePattern(proj, time, pattern, pattern_sz)
Fills in a string representing the active metronome pattern. For example, in a 7/8 measure divided 3+4, the pattern might be "1221222". The length of the string is the time signature
numerator, and the function returns the time signature denominator.
C: void TimeMap_GetTimeSigAtTime(ReaProject* proj, double time, int* timesig_numOut, int* timesig_denomOut, double* tempoOut)
Lua: number timesig_numOut retval, number timesig_denomOut, number tempoOut reaper.TimeMap_GetTimeSigAtTime(ReaProject proj, number time)
Python: (ReaProject proj, Float time, Int timesig_numOut, Int timesig_denomOut, Float tempoOut) = RPR_TimeMap_GetTimeSigAtTime(proj, time, timesig_numOut,
timesig_denomOut, tempoOut)
Lua: integer retval, optional number qnMeasureStartOutOptional, optional number qnMeasureEndOutOptional reaper.TimeMap_QNToMeasures(ReaProject proj, number qn)
Python: (Int retval, ReaProject proj, Float qn, Float qnMeasureStartOutOptional, Float qnMeasureEndOutOptional) = RPR_TimeMap_QNToMeasures(proj, qn,
qnMeasureStartOutOptional, qnMeasureEndOutOptional)
Converts project quarter note count (QN) to time. QN is counted from the start of the project, regardless of any partial measures. See TimeMap2_QNToTime
Converts project time position to quarter note count (QN). QN is counted from the start of the project, regardless of any partial measures. See TimeMap2_timeToQN
C: void TrackCtl_SetToolTip(const char* fmt, int xpos, int ypos, bool topmost)
C: bool TrackFX_FormatParamValue(MediaTrack* track, int fx, int param, double val, char* buf, int buf_sz)
EEL: bool TrackFX_FormatParamValue(MediaTrack track, int fx, int param, val, #buf)
Lua: boolean retval, string buf reaper.TrackFX_FormatParamValue(MediaTrack track, integer fx, integer param, number val, string buf)
Python: (Boolean retval, MediaTrack track, Int fx, Int param, Float val, String buf, Int buf_sz) = RPR_TrackFX_FormatParamValue(track, fx, param, val, buf,
buf_sz)
C: bool TrackFX_FormatParamValueNormalized(MediaTrack* track, int fx, int param, double value, char* buf, int buf_sz)
EEL: bool TrackFX_FormatParamValueNormalized(MediaTrack track, int fx, int param, value, #buf)
Lua: boolean retval, string buf reaper.TrackFX_FormatParamValueNormalized(MediaTrack track, integer fx, integer param, number value, string buf)
Python: (Boolean retval, MediaTrack track, Int fx, Int param, Float value, String buf, Int buf_sz) = RPR_TrackFX_FormatParamValueNormalized(track, fx, param,
value, buf, buf_sz)
Get the index of the first track FX insert that matches fxname. If the FX is not in the chain and instantiate is true, it will be inserted. See TrackFX_GetInstrument, TrackFX_GetEQ.
returns index of effect visible in chain, or -1 for chain hidden, or -2 for chain visible but no effect selected
See TrackFX_SetEnabled
Get the index of ReaEQ in the track FX chain. If ReaEQ is not in the chain and instantiate is true, it will be inserted. See TrackFX_GetInstrument, TrackFX_GetByName.
Lua: boolean reaper.TrackFX_GetEQBandEnabled(MediaTrack track, integer fxidx, integer bandtype, integer bandidx)
Python: Boolean RPR_TrackFX_GetEQBandEnabled(MediaTrack track, Int fxidx, Int bandtype, Int bandidx)
C: bool TrackFX_GetEQParam(MediaTrack* track, int fxidx, int paramidx, int* bandtypeOut, int* bandidxOut, int* paramtypeOut, double* normvalOut)
EEL: bool TrackFX_GetEQParam(MediaTrack track, int fxidx, int paramidx, int &bandtypeOut, int &bandidxOut, int ¶mtypeOut, &normvalOut)
Lua: boolean retval, number bandtypeOut, number bandidxOut, number paramtypeOut, number normvalOut reaper.TrackFX_GetEQParam(MediaTrack track, integer fxidx,
integer paramidx)
Python: (Boolean retval, MediaTrack track, Int fxidx, Int paramidx, Int bandtypeOut, Int bandidxOut, Int paramtypeOut, Float normvalOut) = RPR_TrackFX_GetEQParam
(track, fxidx, paramidx, bandtypeOut, bandidxOut, paramtypeOut, normvalOut)
C: bool TrackFX_GetFormattedParamValue(MediaTrack* track, int fx, int param, char* buf, int buf_sz)
Lua: boolean retval, string buf reaper.TrackFX_GetFormattedParamValue(MediaTrack track, integer fx, integer param, string buf)
Python: (Boolean retval, MediaTrack track, Int fx, Int param, String buf, Int buf_sz) = RPR_TrackFX_GetFormattedParamValue(track, fx, param, buf, buf_sz)
Lua: boolean retval, string buf reaper.TrackFX_GetFXName(MediaTrack track, integer fx, string buf)
Python: (Boolean retval, MediaTrack track, Int fx, String buf, Int buf_sz) = RPR_TrackFX_GetFXName(track, fx, buf, buf_sz)
Get the index of the first track FX insert that is a virtual instrument, or -1 if none. See TrackFX_GetEQ, TrackFX_GetByName.
Returns true if this FX UI is open in the FX chain window or a floating window. See TrackFX_SetOpen
C: double TrackFX_GetParam(MediaTrack* track, int fx, int param, double* minvalOut, double* maxvalOut)
EEL: double TrackFX_GetParam(MediaTrack track, int fx, int param, &minvalOut, &maxvalOut)
Lua: number retval, number minvalOut, number maxvalOut reaper.TrackFX_GetParam(MediaTrack track, integer fx, integer param)
Python: (Float retval, MediaTrack track, Int fx, Int param, Float minvalOut, Float maxvalOut) = RPR_TrackFX_GetParam(track, fx, param, minvalOut, maxvalOut)
C: bool TrackFX_GetParameterStepSizes(MediaTrack* track, int fx, int param, double* stepOut, double* smallstepOut, double* largestepOut, bool* istoggleOut)
EEL: bool TrackFX_GetParameterStepSizes(MediaTrack track, int fx, int param, &stepOut, &smallstepOut, &largestepOut, bool &istoggleOut)
Lua: boolean retval, number stepOut, number smallstepOut, number largestepOut, boolean istoggleOut reaper.TrackFX_GetParameterStepSizes(MediaTrack track, integer
fx, integer param)
Python: (Boolean retval, MediaTrack track, Int fx, Int param, Float stepOut, Float smallstepOut, Float largestepOut, Boolean istoggleOut) =
RPR_TrackFX_GetParameterStepSizes(track, fx, param, stepOut, smallstepOut, largestepOut, istoggleOut)
C: double TrackFX_GetParamEx(MediaTrack* track, int fx, int param, double* minvalOut, double* maxvalOut, double* midvalOut)
EEL: double TrackFX_GetParamEx(MediaTrack track, int fx, int param, &minvalOut, &maxvalOut, &midvalOut)
Lua: number retval, number minvalOut, number maxvalOut, number midvalOut reaper.TrackFX_GetParamEx(MediaTrack track, integer fx, integer param)
Python: (Float retval, MediaTrack track, Int fx, Int param, Float minvalOut, Float maxvalOut, Float midvalOut) = RPR_TrackFX_GetParamEx(track, fx, param,
minvalOut, maxvalOut, midvalOut)
C: bool TrackFX_GetParamName(MediaTrack* track, int fx, int param, char* buf, int buf_sz)
Lua: boolean retval, string buf reaper.TrackFX_GetParamName(MediaTrack track, integer fx, integer param, string buf)
Python: (Boolean retval, MediaTrack track, Int fx, Int param, String buf, Int buf_sz) = RPR_TrackFX_GetParamName(track, fx, param, buf, buf_sz)
Lua: boolean retval, string presetname reaper.TrackFX_GetPreset(MediaTrack track, integer fx, string presetname)
Python: (Boolean retval, MediaTrack track, Int fx, String presetname, Int presetname_sz) = RPR_TrackFX_GetPreset(track, fx, presetname, presetname_sz)
Get the name of the preset currently showing in the REAPER dropdown. Returns false if the current FX parameters do not exactly match the factory preset (in other words, if the user
loaded the preset but moved the knobs afterward. See TrackFX_SetPreset
Returns current preset index, or -1 if error. numberOfPresetsOut will be set to total number of presets available. See TrackFX_SetPresetByIndex
presetmove==1 activates the next preset, presetmove==-1 activates the previous preset, etc.
See TrackFX_GetEnabled
C: bool TrackFX_SetEQBandEnabled(MediaTrack* track, int fxidx, int bandtype, int bandidx, bool enable)
EEL: bool TrackFX_SetEQBandEnabled(MediaTrack track, int fxidx, int bandtype, int bandidx, bool enable)
Lua: boolean reaper.TrackFX_SetEQBandEnabled(MediaTrack track, integer fxidx, integer bandtype, integer bandidx, boolean enable)
Python: Boolean RPR_TrackFX_SetEQBandEnabled(MediaTrack track, Int fxidx, Int bandtype, Int bandidx, Boolean enable)
C: bool TrackFX_SetEQParam(MediaTrack* track, int fxidx, int bandtype, int bandidx, int paramtype, double val, bool isnorm)
EEL: bool TrackFX_SetEQParam(MediaTrack track, int fxidx, int bandtype, int bandidx, int paramtype, val, bool isnorm)
Lua: boolean reaper.TrackFX_SetEQParam(MediaTrack track, integer fxidx, integer bandtype, integer bandidx, integer paramtype, number val, boolean isnorm)
Python: Boolean RPR_TrackFX_SetEQParam(MediaTrack track, Int fxidx, Int bandtype, Int bandidx, Int paramtype, Float val, Boolean isnorm)
Lua: boolean reaper.TrackFX_SetParam(MediaTrack track, integer fx, integer param, number val)
Python: Boolean RPR_TrackFX_SetParam(MediaTrack track, Int fx, Int param, Float val)
Lua: boolean reaper.TrackFX_SetParamNormalized(MediaTrack track, integer fx, integer param, number value)
Python: Boolean RPR_TrackFX_SetParamNormalized(MediaTrack track, Int fx, Int param, Float value)
See TrackFX_GetPreset
showflag=0 for hidechain, =1 for show chain(index valid), =2 for hide floating window(index valid), =3 for show floating window (index valid)
C: void TrackList_UpdateAllExternalSurfaces()
EEL: TrackList_UpdateAllExternalSurfaces()
Lua: reaper.TrackList_UpdateAllExternalSurfaces()
Python: RPR_TrackList_UpdateAllExternalSurfaces()
C: void Undo_BeginBlock()
EEL: Undo_BeginBlock()
Lua: reaper.Undo_BeginBlock()
Python: RPR_Undo_BeginBlock()
nonzero if success
nonzero if success
EEL: Undo_OnStateChange("descchange")
C: void Undo_OnStateChangeEx2(ReaProject* proj, const char* descchange, int whichStates, int trackparm)
C: void UpdateArrange()
EEL: UpdateArrange()
Lua: reaper.UpdateArrange()
Python: RPR_UpdateArrange()
C: void UpdateTimeline()
EEL: UpdateTimeline()
Lua: reaper.UpdateTimeline()
Python: RPR_UpdateTimeline()
EEL: abs(value)
EEL: acos(value)
Returns the arc cosine of the value specified (return value is in radians). If the parameter is not between -1.0 and 1.0 inclusive, the return value is undefined.
EEL: asin(value)
Returns the arc sine of the value specified (return value is in radians). If the parameter is not between -1.0 and 1.0 inclusive, the return value is undefined.
EEL: atan(value)
Returns the arc tangent of the value specified (return value is in radians). If the parameter is not between -1.0 and 1.0 inclusive, the return value is undefined.
EEL: atan2(numerator,denominator)
Returns the arc tangent of the numerator divided by the denominator, allowing the denominator to be 0, and using their signs to produce a more meaningful result.
EEL: atexit("code")
Adds code to be executed when the script finishes or is ended by the user. Typically used to clean up after the user terminates defer() or runloop() code.
EEL: ceil(value)
Returns the value rounded to the next highest integer (ceil(3.1)==4, ceil(-3.9)==-3).
EEL: convolve_c()
EEL: cos(angle)
EEL: defer("code")
Identical to runloop(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.
EEL: eval("code")
Executes code passed in. Code can use functions, but functions created in code can't be used elsewhere.
EEL: exp(exponent)
Returns the number e ($e, approximately 2.718) raised to the parameter-th power. This function is significantly faster than pow() or the ^ operator.
EEL: extension_api("function_name"[,...])
Used to call functions exported by extension plugins. The first parameter must be the exported function name, then its own parameters (as if the function was called directly).
EEL: fclose(fp)
Closes a file previously opened with fopen().
EEL: feof(fp)
EEL: fflush(fp)
If file fp is open for writing, flushes out any buffered data to disk.
EEL: fft(buffer,size)
Performs a FFT on the data in the local memory buffer at the offset specified by the first parameter. The size of the FFT is specified by the second parameter, which must be 32, 64,
128, 256, 512, 1024, 2048, 4096, 8192, 16384, or 32768. The outputs are permuted, so if you plan to use them in-order, call fft_permute(idx, size) before and fft_ipermute(idx,size)
after your in-order use. Your inputs or outputs will need to be scaled down by 1/size, if used.
Note that fft()/ifft() require real / imaginary input pairs, so a 256 point FFT actually works with 512 items.
Note that fft()/ifft() must NOT cross a 65, 536 item boundary, so be sure to specify the offset accordingly.
EEL: fft_ipermute(buffer,size)
Permute the input for ifft(), taking bands from in-order to the order ifft() requires. see fft() for more information.
EEL: fft_permute(buffer,size)
Permute the output of fft() to have bands in-order. see fft() for more information.
EEL: fgetc(fp)
EEL: fgets(fp,#str)
Reads a line from file fp into #str. Returns length of #str read.
EEL: floor(value)
Returns the value rounded to the next lowest integer (floor(3.9)==3, floor(-3.1)==-4).
EEL: fopen("fn","mode")
Opens a file "fn" with mode "mode". For read, use "r" or "rb", write "w" or "wb". Returns a positive integer on success.
EEL: fprintf(fp,"format"[,...])
Formats a string and writes it to file fp. For more information on format specifiers, see sprintf(). Returns bytes written to file.
EEL: fread(fp,#str,length)
Reads from file fp into #str, up to length bytes. Returns actual length read, or negative if error.
EEL: freembuf(address)
Hints the runtime that memory above the address specified may no longer be used. The runtime may, at its leisure, choose to lose the contents of memory above the address specified.
EEL: fseek(fp,offset,whence)
Seeks file fp, offset bytes from whence reference. Whence negative specifies start of file, positive whence specifies end of file, and zero whence specifies current file position.
EEL: ftell(fp)
EEL: fwrite(fp,#str,len)
Writes up to len characters of #str to file fp. If len is less than 1, the full contents of #str will be written. Returns the number of bytes written to file.
EEL: get_action_context(#filename,sectionID,cmdID,mode,resolution,val)
Queries contextual information about the script, typically MIDI/OSC input values.
Returns true if a new value has been updated.
val will be set to a relative or absolute value depending on mode (=0: absolute mode, >0: relative modes). resolution=127 for 7-bit resolution, =16383 for 14-bit resolution.
Notes: sectionID, and cmdID will be set to -1 if the script is not part of the action list. mode, resolution and val will be set to -1 if the script was not triggered via MIDI/OSC.
The following global variables are special and will be used by the graphics system:
• gfx_r, gfx_g, gfx_b, gfx_a - These represent the current red, green, blue, and alpha components used by drawing operations (0.0..1.0).
• gfx_w, gfx_h - These are set to the current width and height of the UI framebuffer.
• gfx_x, gfx_y - These set the "current" graphics position in x,y. You can set these yourselves, and many of the drawing functions update them as well.
• gfx_mode - Set to 0 for default options. Add 1.0 for additive blend mode (if you wish to do subtractive, set gfx_a to negative and use gfx_mode as additive). Add 2.0 to disable
source alpha for gfx_blit(). Add 4.0 to disable filtering for gfx_blit().
• gfx_clear - If set to a value greater than -1.0, this will result in the framebuffer being cleared to that color. the color for this one is packed RGB (0..255), i.e.
red+green*256+blue*65536. The default is 0 (black).
• gfx_dest - Defaults to -1, set to 0..1024-1 to have drawing operations go to an offscreen buffer (or loaded image).
• gfx_texth - Set to the height of a line of text in the current font. Do not modify this variable.
• gfx_ext_retina - If set to 1.0 on initialization, will be updated to 2.0 if high resolution display is supported, and if so gfx_w/gfx_h/etc will be doubled.
• mouse_x, mouse_y - mouse_x and mouse_y are set to the coordinates of the mouse relative to the graphics window.
• mouse_wheel, mouse_hwheel - mouse wheel (and horizontal wheel) positions. These will change typically by 120 or a multiple thereof, the caller should clear the state to 0 after
reading it.
• mouse_cap is a bitfield of mouse and keyboard modifier state.
◦ 1: left mouse button
◦ 2: right mouse button
◦ 4: Control key
◦ 8: Shift key
◦ 16: Alt key
◦ 32: Windows key
◦ 64: middle mouse button
EEL: gfx_arc(x,y,r,ang1,ang2[,antialias])
Draws an arc of the circle centered at x,y, with ang1/ang2 being specified in radians.
EEL: gfx_blit(source, scale, rotation[, srcx, srcy, srcw, srch, destx, desty, destw, desth, rotxoffs, rotyoffs])
srcx/srcy/srcw/srch specify the source rectangle (if omitted srcw/srch default to image size), destx/desty/destw/desth specify dest rectangle (if not specified, these will default to
reasonable defaults -- destw/desth default to srcw/srch * scale).
EEL: gfx_blit(source,scale,rotation)
If three parameters are specified, copies the entirity of the source bitmap to gfx_x,gfx_y using current opacity and copy mode (set with gfx_a, gfx_mode). You can specify scale (1.0 is
unscaled) and rotation (0.0 is not rotated, angles are in radians).
For the "source" parameter specify -1 to use the main framebuffer as source, or an image index (see gfx_loadimg()).
EEL: gfx_blitext(source,coordinatelist,rotation)
EEL: gfx_blurto(x,y)
Blurs the region of the screen between gfx_x,gfx_y and x,y, and updates gfx_x,gfx_y to x,y.
EEL: gfx_circle(x,y,r[,fill,antialias])
Draws a circle, optionally filling/antialiasing.
EEL: gfx_deltablit(srcimg,srcx,srcy,srcw,srch,destx,desty,destw,desth,dsdx,dtdx,dsdy,dtdy,dsdxdy,dtdxdy)
Blits from srcimg(srcx,srcy,srcw,srch) to destination (destx,desty,destw,desth). Source texture coordinates are s/t, dsdx represents the change in s coordinate for each x pixel, dtdy
represents the change in t coordinate for each y pixel, etc. dsdxdy represents the change in dsdx for each line.
EEL: gfx_dock(v)
Call with v=-1 to query docked state, otherwise v>=0 to set docked state. State is &1 if docked, second byte is docker index (or last docker index if undocked).
EEL: gfx_drawchar(char)
Draws the character (can be a numeric ASCII code as well), to gfx_x, gfx_y, and moves gfx_x over by the size of the character.
EEL: gfx_drawnumber(n,ndigits)
Draws the number n with ndigits of precision to gfx_x, gfx_y, and updates gfx_x to the right side of the drawing. The text height is gfx_texth.
EEL: gfx_drawstr("str")
Draws a string at gfx_x, gfx_y, and updates gfx_x/gfx_y so that subsequent draws will occur in a similar place.
EEL: gfx_getchar([char])
If char is 0 or omitted, returns a character from the keyboard queue, or 0 if no character is available, or -1 if the graphics window is not open. If char is specified and nonzero, that
character's status will be checked, and the function will return greater than 0 if it is pressed.
Common values are standard ASCII, such as 'a', 'A', '=' and '1', but for many keys multi-byte values are used, including 'home', 'up', 'down', 'left', 'rght', 'f1'.. 'f12', 'pgup', 'pgdn', 'ins', and
'del'.
• Ctrl/Cmd+A..Ctrl+Z as 1..26
• Ctrl/Cmd+Alt+A..Z as 257..282
• Alt+A..Z as 'A'+256..'Z'+256
• 27 for ESC
• 13 for Enter
• ' ' for space
EEL: gfx_getfont([#str])
Returns current font index. If a string is passed, it will receive the actual font face used by this font, if available.
EEL: gfx_getimgdim(image,w,h)
Retreives the dimensions of image (representing a filename: index number) into w and h. Sets these values to 0 if an image failed loading (or if the filename index is invalid).
EEL: gfx_getpixel(r,g,b)
EEL: gfx_gradrect(x,y,w,h, r,g,b,a[, drdx, dgdx, dbdx, dadx, drdy, dgdy, dbdy, dady])
Fills a gradient rectangle with the color and alpha specified. drdx-dadx reflect the adjustment (per-pixel) applied for each pixel moved to the right, drdy-dady are the adjustment applied
for each pixel moved toward the bottom. Normally drdx=adjustamount/w, drdy=adjustamount/h, etc.
EEL: gfx_init("name"[,width,height,dockstate])
Initializes the graphics window with title name. Suggested width and height can be specified.
Once the graphics window is open, gfx_update() should be called periodically.
EEL: gfx_line(x,y,x2,y2[,aa])
Draws a line from x,y to x2,y2, and if aa is not specified or 0.5 or greater, it will be antialiased.
EEL: gfx_lineto(x,y[,aa])
Draws a line from gfx_x,gfx_y to x,y. If aa is 0.5 or greater, then antialiasing is used. Updates gfx_x and gfx_y to x,y.
EEL: gfx_loadimg(image,"filename")
Load image from filename into slot 0..1024-1 specified by image. Returns the image index if success, otherwise -1 if failure. The image will be resized to the dimensions of the image
file.
EEL: gfx_measurechar(character,&w,&h)
Measures the drawing dimensions of a character with the current font (as set by gfx_setfont).
EEL: gfx_measurestr("str",&w,&h)
Measures the drawing dimensions of a string with the current font (as set by gfx_setfont).
EEL: gfx_muladdrect(x,y,w,h,mul_r,mul_g,mul_b[,mul_a,add_r,add_g,add_b,add_a])
Multiplies each pixel by mul_* and adds add_*, and updates in-place. Useful for changing brightness/contrast, or other effects.
Formats and draws a string at gfx_x, gfx_y, and updates gfx_x/gfx_y accordingly (the latter only if the formatted string contains newline). For more information on format strings, see
sprintf()
EEL: gfx_quit()
EEL: gfx_rect(x,y,w,h[,filled])
EEL: gfx_rectto(x,y)
EEL: gfx_roundrect(x,y,w,h,radius[,antialias])
EEL: gfx_set(r[,g,b,a,mode,dest])
EEL: gfx_setcursor(resource_id,custom_cursor_name)
Sets the mouse cursor. resource_id is a value like 32512 (for an arrow cursor), custom_cursor_name is a string like "arrow" (for the REAPER custom arrow cursor). resource_id must
be nonzero, but custom_cursor_name is optional.
EEL: gfx_setimgdim(image,w,h)
Resize image referenced by index 0..1024-1, width and height must be 0-2048. The contents of the image will be undefined after the resize.
EEL: gfx_setpixel(r,g,b)
EEL: gfx_showmenu("str")
Shows a popup menu at gfx_x,gfx_y. str is a list of fields separated by | characters. Each field represents a menu item.
Fields can start with special characters:
# : grayed out
! : checked
> : this menu item shows a submenu
< : last item in the current submenu
An empty field will appear as a separator in the menu. gfx_showmenu returns 0 if the user selected nothing from the menu, 1 if the first field is selected, etc.
Example:
gfx_showmenu("first item, followed by separator||!second item, checked|>third item which spawns a submenu|#first item in submenu, grayed out|<second and last item in
submenu|fourth item in top menu")
EEL: gfx_transformblit(srcimg,destx,desty,destw,desth,div_w,div_h,table)
Blits to destination at (destx,desty), size (destw,desth). div_w and div_h should be 2..64, and table should point to a table of 2*div_w*div_h values (this table must not cross a 65536
item boundary). Each pair in the table represents a S,T coordinate in the source image, and the table is treated as a left-right, top-bottom list of texture coordinates, which will then be
rendered to the destination.
EEL: gfx_triangle(x1,y1,x2,y2,x3,y3[x4,y4...])
EEL: gfx_update()
EEL: ifft(buffer,size)
EEL: invsqrt(value)
EEL: log(value)
Returns the natural logarithm (base e) of the parameter. If the value is not greater than 0, the return value is undefined.
EEL: log10(value)
Returns the base-10 logarithm of the parameter. If the value is not greater than 0, the return value is undefined.
EEL: loop(count,expression)
Evaluates count once, and then executes expression count, but not more than 1048576, times.
You can also use format specifiers to match certain types of data, and optionally put that into a variable:
See also sprintf() for other notes, including specifying direct variable references via {}.
EEL: max(&value,&value)
Returns (by reference) the maximum value of the two parameters. Since max() returns by reference, expressions such as max(x,y) = 5 are possible.
EEL: memcpy(dest,src,length)
Copies length items of memory from src to dest. Regions are permitted to overlap.
EEL: memset(offset,value,length)
EEL: min(&value,&value)
Returns (by reference) the minimum value of the two parameters. Since min() returns by reference, expressions such as min(x,y) = 5 are possible.
Output formatted string to system-specific destination, see sprintf() for more information
EEL: rand([max])
Returns a psuedorandom real number between 0 and the parameter, inclusive. If the parameter is omitted or less than 1.0, 1.0 is used as a maximum instead.
EEL: runloop("code")
Identical to defer(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.
EEL: sign(value)
Returns 1.0 if the parameter is greater than 0, -1.0 if the parameter is less than 0, or 0 if the parameter is 0.
EEL: sin(angle)
Returns the sine of the angle specified (specified in radians -- to convert from degrees to radians, multiply by $pi/180, or 0.017453).
EEL: sleep(ms)
Yields the CPU for the millisecond count specified, calling Sleep() on Windows or usleep() on other platforms.
Formats a string and stores it in #dest. Format specifiers begin with %, and may include:
• %% = %
• %s = string from parameter
• %d = parameter as integer
• %i = parameter as integer
• %u = parameter as unsigned integer
• %x = parameter as hex (lowercase) integer
• %X = parameter as hex (uppercase) integer
• %c = parameter as character
• %f = parameter as floating point
• %e = parameter as floating point (scientific notation, lowercase)
• %E = parameter as floating point (scientific notation, uppercase)
• %g = parameter as floating point (shortest representation, lowercase)
• %G = parameter as floating point (shortest representation, uppercase)
Values for format specifiers can be specified as additional parameters to sprintf, or within {} in the format specifier (such as %{varname}d, in that case a global variable is always
used).
EEL: sqr(value)
Returns the square of the parameter (similar to value*value, but only evaluating value once).
EEL: sqrt(value)
Returns the square root of the parameter. If the parameter is negative, the return value is undefined.
EEL: stack_exch(&value)
Exchanges a value with the top of the stack, and returns a reference to the parameter (with the new value).
EEL: stack_peek(index)
Returns a reference to the item on the top of the stack (if index is 0), or to the Nth item on the stack if index is greater than 0.
EEL: stack_pop(&value)
Pops a value from the user stack into value, or into a temporary buffer if value is not specified, and returns a reference to where the stack was popped. Note that no checking is done to
determine if the stack is empty, and as such stack_pop() will never fail.
EEL: stack_push(&value)
Pushes value onto the user stack, returns a reference to the parameter.
EEL: str_delsub(#str,pos,len)
Deletes len characters at offset pos from #str, and returns #str.
EEL: str_getchar("str",offset[,type])
Returns the data at byte-offset offset of str. If offset is negative, position is relative to end of string.type defaults to signed char, but can be specified to read raw binary data in other
formats (note the single quotes, these are single/multi-byte characters):
EEL: str_insert(#str,"srcstr",pos)
EEL: str_setchar(#str,offset,val[,type]))
Sets value at offset offset, type optional. offset may be negative to refer to offset relative to end of string, or between 0 and length, inclusive, and if set to length it will lengthen string.
see str_getchar() for more information on types.
EEL: str_setlen(#str,len)
Sets length of #str (if increasing, will be space-padded), and returns #str.
EEL: strcat(#str,"srcstr")
EEL: strcmp("str","str2")
EEL: strcpy(#str,"srcstr")
EEL: strcpy_from(#str,"srcstr",offset)
EEL: strcpy_substr(#str,"srcstr",offs,ml))
PHP-style (start at offs, offs<0 means from end, ml for maxlen, ml<0 = reduce length by this amt)
EEL: stricmp("str","str2")
EEL: strlen("str")
Appends srcstr to #str, stopping after maxlen characters of srcstr. Returns #str.
EEL: strncmp("str","str2",maxlen)
EEL: strncpy(#str,"srcstr",maxlen)
EEL: strnicmp("str","str2",maxlen)
Compares strings giving up after maxlen characters, ignoring case, returning 0 if equal
EEL: tan(angle)
EEL: tcp_close(connection)
EEL: tcp_connect("address",port[,block])
Create a new TCP connection to address:port. If block is specified and 0, connection will be made nonblocking. Returns TCP connection ID greater than 0 on success.
EEL: tcp_listen(port[,"interface",#ip_out])
Listens on port specified. Returns less than 0 if could not listen, 0 if no new connection available, or greater than 0 (as a TCP connection ID) if a new connection was made. If a
connection made and #ip_out specified, it will be set to the remote IP. interface can be empty for all interfaces, otherwise an interface IP as a string.
EEL: tcp_listen_end(port)
EEL: tcp_recv(connection,#str[,maxlen])
Receives data from a connection to #str. If maxlen is specified, no more than maxlen bytes will be received. If non-blocking, 0 will be returned if would block. Returns less than 0 if
error.
EEL: tcp_send(connection,"str"[,len])
Sends a string to connection. Returns -1 on error, 0 if connection is non-blocking and would block, otherwise returns length sent. If len is specified and not less than 1, only the first len
bytes of the string parameter will be sent.
EEL: tcp_set_block(connection,block)
EEL: time([&val])
Sets the parameter (or a temporary buffer if omitted) to the number of seconds since January 1, 1970, and returns a reference to that value. The granularity of the value returned is 1
second.
EEL: time_precise([&val])
Sets the parameter (or a temporary buffer if omitted) to a system-local timestamp in seconds, and returns a reference to that value. The granularity of the value returned is system
defined (but generally significantly smaller than one second).
EEL: while(expression)
Executes expression until expression evaluates to zero, or until 1048576iterations occur. An alternate and more useful syntax is while (expression) ( statements ), which evaluates
statements after every non-zero evaluation of expression.
Adds code to be executed when the script finishes or is ended by the user. Typically used to clean up after the user terminates defer() or runloop() code.
Identical to runloop(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.
Lua: reaper.get_action_context()
Returns contextual information about the script, typically MIDI/OSC input values:
is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context()
val will be set to a relative or absolute value depending on mode (=0: absolute mode, >0: relative modes). resolution=127 for 7-bit resolution, =16383 for 14-bit resolution.
Notes: sectionID, and cmdID will be set to -1 if the script is not part of the action list. mode, resolution and val will be set to -1 if the script was not triggered via MIDI/OSC.
The following global variables are special and will be used by the graphics system:
• gfx.r, gfx.g, gfx.b, gfx.a - These represent the current red, green, blue, and alpha components used by drawing operations (0.0..1.0).
• gfx.w, gfx.h - These are set to the current width and height of the UI framebuffer.
• gfx.x, gfx.y - These set the "current" graphics position in x,y. You can set these yourselves, and many of the drawing functions update them as well.
• gfx.mode - Set to 0 for default options. Add 1.0 for additive blend mode (if you wish to do subtractive, set gfx.a to negative and use gfx.mode as additive). Add 2.0 to disable
source alpha for gfx.blit(). Add 4.0 to disable filtering for gfx.blit().
• gfx.clear - If set to a value greater than -1.0, this will result in the framebuffer being cleared to that color. the color for this one is packed RGB (0..255), i.e.
red+green*256+blue*65536. The default is 0 (black).
• gfx.dest - Defaults to -1, set to 0..1024-1 to have drawing operations go to an offscreen buffer (or loaded image).
• gfx.texth - Set to the height of a line of text in the current font. Do not modify this variable.
• gfx.ext_retina - If set to 1.0 on initialization, will be updated to 2.0 if high resolution display is supported, and if so gfx.w/gfx.h/etc will be doubled.
• gfx.mouse_x, gfx.mouse_y - gfx.mouse_x and gfx.mouse_y are set to the coordinates of the mouse relative to the graphics window.
• gfx.mouse_wheel, gfx.mouse_hwheel - mouse wheel (and horizontal wheel) positions. These will change typically by 120 or a multiple thereof, the caller should clear the state to
0 after reading it.
• gfx.mouse_cap is a bitfield of mouse and keyboard modifier state.
◦ 1: left mouse button
◦ 2: right mouse button
◦ 4: Control key
◦ 8: Shift key
◦ 16: Alt key
◦ 32: Windows key
◦ 64: middle mouse button
Lua: gfx.arc(x,y,r,ang1,ang2[,antialias])
Draws an arc of the circle centered at x,y, with ang1/ang2 being specified in radians.
Lua: gfx.blit(source, scale, rotation[, srcx, srcy, srcw, srch, destx, desty, destw, desth, rotxoffs, rotyoffs])
srcx/srcy/srcw/srch specify the source rectangle (if omitted srcw/srch default to image size), destx/desty/destw/desth specify dest rectangle (if not specified, these will default to
reasonable defaults -- destw/desth default to srcw/srch * scale).
Lua: gfx.blit(source,scale,rotation)
If three parameters are specified, copies the entirity of the source bitmap to gfx.x,gfx.y using current opacity and copy mode (set with gfx.a, gfx.mode). You can specify scale (1.0 is
unscaled) and rotation (0.0 is not rotated, angles are in radians).
For the "source" parameter specify -1 to use the main framebuffer as source, or an image index (see gfx.loadimg()).
Lua: gfx.blitext(source,coordinatelist,rotation)
Lua: gfx.blurto(x,y)
Blurs the region of the screen between gfx.x,gfx.y and x,y, and updates gfx.x,gfx.y to x,y.
Lua: gfx.circle(x,y,r[,fill,antialias])
Lua: gfx.deltablit(srcimg,srcx,srcy,srcw,srch,destx,desty,destw,desth,dsdx,dtdx,dsdy,dtdy,dsdxdy,dtdxdy)
Blits from srcimg(srcx,srcy,srcw,srch) to destination (destx,desty,destw,desth). Source texture coordinates are s/t, dsdx represents the change in s coordinate for each x pixel, dtdy
represents the change in t coordinate for each y pixel, etc. dsdxdy represents the change in dsdx for each line.
Lua: gfx.dock(v)
Call with v=-1 to query docked state, otherwise v>=0 to set docked state. State is &1 if docked, second byte is docker index (or last docker index if undocked).
Lua: gfx.drawchar(char)
Draws the character (can be a numeric ASCII code as well), to gfx.x, gfx.y, and moves gfx.x over by the size of the character.
Lua: gfx.drawnumber(n,ndigits)
Draws the number n with ndigits of precision to gfx.x, gfx.y, and updates gfx.x to the right side of the drawing. The text height is gfx.texth.
Lua: gfx.drawstr("str")
Draws a string at gfx.x, gfx.y, and updates gfx.x/gfx.y so that subsequent draws will occur in a similar place.
Lua: gfx.getchar([char])
If char is 0 or omitted, returns a character from the keyboard queue, or 0 if no character is available, or -1 if the graphics window is not open. If char is specified and nonzero, that
character's status will be checked, and the function will return greater than 0 if it is pressed.
Common values are standard ASCII, such as 'a', 'A', '=' and '1', but for many keys multi-byte values are used, including 'home', 'up', 'down', 'left', 'rght', 'f1'.. 'f12', 'pgup', 'pgdn', 'ins', and
'del'.
• Ctrl/Cmd+A..Ctrl+Z as 1..26
• Ctrl/Cmd+Alt+A..Z as 257..282
• Alt+A..Z as 'A'+256..'Z'+256
• 27 for ESC
• 13 for Enter
• ' ' for space
Lua: gfx.getfont()
Returns current font index, and the actual font face used by this font (if available).
Lua: gfx.getimgdim(handle)
Lua: gfx.gradrect(x,y,w,h, r,g,b,a[, drdx, dgdx, dbdx, dadx, drdy, dgdy, dbdy, dady])
Fills a gradient rectangle with the color and alpha specified. drdx-dadx reflect the adjustment (per-pixel) applied for each pixel moved to the right, drdy-dady are the adjustment applied
for each pixel moved toward the bottom. Normally drdx=adjustamount/w, drdy=adjustamount/h, etc.
Lua: gfx.init("name"[,width,height,dockstate])
Initializes the graphics window with title name. Suggested width and height can be specified.
Lua: gfx.line(x,y,x2,y2[,aa])
Draws a line from x,y to x2,y2, and if aa is not specified or 0.5 or greater, it will be antialiased.
Lua: gfx.lineto(x,y[,aa])
Draws a line from gfx.x,gfx.y to x,y. If aa is 0.5 or greater, then antialiasing is used. Updates gfx.x and gfx.y to x,y.
Lua: gfx.loadimg(image,"filename")
Load image from filename into slot 0..1024-1 specified by image. Returns the image index if success, otherwise -1 if failure. The image will be resized to the dimensions of the image
file.
Lua: gfx.measurechar(char)
Measures the drawing dimensions of a character with the current font (as set by gfx.setfont). Returns width and height of character.
Lua: gfx.measurestr("str")
Measures the drawing dimensions of a string with the current font (as set by gfx.setfont). Returns width and height of string.
Lua: gfx.muladdrect(x,y,w,h,mul_r,mul_g,mul_b[,mul_a,add_r,add_g,add_b,add_a])
Multiplies each pixel by mul_* and adds add_*, and updates in-place. Useful for changing brightness/contrast, or other effects.
Formats and draws a string at gfx.x, gfx.y, and updates gfx.x/gfx.y accordingly (the latter only if the formatted string contains newline). For more information on format strings, see
sprintf()
Lua: gfx.quit()
Lua: gfx.rect(x,y,w,h[,filled])
Lua: gfx.rectto(x,y)
Lua: gfx.roundrect(x,y,w,h,radius[,antialias])
Draws a rectangle with rounded corners.
Lua: gfx.set(r[,g,b,a,mode,dest])
Lua: gfx.setcursor(resource_id,custom_cursor_name)
Sets the mouse cursor. resource_id is a value like 32512 (for an arrow cursor), custom_cursor_name is a string like "arrow" (for the REAPER custom arrow cursor). resource_id must
be nonzero, but custom_cursor_name is optional.
Can select a font and optionally configure it. idx=0 for default bitmapped font, no configuration is possible for this font. idx=1..16 for a configurable font, specify fontface such as
"Arial", sz of 8-100, and optionally specify flags, which is a multibyte character, which can include 'i' for italics, 'u' for underline, or 'b' for bold. These flags may or may not be
supported depending on the font and OS. After calling gfx.setfont(), gfx.texth may be updated to reflect the new average line height.
Lua: gfx.setimgdim(image,w,h)
Resize image referenced by index 0..1024-1, width and height must be 0-2048. The contents of the image will be undefined after the resize.
Lua: gfx.setpixel(r,g,b)
Lua: gfx.showmenu("str")
Shows a popup menu at gfx.x,gfx.y. str is a list of fields separated by | characters. Each field represents a menu item.
Fields can start with special characters:
# : grayed out
! : checked
> : this menu item shows a submenu
< : last item in the current submenu
An empty field will appear as a separator in the menu. gfx.showmenu returns 0 if the user selected nothing from the menu, 1 if the first field is selected, etc.
Example:
gfx.showmenu("first item, followed by separator||!second item, checked|>third item which spawns a submenu|#first item in submenu, grayed out|<second and last item in
submenu|fourth item in top menu")
Lua: gfx.transformblit(srcimg,destx,desty,destw,desth,div_w,div_h,table)
Blits to destination at (destx,desty), size (destw,desth). div_w and div_h should be 2..64, and table should point to a table of 2*div_w*div_h values (table can be a regular table or (for
less overhead) a reaper.array). Each pair in the table represents a S,T coordinate in the source image, and the table is treated as a left-right, top-bottom list of texture coordinates, which
will then be rendered to the destination.
Lua: gfx.triangle(x1,y1,x2,y2,x3,y3[x4,y4...])
Lua: gfx.update()
Lua: reaper.new_array([table|array][size])
Creates a new reaper.array object of maximum and initial size size, if specified, or from the size/values of a table/array. Both size and table/array can be specified, the size parameter
will override the table/array size.
Identical to defer(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.
Lua: {reaper.array}.clear([value, offset, size])
Sets the value of zero or more items in the array. If value not specified, 0.0 is used. offset is 1-based, if size omitted then the maximum amount available will be set.
Convolves complex value pairs from reaper.array, starting at 1-based srcoffs, reading/writing to 1-based destoffs. size is in normal items (so it must be even)
Copies values from reaper.array or table, starting at 1-based srcoffs, writing to 1-based destoffs.
Performs a forward FFT of size. size must be a power of two between 4 and 32768 inclusive. If permute is specified and true, the values will be shuffled following the FFT to be in
normal order.
Lua: {reaper.array}.get_alloc()
Performs a backwards FFT of size. size must be a power of two between 4 and 32768 inclusive. If permute is specified and true, the values will be shuffled before the IFFT to be in fft-
order.
Multiplies values from reaper.array, starting at 1-based srcoffs, reading/writing to 1-based destoffs.
Lua: {reaper.array}.resize(size)
Returns a new table with values from items in the array. Offset is 1-based and if size is omitted all available values are used.
Python: RPR_atexit(String)
Adds code to be executed when the script finishes or is ended by the user. Typically used to clean up after the user terminates defer() or runloop() code.
Identical to runloop(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.
Identical to defer(). Adds code to be called back by REAPER. Used to create persistent ReaScripts that continue to run and respond to input, while the user does other tasks.
Note that no undo point will be automatically created when the script finishes, unless you create it explicitly.