ReaWwise

REAPER extension
Log | Files | Refs | Submodules

reaper_plugin_functions.h (465774B)


      1 #ifndef _REAPER_PLUGIN_FUNCTIONS_H_
      2 #define _REAPER_PLUGIN_FUNCTIONS_H_
      3 
      4 // REAPER API functions
      5 // Generated by REAPER v6.68+dev0927/win64
      6 
      7 /*
      8 *  Copyright 2006 and later, Cockos Incorporated
      9 *
     10 *  This software is provided 'as-is', without any express or implied
     11 *  warranty.  In no event will the authors be held liable for any damages
     12 *  arising from the use of this software.
     13 *
     14 *  Permission is granted to anyone to use this software for any purpose,
     15 *  including commercial applications, and to alter it and redistribute it
     16 *  freely, subject to the following restrictions:
     17 *
     18 *  1. The origin of this software must not be misrepresented; you must not
     19 *     claim that you wrote the original software. If you use this software
     20 *     in a product, an acknowledgment in the product documentation would be
     21 *     appreciated but is not required.
     22 *  2. Altered source versions must be plainly marked as such, and must not be
     23 *     misrepresented as being the original software.
     24 *  3. This notice may not be removed or altered from any source distribution.
     25 */
     26 
     27 // Note: the C++ pure virtual interfaces used require the MSVC-compatible C++ ABI on Win32.  Sorry, mingw users.
     28 //
     29 // Reaper extensions: see http://www.cockos.com/reaper/sdk/plugin/plugin.php and reaper_plugin.h.
     30 // The API functions in this header can be retrieved using reaper_plugin_info_t.GetFunc().
     31 //
     32 // VST plugins: see http://www.cockos.com/reaper/sdk/vst/vst_ext.php
     33 // The API functions in this header can be retrieved using audioMasterCallback.
     34 //
     35 // Because the API is dynamic, callers should never assume a function exists.
     36 // Check that a non-NULL function pointer was returned before using it (unless
     37 // loaded functions are verified using REAPERAPI_LoadAPI(), see note below).
     38 
     39 // New (4.76+) usage of this file:
     40 //   1) most source files should just #include "reaper_plugin_functions.h" as is.
     41 //   2) one file should #define REAPERAPI_IMPLEMENT before including this file.
     42 //   3) the plug-in should call REAPERAPI_LoadAPI(rec->GetFunc) from REAPER_PLUGIN_ENTRYPOINT
     43 //      and check the return value for errors (REAPERAPI_LoadAPI will return 0 on success).
     44 
     45 //   By default, all functions listed in this file are loaded. This means that an older version
     46 //   of REAPER may not succeed in loading, and also it may bloat your plug-in. If you wish to only load
     47 //   needed functions, #define REAPERAPI_MINIMAL and various #define REAPERAPI_WANT_<functionname> lines
     48 //   before including this file. You must put these definitions where REAPERAPI_IMPLEMENT is defined
     49 //   and you can optionally put them elsewhere (to detect needed REAPERAPI_WANT_xxx lines at compile-
     50 //   time rather than link-time).
     51 //   
     52 #if !defined(_LICE_H) && !defined(REAPERAPI_NO_LICE)
     53 typedef unsigned int LICE_pixel;
     54 typedef unsigned char LICE_pixel_chan;
     55 class LICE_IBitmap;
     56 class LICE_IFont;
     57 #endif
     58 
     59 class WDL_VirtualWnd_BGCfg;
     60 class AudioAccessor;
     61 class joystick_device;
     62 
     63 // easiest to include reaper_plugin.h before reaper_plugin_functions.h in your application code.
     64 // if not, you may need to edit this path.
     65 #ifndef _REAPER_PLUGIN_H_
     66 #include "reaper_plugin.h"
     67 #endif
     68 
     69 #ifdef REAPERAPI_DEF
     70 #undef REAPERAPI_DEF
     71 #endif
     72 #ifdef REAPERAPI_IMPLEMENT
     73   #define REAPERAPI_DEF
     74 #else
     75   #define REAPERAPI_DEF extern
     76 #endif
     77 
     78 
     79 #if defined(REAPERAPI_WANT___mergesort) || !defined(REAPERAPI_MINIMAL)
     80 REAPERAPI_DEF //==============================================
     81 // __mergesort
     82 // __mergesort is a stable sorting function with an API similar to qsort().
     83 // HOWEVER, it requires some temporary space, equal to the size of the data being sorted, so you can pass it as the last parameter,
     84 // or NULL and it will allocate and free space internally.
     85 
     86   void (*__mergesort)(void* base, size_t nmemb, size_t size, int (*cmpfunc)(const void*,const void*), void* tmpspace);
     87 #endif
     88 
     89 #if defined(REAPERAPI_WANT_AddCustomizableMenu) || !defined(REAPERAPI_MINIMAL)
     90 REAPERAPI_DEF //==============================================
     91 // AddCustomizableMenu
     92 // menuidstr is some unique identifying string
     93 // menuname is for main menus only (displayed in a menu bar somewhere), NULL otherwise
     94 // kbdsecname is the name of the KbdSectionInfo registered by this plugin, or NULL for the main actions section
     95 
     96   bool (*AddCustomizableMenu)(const char* menuidstr, const char* menuname, const char* kbdsecname, bool addtomainmenu);
     97 #endif
     98 
     99 #if defined(REAPERAPI_WANT_AddExtensionsMainMenu) || !defined(REAPERAPI_MINIMAL)
    100 REAPERAPI_DEF //==============================================
    101 // AddExtensionsMainMenu
    102 // Add an Extensions main menu, which the extension can populate/modify with plugin_register("hookcustommenu")
    103 
    104   bool (*AddExtensionsMainMenu)();
    105 #endif
    106 
    107 #if defined(REAPERAPI_WANT_AddMediaItemToTrack) || !defined(REAPERAPI_MINIMAL)
    108 REAPERAPI_DEF //==============================================
    109 // AddMediaItemToTrack
    110 // creates a new media item.
    111 
    112   MediaItem* (*AddMediaItemToTrack)(MediaTrack* tr);
    113 #endif
    114 
    115 #if defined(REAPERAPI_WANT_AddProjectMarker) || !defined(REAPERAPI_MINIMAL)
    116 REAPERAPI_DEF //==============================================
    117 // AddProjectMarker
    118 // 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.
    119 
    120   int (*AddProjectMarker)(ReaProject* proj, bool isrgn, double pos, double rgnend, const char* name, int wantidx);
    121 #endif
    122 
    123 #if defined(REAPERAPI_WANT_AddProjectMarker2) || !defined(REAPERAPI_MINIMAL)
    124 REAPERAPI_DEF //==============================================
    125 // AddProjectMarker2
    126 // 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 (default color), or ColorToNative(r,g,b)|0x1000000
    127 
    128   int (*AddProjectMarker2)(ReaProject* proj, bool isrgn, double pos, double rgnend, const char* name, int wantidx, int color);
    129 #endif
    130 
    131 #if defined(REAPERAPI_WANT_AddRemoveReaScript) || !defined(REAPERAPI_MINIMAL)
    132 REAPERAPI_DEF //==============================================
    133 // AddRemoveReaScript
    134 // Add a ReaScript (return the new command ID, or 0 if failed) or remove a ReaScript (return >0 on success). Use commit==true when adding/removing a single script. When bulk adding/removing n scripts, you can optimize the n-1 first calls with commit==false and commit==true for the last call.
    135 
    136   int (*AddRemoveReaScript)(bool add, int sectionID, const char* scriptfn, bool commit);
    137 #endif
    138 
    139 #if defined(REAPERAPI_WANT_AddTakeToMediaItem) || !defined(REAPERAPI_MINIMAL)
    140 REAPERAPI_DEF //==============================================
    141 // AddTakeToMediaItem
    142 // creates a new take in an item
    143 
    144   MediaItem_Take* (*AddTakeToMediaItem)(MediaItem* item);
    145 #endif
    146 
    147 #if defined(REAPERAPI_WANT_AddTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
    148 REAPERAPI_DEF //==============================================
    149 // AddTempoTimeSigMarker
    150 // Deprecated. Use SetTempoTimeSigMarker with ptidx=-1.
    151 
    152   bool (*AddTempoTimeSigMarker)(ReaProject* proj, double timepos, double bpm, int timesig_num, int timesig_denom, bool lineartempochange);
    153 #endif
    154 
    155 #if defined(REAPERAPI_WANT_adjustZoom) || !defined(REAPERAPI_MINIMAL)
    156 REAPERAPI_DEF //==============================================
    157 // adjustZoom
    158 // forceset=0,doupd=true,centermode=-1 for default
    159 
    160   void (*adjustZoom)(double amt, int forceset, bool doupd, int centermode);
    161 #endif
    162 
    163 #if defined(REAPERAPI_WANT_AnyTrackSolo) || !defined(REAPERAPI_MINIMAL)
    164 REAPERAPI_DEF //==============================================
    165 // AnyTrackSolo
    166 
    167   bool (*AnyTrackSolo)(ReaProject* proj);
    168 #endif
    169 
    170 #if defined(REAPERAPI_WANT_APIExists) || !defined(REAPERAPI_MINIMAL)
    171 REAPERAPI_DEF //==============================================
    172 // APIExists
    173 // Returns true if function_name exists in the REAPER API
    174 
    175   bool (*APIExists)(const char* function_name);
    176 #endif
    177 
    178 #if defined(REAPERAPI_WANT_APITest) || !defined(REAPERAPI_MINIMAL)
    179 REAPERAPI_DEF //==============================================
    180 // APITest
    181 // Displays a message window if the API was successfully called.
    182 
    183   void (*APITest)();
    184 #endif
    185 
    186 #if defined(REAPERAPI_WANT_ApplyNudge) || !defined(REAPERAPI_MINIMAL)
    187 REAPERAPI_DEF //==============================================
    188 // ApplyNudge
    189 // nudgeflag: &1=set to value (otherwise nudge by value), &2=snap
    190 // nudgewhat: 0=position, 1=left trim, 2=left edge, 3=right edge, 4=contents, 5=duplicate, 6=edit cursor
    191 // nudgeunit: 0=ms, 1=seconds, 2=grid, 3=256th notes, ..., 15=whole notes, 16=measures.beats (1.15 = 1 measure + 1.5 beats), 17=samples, 18=frames, 19=pixels, 20=item lengths, 21=item selections
    192 // value: amount to nudge by, or value to set to
    193 // reverse: in nudge mode, nudges left (otherwise ignored)
    194 // copies: in nudge duplicate mode, number of copies (otherwise ignored)
    195 
    196   bool (*ApplyNudge)(ReaProject* project, int nudgeflag, int nudgewhat, int nudgeunits, double value, bool reverse, int copies);
    197 #endif
    198 
    199 #if defined(REAPERAPI_WANT_ArmCommand) || !defined(REAPERAPI_MINIMAL)
    200 REAPERAPI_DEF //==============================================
    201 // ArmCommand
    202 // arms a command (or disarms if 0 passed) in section sectionname (empty string for main)
    203 
    204   void (*ArmCommand)(int cmd, const char* sectionname);
    205 #endif
    206 
    207 #if defined(REAPERAPI_WANT_Audio_Init) || !defined(REAPERAPI_MINIMAL)
    208 REAPERAPI_DEF //==============================================
    209 // Audio_Init
    210 // open all audio and MIDI devices, if not open
    211 
    212   void (*Audio_Init)();
    213 #endif
    214 
    215 #if defined(REAPERAPI_WANT_Audio_IsPreBuffer) || !defined(REAPERAPI_MINIMAL)
    216 REAPERAPI_DEF //==============================================
    217 // Audio_IsPreBuffer
    218 // is in pre-buffer? threadsafe
    219 
    220   int (*Audio_IsPreBuffer)();
    221 #endif
    222 
    223 #if defined(REAPERAPI_WANT_Audio_IsRunning) || !defined(REAPERAPI_MINIMAL)
    224 REAPERAPI_DEF //==============================================
    225 // Audio_IsRunning
    226 // is audio running at all? threadsafe
    227 
    228   int (*Audio_IsRunning)();
    229 #endif
    230 
    231 #if defined(REAPERAPI_WANT_Audio_Quit) || !defined(REAPERAPI_MINIMAL)
    232 REAPERAPI_DEF //==============================================
    233 // Audio_Quit
    234 // close all audio and MIDI devices, if open
    235 
    236   void (*Audio_Quit)();
    237 #endif
    238 
    239 #if defined(REAPERAPI_WANT_Audio_RegHardwareHook) || !defined(REAPERAPI_MINIMAL)
    240 REAPERAPI_DEF //==============================================
    241 // Audio_RegHardwareHook
    242 // return >0 on success
    243 
    244   int (*Audio_RegHardwareHook)(bool isAdd, audio_hook_register_t* reg);
    245 #endif
    246 
    247 #if defined(REAPERAPI_WANT_AudioAccessorStateChanged) || !defined(REAPERAPI_MINIMAL)
    248 REAPERAPI_DEF //==============================================
    249 // AudioAccessorStateChanged
    250 // Returns true if the underlying samples (track or media item take) have changed, but does not update the audio accessor, so the user can selectively call AudioAccessorValidateState only when needed. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, GetAudioAccessorEndTime, GetAudioAccessorSamples.
    251 
    252   bool (*AudioAccessorStateChanged)(AudioAccessor* accessor);
    253 #endif
    254 
    255 #if defined(REAPERAPI_WANT_AudioAccessorUpdate) || !defined(REAPERAPI_MINIMAL)
    256 REAPERAPI_DEF //==============================================
    257 // AudioAccessorUpdate
    258 // Force the accessor to reload its state from the underlying track or media item take. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
    259 
    260   void (*AudioAccessorUpdate)(AudioAccessor* accessor);
    261 #endif
    262 
    263 #if defined(REAPERAPI_WANT_AudioAccessorValidateState) || !defined(REAPERAPI_MINIMAL)
    264 REAPERAPI_DEF //==============================================
    265 // AudioAccessorValidateState
    266 // Validates the current state of the audio accessor -- must ONLY call this from the main thread. Returns true if the state changed.
    267 
    268   bool (*AudioAccessorValidateState)(AudioAccessor* accessor);
    269 #endif
    270 
    271 #if defined(REAPERAPI_WANT_BypassFxAllTracks) || !defined(REAPERAPI_MINIMAL)
    272 REAPERAPI_DEF //==============================================
    273 // BypassFxAllTracks
    274 // -1 = bypass all if not all bypassed,otherwise unbypass all
    275 
    276   void (*BypassFxAllTracks)(int bypass);
    277 #endif
    278 
    279 #if defined(REAPERAPI_WANT_CalcMediaSrcLoudness) || !defined(REAPERAPI_MINIMAL)
    280 REAPERAPI_DEF //==============================================
    281 // CalcMediaSrcLoudness
    282 // Calculates loudness statistics of media via dry run render. Statistics will be displayed to the user; call GetSetProjectInfo_String("RENDER_STATS") to retrieve via API. Returns 1 if loudness was calculated successfully, -1 if user canceled the dry run render.
    283 
    284   int (*CalcMediaSrcLoudness)(PCM_source* mediasource);
    285 #endif
    286 
    287 #if defined(REAPERAPI_WANT_CalculateNormalization) || !defined(REAPERAPI_MINIMAL)
    288 REAPERAPI_DEF //==============================================
    289 // CalculateNormalization
    290 // Calculate normalize adjustment for source media. normalizeTo: 0=LUFS-I, 1=RMS-I, 2=peak, 3=true peak, 4=LUFS-M max, 5=LUFS-S max. normalizeTarget: dBFS or LUFS value. normalizeStart, normalizeEnd: time bounds within source media for normalization calculation. If normalizationStart=0 and normalizationEnd=0, the full duration of the media will be used for the calculation.
    291 
    292   double (*CalculateNormalization)(PCM_source* source, int normalizeTo, double normalizeTarget, double normalizeStart, double normalizeEnd);
    293 #endif
    294 
    295 #if defined(REAPERAPI_WANT_CalculatePeaks) || !defined(REAPERAPI_MINIMAL)
    296 REAPERAPI_DEF //==============================================
    297 // CalculatePeaks
    298 
    299   int (*CalculatePeaks)(PCM_source_transfer_t* srcBlock, PCM_source_peaktransfer_t* pksBlock);
    300 #endif
    301 
    302 #if defined(REAPERAPI_WANT_CalculatePeaksFloatSrcPtr) || !defined(REAPERAPI_MINIMAL)
    303 REAPERAPI_DEF //==============================================
    304 // CalculatePeaksFloatSrcPtr
    305 // NOTE: source samples field is a pointer to floats instead
    306 
    307   int (*CalculatePeaksFloatSrcPtr)(PCM_source_transfer_t* srcBlock, PCM_source_peaktransfer_t* pksBlock);
    308 #endif
    309 
    310 #if defined(REAPERAPI_WANT_ClearAllRecArmed) || !defined(REAPERAPI_MINIMAL)
    311 REAPERAPI_DEF //==============================================
    312 // ClearAllRecArmed
    313 
    314   void (*ClearAllRecArmed)();
    315 #endif
    316 
    317 #if defined(REAPERAPI_WANT_ClearConsole) || !defined(REAPERAPI_MINIMAL)
    318 REAPERAPI_DEF //==============================================
    319 // ClearConsole
    320 // Clear the ReaScript console. See ShowConsoleMsg
    321 
    322   void (*ClearConsole)();
    323 #endif
    324 
    325 #if defined(REAPERAPI_WANT_ClearPeakCache) || !defined(REAPERAPI_MINIMAL)
    326 REAPERAPI_DEF //==============================================
    327 // ClearPeakCache
    328 // resets the global peak caches
    329 
    330   void (*ClearPeakCache)();
    331 #endif
    332 
    333 #if defined(REAPERAPI_WANT_ColorFromNative) || !defined(REAPERAPI_MINIMAL)
    334 REAPERAPI_DEF //==============================================
    335 // ColorFromNative
    336 // Extract RGB values from an OS dependent color. See ColorToNative.
    337 
    338   void (*ColorFromNative)(int col, int* rOut, int* gOut, int* bOut);
    339 #endif
    340 
    341 #if defined(REAPERAPI_WANT_ColorToNative) || !defined(REAPERAPI_MINIMAL)
    342 REAPERAPI_DEF //==============================================
    343 // ColorToNative
    344 // Make an OS dependent color from RGB values (e.g. RGB() macro on Windows). r,g and b are in [0..255]. See ColorFromNative.
    345 
    346   int (*ColorToNative)(int r, int g, int b);
    347 #endif
    348 
    349 #if defined(REAPERAPI_WANT_CountActionShortcuts) || !defined(REAPERAPI_MINIMAL)
    350 REAPERAPI_DEF //==============================================
    351 // CountActionShortcuts
    352 // Returns the number of shortcuts that exist for the given command ID.
    353 // see GetActionShortcutDesc, DeleteActionShortcut, DoActionShortcutDialog.
    354 
    355   int (*CountActionShortcuts)(KbdSectionInfo* section, int cmdID);
    356 #endif
    357 
    358 #if defined(REAPERAPI_WANT_CountAutomationItems) || !defined(REAPERAPI_MINIMAL)
    359 REAPERAPI_DEF //==============================================
    360 // CountAutomationItems
    361 // Returns the number of automation items on this envelope. See GetSetAutomationItemInfo
    362 
    363   int (*CountAutomationItems)(TrackEnvelope* env);
    364 #endif
    365 
    366 #if defined(REAPERAPI_WANT_CountEnvelopePoints) || !defined(REAPERAPI_MINIMAL)
    367 REAPERAPI_DEF //==============================================
    368 // CountEnvelopePoints
    369 // Returns the number of points in the envelope. See CountEnvelopePointsEx.
    370 
    371   int (*CountEnvelopePoints)(TrackEnvelope* envelope);
    372 #endif
    373 
    374 #if defined(REAPERAPI_WANT_CountEnvelopePointsEx) || !defined(REAPERAPI_MINIMAL)
    375 REAPERAPI_DEF //==============================================
    376 // CountEnvelopePointsEx
    377 // Returns the number of points in the envelope.
    378 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
    379 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
    380 // even if the automation item is trimmed so that not all points are visible.
    381 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
    382 // See GetEnvelopePointEx, SetEnvelopePointEx, InsertEnvelopePointEx, DeleteEnvelopePointEx.
    383 
    384   int (*CountEnvelopePointsEx)(TrackEnvelope* envelope, int autoitem_idx);
    385 #endif
    386 
    387 #if defined(REAPERAPI_WANT_CountMediaItems) || !defined(REAPERAPI_MINIMAL)
    388 REAPERAPI_DEF //==============================================
    389 // CountMediaItems
    390 // count the number of items in the project (proj=0 for active project)
    391 
    392   int (*CountMediaItems)(ReaProject* proj);
    393 #endif
    394 
    395 #if defined(REAPERAPI_WANT_CountProjectMarkers) || !defined(REAPERAPI_MINIMAL)
    396 REAPERAPI_DEF //==============================================
    397 // CountProjectMarkers
    398 // num_markersOut and num_regionsOut may be NULL.
    399 
    400   int (*CountProjectMarkers)(ReaProject* proj, int* num_markersOut, int* num_regionsOut);
    401 #endif
    402 
    403 #if defined(REAPERAPI_WANT_CountSelectedMediaItems) || !defined(REAPERAPI_MINIMAL)
    404 REAPERAPI_DEF //==============================================
    405 // CountSelectedMediaItems
    406 // count the number of selected items in the project (proj=0 for active project)
    407 
    408   int (*CountSelectedMediaItems)(ReaProject* proj);
    409 #endif
    410 
    411 #if defined(REAPERAPI_WANT_CountSelectedTracks) || !defined(REAPERAPI_MINIMAL)
    412 REAPERAPI_DEF //==============================================
    413 // CountSelectedTracks
    414 // Count the number of selected tracks in the project (proj=0 for active project). This function ignores the master track, see CountSelectedTracks2.
    415 
    416   int (*CountSelectedTracks)(ReaProject* proj);
    417 #endif
    418 
    419 #if defined(REAPERAPI_WANT_CountSelectedTracks2) || !defined(REAPERAPI_MINIMAL)
    420 REAPERAPI_DEF //==============================================
    421 // CountSelectedTracks2
    422 // Count the number of selected tracks in the project (proj=0 for active project).
    423 
    424   int (*CountSelectedTracks2)(ReaProject* proj, bool wantmaster);
    425 #endif
    426 
    427 #if defined(REAPERAPI_WANT_CountTakeEnvelopes) || !defined(REAPERAPI_MINIMAL)
    428 REAPERAPI_DEF //==============================================
    429 // CountTakeEnvelopes
    430 // See GetTakeEnvelope
    431 
    432   int (*CountTakeEnvelopes)(MediaItem_Take* take);
    433 #endif
    434 
    435 #if defined(REAPERAPI_WANT_CountTakes) || !defined(REAPERAPI_MINIMAL)
    436 REAPERAPI_DEF //==============================================
    437 // CountTakes
    438 // count the number of takes in the item
    439 
    440   int (*CountTakes)(MediaItem* item);
    441 #endif
    442 
    443 #if defined(REAPERAPI_WANT_CountTCPFXParms) || !defined(REAPERAPI_MINIMAL)
    444 REAPERAPI_DEF //==============================================
    445 // CountTCPFXParms
    446 // Count the number of FX parameter knobs displayed on the track control panel.
    447 
    448   int (*CountTCPFXParms)(ReaProject* project, MediaTrack* track);
    449 #endif
    450 
    451 #if defined(REAPERAPI_WANT_CountTempoTimeSigMarkers) || !defined(REAPERAPI_MINIMAL)
    452 REAPERAPI_DEF //==============================================
    453 // CountTempoTimeSigMarkers
    454 // Count the number of tempo/time signature markers in the project. See GetTempoTimeSigMarker, SetTempoTimeSigMarker, AddTempoTimeSigMarker.
    455 
    456   int (*CountTempoTimeSigMarkers)(ReaProject* proj);
    457 #endif
    458 
    459 #if defined(REAPERAPI_WANT_CountTrackEnvelopes) || !defined(REAPERAPI_MINIMAL)
    460 REAPERAPI_DEF //==============================================
    461 // CountTrackEnvelopes
    462 // see GetTrackEnvelope
    463 
    464   int (*CountTrackEnvelopes)(MediaTrack* track);
    465 #endif
    466 
    467 #if defined(REAPERAPI_WANT_CountTrackMediaItems) || !defined(REAPERAPI_MINIMAL)
    468 REAPERAPI_DEF //==============================================
    469 // CountTrackMediaItems
    470 // count the number of items in the track
    471 
    472   int (*CountTrackMediaItems)(MediaTrack* track);
    473 #endif
    474 
    475 #if defined(REAPERAPI_WANT_CountTracks) || !defined(REAPERAPI_MINIMAL)
    476 REAPERAPI_DEF //==============================================
    477 // CountTracks
    478 // count the number of tracks in the project (proj=0 for active project)
    479 
    480   int (*CountTracks)(ReaProject* projOptional);
    481 #endif
    482 
    483 #if defined(REAPERAPI_WANT_CreateLocalOscHandler) || !defined(REAPERAPI_MINIMAL)
    484 REAPERAPI_DEF //==============================================
    485 // CreateLocalOscHandler
    486 // callback is a function pointer: void (*callback)(void* obj, const char* msg, int msglen), which handles OSC messages sent from REAPER. The function return is a local osc handler. See SendLocalOscMessage, DestroyOscHandler.
    487 
    488   void* (*CreateLocalOscHandler)(void* obj, void* callback);
    489 #endif
    490 
    491 #if defined(REAPERAPI_WANT_CreateMIDIInput) || !defined(REAPERAPI_MINIMAL)
    492 REAPERAPI_DEF //==============================================
    493 // CreateMIDIInput
    494 // Can only reliably create midi access for devices not already opened in prefs/MIDI, suitable for control surfaces etc.
    495 
    496   midi_Input* (*CreateMIDIInput)(int dev);
    497 #endif
    498 
    499 #if defined(REAPERAPI_WANT_CreateMIDIOutput) || !defined(REAPERAPI_MINIMAL)
    500 REAPERAPI_DEF //==============================================
    501 // CreateMIDIOutput
    502 // Can only reliably create midi access for devices not already opened in prefs/MIDI, suitable for control surfaces etc. If streamMode is set, msoffset100 points to a persistent variable that can change and reflects added delay to output in 100ths of a millisecond.
    503 
    504   midi_Output* (*CreateMIDIOutput)(int dev, bool streamMode, int* msoffset100);
    505 #endif
    506 
    507 #if defined(REAPERAPI_WANT_CreateNewMIDIItemInProj) || !defined(REAPERAPI_MINIMAL)
    508 REAPERAPI_DEF //==============================================
    509 // CreateNewMIDIItemInProj
    510 // Create a new MIDI media item, containing no MIDI events. Time is in seconds unless qn is set.
    511 
    512   MediaItem* (*CreateNewMIDIItemInProj)(MediaTrack* track, double starttime, double endtime, const bool* qnInOptional);
    513 #endif
    514 
    515 #if defined(REAPERAPI_WANT_CreateTakeAudioAccessor) || !defined(REAPERAPI_MINIMAL)
    516 REAPERAPI_DEF //==============================================
    517 // CreateTakeAudioAccessor
    518 // Create an audio accessor object for this take. Must only call from the main thread. See CreateTrackAudioAccessor, DestroyAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
    519 
    520   AudioAccessor* (*CreateTakeAudioAccessor)(MediaItem_Take* take);
    521 #endif
    522 
    523 #if defined(REAPERAPI_WANT_CreateTrackAudioAccessor) || !defined(REAPERAPI_MINIMAL)
    524 REAPERAPI_DEF //==============================================
    525 // CreateTrackAudioAccessor
    526 // Create an audio accessor object for this track. Must only call from the main thread. See CreateTakeAudioAccessor, DestroyAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples.
    527 
    528   AudioAccessor* (*CreateTrackAudioAccessor)(MediaTrack* track);
    529 #endif
    530 
    531 #if defined(REAPERAPI_WANT_CreateTrackSend) || !defined(REAPERAPI_MINIMAL)
    532 REAPERAPI_DEF //==============================================
    533 // CreateTrackSend
    534 // Create a send/receive (desttrInOptional!=NULL), or a hardware output (desttrInOptional==NULL) with default properties, return >=0 on success (== new send/receive index). See RemoveTrackSend, GetSetTrackSendInfo, GetTrackSendInfo_Value, SetTrackSendInfo_Value.
    535 
    536   int (*CreateTrackSend)(MediaTrack* tr, MediaTrack* desttrInOptional);
    537 #endif
    538 
    539 #if defined(REAPERAPI_WANT_CSurf_FlushUndo) || !defined(REAPERAPI_MINIMAL)
    540 REAPERAPI_DEF //==============================================
    541 // CSurf_FlushUndo
    542 // call this to force flushing of the undo states after using CSurf_On*Change()
    543 
    544   void (*CSurf_FlushUndo)(bool force);
    545 #endif
    546 
    547 #if defined(REAPERAPI_WANT_CSurf_GetTouchState) || !defined(REAPERAPI_MINIMAL)
    548 REAPERAPI_DEF //==============================================
    549 // CSurf_GetTouchState
    550 
    551   bool (*CSurf_GetTouchState)(MediaTrack* trackid, int isPan);
    552 #endif
    553 
    554 #if defined(REAPERAPI_WANT_CSurf_GoEnd) || !defined(REAPERAPI_MINIMAL)
    555 REAPERAPI_DEF //==============================================
    556 // CSurf_GoEnd
    557 
    558   void (*CSurf_GoEnd)();
    559 #endif
    560 
    561 #if defined(REAPERAPI_WANT_CSurf_GoStart) || !defined(REAPERAPI_MINIMAL)
    562 REAPERAPI_DEF //==============================================
    563 // CSurf_GoStart
    564 
    565   void (*CSurf_GoStart)();
    566 #endif
    567 
    568 #if defined(REAPERAPI_WANT_CSurf_NumTracks) || !defined(REAPERAPI_MINIMAL)
    569 REAPERAPI_DEF //==============================================
    570 // CSurf_NumTracks
    571 
    572   int (*CSurf_NumTracks)(bool mcpView);
    573 #endif
    574 
    575 #if defined(REAPERAPI_WANT_CSurf_OnArrow) || !defined(REAPERAPI_MINIMAL)
    576 REAPERAPI_DEF //==============================================
    577 // CSurf_OnArrow
    578 
    579   void (*CSurf_OnArrow)(int whichdir, bool wantzoom);
    580 #endif
    581 
    582 #if defined(REAPERAPI_WANT_CSurf_OnFwd) || !defined(REAPERAPI_MINIMAL)
    583 REAPERAPI_DEF //==============================================
    584 // CSurf_OnFwd
    585 
    586   void (*CSurf_OnFwd)(int seekplay);
    587 #endif
    588 
    589 #if defined(REAPERAPI_WANT_CSurf_OnFXChange) || !defined(REAPERAPI_MINIMAL)
    590 REAPERAPI_DEF //==============================================
    591 // CSurf_OnFXChange
    592 
    593   bool (*CSurf_OnFXChange)(MediaTrack* trackid, int en);
    594 #endif
    595 
    596 #if defined(REAPERAPI_WANT_CSurf_OnInputMonitorChange) || !defined(REAPERAPI_MINIMAL)
    597 REAPERAPI_DEF //==============================================
    598 // CSurf_OnInputMonitorChange
    599 
    600   int (*CSurf_OnInputMonitorChange)(MediaTrack* trackid, int monitor);
    601 #endif
    602 
    603 #if defined(REAPERAPI_WANT_CSurf_OnInputMonitorChangeEx) || !defined(REAPERAPI_MINIMAL)
    604 REAPERAPI_DEF //==============================================
    605 // CSurf_OnInputMonitorChangeEx
    606 
    607   int (*CSurf_OnInputMonitorChangeEx)(MediaTrack* trackid, int monitor, bool allowgang);
    608 #endif
    609 
    610 #if defined(REAPERAPI_WANT_CSurf_OnMuteChange) || !defined(REAPERAPI_MINIMAL)
    611 REAPERAPI_DEF //==============================================
    612 // CSurf_OnMuteChange
    613 
    614   bool (*CSurf_OnMuteChange)(MediaTrack* trackid, int mute);
    615 #endif
    616 
    617 #if defined(REAPERAPI_WANT_CSurf_OnMuteChangeEx) || !defined(REAPERAPI_MINIMAL)
    618 REAPERAPI_DEF //==============================================
    619 // CSurf_OnMuteChangeEx
    620 
    621   bool (*CSurf_OnMuteChangeEx)(MediaTrack* trackid, int mute, bool allowgang);
    622 #endif
    623 
    624 #if defined(REAPERAPI_WANT_CSurf_OnOscControlMessage) || !defined(REAPERAPI_MINIMAL)
    625 REAPERAPI_DEF //==============================================
    626 // CSurf_OnOscControlMessage
    627 
    628   void (*CSurf_OnOscControlMessage)(const char* msg, const float* arg);
    629 #endif
    630 
    631 #if defined(REAPERAPI_WANT_CSurf_OnPanChange) || !defined(REAPERAPI_MINIMAL)
    632 REAPERAPI_DEF //==============================================
    633 // CSurf_OnPanChange
    634 
    635   double (*CSurf_OnPanChange)(MediaTrack* trackid, double pan, bool relative);
    636 #endif
    637 
    638 #if defined(REAPERAPI_WANT_CSurf_OnPanChangeEx) || !defined(REAPERAPI_MINIMAL)
    639 REAPERAPI_DEF //==============================================
    640 // CSurf_OnPanChangeEx
    641 
    642   double (*CSurf_OnPanChangeEx)(MediaTrack* trackid, double pan, bool relative, bool allowGang);
    643 #endif
    644 
    645 #if defined(REAPERAPI_WANT_CSurf_OnPause) || !defined(REAPERAPI_MINIMAL)
    646 REAPERAPI_DEF //==============================================
    647 // CSurf_OnPause
    648 
    649   void (*CSurf_OnPause)();
    650 #endif
    651 
    652 #if defined(REAPERAPI_WANT_CSurf_OnPlay) || !defined(REAPERAPI_MINIMAL)
    653 REAPERAPI_DEF //==============================================
    654 // CSurf_OnPlay
    655 
    656   void (*CSurf_OnPlay)();
    657 #endif
    658 
    659 #if defined(REAPERAPI_WANT_CSurf_OnPlayRateChange) || !defined(REAPERAPI_MINIMAL)
    660 REAPERAPI_DEF //==============================================
    661 // CSurf_OnPlayRateChange
    662 
    663   void (*CSurf_OnPlayRateChange)(double playrate);
    664 #endif
    665 
    666 #if defined(REAPERAPI_WANT_CSurf_OnRecArmChange) || !defined(REAPERAPI_MINIMAL)
    667 REAPERAPI_DEF //==============================================
    668 // CSurf_OnRecArmChange
    669 
    670   bool (*CSurf_OnRecArmChange)(MediaTrack* trackid, int recarm);
    671 #endif
    672 
    673 #if defined(REAPERAPI_WANT_CSurf_OnRecArmChangeEx) || !defined(REAPERAPI_MINIMAL)
    674 REAPERAPI_DEF //==============================================
    675 // CSurf_OnRecArmChangeEx
    676 
    677   bool (*CSurf_OnRecArmChangeEx)(MediaTrack* trackid, int recarm, bool allowgang);
    678 #endif
    679 
    680 #if defined(REAPERAPI_WANT_CSurf_OnRecord) || !defined(REAPERAPI_MINIMAL)
    681 REAPERAPI_DEF //==============================================
    682 // CSurf_OnRecord
    683 
    684   void (*CSurf_OnRecord)();
    685 #endif
    686 
    687 #if defined(REAPERAPI_WANT_CSurf_OnRecvPanChange) || !defined(REAPERAPI_MINIMAL)
    688 REAPERAPI_DEF //==============================================
    689 // CSurf_OnRecvPanChange
    690 
    691   double (*CSurf_OnRecvPanChange)(MediaTrack* trackid, int recv_index, double pan, bool relative);
    692 #endif
    693 
    694 #if defined(REAPERAPI_WANT_CSurf_OnRecvVolumeChange) || !defined(REAPERAPI_MINIMAL)
    695 REAPERAPI_DEF //==============================================
    696 // CSurf_OnRecvVolumeChange
    697 
    698   double (*CSurf_OnRecvVolumeChange)(MediaTrack* trackid, int recv_index, double volume, bool relative);
    699 #endif
    700 
    701 #if defined(REAPERAPI_WANT_CSurf_OnRew) || !defined(REAPERAPI_MINIMAL)
    702 REAPERAPI_DEF //==============================================
    703 // CSurf_OnRew
    704 
    705   void (*CSurf_OnRew)(int seekplay);
    706 #endif
    707 
    708 #if defined(REAPERAPI_WANT_CSurf_OnRewFwd) || !defined(REAPERAPI_MINIMAL)
    709 REAPERAPI_DEF //==============================================
    710 // CSurf_OnRewFwd
    711 
    712   void (*CSurf_OnRewFwd)(int seekplay, int dir);
    713 #endif
    714 
    715 #if defined(REAPERAPI_WANT_CSurf_OnScroll) || !defined(REAPERAPI_MINIMAL)
    716 REAPERAPI_DEF //==============================================
    717 // CSurf_OnScroll
    718 
    719   void (*CSurf_OnScroll)(int xdir, int ydir);
    720 #endif
    721 
    722 #if defined(REAPERAPI_WANT_CSurf_OnSelectedChange) || !defined(REAPERAPI_MINIMAL)
    723 REAPERAPI_DEF //==============================================
    724 // CSurf_OnSelectedChange
    725 
    726   bool (*CSurf_OnSelectedChange)(MediaTrack* trackid, int selected);
    727 #endif
    728 
    729 #if defined(REAPERAPI_WANT_CSurf_OnSendPanChange) || !defined(REAPERAPI_MINIMAL)
    730 REAPERAPI_DEF //==============================================
    731 // CSurf_OnSendPanChange
    732 
    733   double (*CSurf_OnSendPanChange)(MediaTrack* trackid, int send_index, double pan, bool relative);
    734 #endif
    735 
    736 #if defined(REAPERAPI_WANT_CSurf_OnSendVolumeChange) || !defined(REAPERAPI_MINIMAL)
    737 REAPERAPI_DEF //==============================================
    738 // CSurf_OnSendVolumeChange
    739 
    740   double (*CSurf_OnSendVolumeChange)(MediaTrack* trackid, int send_index, double volume, bool relative);
    741 #endif
    742 
    743 #if defined(REAPERAPI_WANT_CSurf_OnSoloChange) || !defined(REAPERAPI_MINIMAL)
    744 REAPERAPI_DEF //==============================================
    745 // CSurf_OnSoloChange
    746 
    747   bool (*CSurf_OnSoloChange)(MediaTrack* trackid, int solo);
    748 #endif
    749 
    750 #if defined(REAPERAPI_WANT_CSurf_OnSoloChangeEx) || !defined(REAPERAPI_MINIMAL)
    751 REAPERAPI_DEF //==============================================
    752 // CSurf_OnSoloChangeEx
    753 
    754   bool (*CSurf_OnSoloChangeEx)(MediaTrack* trackid, int solo, bool allowgang);
    755 #endif
    756 
    757 #if defined(REAPERAPI_WANT_CSurf_OnStop) || !defined(REAPERAPI_MINIMAL)
    758 REAPERAPI_DEF //==============================================
    759 // CSurf_OnStop
    760 
    761   void (*CSurf_OnStop)();
    762 #endif
    763 
    764 #if defined(REAPERAPI_WANT_CSurf_OnTempoChange) || !defined(REAPERAPI_MINIMAL)
    765 REAPERAPI_DEF //==============================================
    766 // CSurf_OnTempoChange
    767 
    768   void (*CSurf_OnTempoChange)(double bpm);
    769 #endif
    770 
    771 #if defined(REAPERAPI_WANT_CSurf_OnTrackSelection) || !defined(REAPERAPI_MINIMAL)
    772 REAPERAPI_DEF //==============================================
    773 // CSurf_OnTrackSelection
    774 
    775   void (*CSurf_OnTrackSelection)(MediaTrack* trackid);
    776 #endif
    777 
    778 #if defined(REAPERAPI_WANT_CSurf_OnVolumeChange) || !defined(REAPERAPI_MINIMAL)
    779 REAPERAPI_DEF //==============================================
    780 // CSurf_OnVolumeChange
    781 
    782   double (*CSurf_OnVolumeChange)(MediaTrack* trackid, double volume, bool relative);
    783 #endif
    784 
    785 #if defined(REAPERAPI_WANT_CSurf_OnVolumeChangeEx) || !defined(REAPERAPI_MINIMAL)
    786 REAPERAPI_DEF //==============================================
    787 // CSurf_OnVolumeChangeEx
    788 
    789   double (*CSurf_OnVolumeChangeEx)(MediaTrack* trackid, double volume, bool relative, bool allowGang);
    790 #endif
    791 
    792 #if defined(REAPERAPI_WANT_CSurf_OnWidthChange) || !defined(REAPERAPI_MINIMAL)
    793 REAPERAPI_DEF //==============================================
    794 // CSurf_OnWidthChange
    795 
    796   double (*CSurf_OnWidthChange)(MediaTrack* trackid, double width, bool relative);
    797 #endif
    798 
    799 #if defined(REAPERAPI_WANT_CSurf_OnWidthChangeEx) || !defined(REAPERAPI_MINIMAL)
    800 REAPERAPI_DEF //==============================================
    801 // CSurf_OnWidthChangeEx
    802 
    803   double (*CSurf_OnWidthChangeEx)(MediaTrack* trackid, double width, bool relative, bool allowGang);
    804 #endif
    805 
    806 #if defined(REAPERAPI_WANT_CSurf_OnZoom) || !defined(REAPERAPI_MINIMAL)
    807 REAPERAPI_DEF //==============================================
    808 // CSurf_OnZoom
    809 
    810   void (*CSurf_OnZoom)(int xdir, int ydir);
    811 #endif
    812 
    813 #if defined(REAPERAPI_WANT_CSurf_ResetAllCachedVolPanStates) || !defined(REAPERAPI_MINIMAL)
    814 REAPERAPI_DEF //==============================================
    815 // CSurf_ResetAllCachedVolPanStates
    816 
    817   void (*CSurf_ResetAllCachedVolPanStates)();
    818 #endif
    819 
    820 #if defined(REAPERAPI_WANT_CSurf_ScrubAmt) || !defined(REAPERAPI_MINIMAL)
    821 REAPERAPI_DEF //==============================================
    822 // CSurf_ScrubAmt
    823 
    824   void (*CSurf_ScrubAmt)(double amt);
    825 #endif
    826 
    827 #if defined(REAPERAPI_WANT_CSurf_SetAutoMode) || !defined(REAPERAPI_MINIMAL)
    828 REAPERAPI_DEF //==============================================
    829 // CSurf_SetAutoMode
    830 
    831   void (*CSurf_SetAutoMode)(int mode, IReaperControlSurface* ignoresurf);
    832 #endif
    833 
    834 #if defined(REAPERAPI_WANT_CSurf_SetPlayState) || !defined(REAPERAPI_MINIMAL)
    835 REAPERAPI_DEF //==============================================
    836 // CSurf_SetPlayState
    837 
    838   void (*CSurf_SetPlayState)(bool play, bool pause, bool rec, IReaperControlSurface* ignoresurf);
    839 #endif
    840 
    841 #if defined(REAPERAPI_WANT_CSurf_SetRepeatState) || !defined(REAPERAPI_MINIMAL)
    842 REAPERAPI_DEF //==============================================
    843 // CSurf_SetRepeatState
    844 
    845   void (*CSurf_SetRepeatState)(bool rep, IReaperControlSurface* ignoresurf);
    846 #endif
    847 
    848 #if defined(REAPERAPI_WANT_CSurf_SetSurfaceMute) || !defined(REAPERAPI_MINIMAL)
    849 REAPERAPI_DEF //==============================================
    850 // CSurf_SetSurfaceMute
    851 
    852   void (*CSurf_SetSurfaceMute)(MediaTrack* trackid, bool mute, IReaperControlSurface* ignoresurf);
    853 #endif
    854 
    855 #if defined(REAPERAPI_WANT_CSurf_SetSurfacePan) || !defined(REAPERAPI_MINIMAL)
    856 REAPERAPI_DEF //==============================================
    857 // CSurf_SetSurfacePan
    858 
    859   void (*CSurf_SetSurfacePan)(MediaTrack* trackid, double pan, IReaperControlSurface* ignoresurf);
    860 #endif
    861 
    862 #if defined(REAPERAPI_WANT_CSurf_SetSurfaceRecArm) || !defined(REAPERAPI_MINIMAL)
    863 REAPERAPI_DEF //==============================================
    864 // CSurf_SetSurfaceRecArm
    865 
    866   void (*CSurf_SetSurfaceRecArm)(MediaTrack* trackid, bool recarm, IReaperControlSurface* ignoresurf);
    867 #endif
    868 
    869 #if defined(REAPERAPI_WANT_CSurf_SetSurfaceSelected) || !defined(REAPERAPI_MINIMAL)
    870 REAPERAPI_DEF //==============================================
    871 // CSurf_SetSurfaceSelected
    872 
    873   void (*CSurf_SetSurfaceSelected)(MediaTrack* trackid, bool selected, IReaperControlSurface* ignoresurf);
    874 #endif
    875 
    876 #if defined(REAPERAPI_WANT_CSurf_SetSurfaceSolo) || !defined(REAPERAPI_MINIMAL)
    877 REAPERAPI_DEF //==============================================
    878 // CSurf_SetSurfaceSolo
    879 
    880   void (*CSurf_SetSurfaceSolo)(MediaTrack* trackid, bool solo, IReaperControlSurface* ignoresurf);
    881 #endif
    882 
    883 #if defined(REAPERAPI_WANT_CSurf_SetSurfaceVolume) || !defined(REAPERAPI_MINIMAL)
    884 REAPERAPI_DEF //==============================================
    885 // CSurf_SetSurfaceVolume
    886 
    887   void (*CSurf_SetSurfaceVolume)(MediaTrack* trackid, double volume, IReaperControlSurface* ignoresurf);
    888 #endif
    889 
    890 #if defined(REAPERAPI_WANT_CSurf_SetTrackListChange) || !defined(REAPERAPI_MINIMAL)
    891 REAPERAPI_DEF //==============================================
    892 // CSurf_SetTrackListChange
    893 
    894   void (*CSurf_SetTrackListChange)();
    895 #endif
    896 
    897 #if defined(REAPERAPI_WANT_CSurf_TrackFromID) || !defined(REAPERAPI_MINIMAL)
    898 REAPERAPI_DEF //==============================================
    899 // CSurf_TrackFromID
    900 
    901   MediaTrack* (*CSurf_TrackFromID)(int idx, bool mcpView);
    902 #endif
    903 
    904 #if defined(REAPERAPI_WANT_CSurf_TrackToID) || !defined(REAPERAPI_MINIMAL)
    905 REAPERAPI_DEF //==============================================
    906 // CSurf_TrackToID
    907 
    908   int (*CSurf_TrackToID)(MediaTrack* track, bool mcpView);
    909 #endif
    910 
    911 #if defined(REAPERAPI_WANT_DB2SLIDER) || !defined(REAPERAPI_MINIMAL)
    912 REAPERAPI_DEF //==============================================
    913 // DB2SLIDER
    914 
    915   double (*DB2SLIDER)(double x);
    916 #endif
    917 
    918 #if defined(REAPERAPI_WANT_DeleteActionShortcut) || !defined(REAPERAPI_MINIMAL)
    919 REAPERAPI_DEF //==============================================
    920 // DeleteActionShortcut
    921 // Delete the specific shortcut for the given command ID.
    922 // See CountActionShortcuts, GetActionShortcutDesc, DoActionShortcutDialog.
    923 
    924   bool (*DeleteActionShortcut)(KbdSectionInfo* section, int cmdID, int shortcutidx);
    925 #endif
    926 
    927 #if defined(REAPERAPI_WANT_DeleteEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
    928 REAPERAPI_DEF //==============================================
    929 // DeleteEnvelopePointEx
    930 // Delete an envelope point. If setting multiple points at once, set noSort=true, and call Envelope_SortPoints when done.
    931 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
    932 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
    933 // even if the automation item is trimmed so that not all points are visible.
    934 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
    935 // See CountEnvelopePointsEx, GetEnvelopePointEx, SetEnvelopePointEx, InsertEnvelopePointEx.
    936 
    937   bool (*DeleteEnvelopePointEx)(TrackEnvelope* envelope, int autoitem_idx, int ptidx);
    938 #endif
    939 
    940 #if defined(REAPERAPI_WANT_DeleteEnvelopePointRange) || !defined(REAPERAPI_MINIMAL)
    941 REAPERAPI_DEF //==============================================
    942 // DeleteEnvelopePointRange
    943 // Delete a range of envelope points. See DeleteEnvelopePointRangeEx, DeleteEnvelopePointEx.
    944 
    945   bool (*DeleteEnvelopePointRange)(TrackEnvelope* envelope, double time_start, double time_end);
    946 #endif
    947 
    948 #if defined(REAPERAPI_WANT_DeleteEnvelopePointRangeEx) || !defined(REAPERAPI_MINIMAL)
    949 REAPERAPI_DEF //==============================================
    950 // DeleteEnvelopePointRangeEx
    951 // Delete a range of envelope points. autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
    952 
    953   bool (*DeleteEnvelopePointRangeEx)(TrackEnvelope* envelope, int autoitem_idx, double time_start, double time_end);
    954 #endif
    955 
    956 #if defined(REAPERAPI_WANT_DeleteExtState) || !defined(REAPERAPI_MINIMAL)
    957 REAPERAPI_DEF //==============================================
    958 // DeleteExtState
    959 // 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.
    960 
    961   void (*DeleteExtState)(const char* section, const char* key, bool persist);
    962 #endif
    963 
    964 #if defined(REAPERAPI_WANT_DeleteProjectMarker) || !defined(REAPERAPI_MINIMAL)
    965 REAPERAPI_DEF //==============================================
    966 // DeleteProjectMarker
    967 // Delete a marker.  proj==NULL for the active project.
    968 
    969   bool (*DeleteProjectMarker)(ReaProject* proj, int markrgnindexnumber, bool isrgn);
    970 #endif
    971 
    972 #if defined(REAPERAPI_WANT_DeleteProjectMarkerByIndex) || !defined(REAPERAPI_MINIMAL)
    973 REAPERAPI_DEF //==============================================
    974 // DeleteProjectMarkerByIndex
    975 // 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).
    976 
    977   bool (*DeleteProjectMarkerByIndex)(ReaProject* proj, int markrgnidx);
    978 #endif
    979 
    980 #if defined(REAPERAPI_WANT_DeleteTakeMarker) || !defined(REAPERAPI_MINIMAL)
    981 REAPERAPI_DEF //==============================================
    982 // DeleteTakeMarker
    983 // Delete a take marker. Note that idx will change for all following take markers. See GetNumTakeMarkers, GetTakeMarker, SetTakeMarker
    984 
    985   bool (*DeleteTakeMarker)(MediaItem_Take* take, int idx);
    986 #endif
    987 
    988 #if defined(REAPERAPI_WANT_DeleteTakeStretchMarkers) || !defined(REAPERAPI_MINIMAL)
    989 REAPERAPI_DEF //==============================================
    990 // DeleteTakeStretchMarkers
    991 // Deletes one or more stretch markers. Returns number of stretch markers deleted.
    992 
    993   int (*DeleteTakeStretchMarkers)(MediaItem_Take* take, int idx, const int* countInOptional);
    994 #endif
    995 
    996 #if defined(REAPERAPI_WANT_DeleteTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
    997 REAPERAPI_DEF //==============================================
    998 // DeleteTempoTimeSigMarker
    999 // Delete a tempo/time signature marker.
   1000 
   1001   bool (*DeleteTempoTimeSigMarker)(ReaProject* project, int markerindex);
   1002 #endif
   1003 
   1004 #if defined(REAPERAPI_WANT_DeleteTrack) || !defined(REAPERAPI_MINIMAL)
   1005 REAPERAPI_DEF //==============================================
   1006 // DeleteTrack
   1007 // deletes a track
   1008 
   1009   void (*DeleteTrack)(MediaTrack* tr);
   1010 #endif
   1011 
   1012 #if defined(REAPERAPI_WANT_DeleteTrackMediaItem) || !defined(REAPERAPI_MINIMAL)
   1013 REAPERAPI_DEF //==============================================
   1014 // DeleteTrackMediaItem
   1015 
   1016   bool (*DeleteTrackMediaItem)(MediaTrack* tr, MediaItem* it);
   1017 #endif
   1018 
   1019 #if defined(REAPERAPI_WANT_DestroyAudioAccessor) || !defined(REAPERAPI_MINIMAL)
   1020 REAPERAPI_DEF //==============================================
   1021 // DestroyAudioAccessor
   1022 // Destroy an audio accessor. Must only call from the main thread. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorEndTime, GetAudioAccessorSamples. 
   1023 
   1024   void (*DestroyAudioAccessor)(AudioAccessor* accessor);
   1025 #endif
   1026 
   1027 #if defined(REAPERAPI_WANT_DestroyLocalOscHandler) || !defined(REAPERAPI_MINIMAL)
   1028 REAPERAPI_DEF //==============================================
   1029 // DestroyLocalOscHandler
   1030 // See CreateLocalOscHandler, SendLocalOscMessage.
   1031 
   1032   void (*DestroyLocalOscHandler)(void* local_osc_handler);
   1033 #endif
   1034 
   1035 #if defined(REAPERAPI_WANT_DoActionShortcutDialog) || !defined(REAPERAPI_MINIMAL)
   1036 REAPERAPI_DEF //==============================================
   1037 // DoActionShortcutDialog
   1038 // Open the action shortcut dialog to edit or add a shortcut for the given command ID. If (shortcutidx >= 0 && shortcutidx < CountActionShortcuts()), that specific shortcut will be replaced, otherwise a new shortcut will be added.
   1039 // See CountActionShortcuts, GetActionShortcutDesc, DeleteActionShortcut.
   1040 
   1041   bool (*DoActionShortcutDialog)(HWND hwnd, KbdSectionInfo* section, int cmdID, int shortcutidx);
   1042 #endif
   1043 
   1044 #if defined(REAPERAPI_WANT_Dock_UpdateDockID) || !defined(REAPERAPI_MINIMAL)
   1045 REAPERAPI_DEF //==============================================
   1046 // Dock_UpdateDockID
   1047 // updates preference for docker window ident_str to be in dock whichDock on next open
   1048 
   1049   void (*Dock_UpdateDockID)(const char* ident_str, int whichDock);
   1050 #endif
   1051 
   1052 #if defined(REAPERAPI_WANT_DockGetPosition) || !defined(REAPERAPI_MINIMAL)
   1053 REAPERAPI_DEF //==============================================
   1054 // DockGetPosition
   1055 // -1=not found, 0=bottom, 1=left, 2=top, 3=right, 4=floating
   1056 
   1057   int (*DockGetPosition)(int whichDock);
   1058 #endif
   1059 
   1060 #if defined(REAPERAPI_WANT_DockIsChildOfDock) || !defined(REAPERAPI_MINIMAL)
   1061 REAPERAPI_DEF //==============================================
   1062 // DockIsChildOfDock
   1063 // returns dock index that contains hwnd, or -1
   1064 
   1065   int (*DockIsChildOfDock)(HWND hwnd, bool* isFloatingDockerOut);
   1066 #endif
   1067 
   1068 #if defined(REAPERAPI_WANT_DockWindowActivate) || !defined(REAPERAPI_MINIMAL)
   1069 REAPERAPI_DEF //==============================================
   1070 // DockWindowActivate
   1071 
   1072   void (*DockWindowActivate)(HWND hwnd);
   1073 #endif
   1074 
   1075 #if defined(REAPERAPI_WANT_DockWindowAdd) || !defined(REAPERAPI_MINIMAL)
   1076 REAPERAPI_DEF //==============================================
   1077 // DockWindowAdd
   1078 
   1079   void (*DockWindowAdd)(HWND hwnd, const char* name, int pos, bool allowShow);
   1080 #endif
   1081 
   1082 #if defined(REAPERAPI_WANT_DockWindowAddEx) || !defined(REAPERAPI_MINIMAL)
   1083 REAPERAPI_DEF //==============================================
   1084 // DockWindowAddEx
   1085 
   1086   void (*DockWindowAddEx)(HWND hwnd, const char* name, const char* identstr, bool allowShow);
   1087 #endif
   1088 
   1089 #if defined(REAPERAPI_WANT_DockWindowRefresh) || !defined(REAPERAPI_MINIMAL)
   1090 REAPERAPI_DEF //==============================================
   1091 // DockWindowRefresh
   1092 
   1093   void (*DockWindowRefresh)();
   1094 #endif
   1095 
   1096 #if defined(REAPERAPI_WANT_DockWindowRefreshForHWND) || !defined(REAPERAPI_MINIMAL)
   1097 REAPERAPI_DEF //==============================================
   1098 // DockWindowRefreshForHWND
   1099 
   1100   void (*DockWindowRefreshForHWND)(HWND hwnd);
   1101 #endif
   1102 
   1103 #if defined(REAPERAPI_WANT_DockWindowRemove) || !defined(REAPERAPI_MINIMAL)
   1104 REAPERAPI_DEF //==============================================
   1105 // DockWindowRemove
   1106 
   1107   void (*DockWindowRemove)(HWND hwnd);
   1108 #endif
   1109 
   1110 #if defined(REAPERAPI_WANT_DuplicateCustomizableMenu) || !defined(REAPERAPI_MINIMAL)
   1111 REAPERAPI_DEF //==============================================
   1112 // DuplicateCustomizableMenu
   1113 // Populate destmenu with all the entries and submenus found in srcmenu
   1114 
   1115   bool (*DuplicateCustomizableMenu)(void* srcmenu, void* destmenu);
   1116 #endif
   1117 
   1118 #if defined(REAPERAPI_WANT_EditTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   1119 REAPERAPI_DEF //==============================================
   1120 // EditTempoTimeSigMarker
   1121 // Open the tempo/time signature marker editor dialog.
   1122 
   1123   bool (*EditTempoTimeSigMarker)(ReaProject* project, int markerindex);
   1124 #endif
   1125 
   1126 #if defined(REAPERAPI_WANT_EnsureNotCompletelyOffscreen) || !defined(REAPERAPI_MINIMAL)
   1127 REAPERAPI_DEF //==============================================
   1128 // EnsureNotCompletelyOffscreen
   1129 // call with a saved window rect for your window and it'll correct any positioning info.
   1130 
   1131   void (*EnsureNotCompletelyOffscreen)(RECT* rInOut);
   1132 #endif
   1133 
   1134 #if defined(REAPERAPI_WANT_EnumerateFiles) || !defined(REAPERAPI_MINIMAL)
   1135 REAPERAPI_DEF //==============================================
   1136 // EnumerateFiles
   1137 // List the files in the "path" directory. Returns NULL/nil when all files have been listed. Use fileindex = -1 to force re-read of directory (invalidate cache). See EnumerateSubdirectories
   1138 
   1139   const char* (*EnumerateFiles)(const char* path, int fileindex);
   1140 #endif
   1141 
   1142 #if defined(REAPERAPI_WANT_EnumerateSubdirectories) || !defined(REAPERAPI_MINIMAL)
   1143 REAPERAPI_DEF //==============================================
   1144 // EnumerateSubdirectories
   1145 // List the subdirectories in the "path" directory. Use subdirindex = -1 to force re-read of directory (invalidate cache). Returns NULL/nil when all subdirectories have been listed. See EnumerateFiles
   1146 
   1147   const char* (*EnumerateSubdirectories)(const char* path, int subdirindex);
   1148 #endif
   1149 
   1150 #if defined(REAPERAPI_WANT_EnumPitchShiftModes) || !defined(REAPERAPI_MINIMAL)
   1151 REAPERAPI_DEF //==============================================
   1152 // EnumPitchShiftModes
   1153 // Start querying modes at 0, returns FALSE when no more modes possible, sets strOut to NULL if a mode is currently unsupported
   1154 
   1155   bool (*EnumPitchShiftModes)(int mode, const char** strOut);
   1156 #endif
   1157 
   1158 #if defined(REAPERAPI_WANT_EnumPitchShiftSubModes) || !defined(REAPERAPI_MINIMAL)
   1159 REAPERAPI_DEF //==============================================
   1160 // EnumPitchShiftSubModes
   1161 // Returns submode name, or NULL
   1162 
   1163   const char* (*EnumPitchShiftSubModes)(int mode, int submode);
   1164 #endif
   1165 
   1166 #if defined(REAPERAPI_WANT_EnumProjectMarkers) || !defined(REAPERAPI_MINIMAL)
   1167 REAPERAPI_DEF //==============================================
   1168 // EnumProjectMarkers
   1169 
   1170   int (*EnumProjectMarkers)(int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut);
   1171 #endif
   1172 
   1173 #if defined(REAPERAPI_WANT_EnumProjectMarkers2) || !defined(REAPERAPI_MINIMAL)
   1174 REAPERAPI_DEF //==============================================
   1175 // EnumProjectMarkers2
   1176 
   1177   int (*EnumProjectMarkers2)(ReaProject* proj, int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut);
   1178 #endif
   1179 
   1180 #if defined(REAPERAPI_WANT_EnumProjectMarkers3) || !defined(REAPERAPI_MINIMAL)
   1181 REAPERAPI_DEF //==============================================
   1182 // EnumProjectMarkers3
   1183 
   1184   int (*EnumProjectMarkers3)(ReaProject* proj, int idx, bool* isrgnOut, double* posOut, double* rgnendOut, const char** nameOut, int* markrgnindexnumberOut, int* colorOut);
   1185 #endif
   1186 
   1187 #if defined(REAPERAPI_WANT_EnumProjects) || !defined(REAPERAPI_MINIMAL)
   1188 REAPERAPI_DEF //==============================================
   1189 // EnumProjects
   1190 // idx=-1 for current project,projfn can be NULL if not interested in filename. use idx 0x40000000 for currently rendering project, if any.
   1191 
   1192   ReaProject* (*EnumProjects)(int idx, char* projfnOutOptional, int projfnOutOptional_sz);
   1193 #endif
   1194 
   1195 #if defined(REAPERAPI_WANT_EnumProjExtState) || !defined(REAPERAPI_MINIMAL)
   1196 REAPERAPI_DEF //==============================================
   1197 // EnumProjExtState
   1198 // Enumerate the data stored with the project for a specific extname. Returns false when there is no more data. See SetProjExtState, GetProjExtState.
   1199 
   1200   bool (*EnumProjExtState)(ReaProject* proj, const char* extname, int idx, char* keyOutOptional, int keyOutOptional_sz, char* valOutOptional, int valOutOptional_sz);
   1201 #endif
   1202 
   1203 #if defined(REAPERAPI_WANT_EnumRegionRenderMatrix) || !defined(REAPERAPI_MINIMAL)
   1204 REAPERAPI_DEF //==============================================
   1205 // EnumRegionRenderMatrix
   1206 // 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.
   1207 
   1208   MediaTrack* (*EnumRegionRenderMatrix)(ReaProject* proj, int regionindex, int rendertrack);
   1209 #endif
   1210 
   1211 #if defined(REAPERAPI_WANT_EnumTrackMIDIProgramNames) || !defined(REAPERAPI_MINIMAL)
   1212 REAPERAPI_DEF //==============================================
   1213 // EnumTrackMIDIProgramNames
   1214 // returns false if there are no plugins on the track that support MIDI programs,or if all programs have been enumerated
   1215 
   1216   bool (*EnumTrackMIDIProgramNames)(int track, int programNumber, char* programName, int programName_sz);
   1217 #endif
   1218 
   1219 #if defined(REAPERAPI_WANT_EnumTrackMIDIProgramNamesEx) || !defined(REAPERAPI_MINIMAL)
   1220 REAPERAPI_DEF //==============================================
   1221 // EnumTrackMIDIProgramNamesEx
   1222 // returns false if there are no plugins on the track that support MIDI programs,or if all programs have been enumerated
   1223 
   1224   bool (*EnumTrackMIDIProgramNamesEx)(ReaProject* proj, MediaTrack* track, int programNumber, char* programName, int programName_sz);
   1225 #endif
   1226 
   1227 #if defined(REAPERAPI_WANT_Envelope_Evaluate) || !defined(REAPERAPI_MINIMAL)
   1228 REAPERAPI_DEF //==============================================
   1229 // Envelope_Evaluate
   1230 // 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 second derivative, dddVdS is the third derivative. See GetEnvelopeScalingMode.
   1231 
   1232   int (*Envelope_Evaluate)(TrackEnvelope* envelope, double time, double samplerate, int samplesRequested, double* valueOut, double* dVdSOut, double* ddVdSOut, double* dddVdSOut);
   1233 #endif
   1234 
   1235 #if defined(REAPERAPI_WANT_Envelope_FormatValue) || !defined(REAPERAPI_MINIMAL)
   1236 REAPERAPI_DEF //==============================================
   1237 // Envelope_FormatValue
   1238 // Formats the value of an envelope to a user-readable form
   1239 
   1240   void (*Envelope_FormatValue)(TrackEnvelope* env, double value, char* bufOut, int bufOut_sz);
   1241 #endif
   1242 
   1243 #if defined(REAPERAPI_WANT_Envelope_GetParentTake) || !defined(REAPERAPI_MINIMAL)
   1244 REAPERAPI_DEF //==============================================
   1245 // Envelope_GetParentTake
   1246 // If take envelope, gets the take from the envelope. If FX, indexOut set to FX index, index2Out set to parameter index, otherwise -1.
   1247 
   1248   MediaItem_Take* (*Envelope_GetParentTake)(TrackEnvelope* env, int* indexOut, int* index2Out);
   1249 #endif
   1250 
   1251 #if defined(REAPERAPI_WANT_Envelope_GetParentTrack) || !defined(REAPERAPI_MINIMAL)
   1252 REAPERAPI_DEF //==============================================
   1253 // Envelope_GetParentTrack
   1254 // If track envelope, gets the track from the envelope. If FX, indexOut set to FX index, index2Out set to parameter index, otherwise -1.
   1255 
   1256   MediaTrack* (*Envelope_GetParentTrack)(TrackEnvelope* env, int* indexOut, int* index2Out);
   1257 #endif
   1258 
   1259 #if defined(REAPERAPI_WANT_Envelope_SortPoints) || !defined(REAPERAPI_MINIMAL)
   1260 REAPERAPI_DEF //==============================================
   1261 // Envelope_SortPoints
   1262 // Sort envelope points by time. See SetEnvelopePoint, InsertEnvelopePoint.
   1263 
   1264   bool (*Envelope_SortPoints)(TrackEnvelope* envelope);
   1265 #endif
   1266 
   1267 #if defined(REAPERAPI_WANT_Envelope_SortPointsEx) || !defined(REAPERAPI_MINIMAL)
   1268 REAPERAPI_DEF //==============================================
   1269 // Envelope_SortPointsEx
   1270 // Sort envelope points by time. autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc. See SetEnvelopePoint, InsertEnvelopePoint.
   1271 
   1272   bool (*Envelope_SortPointsEx)(TrackEnvelope* envelope, int autoitem_idx);
   1273 #endif
   1274 
   1275 #if defined(REAPERAPI_WANT_ExecProcess) || !defined(REAPERAPI_MINIMAL)
   1276 REAPERAPI_DEF //==============================================
   1277 // ExecProcess
   1278 // Executes command line, returns NULL on total failure, otherwise the return value, a newline, and then the output of the command. If timeoutmsec is 0, command will be allowed to run indefinitely (recommended for large amounts of returned output). timeoutmsec is -1 for no wait/terminate, -2 for no wait and minimize
   1279 
   1280   const char* (*ExecProcess)(const char* cmdline, int timeoutmsec);
   1281 #endif
   1282 
   1283 #if defined(REAPERAPI_WANT_file_exists) || !defined(REAPERAPI_MINIMAL)
   1284 REAPERAPI_DEF //==============================================
   1285 // file_exists
   1286 // returns true if path points to a valid, readable file
   1287 
   1288   bool (*file_exists)(const char* path);
   1289 #endif
   1290 
   1291 #if defined(REAPERAPI_WANT_FindTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   1292 REAPERAPI_DEF //==============================================
   1293 // FindTempoTimeSigMarker
   1294 // 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).
   1295 
   1296   int (*FindTempoTimeSigMarker)(ReaProject* project, double time);
   1297 #endif
   1298 
   1299 #if defined(REAPERAPI_WANT_format_timestr) || !defined(REAPERAPI_MINIMAL)
   1300 REAPERAPI_DEF //==============================================
   1301 // format_timestr
   1302 // Format tpos (which is time in seconds) as hh:mm:ss.sss. See format_timestr_pos, format_timestr_len.
   1303 
   1304   void (*format_timestr)(double tpos, char* buf, int buf_sz);
   1305 #endif
   1306 
   1307 #if defined(REAPERAPI_WANT_format_timestr_len) || !defined(REAPERAPI_MINIMAL)
   1308 REAPERAPI_DEF //==============================================
   1309 // format_timestr_len
   1310 // time formatting mode overrides: -1=proj default.
   1311 // 0=time
   1312 // 1=measures.beats + time
   1313 // 2=measures.beats
   1314 // 3=seconds
   1315 // 4=samples
   1316 // 5=h:m:s:f
   1317 // offset is start of where the length will be calculated from
   1318 
   1319   void (*format_timestr_len)(double tpos, char* buf, int buf_sz, double offset, int modeoverride);
   1320 #endif
   1321 
   1322 #if defined(REAPERAPI_WANT_format_timestr_pos) || !defined(REAPERAPI_MINIMAL)
   1323 REAPERAPI_DEF //==============================================
   1324 // format_timestr_pos
   1325 // time formatting mode overrides: -1=proj default.
   1326 // 0=time
   1327 // 1=measures.beats + time
   1328 // 2=measures.beats
   1329 // 3=seconds
   1330 // 4=samples
   1331 // 5=h:m:s:f
   1332 // 
   1333 
   1334   void (*format_timestr_pos)(double tpos, char* buf, int buf_sz, int modeoverride);
   1335 #endif
   1336 
   1337 #if defined(REAPERAPI_WANT_FreeHeapPtr) || !defined(REAPERAPI_MINIMAL)
   1338 REAPERAPI_DEF //==============================================
   1339 // FreeHeapPtr
   1340 // free heap memory returned from a Reaper API function
   1341 
   1342   void (*FreeHeapPtr)(void* ptr);
   1343 #endif
   1344 
   1345 #if defined(REAPERAPI_WANT_genGuid) || !defined(REAPERAPI_MINIMAL)
   1346 REAPERAPI_DEF //==============================================
   1347 // genGuid
   1348 
   1349   void (*genGuid)(GUID* g);
   1350 #endif
   1351 
   1352 #if defined(REAPERAPI_WANT_get_config_var) || !defined(REAPERAPI_MINIMAL)
   1353 REAPERAPI_DEF //==============================================
   1354 // get_config_var
   1355 
   1356   void* (*get_config_var)(const char* name, int* szOut);
   1357 #endif
   1358 
   1359 #if defined(REAPERAPI_WANT_get_config_var_string) || !defined(REAPERAPI_MINIMAL)
   1360 REAPERAPI_DEF //==============================================
   1361 // get_config_var_string
   1362 // gets ini configuration variable value as string
   1363 
   1364   bool (*get_config_var_string)(const char* name, char* bufOut, int bufOut_sz);
   1365 #endif
   1366 
   1367 #if defined(REAPERAPI_WANT_get_ini_file) || !defined(REAPERAPI_MINIMAL)
   1368 REAPERAPI_DEF //==============================================
   1369 // get_ini_file
   1370 // Get reaper.ini full filename.
   1371 
   1372   const char* (*get_ini_file)();
   1373 #endif
   1374 
   1375 #if defined(REAPERAPI_WANT_get_midi_config_var) || !defined(REAPERAPI_MINIMAL)
   1376 REAPERAPI_DEF //==============================================
   1377 // get_midi_config_var
   1378 // Deprecated.
   1379 
   1380   void* (*get_midi_config_var)(const char* name, int* szOut);
   1381 #endif
   1382 
   1383 #if defined(REAPERAPI_WANT_GetActionShortcutDesc) || !defined(REAPERAPI_MINIMAL)
   1384 REAPERAPI_DEF //==============================================
   1385 // GetActionShortcutDesc
   1386 // Get the text description of a specific shortcut for the given command ID.
   1387 // See CountActionShortcuts,DeleteActionShortcut,DoActionShortcutDialog.
   1388 
   1389   bool (*GetActionShortcutDesc)(KbdSectionInfo* section, int cmdID, int shortcutidx, char* desc, int desclen);
   1390 #endif
   1391 
   1392 #if defined(REAPERAPI_WANT_GetActiveTake) || !defined(REAPERAPI_MINIMAL)
   1393 REAPERAPI_DEF //==============================================
   1394 // GetActiveTake
   1395 // get the active take in this item
   1396 
   1397   MediaItem_Take* (*GetActiveTake)(MediaItem* item);
   1398 #endif
   1399 
   1400 #if defined(REAPERAPI_WANT_GetAllProjectPlayStates) || !defined(REAPERAPI_MINIMAL)
   1401 REAPERAPI_DEF //==============================================
   1402 // GetAllProjectPlayStates
   1403 // returns the bitwise OR of all project play states (1=playing, 2=pause, 4=recording)
   1404 
   1405   int (*GetAllProjectPlayStates)(ReaProject* ignoreProject);
   1406 #endif
   1407 
   1408 #if defined(REAPERAPI_WANT_GetAppVersion) || !defined(REAPERAPI_MINIMAL)
   1409 REAPERAPI_DEF //==============================================
   1410 // GetAppVersion
   1411 // Returns app version which may include an OS/arch signifier, such as: "6.17" (windows 32-bit), "6.17/x64" (windows 64-bit), "6.17/OSX64" (macOS 64-bit Intel), "6.17/OSX" (macOS 32-bit), "6.17/macOS-arm64", "6.17/linux-x86_64", "6.17/linux-i686", "6.17/linux-aarch64", "6.17/linux-armv7l", etc
   1412 
   1413   const char* (*GetAppVersion)();
   1414 #endif
   1415 
   1416 #if defined(REAPERAPI_WANT_GetArmedCommand) || !defined(REAPERAPI_MINIMAL)
   1417 REAPERAPI_DEF //==============================================
   1418 // GetArmedCommand
   1419 // gets the currently armed command and section name (returns 0 if nothing armed). section name is empty-string for main section.
   1420 
   1421   int (*GetArmedCommand)(char* secOut, int secOut_sz);
   1422 #endif
   1423 
   1424 #if defined(REAPERAPI_WANT_GetAudioAccessorEndTime) || !defined(REAPERAPI_MINIMAL)
   1425 REAPERAPI_DEF //==============================================
   1426 // GetAudioAccessorEndTime
   1427 // Get the end time of the audio that can be returned from this accessor. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorSamples.
   1428 
   1429   double (*GetAudioAccessorEndTime)(AudioAccessor* accessor);
   1430 #endif
   1431 
   1432 #if defined(REAPERAPI_WANT_GetAudioAccessorHash) || !defined(REAPERAPI_MINIMAL)
   1433 REAPERAPI_DEF //==============================================
   1434 // GetAudioAccessorHash
   1435 // Deprecated. See AudioAccessorStateChanged instead.
   1436 
   1437   void (*GetAudioAccessorHash)(AudioAccessor* accessor, char* hashNeed128);
   1438 #endif
   1439 
   1440 #if defined(REAPERAPI_WANT_GetAudioAccessorSamples) || !defined(REAPERAPI_MINIMAL)
   1441 REAPERAPI_DEF //==============================================
   1442 // GetAudioAccessorSamples
   1443 // 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, AudioAccessorStateChanged, GetAudioAccessorStartTime, GetAudioAccessorEndTime.// 
   1444 // 
   1445 // This function has special handling in Python, and only returns two objects, the API function return value, and the sample buffer. Example usage:
   1446 // 
   1447 // <code>tr = RPR_GetTrack(0, 0)
   1448 // aa = RPR_CreateTrackAudioAccessor(tr)
   1449 // buf = list([0]*2*1024) # 2 channels, 1024 samples each, initialized to zero
   1450 // pos = 0.0
   1451 // (ret, buf) = GetAudioAccessorSamples(aa, 44100, 2, pos, 1024, buf)
   1452 // # buf now holds the first 2*1024 audio samples from the track.
   1453 // # typically GetAudioAccessorSamples() would be called within a loop, increasing pos each time.
   1454 // </code>
   1455 
   1456   int (*GetAudioAccessorSamples)(AudioAccessor* accessor, int samplerate, int numchannels, double starttime_sec, int numsamplesperchannel, double* samplebuffer);
   1457 #endif
   1458 
   1459 #if defined(REAPERAPI_WANT_GetAudioAccessorStartTime) || !defined(REAPERAPI_MINIMAL)
   1460 REAPERAPI_DEF //==============================================
   1461 // GetAudioAccessorStartTime
   1462 // Get the start time of the audio that can be returned from this accessor. See CreateTakeAudioAccessor, CreateTrackAudioAccessor, DestroyAudioAccessor, AudioAccessorStateChanged, GetAudioAccessorEndTime, GetAudioAccessorSamples.
   1463 
   1464   double (*GetAudioAccessorStartTime)(AudioAccessor* accessor);
   1465 #endif
   1466 
   1467 #if defined(REAPERAPI_WANT_GetAudioDeviceInfo) || !defined(REAPERAPI_MINIMAL)
   1468 REAPERAPI_DEF //==============================================
   1469 // GetAudioDeviceInfo
   1470 // get information about the currently open audio device. attribute can be MODE, IDENT_IN, IDENT_OUT, BSIZE, SRATE, BPS. returns false if unknown attribute or device not open.
   1471 
   1472   bool (*GetAudioDeviceInfo)(const char* attribute, char* descOut, int descOut_sz);
   1473 #endif
   1474 
   1475 #if defined(REAPERAPI_WANT_GetColorTheme) || !defined(REAPERAPI_MINIMAL)
   1476 REAPERAPI_DEF //==============================================
   1477 // GetColorTheme
   1478 // Deprecated, see GetColorThemeStruct.
   1479 
   1480   INT_PTR (*GetColorTheme)(int idx, int defval);
   1481 #endif
   1482 
   1483 #if defined(REAPERAPI_WANT_GetColorThemeStruct) || !defined(REAPERAPI_MINIMAL)
   1484 REAPERAPI_DEF //==============================================
   1485 // GetColorThemeStruct
   1486 // returns the whole color theme (icontheme.h) and the size
   1487 
   1488   void* (*GetColorThemeStruct)(int* szOut);
   1489 #endif
   1490 
   1491 #if defined(REAPERAPI_WANT_GetConfigWantsDock) || !defined(REAPERAPI_MINIMAL)
   1492 REAPERAPI_DEF //==============================================
   1493 // GetConfigWantsDock
   1494 // gets the dock ID desired by ident_str, if any
   1495 
   1496   int (*GetConfigWantsDock)(const char* ident_str);
   1497 #endif
   1498 
   1499 #if defined(REAPERAPI_WANT_GetContextMenu) || !defined(REAPERAPI_MINIMAL)
   1500 REAPERAPI_DEF //==============================================
   1501 // GetContextMenu
   1502 // gets context menus. submenu 0:trackctl, 1:mediaitems, 2:ruler, 3:empty track area
   1503 
   1504   HMENU (*GetContextMenu)(int idx);
   1505 #endif
   1506 
   1507 #if defined(REAPERAPI_WANT_GetCurrentProjectInLoadSave) || !defined(REAPERAPI_MINIMAL)
   1508 REAPERAPI_DEF //==============================================
   1509 // GetCurrentProjectInLoadSave
   1510 // returns current project if in load/save (usually only used from project_config_extension_t)
   1511 
   1512   ReaProject* (*GetCurrentProjectInLoadSave)();
   1513 #endif
   1514 
   1515 #if defined(REAPERAPI_WANT_GetCursorContext) || !defined(REAPERAPI_MINIMAL)
   1516 REAPERAPI_DEF //==============================================
   1517 // GetCursorContext
   1518 // return the current cursor context: 0 if track panels, 1 if items, 2 if envelopes, otherwise unknown
   1519 
   1520   int (*GetCursorContext)();
   1521 #endif
   1522 
   1523 #if defined(REAPERAPI_WANT_GetCursorContext2) || !defined(REAPERAPI_MINIMAL)
   1524 REAPERAPI_DEF //==============================================
   1525 // GetCursorContext2
   1526 // 0 if track panels, 1 if items, 2 if envelopes, otherwise unknown (unlikely when want_last_valid is true)
   1527 
   1528   int (*GetCursorContext2)(bool want_last_valid);
   1529 #endif
   1530 
   1531 #if defined(REAPERAPI_WANT_GetCursorPosition) || !defined(REAPERAPI_MINIMAL)
   1532 REAPERAPI_DEF //==============================================
   1533 // GetCursorPosition
   1534 // edit cursor position
   1535 
   1536   double (*GetCursorPosition)();
   1537 #endif
   1538 
   1539 #if defined(REAPERAPI_WANT_GetCursorPositionEx) || !defined(REAPERAPI_MINIMAL)
   1540 REAPERAPI_DEF //==============================================
   1541 // GetCursorPositionEx
   1542 // edit cursor position
   1543 
   1544   double (*GetCursorPositionEx)(ReaProject* proj);
   1545 #endif
   1546 
   1547 #if defined(REAPERAPI_WANT_GetDisplayedMediaItemColor) || !defined(REAPERAPI_MINIMAL)
   1548 REAPERAPI_DEF //==============================================
   1549 // GetDisplayedMediaItemColor
   1550 // see GetDisplayedMediaItemColor2.
   1551 
   1552   int (*GetDisplayedMediaItemColor)(MediaItem* item);
   1553 #endif
   1554 
   1555 #if defined(REAPERAPI_WANT_GetDisplayedMediaItemColor2) || !defined(REAPERAPI_MINIMAL)
   1556 REAPERAPI_DEF //==============================================
   1557 // GetDisplayedMediaItemColor2
   1558 // Returns the custom take, item, or track color that is used (according to the user preference) to color the media item. The returned color is OS dependent|0x01000000 (i.e. ColorToNative(r,g,b)|0x01000000), so a return of zero means "no color", not black.
   1559 
   1560   int (*GetDisplayedMediaItemColor2)(MediaItem* item, MediaItem_Take* take);
   1561 #endif
   1562 
   1563 #if defined(REAPERAPI_WANT_GetEnvelopeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   1564 REAPERAPI_DEF //==============================================
   1565 // GetEnvelopeInfo_Value
   1566 // Gets an envelope numerical-value attribute:
   1567 // I_TCPY : int : Y offset of envelope relative to parent track (may be separate lane or overlap with track contents)
   1568 // I_TCPH : int : visible height of envelope
   1569 // I_TCPY_USED : int : Y offset of envelope relative to parent track, exclusive of padding
   1570 // I_TCPH_USED : int : visible height of envelope, exclusive of padding
   1571 // P_TRACK : MediaTrack * : parent track pointer (if any)
   1572 // P_DESTTRACK : MediaTrack * : destination track pointer, if on a send
   1573 // P_ITEM : MediaItem * : parent item pointer (if any)
   1574 // P_TAKE : MediaItem_Take * : parent take pointer (if any)
   1575 // I_SEND_IDX : int : 1-based index of send in P_TRACK, or 0 if not a send
   1576 // I_HWOUT_IDX : int : 1-based index of hardware output in P_TRACK or 0 if not a hardware output
   1577 // I_RECV_IDX : int : 1-based index of receive in P_DESTTRACK or 0 if not a send/receive
   1578 // 
   1579 
   1580   double (*GetEnvelopeInfo_Value)(TrackEnvelope* env, const char* parmname);
   1581 #endif
   1582 
   1583 #if defined(REAPERAPI_WANT_GetEnvelopeName) || !defined(REAPERAPI_MINIMAL)
   1584 REAPERAPI_DEF //==============================================
   1585 // GetEnvelopeName
   1586 
   1587   bool (*GetEnvelopeName)(TrackEnvelope* env, char* bufOut, int bufOut_sz);
   1588 #endif
   1589 
   1590 #if defined(REAPERAPI_WANT_GetEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   1591 REAPERAPI_DEF //==============================================
   1592 // GetEnvelopePoint
   1593 // Get the attributes of an envelope point. See GetEnvelopePointEx.
   1594 
   1595   bool (*GetEnvelopePoint)(TrackEnvelope* envelope, int ptidx, double* timeOut, double* valueOut, int* shapeOut, double* tensionOut, bool* selectedOut);
   1596 #endif
   1597 
   1598 #if defined(REAPERAPI_WANT_GetEnvelopePointByTime) || !defined(REAPERAPI_MINIMAL)
   1599 REAPERAPI_DEF //==============================================
   1600 // GetEnvelopePointByTime
   1601 // Returns the envelope point at or immediately prior to the given time position. See GetEnvelopePointByTimeEx.
   1602 
   1603   int (*GetEnvelopePointByTime)(TrackEnvelope* envelope, double time);
   1604 #endif
   1605 
   1606 #if defined(REAPERAPI_WANT_GetEnvelopePointByTimeEx) || !defined(REAPERAPI_MINIMAL)
   1607 REAPERAPI_DEF //==============================================
   1608 // GetEnvelopePointByTimeEx
   1609 // Returns the envelope point at or immediately prior to the given time position.
   1610 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
   1611 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
   1612 // even if the automation item is trimmed so that not all points are visible.
   1613 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
   1614 // See GetEnvelopePointEx, SetEnvelopePointEx, InsertEnvelopePointEx, DeleteEnvelopePointEx.
   1615 
   1616   int (*GetEnvelopePointByTimeEx)(TrackEnvelope* envelope, int autoitem_idx, double time);
   1617 #endif
   1618 
   1619 #if defined(REAPERAPI_WANT_GetEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   1620 REAPERAPI_DEF //==============================================
   1621 // GetEnvelopePointEx
   1622 // Get the attributes of an envelope point.
   1623 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
   1624 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
   1625 // even if the automation item is trimmed so that not all points are visible.
   1626 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
   1627 // See CountEnvelopePointsEx, SetEnvelopePointEx, InsertEnvelopePointEx, DeleteEnvelopePointEx.
   1628 
   1629   bool (*GetEnvelopePointEx)(TrackEnvelope* envelope, int autoitem_idx, int ptidx, double* timeOut, double* valueOut, int* shapeOut, double* tensionOut, bool* selectedOut);
   1630 #endif
   1631 
   1632 #if defined(REAPERAPI_WANT_GetEnvelopeScalingMode) || !defined(REAPERAPI_MINIMAL)
   1633 REAPERAPI_DEF //==============================================
   1634 // GetEnvelopeScalingMode
   1635 // 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.
   1636 
   1637   int (*GetEnvelopeScalingMode)(TrackEnvelope* env);
   1638 #endif
   1639 
   1640 #if defined(REAPERAPI_WANT_GetEnvelopeStateChunk) || !defined(REAPERAPI_MINIMAL)
   1641 REAPERAPI_DEF //==============================================
   1642 // GetEnvelopeStateChunk
   1643 // Gets the RPPXML state of an envelope, returns true if successful. Undo flag is a performance/caching hint.
   1644 
   1645   bool (*GetEnvelopeStateChunk)(TrackEnvelope* env, char* strNeedBig, int strNeedBig_sz, bool isundoOptional);
   1646 #endif
   1647 
   1648 #if defined(REAPERAPI_WANT_GetExePath) || !defined(REAPERAPI_MINIMAL)
   1649 REAPERAPI_DEF //==============================================
   1650 // GetExePath
   1651 // returns path of REAPER.exe (not including EXE), i.e. C:\Program Files\REAPER
   1652 
   1653   const char* (*GetExePath)();
   1654 #endif
   1655 
   1656 #if defined(REAPERAPI_WANT_GetExtState) || !defined(REAPERAPI_MINIMAL)
   1657 REAPERAPI_DEF //==============================================
   1658 // GetExtState
   1659 // Get the extended state value for a specific section and key. See SetExtState, DeleteExtState, HasExtState.
   1660 
   1661   const char* (*GetExtState)(const char* section, const char* key);
   1662 #endif
   1663 
   1664 #if defined(REAPERAPI_WANT_GetFocusedFX) || !defined(REAPERAPI_MINIMAL)
   1665 REAPERAPI_DEF //==============================================
   1666 // GetFocusedFX
   1667 // This function is deprecated (returns GetFocusedFX2()&3), see GetFocusedFX2.
   1668 
   1669   int (*GetFocusedFX)(int* tracknumberOut, int* itemnumberOut, int* fxnumberOut);
   1670 #endif
   1671 
   1672 #if defined(REAPERAPI_WANT_GetFocusedFX2) || !defined(REAPERAPI_MINIMAL)
   1673 REAPERAPI_DEF //==============================================
   1674 // GetFocusedFX2
   1675 // Return value has 1 set if track FX, 2 if take/item FX, 4 set if FX is no longer focused but still open. tracknumber==0 means the master track, 1 means track 1, etc. itemnumber is zero-based (or -1 if not an item). For interpretation of fxnumber, see GetLastTouchedFX.
   1676 
   1677   int (*GetFocusedFX2)(int* tracknumberOut, int* itemnumberOut, int* fxnumberOut);
   1678 #endif
   1679 
   1680 #if defined(REAPERAPI_WANT_GetFreeDiskSpaceForRecordPath) || !defined(REAPERAPI_MINIMAL)
   1681 REAPERAPI_DEF //==============================================
   1682 // GetFreeDiskSpaceForRecordPath
   1683 // returns free disk space in megabytes, pathIdx 0 for normal, 1 for alternate.
   1684 
   1685   int (*GetFreeDiskSpaceForRecordPath)(ReaProject* proj, int pathidx);
   1686 #endif
   1687 
   1688 #if defined(REAPERAPI_WANT_GetFXEnvelope) || !defined(REAPERAPI_MINIMAL)
   1689 REAPERAPI_DEF //==============================================
   1690 // GetFXEnvelope
   1691 // Returns the FX parameter envelope. If the envelope does not exist and create=true, the envelope will be created.
   1692 
   1693   TrackEnvelope* (*GetFXEnvelope)(MediaTrack* track, int fxindex, int parameterindex, bool create);
   1694 #endif
   1695 
   1696 #if defined(REAPERAPI_WANT_GetGlobalAutomationOverride) || !defined(REAPERAPI_MINIMAL)
   1697 REAPERAPI_DEF //==============================================
   1698 // GetGlobalAutomationOverride
   1699 // return -1=no override, 0=trim/read, 1=read, 2=touch, 3=write, 4=latch, 5=bypass
   1700 
   1701   int (*GetGlobalAutomationOverride)();
   1702 #endif
   1703 
   1704 #if defined(REAPERAPI_WANT_GetHZoomLevel) || !defined(REAPERAPI_MINIMAL)
   1705 REAPERAPI_DEF //==============================================
   1706 // GetHZoomLevel
   1707 // returns pixels/second
   1708 
   1709   double (*GetHZoomLevel)();
   1710 #endif
   1711 
   1712 #if defined(REAPERAPI_WANT_GetIconThemePointer) || !defined(REAPERAPI_MINIMAL)
   1713 REAPERAPI_DEF //==============================================
   1714 // GetIconThemePointer
   1715 // returns a named icontheme entry
   1716 
   1717   void* (*GetIconThemePointer)(const char* name);
   1718 #endif
   1719 
   1720 #if defined(REAPERAPI_WANT_GetIconThemePointerForDPI) || !defined(REAPERAPI_MINIMAL)
   1721 REAPERAPI_DEF //==============================================
   1722 // GetIconThemePointerForDPI
   1723 // returns a named icontheme entry for a given DPI-scaling (256=1:1). Note: the return value should not be stored, it should be queried at each paint! Querying name=NULL returns the start of the structure
   1724 
   1725   void* (*GetIconThemePointerForDPI)(const char* name, int dpisc);
   1726 #endif
   1727 
   1728 #if defined(REAPERAPI_WANT_GetIconThemeStruct) || !defined(REAPERAPI_MINIMAL)
   1729 REAPERAPI_DEF //==============================================
   1730 // GetIconThemeStruct
   1731 // returns a pointer to the icon theme (icontheme.h) and the size of that struct
   1732 
   1733   void* (*GetIconThemeStruct)(int* szOut);
   1734 #endif
   1735 
   1736 #if defined(REAPERAPI_WANT_GetInputChannelName) || !defined(REAPERAPI_MINIMAL)
   1737 REAPERAPI_DEF //==============================================
   1738 // GetInputChannelName
   1739 
   1740   const char* (*GetInputChannelName)(int channelIndex);
   1741 #endif
   1742 
   1743 #if defined(REAPERAPI_WANT_GetInputOutputLatency) || !defined(REAPERAPI_MINIMAL)
   1744 REAPERAPI_DEF //==============================================
   1745 // GetInputOutputLatency
   1746 // Gets the audio device input/output latency in samples
   1747 
   1748   void (*GetInputOutputLatency)(int* inputlatencyOut, int* outputLatencyOut);
   1749 #endif
   1750 
   1751 #if defined(REAPERAPI_WANT_GetItemEditingTime2) || !defined(REAPERAPI_MINIMAL)
   1752 REAPERAPI_DEF //==============================================
   1753 // GetItemEditingTime2
   1754 // returns time of relevant edit, set which_item to the pcm_source (if applicable), flags (if specified) will be set to 1 for edge resizing, 2 for fade change, 4 for item move, 8 for item slip edit (edit cursor time or start of item)
   1755 
   1756   double (*GetItemEditingTime2)(PCM_source** which_itemOut, int* flagsOut);
   1757 #endif
   1758 
   1759 #if defined(REAPERAPI_WANT_GetItemFromPoint) || !defined(REAPERAPI_MINIMAL)
   1760 REAPERAPI_DEF //==============================================
   1761 // GetItemFromPoint
   1762 // Returns the first item at the screen coordinates specified. If allow_locked is false, locked items are ignored. If takeOutOptional specified, returns the take hit. See GetThingFromPoint.
   1763 
   1764   MediaItem* (*GetItemFromPoint)(int screen_x, int screen_y, bool allow_locked, MediaItem_Take** takeOutOptional);
   1765 #endif
   1766 
   1767 #if defined(REAPERAPI_WANT_GetItemProjectContext) || !defined(REAPERAPI_MINIMAL)
   1768 REAPERAPI_DEF //==============================================
   1769 // GetItemProjectContext
   1770 
   1771   ReaProject* (*GetItemProjectContext)(MediaItem* item);
   1772 #endif
   1773 
   1774 #if defined(REAPERAPI_WANT_GetItemStateChunk) || !defined(REAPERAPI_MINIMAL)
   1775 REAPERAPI_DEF //==============================================
   1776 // GetItemStateChunk
   1777 // Gets the RPPXML state of an item, returns true if successful. Undo flag is a performance/caching hint.
   1778 
   1779   bool (*GetItemStateChunk)(MediaItem* item, char* strNeedBig, int strNeedBig_sz, bool isundoOptional);
   1780 #endif
   1781 
   1782 #if defined(REAPERAPI_WANT_GetLastColorThemeFile) || !defined(REAPERAPI_MINIMAL)
   1783 REAPERAPI_DEF //==============================================
   1784 // GetLastColorThemeFile
   1785 
   1786   const char* (*GetLastColorThemeFile)();
   1787 #endif
   1788 
   1789 #if defined(REAPERAPI_WANT_GetLastMarkerAndCurRegion) || !defined(REAPERAPI_MINIMAL)
   1790 REAPERAPI_DEF //==============================================
   1791 // GetLastMarkerAndCurRegion
   1792 // 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.
   1793 
   1794   void (*GetLastMarkerAndCurRegion)(ReaProject* proj, double time, int* markeridxOut, int* regionidxOut);
   1795 #endif
   1796 
   1797 #if defined(REAPERAPI_WANT_GetLastTouchedFX) || !defined(REAPERAPI_MINIMAL)
   1798 REAPERAPI_DEF //==============================================
   1799 // GetLastTouchedFX
   1800 // Returns true if the last touched FX parameter is valid, false otherwise. The low word of tracknumber is the 1-based track index -- 0 means the master track, 1 means track 1, etc. If the high word of tracknumber is nonzero, it refers to the 1-based item index (1 is the first item on the track, etc). For track FX, the low 24 bits of fxnumber refer to the FX index in the chain, and if the next 8 bits are 01, then the FX is record FX. For item FX, the low word defines the FX index in the chain, and the high word defines the take number.
   1801 
   1802   bool (*GetLastTouchedFX)(int* tracknumberOut, int* fxnumberOut, int* paramnumberOut);
   1803 #endif
   1804 
   1805 #if defined(REAPERAPI_WANT_GetLastTouchedTrack) || !defined(REAPERAPI_MINIMAL)
   1806 REAPERAPI_DEF //==============================================
   1807 // GetLastTouchedTrack
   1808 
   1809   MediaTrack* (*GetLastTouchedTrack)();
   1810 #endif
   1811 
   1812 #if defined(REAPERAPI_WANT_GetMainHwnd) || !defined(REAPERAPI_MINIMAL)
   1813 REAPERAPI_DEF //==============================================
   1814 // GetMainHwnd
   1815 
   1816   HWND (*GetMainHwnd)();
   1817 #endif
   1818 
   1819 #if defined(REAPERAPI_WANT_GetMasterMuteSoloFlags) || !defined(REAPERAPI_MINIMAL)
   1820 REAPERAPI_DEF //==============================================
   1821 // GetMasterMuteSoloFlags
   1822 // &1=master mute,&2=master solo. This is deprecated as you can just query the master track as well.
   1823 
   1824   int (*GetMasterMuteSoloFlags)();
   1825 #endif
   1826 
   1827 #if defined(REAPERAPI_WANT_GetMasterTrack) || !defined(REAPERAPI_MINIMAL)
   1828 REAPERAPI_DEF //==============================================
   1829 // GetMasterTrack
   1830 
   1831   MediaTrack* (*GetMasterTrack)(ReaProject* proj);
   1832 #endif
   1833 
   1834 #if defined(REAPERAPI_WANT_GetMasterTrackVisibility) || !defined(REAPERAPI_MINIMAL)
   1835 REAPERAPI_DEF //==============================================
   1836 // GetMasterTrackVisibility
   1837 // returns &1 if the master track is visible in the TCP, &2 if NOT visible in the mixer. See SetMasterTrackVisibility.
   1838 
   1839   int (*GetMasterTrackVisibility)();
   1840 #endif
   1841 
   1842 #if defined(REAPERAPI_WANT_GetMaxMidiInputs) || !defined(REAPERAPI_MINIMAL)
   1843 REAPERAPI_DEF //==============================================
   1844 // GetMaxMidiInputs
   1845 // returns max dev for midi inputs/outputs
   1846 
   1847   int (*GetMaxMidiInputs)();
   1848 #endif
   1849 
   1850 #if defined(REAPERAPI_WANT_GetMaxMidiOutputs) || !defined(REAPERAPI_MINIMAL)
   1851 REAPERAPI_DEF //==============================================
   1852 // GetMaxMidiOutputs
   1853 
   1854   int (*GetMaxMidiOutputs)();
   1855 #endif
   1856 
   1857 #if defined(REAPERAPI_WANT_GetMediaFileMetadata) || !defined(REAPERAPI_MINIMAL)
   1858 REAPERAPI_DEF //==============================================
   1859 // GetMediaFileMetadata
   1860 // Get text-based metadata from a media file for a given identifier. Call with identifier="" to list all identifiers contained in the file, separated by newlines. May return "[Binary data]" for metadata that REAPER doesn't handle.
   1861 
   1862   int (*GetMediaFileMetadata)(PCM_source* mediaSource, const char* identifier, char* bufOutNeedBig, int bufOutNeedBig_sz);
   1863 #endif
   1864 
   1865 #if defined(REAPERAPI_WANT_GetMediaItem) || !defined(REAPERAPI_MINIMAL)
   1866 REAPERAPI_DEF //==============================================
   1867 // GetMediaItem
   1868 // get an item from a project by item count (zero-based) (proj=0 for active project)
   1869 
   1870   MediaItem* (*GetMediaItem)(ReaProject* proj, int itemidx);
   1871 #endif
   1872 
   1873 #if defined(REAPERAPI_WANT_GetMediaItem_Track) || !defined(REAPERAPI_MINIMAL)
   1874 REAPERAPI_DEF //==============================================
   1875 // GetMediaItem_Track
   1876 // Get parent track of media item
   1877 
   1878   MediaTrack* (*GetMediaItem_Track)(MediaItem* item);
   1879 #endif
   1880 
   1881 #if defined(REAPERAPI_WANT_GetMediaItemInfo_Value) || !defined(REAPERAPI_MINIMAL)
   1882 REAPERAPI_DEF //==============================================
   1883 // GetMediaItemInfo_Value
   1884 // Get media item numerical-value attributes.
   1885 // B_MUTE : bool * : muted (item solo overrides). setting this value will clear C_MUTE_SOLO.
   1886 // B_MUTE_ACTUAL : bool * : muted (ignores solo). setting this value will not affect C_MUTE_SOLO.
   1887 // C_MUTE_SOLO : char * : solo override (-1=soloed, 0=no override, 1=unsoloed). note that this API does not automatically unsolo other items when soloing (nor clear the unsolos when clearing the last soloed item), it must be done by the caller via action or via this API.
   1888 // B_LOOPSRC : bool * : loop source
   1889 // B_ALLTAKESPLAY : bool * : all takes play
   1890 // B_UISEL : bool * : selected in arrange view
   1891 // C_BEATATTACHMODE : char * : item timebase, -1=track or project default, 1=beats (position, length, rate), 2=beats (position only). for auto-stretch timebase: C_BEATATTACHMODE=1, C_AUTOSTRETCH=1
   1892 // C_AUTOSTRETCH: : char * : auto-stretch at project tempo changes, 1=enabled, requires C_BEATATTACHMODE=1
   1893 // C_LOCK : char * : locked, &1=locked
   1894 // D_VOL : double * : item volume,  0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   1895 // D_POSITION : double * : item position in seconds
   1896 // D_LENGTH : double * : item length in seconds
   1897 // D_SNAPOFFSET : double * : item snap offset in seconds
   1898 // D_FADEINLEN : double * : item manual fadein length in seconds
   1899 // D_FADEOUTLEN : double * : item manual fadeout length in seconds
   1900 // D_FADEINDIR : double * : item fadein curvature, -1..1
   1901 // D_FADEOUTDIR : double * : item fadeout curvature, -1..1
   1902 // D_FADEINLEN_AUTO : double * : item auto-fadein length in seconds, -1=no auto-fadein
   1903 // D_FADEOUTLEN_AUTO : double * : item auto-fadeout length in seconds, -1=no auto-fadeout
   1904 // C_FADEINSHAPE : int * : fadein shape, 0..6, 0=linear
   1905 // C_FADEOUTSHAPE : int * : fadeout shape, 0..6, 0=linear
   1906 // I_GROUPID : int * : group ID, 0=no group
   1907 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   1908 // I_LASTH : int * : height in pixels (read-only)
   1909 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   1910 // I_CURTAKE : int * : active take number
   1911 // IP_ITEMNUMBER : int : item number on this track (read-only, returns the item number directly)
   1912 // F_FREEMODE_Y : float * : free item positioning Y-position, 0=top of track, 1=bottom of track (will never be 1)
   1913 // F_FREEMODE_H : float * : free item positioning height, 0=no height, 1=full height of track (will never be 0)
   1914 // P_TRACK : MediaTrack * : (read-only)
   1915 // 
   1916 
   1917   double (*GetMediaItemInfo_Value)(MediaItem* item, const char* parmname);
   1918 #endif
   1919 
   1920 #if defined(REAPERAPI_WANT_GetMediaItemNumTakes) || !defined(REAPERAPI_MINIMAL)
   1921 REAPERAPI_DEF //==============================================
   1922 // GetMediaItemNumTakes
   1923 
   1924   int (*GetMediaItemNumTakes)(MediaItem* item);
   1925 #endif
   1926 
   1927 #if defined(REAPERAPI_WANT_GetMediaItemTake) || !defined(REAPERAPI_MINIMAL)
   1928 REAPERAPI_DEF //==============================================
   1929 // GetMediaItemTake
   1930 
   1931   MediaItem_Take* (*GetMediaItemTake)(MediaItem* item, int tk);
   1932 #endif
   1933 
   1934 #if defined(REAPERAPI_WANT_GetMediaItemTake_Item) || !defined(REAPERAPI_MINIMAL)
   1935 REAPERAPI_DEF //==============================================
   1936 // GetMediaItemTake_Item
   1937 // Get parent item of media item take
   1938 
   1939   MediaItem* (*GetMediaItemTake_Item)(MediaItem_Take* take);
   1940 #endif
   1941 
   1942 #if defined(REAPERAPI_WANT_GetMediaItemTake_Peaks) || !defined(REAPERAPI_MINIMAL)
   1943 REAPERAPI_DEF //==============================================
   1944 // GetMediaItemTake_Peaks
   1945 // Gets block of peak samples to buf. Note that the peak samples are interleaved, but in two or three blocks (maximums, then minimums, then extra). Return value has 20 bits of returned sample count, then 4 bits of output_mode (0xf00000), then a bit to signify whether extra_type was available (0x1000000). extra_type can be 115 ('s') for spectral information, which will return peak samples as integers with the low 15 bits frequency, next 14 bits tonality.
   1946 
   1947   int (*GetMediaItemTake_Peaks)(MediaItem_Take* take, double peakrate, double starttime, int numchannels, int numsamplesperchannel, int want_extra_type, double* buf);
   1948 #endif
   1949 
   1950 #if defined(REAPERAPI_WANT_GetMediaItemTake_Source) || !defined(REAPERAPI_MINIMAL)
   1951 REAPERAPI_DEF //==============================================
   1952 // GetMediaItemTake_Source
   1953 // Get media source of media item take
   1954 
   1955   PCM_source* (*GetMediaItemTake_Source)(MediaItem_Take* take);
   1956 #endif
   1957 
   1958 #if defined(REAPERAPI_WANT_GetMediaItemTake_Track) || !defined(REAPERAPI_MINIMAL)
   1959 REAPERAPI_DEF //==============================================
   1960 // GetMediaItemTake_Track
   1961 // Get parent track of media item take
   1962 
   1963   MediaTrack* (*GetMediaItemTake_Track)(MediaItem_Take* take);
   1964 #endif
   1965 
   1966 #if defined(REAPERAPI_WANT_GetMediaItemTakeByGUID) || !defined(REAPERAPI_MINIMAL)
   1967 REAPERAPI_DEF //==============================================
   1968 // GetMediaItemTakeByGUID
   1969 
   1970   MediaItem_Take* (*GetMediaItemTakeByGUID)(ReaProject* project, const GUID* guid);
   1971 #endif
   1972 
   1973 #if defined(REAPERAPI_WANT_GetMediaItemTakeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   1974 REAPERAPI_DEF //==============================================
   1975 // GetMediaItemTakeInfo_Value
   1976 // Get media item take numerical-value attributes.
   1977 // D_STARTOFFS : double * : start offset in source media, in seconds
   1978 // D_VOL : double * : take volume, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc, negative if take polarity is flipped
   1979 // D_PAN : double * : take pan, -1..1
   1980 // D_PANLAW : double * : take pan law, -1=default, 0.5=-6dB, 1.0=+0dB, etc
   1981 // D_PLAYRATE : double * : take playback rate, 0.5=half speed, 1=normal, 2=double speed, etc
   1982 // D_PITCH : double * : take pitch adjustment in semitones, -12=one octave down, 0=normal, +12=one octave up, etc
   1983 // B_PPITCH : bool * : preserve pitch when changing playback rate
   1984 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   1985 // I_LASTH : int * : height in pixels (read-only)
   1986 // I_CHANMODE : int * : channel mode, 0=normal, 1=reverse stereo, 2=downmix, 3=left, 4=right
   1987 // I_PITCHMODE : int * : pitch shifter mode, -1=projext default, otherwise high 2 bytes=shifter, low 2 bytes=parameter
   1988 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   1989 // IP_TAKENUMBER : int : take number (read-only, returns the take number directly)
   1990 // P_TRACK : pointer to MediaTrack (read-only)
   1991 // P_ITEM : pointer to MediaItem (read-only)
   1992 // P_SOURCE : PCM_source *. Note that if setting this, you should first retrieve the old source, set the new, THEN delete the old.
   1993 // 
   1994 
   1995   double (*GetMediaItemTakeInfo_Value)(MediaItem_Take* take, const char* parmname);
   1996 #endif
   1997 
   1998 #if defined(REAPERAPI_WANT_GetMediaItemTrack) || !defined(REAPERAPI_MINIMAL)
   1999 REAPERAPI_DEF //==============================================
   2000 // GetMediaItemTrack
   2001 
   2002   MediaTrack* (*GetMediaItemTrack)(MediaItem* item);
   2003 #endif
   2004 
   2005 #if defined(REAPERAPI_WANT_GetMediaSourceFileName) || !defined(REAPERAPI_MINIMAL)
   2006 REAPERAPI_DEF //==============================================
   2007 // GetMediaSourceFileName
   2008 // Copies the media source filename to filenamebuf. Note that in-project MIDI media sources have no associated filename. See GetMediaSourceParent.
   2009 
   2010   void (*GetMediaSourceFileName)(PCM_source* source, char* filenamebufOut, int filenamebufOut_sz);
   2011 #endif
   2012 
   2013 #if defined(REAPERAPI_WANT_GetMediaSourceLength) || !defined(REAPERAPI_MINIMAL)
   2014 REAPERAPI_DEF //==============================================
   2015 // GetMediaSourceLength
   2016 // 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.
   2017 
   2018   double (*GetMediaSourceLength)(PCM_source* source, bool* lengthIsQNOut);
   2019 #endif
   2020 
   2021 #if defined(REAPERAPI_WANT_GetMediaSourceNumChannels) || !defined(REAPERAPI_MINIMAL)
   2022 REAPERAPI_DEF //==============================================
   2023 // GetMediaSourceNumChannels
   2024 // Returns the number of channels in the source media.
   2025 
   2026   int (*GetMediaSourceNumChannels)(PCM_source* source);
   2027 #endif
   2028 
   2029 #if defined(REAPERAPI_WANT_GetMediaSourceParent) || !defined(REAPERAPI_MINIMAL)
   2030 REAPERAPI_DEF //==============================================
   2031 // GetMediaSourceParent
   2032 // Returns the parent source, or NULL if src is the root source. This can be used to retrieve the parent properties of sections or reversed sources for example.
   2033 
   2034   PCM_source* (*GetMediaSourceParent)(PCM_source* src);
   2035 #endif
   2036 
   2037 #if defined(REAPERAPI_WANT_GetMediaSourceSampleRate) || !defined(REAPERAPI_MINIMAL)
   2038 REAPERAPI_DEF //==============================================
   2039 // GetMediaSourceSampleRate
   2040 // Returns the sample rate. MIDI source media will return zero.
   2041 
   2042   int (*GetMediaSourceSampleRate)(PCM_source* source);
   2043 #endif
   2044 
   2045 #if defined(REAPERAPI_WANT_GetMediaSourceType) || !defined(REAPERAPI_MINIMAL)
   2046 REAPERAPI_DEF //==============================================
   2047 // GetMediaSourceType
   2048 // copies the media source type ("WAV", "MIDI", etc) to typebuf
   2049 
   2050   void (*GetMediaSourceType)(PCM_source* source, char* typebufOut, int typebufOut_sz);
   2051 #endif
   2052 
   2053 #if defined(REAPERAPI_WANT_GetMediaTrackInfo_Value) || !defined(REAPERAPI_MINIMAL)
   2054 REAPERAPI_DEF //==============================================
   2055 // GetMediaTrackInfo_Value
   2056 // Get track numerical-value attributes.
   2057 // B_MUTE : bool * : muted
   2058 // B_PHASE : bool * : track phase inverted
   2059 // B_RECMON_IN_EFFECT : bool * : record monitoring in effect (current audio-thread playback state, read-only)
   2060 // IP_TRACKNUMBER : int : track number 1-based, 0=not found, -1=master track (read-only, returns the int directly)
   2061 // I_SOLO : int * : soloed, 0=not soloed, 1=soloed, 2=soloed in place, 5=safe soloed, 6=safe soloed in place
   2062 // B_SOLO_DEFEAT : bool * : when set, if anything else is soloed and this track is not muted, this track acts soloed
   2063 // I_FXEN : int * : fx enabled, 0=bypassed, !0=fx active
   2064 // I_RECARM : int * : record armed, 0=not record armed, 1=record armed
   2065 // I_RECINPUT : int * : record input, <0=no input. if 4096 set, input is MIDI and low 5 bits represent channel (0=all, 1-16=only chan), next 6 bits represent physical input (63=all, 62=VKB). If 4096 is not set, low 10 bits (0..1023) are input start channel (ReaRoute/Loopback start at 512). If 2048 is set, input is multichannel input (using track channel count), or if 1024 is set, input is stereo input, otherwise input is mono.
   2066 // I_RECMODE : int * : record mode, 0=input, 1=stereo out, 2=none, 3=stereo out w/latency compensation, 4=midi output, 5=mono out, 6=mono out w/ latency compensation, 7=midi overdub, 8=midi replace
   2067 // I_RECMODE_FLAGS : int * : record mode flags, &3=output recording mode (0=post fader, 1=pre-fx, 2=post-fx/pre-fader)
   2068 // I_RECMON : int * : record monitoring, 0=off, 1=normal, 2=not when playing (tape style)
   2069 // I_RECMONITEMS : int * : monitor items while recording, 0=off, 1=on
   2070 // B_AUTO_RECARM : bool * : automatically set record arm when selected (does not immediately affect recarm state, script should set directly if desired)
   2071 // I_VUMODE : int * : track vu mode, &1:disabled, &30==0:stereo peaks, &30==2:multichannel peaks, &30==4:stereo RMS, &30==8:combined RMS, &30==12:LUFS-M, &30==16:LUFS-S (readout=max), &30==20:LUFS-S (readout=current), &32:LUFS calculation on channels 1+2 only
   2072 // I_AUTOMODE : int * : track automation mode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch
   2073 // I_NCHAN : int * : number of track channels, 2-64, even numbers only
   2074 // I_SELECTED : int * : track selected, 0=unselected, 1=selected
   2075 // I_WNDH : int * : current TCP window height in pixels including envelopes (read-only)
   2076 // I_TCPH : int * : current TCP window height in pixels not including envelopes (read-only)
   2077 // I_TCPY : int * : current TCP window Y-position in pixels relative to top of arrange view (read-only)
   2078 // I_MCPX : int * : current MCP X-position in pixels relative to mixer container (read-only)
   2079 // I_MCPY : int * : current MCP Y-position in pixels relative to mixer container (read-only)
   2080 // I_MCPW : int * : current MCP width in pixels (read-only)
   2081 // I_MCPH : int * : current MCP height in pixels (read-only)
   2082 // I_FOLDERDEPTH : int * : folder depth change, 0=normal, 1=track is a folder parent, -1=track is the last in the innermost folder, -2=track is the last in the innermost and next-innermost folders, etc
   2083 // I_FOLDERCOMPACT : int * : folder compacted state (only valid on folders), 0=normal, 1=small, 2=tiny children
   2084 // I_MIDIHWOUT : int * : track midi hardware output index, <0=disabled, low 5 bits are which channels (0=all, 1-16), next 5 bits are output device index (0-31)
   2085 // I_PERFFLAGS : int * : track performance flags, &1=no media buffering, &2=no anticipative FX
   2086 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   2087 // I_HEIGHTOVERRIDE : int * : custom height override for TCP window, 0 for none, otherwise size in pixels
   2088 // B_HEIGHTLOCK : bool * : track height lock (must set I_HEIGHTOVERRIDE before locking)
   2089 // D_VOL : double * : trim volume of track, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   2090 // D_PAN : double * : trim pan of track, -1..1
   2091 // D_WIDTH : double * : width of track, -1..1
   2092 // D_DUALPANL : double * : dualpan position 1, -1..1, only if I_PANMODE==6
   2093 // D_DUALPANR : double * : dualpan position 2, -1..1, only if I_PANMODE==6
   2094 // I_PANMODE : int * : pan mode, 0=classic 3.x, 3=new balance, 5=stereo pan, 6=dual pan
   2095 // D_PANLAW : double * : pan law of track, <0=project default, 0.5=-6dB, 0.707..=-3dB, 1=+0dB, 1.414..=-3dB with gain compensation, 2=-6dB with gain compensation, etc
   2096 // I_PANLAW_FLAGS : int * : pan law flags, 0=sine taper, 1=hybrid taper with deprecated behavior when gain compensation enabled, 2=linear taper, 3=hybrid taper
   2097 // P_ENV:<envchunkname or P_ENV:{GUID... : TrackEnvelope * : (read-only) chunkname can be <VOLENV, <PANENV, etc; GUID is the stringified envelope GUID.
   2098 // B_SHOWINMIXER : bool * : track control panel visible in mixer (do not use on master track)
   2099 // B_SHOWINTCP : bool * : track control panel visible in arrange view (do not use on master track)
   2100 // B_MAINSEND : bool * : track sends audio to parent
   2101 // C_MAINSEND_OFFS : char * : channel offset of track send to parent
   2102 // C_MAINSEND_NCH : char * : channel count of track send to parent (0=use all child track channels, 1=use one channel only)
   2103 // I_FREEMODE : int * : 1=track free item positioning enabled, 2=track fixed lanes enabled (call UpdateTimeline() after changing)
   2104 // C_BEATATTACHMODE : char * : track timebase, -1=project default, 0=time, 1=beats (position, length, rate), 2=beats (position only)
   2105 // F_MCP_FXSEND_SCALE : float * : scale of fx+send area in MCP (0=minimum allowed, 1=maximum allowed)
   2106 // F_MCP_FXPARM_SCALE : float * : scale of fx parameter area in MCP (0=minimum allowed, 1=maximum allowed)
   2107 // F_MCP_SENDRGN_SCALE : float * : scale of send area as proportion of the fx+send total area (0=minimum allowed, 1=maximum allowed)
   2108 // F_TCP_FXPARM_SCALE : float * : scale of TCP parameter area when TCP FX are embedded (0=min allowed, default, 1=max allowed)
   2109 // I_PLAY_OFFSET_FLAG : int * : track media playback offset state, &1=bypassed, &2=offset value is measured in samples (otherwise measured in seconds)
   2110 // D_PLAY_OFFSET : double * : track media playback offset, units depend on I_PLAY_OFFSET_FLAG
   2111 // P_PARTRACK : MediaTrack * : parent track (read-only)
   2112 // P_PROJECT : ReaProject * : parent project (read-only)
   2113 // 
   2114 
   2115   double (*GetMediaTrackInfo_Value)(MediaTrack* tr, const char* parmname);
   2116 #endif
   2117 
   2118 #if defined(REAPERAPI_WANT_GetMIDIInputName) || !defined(REAPERAPI_MINIMAL)
   2119 REAPERAPI_DEF //==============================================
   2120 // GetMIDIInputName
   2121 // returns true if device present
   2122 
   2123   bool (*GetMIDIInputName)(int dev, char* nameout, int nameout_sz);
   2124 #endif
   2125 
   2126 #if defined(REAPERAPI_WANT_GetMIDIOutputName) || !defined(REAPERAPI_MINIMAL)
   2127 REAPERAPI_DEF //==============================================
   2128 // GetMIDIOutputName
   2129 // returns true if device present
   2130 
   2131   bool (*GetMIDIOutputName)(int dev, char* nameout, int nameout_sz);
   2132 #endif
   2133 
   2134 #if defined(REAPERAPI_WANT_GetMixerScroll) || !defined(REAPERAPI_MINIMAL)
   2135 REAPERAPI_DEF //==============================================
   2136 // GetMixerScroll
   2137 // Get the leftmost track visible in the mixer
   2138 
   2139   MediaTrack* (*GetMixerScroll)();
   2140 #endif
   2141 
   2142 #if defined(REAPERAPI_WANT_GetMouseModifier) || !defined(REAPERAPI_MINIMAL)
   2143 REAPERAPI_DEF //==============================================
   2144 // GetMouseModifier
   2145 // Get the current mouse modifier assignment for a specific modifier key assignment, in a specific context.
   2146 // action will be filled in with the command ID number for a built-in mouse modifier
   2147 // or built-in REAPER command ID, or the custom action ID string.
   2148 // See SetMouseModifier for more information.
   2149 // 
   2150 
   2151   void (*GetMouseModifier)(const char* context, int modifier_flag, char* actionOut, int actionOut_sz);
   2152 #endif
   2153 
   2154 #if defined(REAPERAPI_WANT_GetMousePosition) || !defined(REAPERAPI_MINIMAL)
   2155 REAPERAPI_DEF //==============================================
   2156 // GetMousePosition
   2157 // get mouse position in screen coordinates
   2158 
   2159   void (*GetMousePosition)(int* xOut, int* yOut);
   2160 #endif
   2161 
   2162 #if defined(REAPERAPI_WANT_GetNumAudioInputs) || !defined(REAPERAPI_MINIMAL)
   2163 REAPERAPI_DEF //==============================================
   2164 // GetNumAudioInputs
   2165 // Return number of normal audio hardware inputs available
   2166 
   2167   int (*GetNumAudioInputs)();
   2168 #endif
   2169 
   2170 #if defined(REAPERAPI_WANT_GetNumAudioOutputs) || !defined(REAPERAPI_MINIMAL)
   2171 REAPERAPI_DEF //==============================================
   2172 // GetNumAudioOutputs
   2173 // Return number of normal audio hardware outputs available
   2174 
   2175   int (*GetNumAudioOutputs)();
   2176 #endif
   2177 
   2178 #if defined(REAPERAPI_WANT_GetNumMIDIInputs) || !defined(REAPERAPI_MINIMAL)
   2179 REAPERAPI_DEF //==============================================
   2180 // GetNumMIDIInputs
   2181 // returns max number of real midi hardware inputs
   2182 
   2183   int (*GetNumMIDIInputs)();
   2184 #endif
   2185 
   2186 #if defined(REAPERAPI_WANT_GetNumMIDIOutputs) || !defined(REAPERAPI_MINIMAL)
   2187 REAPERAPI_DEF //==============================================
   2188 // GetNumMIDIOutputs
   2189 // returns max number of real midi hardware outputs
   2190 
   2191   int (*GetNumMIDIOutputs)();
   2192 #endif
   2193 
   2194 #if defined(REAPERAPI_WANT_GetNumTakeMarkers) || !defined(REAPERAPI_MINIMAL)
   2195 REAPERAPI_DEF //==============================================
   2196 // GetNumTakeMarkers
   2197 // Returns number of take markers. See GetTakeMarker, SetTakeMarker, DeleteTakeMarker
   2198 
   2199   int (*GetNumTakeMarkers)(MediaItem_Take* take);
   2200 #endif
   2201 
   2202 #if defined(REAPERAPI_WANT_GetNumTracks) || !defined(REAPERAPI_MINIMAL)
   2203 REAPERAPI_DEF //==============================================
   2204 // GetNumTracks
   2205 
   2206   int (*GetNumTracks)();
   2207 #endif
   2208 
   2209 #if defined(REAPERAPI_WANT_GetOS) || !defined(REAPERAPI_MINIMAL)
   2210 REAPERAPI_DEF //==============================================
   2211 // GetOS
   2212 // Returns "Win32", "Win64", "OSX32", "OSX64", "macOS-arm64", or "Other".
   2213 
   2214   const char* (*GetOS)();
   2215 #endif
   2216 
   2217 #if defined(REAPERAPI_WANT_GetOutputChannelName) || !defined(REAPERAPI_MINIMAL)
   2218 REAPERAPI_DEF //==============================================
   2219 // GetOutputChannelName
   2220 
   2221   const char* (*GetOutputChannelName)(int channelIndex);
   2222 #endif
   2223 
   2224 #if defined(REAPERAPI_WANT_GetOutputLatency) || !defined(REAPERAPI_MINIMAL)
   2225 REAPERAPI_DEF //==============================================
   2226 // GetOutputLatency
   2227 // returns output latency in seconds
   2228 
   2229   double (*GetOutputLatency)();
   2230 #endif
   2231 
   2232 #if defined(REAPERAPI_WANT_GetParentTrack) || !defined(REAPERAPI_MINIMAL)
   2233 REAPERAPI_DEF //==============================================
   2234 // GetParentTrack
   2235 
   2236   MediaTrack* (*GetParentTrack)(MediaTrack* track);
   2237 #endif
   2238 
   2239 #if defined(REAPERAPI_WANT_GetPeakFileName) || !defined(REAPERAPI_MINIMAL)
   2240 REAPERAPI_DEF //==============================================
   2241 // GetPeakFileName
   2242 // get the peak file name for a given file (can be either filename.reapeaks,or a hashed filename in another path)
   2243 
   2244   void (*GetPeakFileName)(const char* fn, char* bufOut, int bufOut_sz);
   2245 #endif
   2246 
   2247 #if defined(REAPERAPI_WANT_GetPeakFileNameEx) || !defined(REAPERAPI_MINIMAL)
   2248 REAPERAPI_DEF //==============================================
   2249 // GetPeakFileNameEx
   2250 // get the peak file name for a given file (can be either filename.reapeaks,or a hashed filename in another path)
   2251 
   2252   void (*GetPeakFileNameEx)(const char* fn, char* buf, int buf_sz, bool forWrite);
   2253 #endif
   2254 
   2255 #if defined(REAPERAPI_WANT_GetPeakFileNameEx2) || !defined(REAPERAPI_MINIMAL)
   2256 REAPERAPI_DEF //==============================================
   2257 // GetPeakFileNameEx2
   2258 // Like GetPeakFileNameEx, but you can specify peaksfileextension such as ".reapeaks"
   2259 
   2260   void (*GetPeakFileNameEx2)(const char* fn, char* buf, int buf_sz, bool forWrite, const char* peaksfileextension);
   2261 #endif
   2262 
   2263 #if defined(REAPERAPI_WANT_GetPeaksBitmap) || !defined(REAPERAPI_MINIMAL)
   2264 REAPERAPI_DEF //==============================================
   2265 // GetPeaksBitmap
   2266 // see note in reaper_plugin.h about PCM_source_peaktransfer_t::samplerate
   2267 
   2268   void* (*GetPeaksBitmap)(PCM_source_peaktransfer_t* pks, double maxamp, int w, int h, LICE_IBitmap* bmp);
   2269 #endif
   2270 
   2271 #if defined(REAPERAPI_WANT_GetPlayPosition) || !defined(REAPERAPI_MINIMAL)
   2272 REAPERAPI_DEF //==============================================
   2273 // GetPlayPosition
   2274 // returns latency-compensated actual-what-you-hear position
   2275 
   2276   double (*GetPlayPosition)();
   2277 #endif
   2278 
   2279 #if defined(REAPERAPI_WANT_GetPlayPosition2) || !defined(REAPERAPI_MINIMAL)
   2280 REAPERAPI_DEF //==============================================
   2281 // GetPlayPosition2
   2282 // returns position of next audio block being processed
   2283 
   2284   double (*GetPlayPosition2)();
   2285 #endif
   2286 
   2287 #if defined(REAPERAPI_WANT_GetPlayPosition2Ex) || !defined(REAPERAPI_MINIMAL)
   2288 REAPERAPI_DEF //==============================================
   2289 // GetPlayPosition2Ex
   2290 // returns position of next audio block being processed
   2291 
   2292   double (*GetPlayPosition2Ex)(ReaProject* proj);
   2293 #endif
   2294 
   2295 #if defined(REAPERAPI_WANT_GetPlayPositionEx) || !defined(REAPERAPI_MINIMAL)
   2296 REAPERAPI_DEF //==============================================
   2297 // GetPlayPositionEx
   2298 // returns latency-compensated actual-what-you-hear position
   2299 
   2300   double (*GetPlayPositionEx)(ReaProject* proj);
   2301 #endif
   2302 
   2303 #if defined(REAPERAPI_WANT_GetPlayState) || !defined(REAPERAPI_MINIMAL)
   2304 REAPERAPI_DEF //==============================================
   2305 // GetPlayState
   2306 // &1=playing,&2=pause,&=4 is recording
   2307 
   2308   int (*GetPlayState)();
   2309 #endif
   2310 
   2311 #if defined(REAPERAPI_WANT_GetPlayStateEx) || !defined(REAPERAPI_MINIMAL)
   2312 REAPERAPI_DEF //==============================================
   2313 // GetPlayStateEx
   2314 // &1=playing,&2=pause,&=4 is recording
   2315 
   2316   int (*GetPlayStateEx)(ReaProject* proj);
   2317 #endif
   2318 
   2319 #if defined(REAPERAPI_WANT_GetPreferredDiskReadMode) || !defined(REAPERAPI_MINIMAL)
   2320 REAPERAPI_DEF //==============================================
   2321 // GetPreferredDiskReadMode
   2322 // Gets user configured preferred disk read mode. mode/nb/bs are all parameters that should be passed to WDL_FileRead, see for more information.
   2323 
   2324   void (*GetPreferredDiskReadMode)(int* mode, int* nb, int* bs);
   2325 #endif
   2326 
   2327 #if defined(REAPERAPI_WANT_GetPreferredDiskReadModePeak) || !defined(REAPERAPI_MINIMAL)
   2328 REAPERAPI_DEF //==============================================
   2329 // GetPreferredDiskReadModePeak
   2330 // Gets user configured preferred disk read mode for use when building peaks. mode/nb/bs are all parameters that should be passed to WDL_FileRead, see for more information.
   2331 
   2332   void (*GetPreferredDiskReadModePeak)(int* mode, int* nb, int* bs);
   2333 #endif
   2334 
   2335 #if defined(REAPERAPI_WANT_GetPreferredDiskWriteMode) || !defined(REAPERAPI_MINIMAL)
   2336 REAPERAPI_DEF //==============================================
   2337 // GetPreferredDiskWriteMode
   2338 // Gets user configured preferred disk write mode. nb will receive two values, the initial and maximum write buffer counts. mode/nb/bs are all parameters that should be passed to WDL_FileWrite, see for more information. 
   2339 
   2340   void (*GetPreferredDiskWriteMode)(int* mode, int* nb, int* bs);
   2341 #endif
   2342 
   2343 #if defined(REAPERAPI_WANT_GetProjectLength) || !defined(REAPERAPI_MINIMAL)
   2344 REAPERAPI_DEF //==============================================
   2345 // GetProjectLength
   2346 // returns length of project (maximum of end of media item, markers, end of regions, tempo map
   2347 
   2348   double (*GetProjectLength)(ReaProject* proj);
   2349 #endif
   2350 
   2351 #if defined(REAPERAPI_WANT_GetProjectName) || !defined(REAPERAPI_MINIMAL)
   2352 REAPERAPI_DEF //==============================================
   2353 // GetProjectName
   2354 
   2355   void (*GetProjectName)(ReaProject* proj, char* bufOut, int bufOut_sz);
   2356 #endif
   2357 
   2358 #if defined(REAPERAPI_WANT_GetProjectPath) || !defined(REAPERAPI_MINIMAL)
   2359 REAPERAPI_DEF //==============================================
   2360 // GetProjectPath
   2361 // Get the project recording path.
   2362 
   2363   void (*GetProjectPath)(char* bufOut, int bufOut_sz);
   2364 #endif
   2365 
   2366 #if defined(REAPERAPI_WANT_GetProjectPathEx) || !defined(REAPERAPI_MINIMAL)
   2367 REAPERAPI_DEF //==============================================
   2368 // GetProjectPathEx
   2369 // Get the project recording path.
   2370 
   2371   void (*GetProjectPathEx)(ReaProject* proj, char* bufOut, int bufOut_sz);
   2372 #endif
   2373 
   2374 #if defined(REAPERAPI_WANT_GetProjectStateChangeCount) || !defined(REAPERAPI_MINIMAL)
   2375 REAPERAPI_DEF //==============================================
   2376 // GetProjectStateChangeCount
   2377 // returns an integer that changes when the project state changes
   2378 
   2379   int (*GetProjectStateChangeCount)(ReaProject* proj);
   2380 #endif
   2381 
   2382 #if defined(REAPERAPI_WANT_GetProjectTimeOffset) || !defined(REAPERAPI_MINIMAL)
   2383 REAPERAPI_DEF //==============================================
   2384 // GetProjectTimeOffset
   2385 // Gets project time offset in seconds (project settings - project start time). If rndframe is true, the offset is rounded to a multiple of the project frame size.
   2386 
   2387   double (*GetProjectTimeOffset)(ReaProject* proj, bool rndframe);
   2388 #endif
   2389 
   2390 #if defined(REAPERAPI_WANT_GetProjectTimeSignature) || !defined(REAPERAPI_MINIMAL)
   2391 REAPERAPI_DEF //==============================================
   2392 // GetProjectTimeSignature
   2393 // deprecated
   2394 
   2395   void (*GetProjectTimeSignature)(double* bpmOut, double* bpiOut);
   2396 #endif
   2397 
   2398 #if defined(REAPERAPI_WANT_GetProjectTimeSignature2) || !defined(REAPERAPI_MINIMAL)
   2399 REAPERAPI_DEF //==============================================
   2400 // GetProjectTimeSignature2
   2401 // Gets basic time signature (beats per minute, numerator of time signature in bpi)
   2402 // this does not reflect tempo envelopes but is purely what is set in the project settings.
   2403 
   2404   void (*GetProjectTimeSignature2)(ReaProject* proj, double* bpmOut, double* bpiOut);
   2405 #endif
   2406 
   2407 #if defined(REAPERAPI_WANT_GetProjExtState) || !defined(REAPERAPI_MINIMAL)
   2408 REAPERAPI_DEF //==============================================
   2409 // GetProjExtState
   2410 // Get the value previously associated with this extname and key, the last time the project was saved. See SetProjExtState, EnumProjExtState.
   2411 
   2412   int (*GetProjExtState)(ReaProject* proj, const char* extname, const char* key, char* valOutNeedBig, int valOutNeedBig_sz);
   2413 #endif
   2414 
   2415 #if defined(REAPERAPI_WANT_GetResourcePath) || !defined(REAPERAPI_MINIMAL)
   2416 REAPERAPI_DEF //==============================================
   2417 // GetResourcePath
   2418 // returns path where ini files are stored, other things are in subdirectories.
   2419 
   2420   const char* (*GetResourcePath)();
   2421 #endif
   2422 
   2423 #if defined(REAPERAPI_WANT_GetSelectedEnvelope) || !defined(REAPERAPI_MINIMAL)
   2424 REAPERAPI_DEF //==============================================
   2425 // GetSelectedEnvelope
   2426 // get the currently selected envelope, returns NULL/nil if no envelope is selected
   2427 
   2428   TrackEnvelope* (*GetSelectedEnvelope)(ReaProject* proj);
   2429 #endif
   2430 
   2431 #if defined(REAPERAPI_WANT_GetSelectedMediaItem) || !defined(REAPERAPI_MINIMAL)
   2432 REAPERAPI_DEF //==============================================
   2433 // GetSelectedMediaItem
   2434 // get a selected item by selected item count (zero-based) (proj=0 for active project)
   2435 
   2436   MediaItem* (*GetSelectedMediaItem)(ReaProject* proj, int selitem);
   2437 #endif
   2438 
   2439 #if defined(REAPERAPI_WANT_GetSelectedTrack) || !defined(REAPERAPI_MINIMAL)
   2440 REAPERAPI_DEF //==============================================
   2441 // GetSelectedTrack
   2442 // Get a selected track from a project (proj=0 for active project) by selected track count (zero-based). This function ignores the master track, see GetSelectedTrack2.
   2443 
   2444   MediaTrack* (*GetSelectedTrack)(ReaProject* proj, int seltrackidx);
   2445 #endif
   2446 
   2447 #if defined(REAPERAPI_WANT_GetSelectedTrack2) || !defined(REAPERAPI_MINIMAL)
   2448 REAPERAPI_DEF //==============================================
   2449 // GetSelectedTrack2
   2450 // Get a selected track from a project (proj=0 for active project) by selected track count (zero-based).
   2451 
   2452   MediaTrack* (*GetSelectedTrack2)(ReaProject* proj, int seltrackidx, bool wantmaster);
   2453 #endif
   2454 
   2455 #if defined(REAPERAPI_WANT_GetSelectedTrackEnvelope) || !defined(REAPERAPI_MINIMAL)
   2456 REAPERAPI_DEF //==============================================
   2457 // GetSelectedTrackEnvelope
   2458 // get the currently selected track envelope, returns NULL/nil if no envelope is selected
   2459 
   2460   TrackEnvelope* (*GetSelectedTrackEnvelope)(ReaProject* proj);
   2461 #endif
   2462 
   2463 #if defined(REAPERAPI_WANT_GetSet_ArrangeView2) || !defined(REAPERAPI_MINIMAL)
   2464 REAPERAPI_DEF //==============================================
   2465 // GetSet_ArrangeView2
   2466 // Gets or sets the arrange view start/end time for screen coordinates. use screen_x_start=screen_x_end=0 to use the full arrange view's start/end time
   2467 
   2468   void (*GetSet_ArrangeView2)(ReaProject* proj, bool isSet, int screen_x_start, int screen_x_end, double* start_timeInOut, double* end_timeInOut);
   2469 #endif
   2470 
   2471 #if defined(REAPERAPI_WANT_GetSet_LoopTimeRange) || !defined(REAPERAPI_MINIMAL)
   2472 REAPERAPI_DEF //==============================================
   2473 // GetSet_LoopTimeRange
   2474 
   2475   void (*GetSet_LoopTimeRange)(bool isSet, bool isLoop, double* startOut, double* endOut, bool allowautoseek);
   2476 #endif
   2477 
   2478 #if defined(REAPERAPI_WANT_GetSet_LoopTimeRange2) || !defined(REAPERAPI_MINIMAL)
   2479 REAPERAPI_DEF //==============================================
   2480 // GetSet_LoopTimeRange2
   2481 
   2482   void (*GetSet_LoopTimeRange2)(ReaProject* proj, bool isSet, bool isLoop, double* startOut, double* endOut, bool allowautoseek);
   2483 #endif
   2484 
   2485 #if defined(REAPERAPI_WANT_GetSetAutomationItemInfo) || !defined(REAPERAPI_MINIMAL)
   2486 REAPERAPI_DEF //==============================================
   2487 // GetSetAutomationItemInfo
   2488 // Get or set automation item information. autoitem_idx=0 for the first automation item on an envelope, 1 for the second item, etc. desc can be any of the following:
   2489 // D_POOL_ID : double * : automation item pool ID (as an integer); edits are propagated to all other automation items that share a pool ID
   2490 // D_POSITION : double * : automation item timeline position in seconds
   2491 // D_LENGTH : double * : automation item length in seconds
   2492 // D_STARTOFFS : double * : automation item start offset in seconds
   2493 // D_PLAYRATE : double * : automation item playback rate
   2494 // D_BASELINE : double * : automation item baseline value in the range [0,1]
   2495 // D_AMPLITUDE : double * : automation item amplitude in the range [-1,1]
   2496 // D_LOOPSRC : double * : nonzero if the automation item contents are looped
   2497 // D_UISEL : double * : nonzero if the automation item is selected in the arrange view
   2498 // D_POOL_QNLEN : double * : automation item pooled source length in quarter notes (setting will affect all pooled instances)
   2499 // 
   2500 
   2501   double (*GetSetAutomationItemInfo)(TrackEnvelope* env, int autoitem_idx, const char* desc, double value, bool is_set);
   2502 #endif
   2503 
   2504 #if defined(REAPERAPI_WANT_GetSetAutomationItemInfo_String) || !defined(REAPERAPI_MINIMAL)
   2505 REAPERAPI_DEF //==============================================
   2506 // GetSetAutomationItemInfo_String
   2507 // Get or set automation item information. autoitem_idx=0 for the first automation item on an envelope, 1 for the second item, etc. returns true on success. desc can be any of the following:
   2508 // P_POOL_NAME : char * : name of the underlying automation item pool
   2509 // P_POOL_EXT:xyz : char * : extension-specific persistent data
   2510 // 
   2511 
   2512   bool (*GetSetAutomationItemInfo_String)(TrackEnvelope* env, int autoitem_idx, const char* desc, char* valuestrNeedBig, bool is_set);
   2513 #endif
   2514 
   2515 #if defined(REAPERAPI_WANT_GetSetEnvelopeInfo_String) || !defined(REAPERAPI_MINIMAL)
   2516 REAPERAPI_DEF //==============================================
   2517 // GetSetEnvelopeInfo_String
   2518 // Gets/sets an attribute string:
   2519 // P_EXT:xyz : char * : extension-specific persistent data
   2520 // GUID : GUID * : 16-byte GUID, can query only, not set. If using a _String() function, GUID is a string {xyz-...}.
   2521 // 
   2522 
   2523   bool (*GetSetEnvelopeInfo_String)(TrackEnvelope* env, const char* parmname, char* stringNeedBig, bool setNewValue);
   2524 #endif
   2525 
   2526 #if defined(REAPERAPI_WANT_GetSetEnvelopeState) || !defined(REAPERAPI_MINIMAL)
   2527 REAPERAPI_DEF //==============================================
   2528 // GetSetEnvelopeState
   2529 // deprecated -- see SetEnvelopeStateChunk, GetEnvelopeStateChunk
   2530 
   2531   bool (*GetSetEnvelopeState)(TrackEnvelope* env, char* str, int str_sz);
   2532 #endif
   2533 
   2534 #if defined(REAPERAPI_WANT_GetSetEnvelopeState2) || !defined(REAPERAPI_MINIMAL)
   2535 REAPERAPI_DEF //==============================================
   2536 // GetSetEnvelopeState2
   2537 // deprecated -- see SetEnvelopeStateChunk, GetEnvelopeStateChunk
   2538 
   2539   bool (*GetSetEnvelopeState2)(TrackEnvelope* env, char* str, int str_sz, bool isundo);
   2540 #endif
   2541 
   2542 #if defined(REAPERAPI_WANT_GetSetItemState) || !defined(REAPERAPI_MINIMAL)
   2543 REAPERAPI_DEF //==============================================
   2544 // GetSetItemState
   2545 // deprecated -- see SetItemStateChunk, GetItemStateChunk
   2546 
   2547   bool (*GetSetItemState)(MediaItem* item, char* str, int str_sz);
   2548 #endif
   2549 
   2550 #if defined(REAPERAPI_WANT_GetSetItemState2) || !defined(REAPERAPI_MINIMAL)
   2551 REAPERAPI_DEF //==============================================
   2552 // GetSetItemState2
   2553 // deprecated -- see SetItemStateChunk, GetItemStateChunk
   2554 
   2555   bool (*GetSetItemState2)(MediaItem* item, char* str, int str_sz, bool isundo);
   2556 #endif
   2557 
   2558 #if defined(REAPERAPI_WANT_GetSetMediaItemInfo) || !defined(REAPERAPI_MINIMAL)
   2559 REAPERAPI_DEF //==============================================
   2560 // GetSetMediaItemInfo
   2561 // P_TRACK : MediaTrack * : (read-only)
   2562 // B_MUTE : bool * : muted (item solo overrides). setting this value will clear C_MUTE_SOLO.
   2563 // B_MUTE_ACTUAL : bool * : muted (ignores solo). setting this value will not affect C_MUTE_SOLO.
   2564 // C_MUTE_SOLO : char * : solo override (-1=soloed, 0=no override, 1=unsoloed). note that this API does not automatically unsolo other items when soloing (nor clear the unsolos when clearing the last soloed item), it must be done by the caller via action or via this API.
   2565 // B_LOOPSRC : bool * : loop source
   2566 // B_ALLTAKESPLAY : bool * : all takes play
   2567 // B_UISEL : bool * : selected in arrange view
   2568 // C_BEATATTACHMODE : char * : item timebase, -1=track or project default, 1=beats (position, length, rate), 2=beats (position only). for auto-stretch timebase: C_BEATATTACHMODE=1, C_AUTOSTRETCH=1
   2569 // C_AUTOSTRETCH: : char * : auto-stretch at project tempo changes, 1=enabled, requires C_BEATATTACHMODE=1
   2570 // C_LOCK : char * : locked, &1=locked
   2571 // D_VOL : double * : item volume,  0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   2572 // D_POSITION : double * : item position in seconds
   2573 // D_LENGTH : double * : item length in seconds
   2574 // D_SNAPOFFSET : double * : item snap offset in seconds
   2575 // D_FADEINLEN : double * : item manual fadein length in seconds
   2576 // D_FADEOUTLEN : double * : item manual fadeout length in seconds
   2577 // D_FADEINDIR : double * : item fadein curvature, -1..1
   2578 // D_FADEOUTDIR : double * : item fadeout curvature, -1..1
   2579 // D_FADEINLEN_AUTO : double * : item auto-fadein length in seconds, -1=no auto-fadein
   2580 // D_FADEOUTLEN_AUTO : double * : item auto-fadeout length in seconds, -1=no auto-fadeout
   2581 // C_FADEINSHAPE : int * : fadein shape, 0..6, 0=linear
   2582 // C_FADEOUTSHAPE : int * : fadeout shape, 0..6, 0=linear
   2583 // I_GROUPID : int * : group ID, 0=no group
   2584 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   2585 // I_LASTH : int * : height in pixels (read-only)
   2586 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   2587 // I_CURTAKE : int * : active take number
   2588 // IP_ITEMNUMBER : int : item number on this track (read-only, returns the item number directly)
   2589 // F_FREEMODE_Y : float * : free item positioning Y-position, 0=top of track, 1=bottom of track (will never be 1)
   2590 // F_FREEMODE_H : float * : free item positioning height, 0=no height, 1=full height of track (will never be 0)
   2591 // P_NOTES : char * : item note text (do not write to returned pointer, use setNewValue to update)
   2592 // P_EXT:xyz : char * : extension-specific persistent data
   2593 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2594 // 
   2595 
   2596   void* (*GetSetMediaItemInfo)(MediaItem* item, const char* parmname, void* setNewValue);
   2597 #endif
   2598 
   2599 #if defined(REAPERAPI_WANT_GetSetMediaItemInfo_String) || !defined(REAPERAPI_MINIMAL)
   2600 REAPERAPI_DEF //==============================================
   2601 // GetSetMediaItemInfo_String
   2602 // Gets/sets an item attribute string:
   2603 // P_NOTES : char * : item note text (do not write to returned pointer, use setNewValue to update)
   2604 // P_EXT:xyz : char * : extension-specific persistent data
   2605 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2606 // 
   2607 
   2608   bool (*GetSetMediaItemInfo_String)(MediaItem* item, const char* parmname, char* stringNeedBig, bool setNewValue);
   2609 #endif
   2610 
   2611 #if defined(REAPERAPI_WANT_GetSetMediaItemTakeInfo) || !defined(REAPERAPI_MINIMAL)
   2612 REAPERAPI_DEF //==============================================
   2613 // GetSetMediaItemTakeInfo
   2614 // P_TRACK : pointer to MediaTrack (read-only)
   2615 // P_ITEM : pointer to MediaItem (read-only)
   2616 // P_SOURCE : PCM_source *. Note that if setting this, you should first retrieve the old source, set the new, THEN delete the old.
   2617 // P_NAME : char * : take name
   2618 // P_EXT:xyz : char * : extension-specific persistent data
   2619 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2620 // D_STARTOFFS : double * : start offset in source media, in seconds
   2621 // D_VOL : double * : take volume, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc, negative if take polarity is flipped
   2622 // D_PAN : double * : take pan, -1..1
   2623 // D_PANLAW : double * : take pan law, -1=default, 0.5=-6dB, 1.0=+0dB, etc
   2624 // D_PLAYRATE : double * : take playback rate, 0.5=half speed, 1=normal, 2=double speed, etc
   2625 // D_PITCH : double * : take pitch adjustment in semitones, -12=one octave down, 0=normal, +12=one octave up, etc
   2626 // B_PPITCH : bool * : preserve pitch when changing playback rate
   2627 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   2628 // I_LASTH : int * : height in pixels (read-only)
   2629 // I_CHANMODE : int * : channel mode, 0=normal, 1=reverse stereo, 2=downmix, 3=left, 4=right
   2630 // I_PITCHMODE : int * : pitch shifter mode, -1=projext default, otherwise high 2 bytes=shifter, low 2 bytes=parameter
   2631 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   2632 // IP_TAKENUMBER : int : take number (read-only, returns the take number directly)
   2633 // 
   2634 
   2635   void* (*GetSetMediaItemTakeInfo)(MediaItem_Take* tk, const char* parmname, void* setNewValue);
   2636 #endif
   2637 
   2638 #if defined(REAPERAPI_WANT_GetSetMediaItemTakeInfo_String) || !defined(REAPERAPI_MINIMAL)
   2639 REAPERAPI_DEF //==============================================
   2640 // GetSetMediaItemTakeInfo_String
   2641 // Gets/sets a take attribute string:
   2642 // P_NAME : char * : take name
   2643 // P_EXT:xyz : char * : extension-specific persistent data
   2644 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2645 // 
   2646 
   2647   bool (*GetSetMediaItemTakeInfo_String)(MediaItem_Take* tk, const char* parmname, char* stringNeedBig, bool setNewValue);
   2648 #endif
   2649 
   2650 #if defined(REAPERAPI_WANT_GetSetMediaTrackInfo) || !defined(REAPERAPI_MINIMAL)
   2651 REAPERAPI_DEF //==============================================
   2652 // GetSetMediaTrackInfo
   2653 // Get or set track attributes.
   2654 // P_PARTRACK : MediaTrack * : parent track (read-only)
   2655 // P_PROJECT : ReaProject * : parent project (read-only)
   2656 // P_NAME : char * : track name (on master returns NULL)
   2657 // P_ICON : const char * : track icon (full filename, or relative to resource_path/data/track_icons)
   2658 // P_MCP_LAYOUT : const char * : layout name
   2659 // P_RAZOREDITS : const char * : list of razor edit areas, as space-separated triples of start time, end time, and envelope GUID string.
   2660 //   Example: "0.0 1.0 \"\" 0.0 1.0 "{xyz-...}"
   2661 // P_RAZOREDITS_EXT : const char * : list of razor edit areas, as comma-separated sets of space-separated tuples of start time, end time, optional: envelope GUID string, fixed/fipm top y-position, fixed/fipm bottom y-position.
   2662 //   Example: "0.0 1.0,0.0 1.0 "{xyz-...}",1.0 2.0 "" 0.25 0.75"
   2663 // P_TCP_LAYOUT : const char * : layout name
   2664 // P_EXT:xyz : char * : extension-specific persistent data
   2665 // P_UI_RECT:tcp.mute : char * : read-only, allows querying screen position + size of track WALTER elements (tcp.size queries screen position and size of entire TCP, etc).
   2666 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2667 // B_MUTE : bool * : muted
   2668 // B_PHASE : bool * : track phase inverted
   2669 // B_RECMON_IN_EFFECT : bool * : record monitoring in effect (current audio-thread playback state, read-only)
   2670 // IP_TRACKNUMBER : int : track number 1-based, 0=not found, -1=master track (read-only, returns the int directly)
   2671 // I_SOLO : int * : soloed, 0=not soloed, 1=soloed, 2=soloed in place, 5=safe soloed, 6=safe soloed in place
   2672 // B_SOLO_DEFEAT : bool * : when set, if anything else is soloed and this track is not muted, this track acts soloed
   2673 // I_FXEN : int * : fx enabled, 0=bypassed, !0=fx active
   2674 // I_RECARM : int * : record armed, 0=not record armed, 1=record armed
   2675 // I_RECINPUT : int * : record input, <0=no input. if 4096 set, input is MIDI and low 5 bits represent channel (0=all, 1-16=only chan), next 6 bits represent physical input (63=all, 62=VKB). If 4096 is not set, low 10 bits (0..1023) are input start channel (ReaRoute/Loopback start at 512). If 2048 is set, input is multichannel input (using track channel count), or if 1024 is set, input is stereo input, otherwise input is mono.
   2676 // I_RECMODE : int * : record mode, 0=input, 1=stereo out, 2=none, 3=stereo out w/latency compensation, 4=midi output, 5=mono out, 6=mono out w/ latency compensation, 7=midi overdub, 8=midi replace
   2677 // I_RECMODE_FLAGS : int * : record mode flags, &3=output recording mode (0=post fader, 1=pre-fx, 2=post-fx/pre-fader)
   2678 // I_RECMON : int * : record monitoring, 0=off, 1=normal, 2=not when playing (tape style)
   2679 // I_RECMONITEMS : int * : monitor items while recording, 0=off, 1=on
   2680 // B_AUTO_RECARM : bool * : automatically set record arm when selected (does not immediately affect recarm state, script should set directly if desired)
   2681 // I_VUMODE : int * : track vu mode, &1:disabled, &30==0:stereo peaks, &30==2:multichannel peaks, &30==4:stereo RMS, &30==8:combined RMS, &30==12:LUFS-M, &30==16:LUFS-S (readout=max), &30==20:LUFS-S (readout=current), &32:LUFS calculation on channels 1+2 only
   2682 // I_AUTOMODE : int * : track automation mode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch
   2683 // I_NCHAN : int * : number of track channels, 2-64, even numbers only
   2684 // I_SELECTED : int * : track selected, 0=unselected, 1=selected
   2685 // I_WNDH : int * : current TCP window height in pixels including envelopes (read-only)
   2686 // I_TCPH : int * : current TCP window height in pixels not including envelopes (read-only)
   2687 // I_TCPY : int * : current TCP window Y-position in pixels relative to top of arrange view (read-only)
   2688 // I_MCPX : int * : current MCP X-position in pixels relative to mixer container (read-only)
   2689 // I_MCPY : int * : current MCP Y-position in pixels relative to mixer container (read-only)
   2690 // I_MCPW : int * : current MCP width in pixels (read-only)
   2691 // I_MCPH : int * : current MCP height in pixels (read-only)
   2692 // I_FOLDERDEPTH : int * : folder depth change, 0=normal, 1=track is a folder parent, -1=track is the last in the innermost folder, -2=track is the last in the innermost and next-innermost folders, etc
   2693 // I_FOLDERCOMPACT : int * : folder compacted state (only valid on folders), 0=normal, 1=small, 2=tiny children
   2694 // I_MIDIHWOUT : int * : track midi hardware output index, <0=disabled, low 5 bits are which channels (0=all, 1-16), next 5 bits are output device index (0-31)
   2695 // I_PERFFLAGS : int * : track performance flags, &1=no media buffering, &2=no anticipative FX
   2696 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   2697 // I_HEIGHTOVERRIDE : int * : custom height override for TCP window, 0 for none, otherwise size in pixels
   2698 // B_HEIGHTLOCK : bool * : track height lock (must set I_HEIGHTOVERRIDE before locking)
   2699 // D_VOL : double * : trim volume of track, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   2700 // D_PAN : double * : trim pan of track, -1..1
   2701 // D_WIDTH : double * : width of track, -1..1
   2702 // D_DUALPANL : double * : dualpan position 1, -1..1, only if I_PANMODE==6
   2703 // D_DUALPANR : double * : dualpan position 2, -1..1, only if I_PANMODE==6
   2704 // I_PANMODE : int * : pan mode, 0=classic 3.x, 3=new balance, 5=stereo pan, 6=dual pan
   2705 // D_PANLAW : double * : pan law of track, <0=project default, 0.5=-6dB, 0.707..=-3dB, 1=+0dB, 1.414..=-3dB with gain compensation, 2=-6dB with gain compensation, etc
   2706 // I_PANLAW_FLAGS : int * : pan law flags, 0=sine taper, 1=hybrid taper with deprecated behavior when gain compensation enabled, 2=linear taper, 3=hybrid taper
   2707 // P_ENV:<envchunkname or P_ENV:{GUID... : TrackEnvelope * : (read-only) chunkname can be <VOLENV, <PANENV, etc; GUID is the stringified envelope GUID.
   2708 // B_SHOWINMIXER : bool * : track control panel visible in mixer (do not use on master track)
   2709 // B_SHOWINTCP : bool * : track control panel visible in arrange view (do not use on master track)
   2710 // B_MAINSEND : bool * : track sends audio to parent
   2711 // C_MAINSEND_OFFS : char * : channel offset of track send to parent
   2712 // C_MAINSEND_NCH : char * : channel count of track send to parent (0=use all child track channels, 1=use one channel only)
   2713 // I_FREEMODE : int * : 1=track free item positioning enabled, 2=track fixed lanes enabled (call UpdateTimeline() after changing)
   2714 // C_BEATATTACHMODE : char * : track timebase, -1=project default, 0=time, 1=beats (position, length, rate), 2=beats (position only)
   2715 // F_MCP_FXSEND_SCALE : float * : scale of fx+send area in MCP (0=minimum allowed, 1=maximum allowed)
   2716 // F_MCP_FXPARM_SCALE : float * : scale of fx parameter area in MCP (0=minimum allowed, 1=maximum allowed)
   2717 // F_MCP_SENDRGN_SCALE : float * : scale of send area as proportion of the fx+send total area (0=minimum allowed, 1=maximum allowed)
   2718 // F_TCP_FXPARM_SCALE : float * : scale of TCP parameter area when TCP FX are embedded (0=min allowed, default, 1=max allowed)
   2719 // I_PLAY_OFFSET_FLAG : int * : track media playback offset state, &1=bypassed, &2=offset value is measured in samples (otherwise measured in seconds)
   2720 // D_PLAY_OFFSET : double * : track media playback offset, units depend on I_PLAY_OFFSET_FLAG
   2721 // 
   2722 
   2723   void* (*GetSetMediaTrackInfo)(MediaTrack* tr, const char* parmname, void* setNewValue);
   2724 #endif
   2725 
   2726 #if defined(REAPERAPI_WANT_GetSetMediaTrackInfo_String) || !defined(REAPERAPI_MINIMAL)
   2727 REAPERAPI_DEF //==============================================
   2728 // GetSetMediaTrackInfo_String
   2729 // Get or set track string attributes.
   2730 // P_NAME : char * : track name (on master returns NULL)
   2731 // P_ICON : const char * : track icon (full filename, or relative to resource_path/data/track_icons)
   2732 // P_MCP_LAYOUT : const char * : layout name
   2733 // P_RAZOREDITS : const char * : list of razor edit areas, as space-separated triples of start time, end time, and envelope GUID string.
   2734 //   Example: "0.0 1.0 \"\" 0.0 1.0 "{xyz-...}"
   2735 // P_RAZOREDITS_EXT : const char * : list of razor edit areas, as comma-separated sets of space-separated tuples of start time, end time, optional: envelope GUID string, fixed/fipm top y-position, fixed/fipm bottom y-position.
   2736 //   Example: "0.0 1.0,0.0 1.0 "{xyz-...}",1.0 2.0 "" 0.25 0.75"
   2737 // P_TCP_LAYOUT : const char * : layout name
   2738 // P_EXT:xyz : char * : extension-specific persistent data
   2739 // P_UI_RECT:tcp.mute : char * : read-only, allows querying screen position + size of track WALTER elements (tcp.size queries screen position and size of entire TCP, etc).
   2740 // GUID : GUID * : 16-byte GUID, can query or update. If using a _String() function, GUID is a string {xyz-...}.
   2741 // 
   2742 
   2743   bool (*GetSetMediaTrackInfo_String)(MediaTrack* tr, const char* parmname, char* stringNeedBig, bool setNewValue);
   2744 #endif
   2745 
   2746 #if defined(REAPERAPI_WANT_GetSetObjectState) || !defined(REAPERAPI_MINIMAL)
   2747 REAPERAPI_DEF //==============================================
   2748 // GetSetObjectState
   2749 // get or set the state of a {track,item,envelope} as an RPPXML chunk
   2750 // str="" to get the chunk string returned (must call FreeHeapPtr when done)
   2751 // supply str to set the state (returns zero)
   2752 
   2753   char* (*GetSetObjectState)(void* obj, const char* str);
   2754 #endif
   2755 
   2756 #if defined(REAPERAPI_WANT_GetSetObjectState2) || !defined(REAPERAPI_MINIMAL)
   2757 REAPERAPI_DEF //==============================================
   2758 // GetSetObjectState2
   2759 // get or set the state of a {track,item,envelope} as an RPPXML chunk
   2760 // str="" to get the chunk string returned (must call FreeHeapPtr when done)
   2761 // supply str to set the state (returns zero)
   2762 // set isundo if the state will be used for undo purposes (which may allow REAPER to get the state more efficiently
   2763 
   2764   char* (*GetSetObjectState2)(void* obj, const char* str, bool isundo);
   2765 #endif
   2766 
   2767 #if defined(REAPERAPI_WANT_GetSetProjectAuthor) || !defined(REAPERAPI_MINIMAL)
   2768 REAPERAPI_DEF //==============================================
   2769 // GetSetProjectAuthor
   2770 // deprecated, see GetSetProjectInfo_String with desc="PROJECT_AUTHOR"
   2771 
   2772   void (*GetSetProjectAuthor)(ReaProject* proj, bool set, char* author, int author_sz);
   2773 #endif
   2774 
   2775 #if defined(REAPERAPI_WANT_GetSetProjectGrid) || !defined(REAPERAPI_MINIMAL)
   2776 REAPERAPI_DEF //==============================================
   2777 // GetSetProjectGrid
   2778 // Get or set the arrange view grid division. 0.25=quarter note, 1.0/3.0=half note triplet, etc. swingmode can be 1 for swing enabled, swingamt is -1..1. swingmode can be 3 for measure-grid. Returns grid configuration flags
   2779 
   2780   int (*GetSetProjectGrid)(ReaProject* project, bool set, double* divisionInOutOptional, int* swingmodeInOutOptional, double* swingamtInOutOptional);
   2781 #endif
   2782 
   2783 #if defined(REAPERAPI_WANT_GetSetProjectInfo) || !defined(REAPERAPI_MINIMAL)
   2784 REAPERAPI_DEF //==============================================
   2785 // GetSetProjectInfo
   2786 // Get or set project information.
   2787 // RENDER_SETTINGS : &(1|2)=0:master mix, &1=stems+master mix, &2=stems only, &4=multichannel tracks to multichannel files, &8=use render matrix, &16=tracks with only mono media to mono files, &32=selected media items, &64=selected media items via master, &128=selected tracks via master, &256=embed transients if format supports, &512=embed metadata if format supports, &1024=embed take markers if format supports, &2048=2nd pass render
   2788 // RENDER_BOUNDSFLAG : 0=custom time bounds, 1=entire project, 2=time selection, 3=all project regions, 4=selected media items, 5=selected project regions, 6=all project markers, 7=selected project markers
   2789 // RENDER_CHANNELS : number of channels in rendered file
   2790 // RENDER_SRATE : sample rate of rendered file (or 0 for project sample rate)
   2791 // RENDER_STARTPOS : render start time when RENDER_BOUNDSFLAG=0
   2792 // RENDER_ENDPOS : render end time when RENDER_BOUNDSFLAG=0
   2793 // RENDER_TAILFLAG : apply render tail setting when rendering: &1=custom time bounds, &2=entire project, &4=time selection, &8=all project markers/regions, &16=selected media items, &32=selected project markers/regions
   2794 // RENDER_TAILMS : tail length in ms to render (only used if RENDER_BOUNDSFLAG and RENDER_TAILFLAG are set)
   2795 // RENDER_ADDTOPROJ : &1=add rendered files to project, &2=do not render files that are likely silent
   2796 // RENDER_DITHER : &1=dither, &2=noise shaping, &4=dither stems, &8=noise shaping on stems
   2797 // RENDER_NORMALIZE: &1=enable, (&14==0)=LUFS-I, (&14==2)=RMS, (&14==4)=peak, (&14==6)=true peak, (&14==8)=LUFS-M max, (&14==10)=LUFS-S max, &32=normalize stems to common gain based on master, &64=enable brickwall limit, &128=brickwall limit true peak, &256=only normalize files that are too loud, &512=apply fade-in, &1024=apply fade-out
   2798 // RENDER_NORMALIZE_TARGET: render normalization target as amplitude, so 0.5 means -6.02dB, 0.25 means -12.04dB, etc
   2799 // RENDER_BRICKWALL: render brickwall limit as amplitude, so 0.5 means -6.02dB, 0.25 means -12.04dB, etc
   2800 // RENDER_FADEIN: render fade-in (0.001 means 1 ms, requires RENDER_NORMALIZE&512)
   2801 // RENDER_FADEOUT: render fade-out (0.001 means 1 ms, requires RENDER_NORMALIZE&1024)
   2802 // RENDER_FADEINSHAPE: render fade-in shape
   2803 // RENDER_FADEOUTSHAPE: render fade-out shape
   2804 // PROJECT_SRATE : samplerate (ignored unless PROJECT_SRATE_USE set)
   2805 // PROJECT_SRATE_USE : set to 1 if project samplerate is used
   2806 // 
   2807 
   2808   double (*GetSetProjectInfo)(ReaProject* project, const char* desc, double value, bool is_set);
   2809 #endif
   2810 
   2811 #if defined(REAPERAPI_WANT_GetSetProjectInfo_String) || !defined(REAPERAPI_MINIMAL)
   2812 REAPERAPI_DEF //==============================================
   2813 // GetSetProjectInfo_String
   2814 // Get or set project information.
   2815 // PROJECT_NAME : project file name (read-only, is_set will be ignored)
   2816 // PROJECT_TITLE : title field from Project Settings/Notes dialog
   2817 // PROJECT_AUTHOR : author field from Project Settings/Notes dialog
   2818 // TRACK_GROUP_NAME:X : track group name, X should be 1..64
   2819 // MARKER_GUID:X : get the GUID (unique ID) of the marker or region with index X, where X is the index passed to EnumProjectMarkers, not necessarily the displayed number
   2820 // RECORD_PATH : recording directory -- may be blank or a relative path, to get the effective path see GetProjectPathEx()
   2821 // RECORD_PATH_SECONDARY : secondary recording directory
   2822 // RENDER_FILE : render directory
   2823 // RENDER_PATTERN : render file name (may contain wildcards)
   2824 // RENDER_METADATA : get or set the metadata saved with the project (not metadata embedded in project media). Example, ID3 album name metadata: valuestr="ID3:TALB" to get, valuestr="ID3:TALB|my album name" to set. Call with valuestr="" and is_set=false to get a semicolon-separated list of defined project metadata identifiers.
   2825 // RENDER_TARGETS : semicolon separated list of files that would be written if the project is rendered using the most recent render settings
   2826 // RENDER_STATS : (read-only) semicolon separated list of statistics for the most recently rendered files. call with valuestr="XXX" to run an action (for example, "42437"=dry run render selected items) before returning statistics.
   2827 // RENDER_FORMAT : base64-encoded sink configuration (see project files, etc). Callers can also pass a simple 4-byte string (non-base64-encoded), e.g. "evaw" or "l3pm", to use default settings for that sink type.
   2828 // RENDER_FORMAT2 : base64-encoded secondary sink configuration. Callers can also pass a simple 4-byte string (non-base64-encoded), e.g. "evaw" or "l3pm", to use default settings for that sink type, or "" to disable secondary render.
   2829 // 
   2830 
   2831   bool (*GetSetProjectInfo_String)(ReaProject* project, const char* desc, char* valuestrNeedBig, bool is_set);
   2832 #endif
   2833 
   2834 #if defined(REAPERAPI_WANT_GetSetProjectNotes) || !defined(REAPERAPI_MINIMAL)
   2835 REAPERAPI_DEF //==============================================
   2836 // GetSetProjectNotes
   2837 // gets or sets project notes, notesNeedBig_sz is ignored when setting
   2838 
   2839   void (*GetSetProjectNotes)(ReaProject* proj, bool set, char* notesNeedBig, int notesNeedBig_sz);
   2840 #endif
   2841 
   2842 #if defined(REAPERAPI_WANT_GetSetRepeat) || !defined(REAPERAPI_MINIMAL)
   2843 REAPERAPI_DEF //==============================================
   2844 // GetSetRepeat
   2845 // -1 == query,0=clear,1=set,>1=toggle . returns new value
   2846 
   2847   int (*GetSetRepeat)(int val);
   2848 #endif
   2849 
   2850 #if defined(REAPERAPI_WANT_GetSetRepeatEx) || !defined(REAPERAPI_MINIMAL)
   2851 REAPERAPI_DEF //==============================================
   2852 // GetSetRepeatEx
   2853 // -1 == query,0=clear,1=set,>1=toggle . returns new value
   2854 
   2855   int (*GetSetRepeatEx)(ReaProject* proj, int val);
   2856 #endif
   2857 
   2858 #if defined(REAPERAPI_WANT_GetSetTrackGroupMembership) || !defined(REAPERAPI_MINIMAL)
   2859 REAPERAPI_DEF //==============================================
   2860 // GetSetTrackGroupMembership
   2861 // Gets or modifies the group membership for a track. Returns group state prior to call (each bit represents one of the 32 group numbers). if setmask has bits set, those bits in setvalue will be applied to group. Group can be one of:
   2862 // ITEM_EDIT_LEAD
   2863 // ITEM_EDIT_FOLLOW
   2864 // VOLUME_LEAD
   2865 // VOLUME_FOLLOW
   2866 // VOLUME_VCA_LEAD
   2867 // VOLUME_VCA_FOLLOW
   2868 // PAN_LEAD
   2869 // PAN_FOLLOW
   2870 // WIDTH_LEAD
   2871 // WIDTH_FOLLOW
   2872 // MUTE_LEAD
   2873 // MUTE_FOLLOW
   2874 // SOLO_LEAD
   2875 // SOLO_FOLLOW
   2876 // RECARM_LEAD
   2877 // RECARM_FOLLOW
   2878 // POLARITY_LEAD
   2879 // POLARITY_FOLLOW
   2880 // AUTOMODE_LEAD
   2881 // AUTOMODE_FOLLOW
   2882 // VOLUME_REVERSE
   2883 // PAN_REVERSE
   2884 // WIDTH_REVERSE
   2885 // NO_LEAD_WHEN_FOLLOW
   2886 // VOLUME_VCA_FOLLOW_ISPREFX
   2887 // 
   2888 // Note: REAPER v6.11 and earlier used _MASTER and _SLAVE rather than _LEAD and _FOLLOW, which is deprecated but still supported (scripts that must support v6.11 and earlier can use the deprecated strings).
   2889 // 
   2890 
   2891   unsigned int (*GetSetTrackGroupMembership)(MediaTrack* tr, const char* groupname, unsigned int setmask, unsigned int setvalue);
   2892 #endif
   2893 
   2894 #if defined(REAPERAPI_WANT_GetSetTrackGroupMembershipHigh) || !defined(REAPERAPI_MINIMAL)
   2895 REAPERAPI_DEF //==============================================
   2896 // GetSetTrackGroupMembershipHigh
   2897 // Gets or modifies the group membership for a track. Returns group state prior to call (each bit represents one of the high 32 group numbers). if setmask has bits set, those bits in setvalue will be applied to group. Group can be one of:
   2898 // ITEM_EDIT_LEAD
   2899 // ITEM_EDIT_FOLLOW
   2900 // VOLUME_LEAD
   2901 // VOLUME_FOLLOW
   2902 // VOLUME_VCA_LEAD
   2903 // VOLUME_VCA_FOLLOW
   2904 // PAN_LEAD
   2905 // PAN_FOLLOW
   2906 // WIDTH_LEAD
   2907 // WIDTH_FOLLOW
   2908 // MUTE_LEAD
   2909 // MUTE_FOLLOW
   2910 // SOLO_LEAD
   2911 // SOLO_FOLLOW
   2912 // RECARM_LEAD
   2913 // RECARM_FOLLOW
   2914 // POLARITY_LEAD
   2915 // POLARITY_FOLLOW
   2916 // AUTOMODE_LEAD
   2917 // AUTOMODE_FOLLOW
   2918 // VOLUME_REVERSE
   2919 // PAN_REVERSE
   2920 // WIDTH_REVERSE
   2921 // NO_LEAD_WHEN_FOLLOW
   2922 // VOLUME_VCA_FOLLOW_ISPREFX
   2923 // 
   2924 // Note: REAPER v6.11 and earlier used _MASTER and _SLAVE rather than _LEAD and _FOLLOW, which is deprecated but still supported (scripts that must support v6.11 and earlier can use the deprecated strings).
   2925 // 
   2926 
   2927   unsigned int (*GetSetTrackGroupMembershipHigh)(MediaTrack* tr, const char* groupname, unsigned int setmask, unsigned int setvalue);
   2928 #endif
   2929 
   2930 #if defined(REAPERAPI_WANT_GetSetTrackMIDISupportFile) || !defined(REAPERAPI_MINIMAL)
   2931 REAPERAPI_DEF //==============================================
   2932 // GetSetTrackMIDISupportFile
   2933 // Get or set the filename for storage of various track MIDI characteristics. 0=MIDI colormap image file, 1 or 2=MIDI bank/program select file (2=set new default). If fn != NULL, a new track MIDI storage file will be set; otherwise the existing track MIDI storage file will be returned. 
   2934 
   2935   const char* (*GetSetTrackMIDISupportFile)(ReaProject* proj, MediaTrack* track, int which, const char* filename);
   2936 #endif
   2937 
   2938 #if defined(REAPERAPI_WANT_GetSetTrackSendInfo) || !defined(REAPERAPI_MINIMAL)
   2939 REAPERAPI_DEF //==============================================
   2940 // GetSetTrackSendInfo
   2941 // Get or set send/receive/hardware output attributes.
   2942 // category is <0 for receives, 0=sends, >0 for hardware outputs
   2943 //  sendidx is 0..n (to enumerate, iterate over sendidx until it returns NULL)
   2944 // parameter names:
   2945 // P_DESTTRACK : MediaTrack * : destination track, only applies for sends/recvs (read-only)
   2946 // P_SRCTRACK : MediaTrack * : source track, only applies for sends/recvs (read-only)
   2947 // P_ENV:<envchunkname : TrackEnvelope * : call with :<VOLENV, :<PANENV, etc appended (read-only)
   2948 // P_EXT:xyz : char * : extension-specific persistent data
   2949 // B_MUTE : bool *
   2950 // B_PHASE : bool * : true to flip phase
   2951 // B_MONO : bool *
   2952 // D_VOL : double * : 1.0 = +0dB etc
   2953 // D_PAN : double * : -1..+1
   2954 // D_PANLAW : double * : 1.0=+0.0db, 0.5=-6dB, -1.0 = projdef etc
   2955 // I_SENDMODE : int * : 0=post-fader, 1=pre-fx, 2=post-fx (deprecated), 3=post-fx
   2956 // I_AUTOMODE : int * : automation mode (-1=use track automode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch)
   2957 // I_SRCCHAN : int * : index,&1024=mono, -1 for none
   2958 // I_DSTCHAN : int * : index, &1024=mono, otherwise stereo pair, hwout:&512=rearoute
   2959 // I_MIDIFLAGS : int * : low 5 bits=source channel 0=all, 1-16, next 5 bits=dest channel, 0=orig, 1-16=chan
   2960 // See CreateTrackSend, RemoveTrackSend.
   2961 
   2962   void* (*GetSetTrackSendInfo)(MediaTrack* tr, int category, int sendidx, const char* parmname, void* setNewValue);
   2963 #endif
   2964 
   2965 #if defined(REAPERAPI_WANT_GetSetTrackSendInfo_String) || !defined(REAPERAPI_MINIMAL)
   2966 REAPERAPI_DEF //==============================================
   2967 // GetSetTrackSendInfo_String
   2968 // Gets/sets a send attribute string:
   2969 // P_EXT:xyz : char * : extension-specific persistent data
   2970 // 
   2971 
   2972   bool (*GetSetTrackSendInfo_String)(MediaTrack* tr, int category, int sendidx, const char* parmname, char* stringNeedBig, bool setNewValue);
   2973 #endif
   2974 
   2975 #if defined(REAPERAPI_WANT_GetSetTrackState) || !defined(REAPERAPI_MINIMAL)
   2976 REAPERAPI_DEF //==============================================
   2977 // GetSetTrackState
   2978 // deprecated -- see SetTrackStateChunk, GetTrackStateChunk
   2979 
   2980   bool (*GetSetTrackState)(MediaTrack* track, char* str, int str_sz);
   2981 #endif
   2982 
   2983 #if defined(REAPERAPI_WANT_GetSetTrackState2) || !defined(REAPERAPI_MINIMAL)
   2984 REAPERAPI_DEF //==============================================
   2985 // GetSetTrackState2
   2986 // deprecated -- see SetTrackStateChunk, GetTrackStateChunk
   2987 
   2988   bool (*GetSetTrackState2)(MediaTrack* track, char* str, int str_sz, bool isundo);
   2989 #endif
   2990 
   2991 #if defined(REAPERAPI_WANT_GetSubProjectFromSource) || !defined(REAPERAPI_MINIMAL)
   2992 REAPERAPI_DEF //==============================================
   2993 // GetSubProjectFromSource
   2994 
   2995   ReaProject* (*GetSubProjectFromSource)(PCM_source* src);
   2996 #endif
   2997 
   2998 #if defined(REAPERAPI_WANT_GetTake) || !defined(REAPERAPI_MINIMAL)
   2999 REAPERAPI_DEF //==============================================
   3000 // GetTake
   3001 // get a take from an item by take count (zero-based)
   3002 
   3003   MediaItem_Take* (*GetTake)(MediaItem* item, int takeidx);
   3004 #endif
   3005 
   3006 #if defined(REAPERAPI_WANT_GetTakeEnvelope) || !defined(REAPERAPI_MINIMAL)
   3007 REAPERAPI_DEF //==============================================
   3008 // GetTakeEnvelope
   3009 
   3010   TrackEnvelope* (*GetTakeEnvelope)(MediaItem_Take* take, int envidx);
   3011 #endif
   3012 
   3013 #if defined(REAPERAPI_WANT_GetTakeEnvelopeByName) || !defined(REAPERAPI_MINIMAL)
   3014 REAPERAPI_DEF //==============================================
   3015 // GetTakeEnvelopeByName
   3016 
   3017   TrackEnvelope* (*GetTakeEnvelopeByName)(MediaItem_Take* take, const char* envname);
   3018 #endif
   3019 
   3020 #if defined(REAPERAPI_WANT_GetTakeMarker) || !defined(REAPERAPI_MINIMAL)
   3021 REAPERAPI_DEF //==============================================
   3022 // GetTakeMarker
   3023 // Get information about a take marker. Returns the position in media item source time, or -1 if the take marker does not exist. See GetNumTakeMarkers, SetTakeMarker, DeleteTakeMarker
   3024 
   3025   double (*GetTakeMarker)(MediaItem_Take* take, int idx, char* nameOut, int nameOut_sz, int* colorOutOptional);
   3026 #endif
   3027 
   3028 #if defined(REAPERAPI_WANT_GetTakeName) || !defined(REAPERAPI_MINIMAL)
   3029 REAPERAPI_DEF //==============================================
   3030 // GetTakeName
   3031 // returns NULL if the take is not valid
   3032 
   3033   const char* (*GetTakeName)(MediaItem_Take* take);
   3034 #endif
   3035 
   3036 #if defined(REAPERAPI_WANT_GetTakeNumStretchMarkers) || !defined(REAPERAPI_MINIMAL)
   3037 REAPERAPI_DEF //==============================================
   3038 // GetTakeNumStretchMarkers
   3039 // Returns number of stretch markers in take
   3040 
   3041   int (*GetTakeNumStretchMarkers)(MediaItem_Take* take);
   3042 #endif
   3043 
   3044 #if defined(REAPERAPI_WANT_GetTakeStretchMarker) || !defined(REAPERAPI_MINIMAL)
   3045 REAPERAPI_DEF //==============================================
   3046 // GetTakeStretchMarker
   3047 // Gets information on a stretch marker, idx is 0..n. Returns -1 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, the following 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.
   3048 
   3049   int (*GetTakeStretchMarker)(MediaItem_Take* take, int idx, double* posOut, double* srcposOutOptional);
   3050 #endif
   3051 
   3052 #if defined(REAPERAPI_WANT_GetTakeStretchMarkerSlope) || !defined(REAPERAPI_MINIMAL)
   3053 REAPERAPI_DEF //==============================================
   3054 // GetTakeStretchMarkerSlope
   3055 // See SetTakeStretchMarkerSlope
   3056 
   3057   double (*GetTakeStretchMarkerSlope)(MediaItem_Take* take, int idx);
   3058 #endif
   3059 
   3060 #if defined(REAPERAPI_WANT_GetTCPFXParm) || !defined(REAPERAPI_MINIMAL)
   3061 REAPERAPI_DEF //==============================================
   3062 // GetTCPFXParm
   3063 // Get information about a specific FX parameter knob (see CountTCPFXParms).
   3064 
   3065   bool (*GetTCPFXParm)(ReaProject* project, MediaTrack* track, int index, int* fxindexOut, int* parmidxOut);
   3066 #endif
   3067 
   3068 #if defined(REAPERAPI_WANT_GetTempoMatchPlayRate) || !defined(REAPERAPI_MINIMAL)
   3069 REAPERAPI_DEF //==============================================
   3070 // GetTempoMatchPlayRate
   3071 // 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
   3072 
   3073   bool (*GetTempoMatchPlayRate)(PCM_source* source, double srcscale, double position, double mult, double* rateOut, double* targetlenOut);
   3074 #endif
   3075 
   3076 #if defined(REAPERAPI_WANT_GetTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   3077 REAPERAPI_DEF //==============================================
   3078 // GetTempoTimeSigMarker
   3079 // Get information about a tempo/time signature marker. See CountTempoTimeSigMarkers, SetTempoTimeSigMarker, AddTempoTimeSigMarker.
   3080 
   3081   bool (*GetTempoTimeSigMarker)(ReaProject* proj, int ptidx, double* timeposOut, int* measureposOut, double* beatposOut, double* bpmOut, int* timesig_numOut, int* timesig_denomOut, bool* lineartempoOut);
   3082 #endif
   3083 
   3084 #if defined(REAPERAPI_WANT_GetThemeColor) || !defined(REAPERAPI_MINIMAL)
   3085 REAPERAPI_DEF //==============================================
   3086 // GetThemeColor
   3087 // Returns the theme color specified, or -1 on failure. If the low bit of flags is set, the color as originally specified by the theme (before any transformations) is returned, otherwise the current (possibly transformed and modified) color is returned. See SetThemeColor for a list of valid ini_key.
   3088 
   3089   int (*GetThemeColor)(const char* ini_key, int flagsOptional);
   3090 #endif
   3091 
   3092 #if defined(REAPERAPI_WANT_GetThingFromPoint) || !defined(REAPERAPI_MINIMAL)
   3093 REAPERAPI_DEF //==============================================
   3094 // GetThingFromPoint
   3095 // Hit tests a point in screen coordinates. Updates infoOut with information such as "arrange", "fx_chain", "fx_0" (first FX in chain, floating). If a track panel is hit, string will begin with "tcp" or "mcp" or "tcp.mute" etc (future versions may append additional information). May return NULL with valid info string to indicate non-track thing.
   3096 
   3097   MediaTrack* (*GetThingFromPoint)(int screen_x, int screen_y, char* infoOut, int infoOut_sz);
   3098 #endif
   3099 
   3100 #if defined(REAPERAPI_WANT_GetToggleCommandState) || !defined(REAPERAPI_MINIMAL)
   3101 REAPERAPI_DEF //==============================================
   3102 // GetToggleCommandState
   3103 // See GetToggleCommandStateEx.
   3104 
   3105   int (*GetToggleCommandState)(int command_id);
   3106 #endif
   3107 
   3108 #if defined(REAPERAPI_WANT_GetToggleCommandState2) || !defined(REAPERAPI_MINIMAL)
   3109 REAPERAPI_DEF //==============================================
   3110 // GetToggleCommandState2
   3111 // See GetToggleCommandStateEx.
   3112 
   3113   int (*GetToggleCommandState2)(KbdSectionInfo* section, int command_id);
   3114 #endif
   3115 
   3116 #if defined(REAPERAPI_WANT_GetToggleCommandStateEx) || !defined(REAPERAPI_MINIMAL)
   3117 REAPERAPI_DEF //==============================================
   3118 // GetToggleCommandStateEx
   3119 // 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.
   3120 
   3121   int (*GetToggleCommandStateEx)(int section_id, int command_id);
   3122 #endif
   3123 
   3124 #if defined(REAPERAPI_WANT_GetToggleCommandStateThroughHooks) || !defined(REAPERAPI_MINIMAL)
   3125 REAPERAPI_DEF //==============================================
   3126 // GetToggleCommandStateThroughHooks
   3127 // Returns the state of an action via extension plugins' hooks.
   3128 
   3129   int (*GetToggleCommandStateThroughHooks)(KbdSectionInfo* section, int command_id);
   3130 #endif
   3131 
   3132 #if defined(REAPERAPI_WANT_GetTooltipWindow) || !defined(REAPERAPI_MINIMAL)
   3133 REAPERAPI_DEF //==============================================
   3134 // GetTooltipWindow
   3135 // gets a tooltip window,in case you want to ask it for font information. Can return NULL.
   3136 
   3137   HWND (*GetTooltipWindow)();
   3138 #endif
   3139 
   3140 #if defined(REAPERAPI_WANT_GetTrack) || !defined(REAPERAPI_MINIMAL)
   3141 REAPERAPI_DEF //==============================================
   3142 // GetTrack
   3143 // get a track from a project by track count (zero-based) (proj=0 for active project)
   3144 
   3145   MediaTrack* (*GetTrack)(ReaProject* proj, int trackidx);
   3146 #endif
   3147 
   3148 #if defined(REAPERAPI_WANT_GetTrackAutomationMode) || !defined(REAPERAPI_MINIMAL)
   3149 REAPERAPI_DEF //==============================================
   3150 // GetTrackAutomationMode
   3151 // return the track mode, regardless of global override
   3152 
   3153   int (*GetTrackAutomationMode)(MediaTrack* tr);
   3154 #endif
   3155 
   3156 #if defined(REAPERAPI_WANT_GetTrackColor) || !defined(REAPERAPI_MINIMAL)
   3157 REAPERAPI_DEF //==============================================
   3158 // GetTrackColor
   3159 // Returns the track custom color as OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). Black is returned as 0x1000000, no color setting is returned as 0.
   3160 
   3161   int (*GetTrackColor)(MediaTrack* track);
   3162 #endif
   3163 
   3164 #if defined(REAPERAPI_WANT_GetTrackDepth) || !defined(REAPERAPI_MINIMAL)
   3165 REAPERAPI_DEF //==============================================
   3166 // GetTrackDepth
   3167 
   3168   int (*GetTrackDepth)(MediaTrack* track);
   3169 #endif
   3170 
   3171 #if defined(REAPERAPI_WANT_GetTrackEnvelope) || !defined(REAPERAPI_MINIMAL)
   3172 REAPERAPI_DEF //==============================================
   3173 // GetTrackEnvelope
   3174 
   3175   TrackEnvelope* (*GetTrackEnvelope)(MediaTrack* track, int envidx);
   3176 #endif
   3177 
   3178 #if defined(REAPERAPI_WANT_GetTrackEnvelopeByChunkName) || !defined(REAPERAPI_MINIMAL)
   3179 REAPERAPI_DEF //==============================================
   3180 // GetTrackEnvelopeByChunkName
   3181 // Gets a built-in track envelope by configuration chunk name, like "<VOLENV", or GUID string, like "{B577250D-146F-B544-9B34-F24FBE488F1F}".
   3182 // 
   3183 
   3184   TrackEnvelope* (*GetTrackEnvelopeByChunkName)(MediaTrack* tr, const char* cfgchunkname_or_guid);
   3185 #endif
   3186 
   3187 #if defined(REAPERAPI_WANT_GetTrackEnvelopeByName) || !defined(REAPERAPI_MINIMAL)
   3188 REAPERAPI_DEF //==============================================
   3189 // GetTrackEnvelopeByName
   3190 
   3191   TrackEnvelope* (*GetTrackEnvelopeByName)(MediaTrack* track, const char* envname);
   3192 #endif
   3193 
   3194 #if defined(REAPERAPI_WANT_GetTrackFromPoint) || !defined(REAPERAPI_MINIMAL)
   3195 REAPERAPI_DEF //==============================================
   3196 // GetTrackFromPoint
   3197 // Returns the track from the screen coordinates specified. If the screen coordinates refer to a window associated to the track (such as FX), the track will be returned. infoOutOptional will be set to 1 if it is likely an envelope, 2 if it is likely a track FX. See GetThingFromPoint.
   3198 
   3199   MediaTrack* (*GetTrackFromPoint)(int screen_x, int screen_y, int* infoOutOptional);
   3200 #endif
   3201 
   3202 #if defined(REAPERAPI_WANT_GetTrackGUID) || !defined(REAPERAPI_MINIMAL)
   3203 REAPERAPI_DEF //==============================================
   3204 // GetTrackGUID
   3205 
   3206   GUID* (*GetTrackGUID)(MediaTrack* tr);
   3207 #endif
   3208 
   3209 #if defined(REAPERAPI_WANT_GetTrackInfo) || !defined(REAPERAPI_MINIMAL)
   3210 REAPERAPI_DEF //==============================================
   3211 // GetTrackInfo
   3212 // gets track info (returns name).
   3213 // track index, -1=master, 0..n, or cast a MediaTrack* to int
   3214 // if flags is non-NULL, will be set to:
   3215 // &1=folder
   3216 // &2=selected
   3217 // &4=has fx enabled
   3218 // &8=muted
   3219 // &16=soloed
   3220 // &32=SIP'd (with &16)
   3221 // &64=rec armed
   3222 // &128=rec monitoring on
   3223 // &256=rec monitoring auto
   3224 // &512=hide from TCP
   3225 // &1024=hide from MCP
   3226 
   3227   const char* (*GetTrackInfo)(INT_PTR track, int* flags);
   3228 #endif
   3229 
   3230 #if defined(REAPERAPI_WANT_GetTrackMediaItem) || !defined(REAPERAPI_MINIMAL)
   3231 REAPERAPI_DEF //==============================================
   3232 // GetTrackMediaItem
   3233 
   3234   MediaItem* (*GetTrackMediaItem)(MediaTrack* tr, int itemidx);
   3235 #endif
   3236 
   3237 #if defined(REAPERAPI_WANT_GetTrackMIDILyrics) || !defined(REAPERAPI_MINIMAL)
   3238 REAPERAPI_DEF //==============================================
   3239 // GetTrackMIDILyrics
   3240 // Get all MIDI lyrics on the track. Lyrics will be returned as one string with tabs between each word. flag&1: double tabs at the end of each measure and triple tabs when skipping measures, flag&2: each lyric is preceded by its beat position in the project (example with flag=2: "1.1.2\tLyric for measure 1 beat 2\t2.1.1\tLyric for measure 2 beat 1	"). See SetTrackMIDILyrics
   3241 
   3242   bool (*GetTrackMIDILyrics)(MediaTrack* track, int flag, char* bufOutWantNeedBig, int* bufOutWantNeedBig_sz);
   3243 #endif
   3244 
   3245 #if defined(REAPERAPI_WANT_GetTrackMIDINoteName) || !defined(REAPERAPI_MINIMAL)
   3246 REAPERAPI_DEF //==============================================
   3247 // GetTrackMIDINoteName
   3248 // see GetTrackMIDINoteNameEx
   3249 
   3250   const char* (*GetTrackMIDINoteName)(int track, int pitch, int chan);
   3251 #endif
   3252 
   3253 #if defined(REAPERAPI_WANT_GetTrackMIDINoteNameEx) || !defined(REAPERAPI_MINIMAL)
   3254 REAPERAPI_DEF //==============================================
   3255 // GetTrackMIDINoteNameEx
   3256 // Get note/CC name. pitch 128 for CC0 name, 129 for CC1 name, etc. See SetTrackMIDINoteNameEx
   3257 
   3258   const char* (*GetTrackMIDINoteNameEx)(ReaProject* proj, MediaTrack* track, int pitch, int chan);
   3259 #endif
   3260 
   3261 #if defined(REAPERAPI_WANT_GetTrackMIDINoteRange) || !defined(REAPERAPI_MINIMAL)
   3262 REAPERAPI_DEF //==============================================
   3263 // GetTrackMIDINoteRange
   3264 
   3265   void (*GetTrackMIDINoteRange)(ReaProject* proj, MediaTrack* track, int* note_loOut, int* note_hiOut);
   3266 #endif
   3267 
   3268 #if defined(REAPERAPI_WANT_GetTrackName) || !defined(REAPERAPI_MINIMAL)
   3269 REAPERAPI_DEF //==============================================
   3270 // GetTrackName
   3271 // Returns "MASTER" for master track, "Track N" if track has no name.
   3272 
   3273   bool (*GetTrackName)(MediaTrack* track, char* bufOut, int bufOut_sz);
   3274 #endif
   3275 
   3276 #if defined(REAPERAPI_WANT_GetTrackNumMediaItems) || !defined(REAPERAPI_MINIMAL)
   3277 REAPERAPI_DEF //==============================================
   3278 // GetTrackNumMediaItems
   3279 
   3280   int (*GetTrackNumMediaItems)(MediaTrack* tr);
   3281 #endif
   3282 
   3283 #if defined(REAPERAPI_WANT_GetTrackNumSends) || !defined(REAPERAPI_MINIMAL)
   3284 REAPERAPI_DEF //==============================================
   3285 // GetTrackNumSends
   3286 // returns number of sends/receives/hardware outputs - category is <0 for receives, 0=sends, >0 for hardware outputs
   3287 
   3288   int (*GetTrackNumSends)(MediaTrack* tr, int category);
   3289 #endif
   3290 
   3291 #if defined(REAPERAPI_WANT_GetTrackReceiveName) || !defined(REAPERAPI_MINIMAL)
   3292 REAPERAPI_DEF //==============================================
   3293 // GetTrackReceiveName
   3294 // See GetTrackSendName.
   3295 
   3296   bool (*GetTrackReceiveName)(MediaTrack* track, int recv_index, char* bufOut, int bufOut_sz);
   3297 #endif
   3298 
   3299 #if defined(REAPERAPI_WANT_GetTrackReceiveUIMute) || !defined(REAPERAPI_MINIMAL)
   3300 REAPERAPI_DEF //==============================================
   3301 // GetTrackReceiveUIMute
   3302 // See GetTrackSendUIMute.
   3303 
   3304   bool (*GetTrackReceiveUIMute)(MediaTrack* track, int recv_index, bool* muteOut);
   3305 #endif
   3306 
   3307 #if defined(REAPERAPI_WANT_GetTrackReceiveUIVolPan) || !defined(REAPERAPI_MINIMAL)
   3308 REAPERAPI_DEF //==============================================
   3309 // GetTrackReceiveUIVolPan
   3310 // See GetTrackSendUIVolPan.
   3311 
   3312   bool (*GetTrackReceiveUIVolPan)(MediaTrack* track, int recv_index, double* volumeOut, double* panOut);
   3313 #endif
   3314 
   3315 #if defined(REAPERAPI_WANT_GetTrackSendInfo_Value) || !defined(REAPERAPI_MINIMAL)
   3316 REAPERAPI_DEF //==============================================
   3317 // GetTrackSendInfo_Value
   3318 // Get send/receive/hardware output numerical-value attributes.
   3319 // category is <0 for receives, 0=sends, >0 for hardware outputs
   3320 // parameter names:
   3321 // B_MUTE : bool *
   3322 // B_PHASE : bool * : true to flip phase
   3323 // B_MONO : bool *
   3324 // D_VOL : double * : 1.0 = +0dB etc
   3325 // D_PAN : double * : -1..+1
   3326 // D_PANLAW : double * : 1.0=+0.0db, 0.5=-6dB, -1.0 = projdef etc
   3327 // I_SENDMODE : int * : 0=post-fader, 1=pre-fx, 2=post-fx (deprecated), 3=post-fx
   3328 // I_AUTOMODE : int * : automation mode (-1=use track automode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch)
   3329 // I_SRCCHAN : int * : index,&1024=mono, -1 for none
   3330 // I_DSTCHAN : int * : index, &1024=mono, otherwise stereo pair, hwout:&512=rearoute
   3331 // I_MIDIFLAGS : int * : low 5 bits=source channel 0=all, 1-16, next 5 bits=dest channel, 0=orig, 1-16=chan
   3332 // P_DESTTRACK : MediaTrack * : destination track, only applies for sends/recvs (read-only)
   3333 // P_SRCTRACK : MediaTrack * : source track, only applies for sends/recvs (read-only)
   3334 // P_ENV:<envchunkname : TrackEnvelope * : call with :<VOLENV, :<PANENV, etc appended (read-only)
   3335 // See CreateTrackSend, RemoveTrackSend, GetTrackNumSends.
   3336 
   3337   double (*GetTrackSendInfo_Value)(MediaTrack* tr, int category, int sendidx, const char* parmname);
   3338 #endif
   3339 
   3340 #if defined(REAPERAPI_WANT_GetTrackSendName) || !defined(REAPERAPI_MINIMAL)
   3341 REAPERAPI_DEF //==============================================
   3342 // GetTrackSendName
   3343 // send_idx>=0 for hw ouputs, >=nb_of_hw_ouputs for sends. See GetTrackReceiveName.
   3344 
   3345   bool (*GetTrackSendName)(MediaTrack* track, int send_index, char* bufOut, int bufOut_sz);
   3346 #endif
   3347 
   3348 #if defined(REAPERAPI_WANT_GetTrackSendUIMute) || !defined(REAPERAPI_MINIMAL)
   3349 REAPERAPI_DEF //==============================================
   3350 // GetTrackSendUIMute
   3351 // send_idx>=0 for hw ouputs, >=nb_of_hw_ouputs for sends. See GetTrackReceiveUIMute.
   3352 
   3353   bool (*GetTrackSendUIMute)(MediaTrack* track, int send_index, bool* muteOut);
   3354 #endif
   3355 
   3356 #if defined(REAPERAPI_WANT_GetTrackSendUIVolPan) || !defined(REAPERAPI_MINIMAL)
   3357 REAPERAPI_DEF //==============================================
   3358 // GetTrackSendUIVolPan
   3359 // send_idx>=0 for hw ouputs, >=nb_of_hw_ouputs for sends. See GetTrackReceiveUIVolPan.
   3360 
   3361   bool (*GetTrackSendUIVolPan)(MediaTrack* track, int send_index, double* volumeOut, double* panOut);
   3362 #endif
   3363 
   3364 #if defined(REAPERAPI_WANT_GetTrackState) || !defined(REAPERAPI_MINIMAL)
   3365 REAPERAPI_DEF //==============================================
   3366 // GetTrackState
   3367 // Gets track state, returns track name.
   3368 // flags will be set to:
   3369 // &1=folder
   3370 // &2=selected
   3371 // &4=has fx enabled
   3372 // &8=muted
   3373 // &16=soloed
   3374 // &32=SIP'd (with &16)
   3375 // &64=rec armed
   3376 // &128=rec monitoring on
   3377 // &256=rec monitoring auto
   3378 // &512=hide from TCP
   3379 // &1024=hide from MCP
   3380 
   3381   const char* (*GetTrackState)(MediaTrack* track, int* flagsOut);
   3382 #endif
   3383 
   3384 #if defined(REAPERAPI_WANT_GetTrackStateChunk) || !defined(REAPERAPI_MINIMAL)
   3385 REAPERAPI_DEF //==============================================
   3386 // GetTrackStateChunk
   3387 // Gets the RPPXML state of a track, returns true if successful. Undo flag is a performance/caching hint.
   3388 
   3389   bool (*GetTrackStateChunk)(MediaTrack* track, char* strNeedBig, int strNeedBig_sz, bool isundoOptional);
   3390 #endif
   3391 
   3392 #if defined(REAPERAPI_WANT_GetTrackUIMute) || !defined(REAPERAPI_MINIMAL)
   3393 REAPERAPI_DEF //==============================================
   3394 // GetTrackUIMute
   3395 
   3396   bool (*GetTrackUIMute)(MediaTrack* track, bool* muteOut);
   3397 #endif
   3398 
   3399 #if defined(REAPERAPI_WANT_GetTrackUIPan) || !defined(REAPERAPI_MINIMAL)
   3400 REAPERAPI_DEF //==============================================
   3401 // GetTrackUIPan
   3402 
   3403   bool (*GetTrackUIPan)(MediaTrack* track, double* pan1Out, double* pan2Out, int* panmodeOut);
   3404 #endif
   3405 
   3406 #if defined(REAPERAPI_WANT_GetTrackUIVolPan) || !defined(REAPERAPI_MINIMAL)
   3407 REAPERAPI_DEF //==============================================
   3408 // GetTrackUIVolPan
   3409 
   3410   bool (*GetTrackUIVolPan)(MediaTrack* track, double* volumeOut, double* panOut);
   3411 #endif
   3412 
   3413 #if defined(REAPERAPI_WANT_GetUnderrunTime) || !defined(REAPERAPI_MINIMAL)
   3414 REAPERAPI_DEF //==============================================
   3415 // GetUnderrunTime
   3416 // retrieves the last timestamps of audio xrun (yellow-flash, if available), media xrun (red-flash), and the current time stamp (all milliseconds)
   3417 
   3418   void (*GetUnderrunTime)(unsigned int* audio_xrunOut, unsigned int* media_xrunOut, unsigned int* curtimeOut);
   3419 #endif
   3420 
   3421 #if defined(REAPERAPI_WANT_GetUserFileNameForRead) || !defined(REAPERAPI_MINIMAL)
   3422 REAPERAPI_DEF //==============================================
   3423 // GetUserFileNameForRead
   3424 // returns true if the user selected a valid file, false if the user canceled the dialog
   3425 
   3426   bool (*GetUserFileNameForRead)(char* filenameNeed4096, const char* title, const char* defext);
   3427 #endif
   3428 
   3429 #if defined(REAPERAPI_WANT_GetUserInputs) || !defined(REAPERAPI_MINIMAL)
   3430 REAPERAPI_DEF //==============================================
   3431 // GetUserInputs
   3432 // Get values from the user.
   3433 // If a caption begins with *, for example "*password", the edit field will not display the input text.
   3434 // Maximum fields is 16. Values are returned as a comma-separated string. Returns false if the user canceled the dialog. You can supply special extra information via additional caption fields: extrawidth=XXX to increase text field width, separator=X to use a different separator for returned fields.
   3435 
   3436   bool (*GetUserInputs)(const char* title, int num_inputs, const char* captions_csv, char* retvals_csv, int retvals_csv_sz);
   3437 #endif
   3438 
   3439 #if defined(REAPERAPI_WANT_GoToMarker) || !defined(REAPERAPI_MINIMAL)
   3440 REAPERAPI_DEF //==============================================
   3441 // GoToMarker
   3442 // 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.
   3443 
   3444   void (*GoToMarker)(ReaProject* proj, int marker_index, bool use_timeline_order);
   3445 #endif
   3446 
   3447 #if defined(REAPERAPI_WANT_GoToRegion) || !defined(REAPERAPI_MINIMAL)
   3448 REAPERAPI_DEF //==============================================
   3449 // GoToRegion
   3450 // 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.
   3451 
   3452   void (*GoToRegion)(ReaProject* proj, int region_index, bool use_timeline_order);
   3453 #endif
   3454 
   3455 #if defined(REAPERAPI_WANT_GR_SelectColor) || !defined(REAPERAPI_MINIMAL)
   3456 REAPERAPI_DEF //==============================================
   3457 // GR_SelectColor
   3458 // Runs the system color chooser dialog.  Returns 0 if the user cancels the dialog.
   3459 
   3460   int (*GR_SelectColor)(HWND hwnd, int* colorOut);
   3461 #endif
   3462 
   3463 #if defined(REAPERAPI_WANT_GSC_mainwnd) || !defined(REAPERAPI_MINIMAL)
   3464 REAPERAPI_DEF //==============================================
   3465 // GSC_mainwnd
   3466 // this is just like win32 GetSysColor() but can have overrides.
   3467 
   3468   int (*GSC_mainwnd)(int t);
   3469 #endif
   3470 
   3471 #if defined(REAPERAPI_WANT_guidToString) || !defined(REAPERAPI_MINIMAL)
   3472 REAPERAPI_DEF //==============================================
   3473 // guidToString
   3474 // dest should be at least 64 chars long to be safe
   3475 
   3476   void (*guidToString)(const GUID* g, char* destNeed64);
   3477 #endif
   3478 
   3479 #if defined(REAPERAPI_WANT_HasExtState) || !defined(REAPERAPI_MINIMAL)
   3480 REAPERAPI_DEF //==============================================
   3481 // HasExtState
   3482 // Returns true if there exists an extended state value for a specific section and key. See SetExtState, GetExtState, DeleteExtState.
   3483 
   3484   bool (*HasExtState)(const char* section, const char* key);
   3485 #endif
   3486 
   3487 #if defined(REAPERAPI_WANT_HasTrackMIDIPrograms) || !defined(REAPERAPI_MINIMAL)
   3488 REAPERAPI_DEF //==============================================
   3489 // HasTrackMIDIPrograms
   3490 // returns name of track plugin that is supplying MIDI programs,or NULL if there is none
   3491 
   3492   const char* (*HasTrackMIDIPrograms)(int track);
   3493 #endif
   3494 
   3495 #if defined(REAPERAPI_WANT_HasTrackMIDIProgramsEx) || !defined(REAPERAPI_MINIMAL)
   3496 REAPERAPI_DEF //==============================================
   3497 // HasTrackMIDIProgramsEx
   3498 // returns name of track plugin that is supplying MIDI programs,or NULL if there is none
   3499 
   3500   const char* (*HasTrackMIDIProgramsEx)(ReaProject* proj, MediaTrack* track);
   3501 #endif
   3502 
   3503 #if defined(REAPERAPI_WANT_Help_Set) || !defined(REAPERAPI_MINIMAL)
   3504 REAPERAPI_DEF //==============================================
   3505 // Help_Set
   3506 
   3507   void (*Help_Set)(const char* helpstring, bool is_temporary_help);
   3508 #endif
   3509 
   3510 #if defined(REAPERAPI_WANT_HiresPeaksFromSource) || !defined(REAPERAPI_MINIMAL)
   3511 REAPERAPI_DEF //==============================================
   3512 // HiresPeaksFromSource
   3513 
   3514   void (*HiresPeaksFromSource)(PCM_source* src, PCM_source_peaktransfer_t* block);
   3515 #endif
   3516 
   3517 #if defined(REAPERAPI_WANT_image_resolve_fn) || !defined(REAPERAPI_MINIMAL)
   3518 REAPERAPI_DEF //==============================================
   3519 // image_resolve_fn
   3520 
   3521   void (*image_resolve_fn)(const char* in, char* out, int out_sz);
   3522 #endif
   3523 
   3524 #if defined(REAPERAPI_WANT_InsertAutomationItem) || !defined(REAPERAPI_MINIMAL)
   3525 REAPERAPI_DEF //==============================================
   3526 // InsertAutomationItem
   3527 // Insert a new automation item. pool_id < 0 collects existing envelope points into the automation item; if pool_id is >= 0 the automation item will be a new instance of that pool (which will be created as an empty instance if it does not exist). Returns the index of the item, suitable for passing to other automation item API functions. See GetSetAutomationItemInfo.
   3528 
   3529   int (*InsertAutomationItem)(TrackEnvelope* env, int pool_id, double position, double length);
   3530 #endif
   3531 
   3532 #if defined(REAPERAPI_WANT_InsertEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   3533 REAPERAPI_DEF //==============================================
   3534 // InsertEnvelopePoint
   3535 // Insert an envelope point. If setting multiple points at once, set noSort=true, and call Envelope_SortPoints when done. See InsertEnvelopePointEx.
   3536 
   3537   bool (*InsertEnvelopePoint)(TrackEnvelope* envelope, double time, double value, int shape, double tension, bool selected, bool* noSortInOptional);
   3538 #endif
   3539 
   3540 #if defined(REAPERAPI_WANT_InsertEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   3541 REAPERAPI_DEF //==============================================
   3542 // InsertEnvelopePointEx
   3543 // Insert an envelope point. If setting multiple points at once, set noSort=true, and call Envelope_SortPoints when done.
   3544 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
   3545 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
   3546 // even if the automation item is trimmed so that not all points are visible.
   3547 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
   3548 // See CountEnvelopePointsEx, GetEnvelopePointEx, SetEnvelopePointEx, DeleteEnvelopePointEx.
   3549 
   3550   bool (*InsertEnvelopePointEx)(TrackEnvelope* envelope, int autoitem_idx, double time, double value, int shape, double tension, bool selected, bool* noSortInOptional);
   3551 #endif
   3552 
   3553 #if defined(REAPERAPI_WANT_InsertMedia) || !defined(REAPERAPI_MINIMAL)
   3554 REAPERAPI_DEF //==============================================
   3555 // InsertMedia
   3556 // 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, &512=use high word as absolute track index if mode&3==0, &1024=insert into reasamplomatic on a new track, &2048=insert into open reasamplomatic instance, &4096=move to source preferred position (BWF start offset), &8192=reverse
   3557 
   3558   int (*InsertMedia)(const char* file, int mode);
   3559 #endif
   3560 
   3561 #if defined(REAPERAPI_WANT_InsertMediaSection) || !defined(REAPERAPI_MINIMAL)
   3562 REAPERAPI_DEF //==============================================
   3563 // InsertMediaSection
   3564 // See InsertMedia.
   3565 
   3566   int (*InsertMediaSection)(const char* file, int mode, double startpct, double endpct, double pitchshift);
   3567 #endif
   3568 
   3569 #if defined(REAPERAPI_WANT_InsertTrackAtIndex) || !defined(REAPERAPI_MINIMAL)
   3570 REAPERAPI_DEF //==============================================
   3571 // InsertTrackAtIndex
   3572 // 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
   3573 
   3574   void (*InsertTrackAtIndex)(int idx, bool wantDefaults);
   3575 #endif
   3576 
   3577 #if defined(REAPERAPI_WANT_IsInRealTimeAudio) || !defined(REAPERAPI_MINIMAL)
   3578 REAPERAPI_DEF //==============================================
   3579 // IsInRealTimeAudio
   3580 // are we in a realtime audio thread (between OnAudioBuffer calls,not in some worker/anticipative FX thread)? threadsafe
   3581 
   3582   int (*IsInRealTimeAudio)();
   3583 #endif
   3584 
   3585 #if defined(REAPERAPI_WANT_IsItemTakeActiveForPlayback) || !defined(REAPERAPI_MINIMAL)
   3586 REAPERAPI_DEF //==============================================
   3587 // IsItemTakeActiveForPlayback
   3588 // get whether a take will be played (active take, unmuted, etc)
   3589 
   3590   bool (*IsItemTakeActiveForPlayback)(MediaItem* item, MediaItem_Take* take);
   3591 #endif
   3592 
   3593 #if defined(REAPERAPI_WANT_IsMediaExtension) || !defined(REAPERAPI_MINIMAL)
   3594 REAPERAPI_DEF //==============================================
   3595 // IsMediaExtension
   3596 // Tests a file extension (i.e. "wav" or "mid") to see if it's a media extension.
   3597 // If wantOthers is set, then "RPP", "TXT" and other project-type formats will also pass.
   3598 
   3599   bool (*IsMediaExtension)(const char* ext, bool wantOthers);
   3600 #endif
   3601 
   3602 #if defined(REAPERAPI_WANT_IsMediaItemSelected) || !defined(REAPERAPI_MINIMAL)
   3603 REAPERAPI_DEF //==============================================
   3604 // IsMediaItemSelected
   3605 
   3606   bool (*IsMediaItemSelected)(MediaItem* item);
   3607 #endif
   3608 
   3609 #if defined(REAPERAPI_WANT_IsProjectDirty) || !defined(REAPERAPI_MINIMAL)
   3610 REAPERAPI_DEF //==============================================
   3611 // IsProjectDirty
   3612 // Is the project dirty (needing save)? Always returns 0 if 'undo/prompt to save' is disabled in preferences.
   3613 
   3614   int (*IsProjectDirty)(ReaProject* proj);
   3615 #endif
   3616 
   3617 #if defined(REAPERAPI_WANT_IsREAPER) || !defined(REAPERAPI_MINIMAL)
   3618 REAPERAPI_DEF //==============================================
   3619 // IsREAPER
   3620 // Returns true if dealing with REAPER, returns false for ReaMote, etc
   3621 
   3622   bool (*IsREAPER)();
   3623 #endif
   3624 
   3625 #if defined(REAPERAPI_WANT_IsTrackSelected) || !defined(REAPERAPI_MINIMAL)
   3626 REAPERAPI_DEF //==============================================
   3627 // IsTrackSelected
   3628 
   3629   bool (*IsTrackSelected)(MediaTrack* track);
   3630 #endif
   3631 
   3632 #if defined(REAPERAPI_WANT_IsTrackVisible) || !defined(REAPERAPI_MINIMAL)
   3633 REAPERAPI_DEF //==============================================
   3634 // IsTrackVisible
   3635 // If mixer==true, returns true if the track is visible in the mixer.  If mixer==false, returns true if the track is visible in the track control panel.
   3636 
   3637   bool (*IsTrackVisible)(MediaTrack* track, bool mixer);
   3638 #endif
   3639 
   3640 #if defined(REAPERAPI_WANT_joystick_create) || !defined(REAPERAPI_MINIMAL)
   3641 REAPERAPI_DEF //==============================================
   3642 // joystick_create
   3643 // creates a joystick device
   3644 
   3645   joystick_device* (*joystick_create)(const GUID* guid);
   3646 #endif
   3647 
   3648 #if defined(REAPERAPI_WANT_joystick_destroy) || !defined(REAPERAPI_MINIMAL)
   3649 REAPERAPI_DEF //==============================================
   3650 // joystick_destroy
   3651 // destroys a joystick device
   3652 
   3653   void (*joystick_destroy)(joystick_device* device);
   3654 #endif
   3655 
   3656 #if defined(REAPERAPI_WANT_joystick_enum) || !defined(REAPERAPI_MINIMAL)
   3657 REAPERAPI_DEF //==============================================
   3658 // joystick_enum
   3659 // enumerates installed devices, returns GUID as a string
   3660 
   3661   const char* (*joystick_enum)(int index, const char** namestrOutOptional);
   3662 #endif
   3663 
   3664 #if defined(REAPERAPI_WANT_joystick_getaxis) || !defined(REAPERAPI_MINIMAL)
   3665 REAPERAPI_DEF //==============================================
   3666 // joystick_getaxis
   3667 // returns axis value (-1..1)
   3668 
   3669   double (*joystick_getaxis)(joystick_device* dev, int axis);
   3670 #endif
   3671 
   3672 #if defined(REAPERAPI_WANT_joystick_getbuttonmask) || !defined(REAPERAPI_MINIMAL)
   3673 REAPERAPI_DEF //==============================================
   3674 // joystick_getbuttonmask
   3675 // returns button pressed mask, 1=first button, 2=second...
   3676 
   3677   unsigned int (*joystick_getbuttonmask)(joystick_device* dev);
   3678 #endif
   3679 
   3680 #if defined(REAPERAPI_WANT_joystick_getinfo) || !defined(REAPERAPI_MINIMAL)
   3681 REAPERAPI_DEF //==============================================
   3682 // joystick_getinfo
   3683 // returns button count
   3684 
   3685   int (*joystick_getinfo)(joystick_device* dev, int* axesOutOptional, int* povsOutOptional);
   3686 #endif
   3687 
   3688 #if defined(REAPERAPI_WANT_joystick_getpov) || !defined(REAPERAPI_MINIMAL)
   3689 REAPERAPI_DEF //==============================================
   3690 // joystick_getpov
   3691 // returns POV value (usually 0..655.35, or 655.35 on error)
   3692 
   3693   double (*joystick_getpov)(joystick_device* dev, int pov);
   3694 #endif
   3695 
   3696 #if defined(REAPERAPI_WANT_joystick_update) || !defined(REAPERAPI_MINIMAL)
   3697 REAPERAPI_DEF //==============================================
   3698 // joystick_update
   3699 // Updates joystick state from hardware, returns true if successful (joystick_get* will not be valid until joystick_update() is called successfully)
   3700 
   3701   bool (*joystick_update)(joystick_device* dev);
   3702 #endif
   3703 
   3704 #if defined(REAPERAPI_WANT_kbd_enumerateActions) || !defined(REAPERAPI_MINIMAL)
   3705 REAPERAPI_DEF //==============================================
   3706 // kbd_enumerateActions
   3707 
   3708   int (*kbd_enumerateActions)(KbdSectionInfo* section, int idx, const char** nameOut);
   3709 #endif
   3710 
   3711 #if defined(REAPERAPI_WANT_kbd_formatKeyName) || !defined(REAPERAPI_MINIMAL)
   3712 REAPERAPI_DEF //==============================================
   3713 // kbd_formatKeyName
   3714 
   3715   void (*kbd_formatKeyName)(ACCEL* ac, char* s);
   3716 #endif
   3717 
   3718 #if defined(REAPERAPI_WANT_kbd_getCommandName) || !defined(REAPERAPI_MINIMAL)
   3719 REAPERAPI_DEF //==============================================
   3720 // kbd_getCommandName
   3721 // Get the string of a key assigned to command "cmd" in a section.
   3722 // This function is poorly named as it doesn't return the command's name, see kbd_getTextFromCmd.
   3723 
   3724   void (*kbd_getCommandName)(int cmd, char* s, KbdSectionInfo* section);
   3725 #endif
   3726 
   3727 #if defined(REAPERAPI_WANT_kbd_getTextFromCmd) || !defined(REAPERAPI_MINIMAL)
   3728 REAPERAPI_DEF //==============================================
   3729 // kbd_getTextFromCmd
   3730 
   3731   const char* (*kbd_getTextFromCmd)(DWORD cmd, KbdSectionInfo* section);
   3732 #endif
   3733 
   3734 #if defined(REAPERAPI_WANT_KBD_OnMainActionEx) || !defined(REAPERAPI_MINIMAL)
   3735 REAPERAPI_DEF //==============================================
   3736 // KBD_OnMainActionEx
   3737 // val/valhw are used for midi stuff.
   3738 // val=[0..127] and valhw=-1 (midi CC),
   3739 // valhw >=0 (midi pitch (valhw | val<<7)),
   3740 // relmode absolute (0) or 1/2/3 for relative adjust modes
   3741 
   3742   int (*KBD_OnMainActionEx)(int cmd, int val, int valhw, int relmode, HWND hwnd, ReaProject* proj);
   3743 #endif
   3744 
   3745 #if defined(REAPERAPI_WANT_kbd_OnMidiEvent) || !defined(REAPERAPI_MINIMAL)
   3746 REAPERAPI_DEF //==============================================
   3747 // kbd_OnMidiEvent
   3748 // can be called from anywhere (threadsafe)
   3749 
   3750   void (*kbd_OnMidiEvent)(MIDI_event_t* evt, int dev_index);
   3751 #endif
   3752 
   3753 #if defined(REAPERAPI_WANT_kbd_OnMidiList) || !defined(REAPERAPI_MINIMAL)
   3754 REAPERAPI_DEF //==============================================
   3755 // kbd_OnMidiList
   3756 // can be called from anywhere (threadsafe)
   3757 
   3758   void (*kbd_OnMidiList)(MIDI_eventlist* list, int dev_index);
   3759 #endif
   3760 
   3761 #if defined(REAPERAPI_WANT_kbd_ProcessActionsMenu) || !defined(REAPERAPI_MINIMAL)
   3762 REAPERAPI_DEF //==============================================
   3763 // kbd_ProcessActionsMenu
   3764 
   3765   void (*kbd_ProcessActionsMenu)(HMENU menu, KbdSectionInfo* section);
   3766 #endif
   3767 
   3768 #if defined(REAPERAPI_WANT_kbd_processMidiEventActionEx) || !defined(REAPERAPI_MINIMAL)
   3769 REAPERAPI_DEF //==============================================
   3770 // kbd_processMidiEventActionEx
   3771 
   3772   bool (*kbd_processMidiEventActionEx)(MIDI_event_t* evt, KbdSectionInfo* section, HWND hwndCtx);
   3773 #endif
   3774 
   3775 #if defined(REAPERAPI_WANT_kbd_reprocessMenu) || !defined(REAPERAPI_MINIMAL)
   3776 REAPERAPI_DEF //==============================================
   3777 // kbd_reprocessMenu
   3778 // Reprocess a menu recursively, setting key assignments to what their command IDs are mapped to.
   3779 
   3780   void (*kbd_reprocessMenu)(HMENU menu, KbdSectionInfo* section);
   3781 #endif
   3782 
   3783 #if defined(REAPERAPI_WANT_kbd_RunCommandThroughHooks) || !defined(REAPERAPI_MINIMAL)
   3784 REAPERAPI_DEF //==============================================
   3785 // kbd_RunCommandThroughHooks
   3786 // actioncommandID may get modified
   3787 
   3788   bool (*kbd_RunCommandThroughHooks)(KbdSectionInfo* section, int* actionCommandID, int* val, int* valhw, int* relmode, HWND hwnd);
   3789 #endif
   3790 
   3791 #if defined(REAPERAPI_WANT_kbd_translateAccelerator) || !defined(REAPERAPI_MINIMAL)
   3792 REAPERAPI_DEF //==============================================
   3793 // kbd_translateAccelerator
   3794 // Pass in the HWND to receive commands, a MSG of a key command,  and a valid section,
   3795 // and kbd_translateAccelerator() will process it looking for any keys bound to it, and send the messages off.
   3796 // Returns 1 if processed, 0 if no key binding found.
   3797 
   3798   int (*kbd_translateAccelerator)(HWND hwnd, MSG* msg, KbdSectionInfo* section);
   3799 #endif
   3800 
   3801 #if defined(REAPERAPI_WANT_kbd_translateMouse) || !defined(REAPERAPI_MINIMAL)
   3802 REAPERAPI_DEF //==============================================
   3803 // kbd_translateMouse
   3804 
   3805   bool (*kbd_translateMouse)(void* winmsg, unsigned char* midimsg);
   3806 #endif
   3807 
   3808 #ifndef REAPERAPI_NO_LICE
   3809 #if defined(REAPERAPI_WANT_LICE__Destroy) || !defined(REAPERAPI_MINIMAL)
   3810 REAPERAPI_DEF //==============================================
   3811 // LICE__Destroy
   3812 
   3813   void (*LICE__Destroy)(LICE_IBitmap* bm);
   3814 #endif
   3815 
   3816 #if defined(REAPERAPI_WANT_LICE__DestroyFont) || !defined(REAPERAPI_MINIMAL)
   3817 REAPERAPI_DEF //==============================================
   3818 // LICE__DestroyFont
   3819 
   3820   void (*LICE__DestroyFont)(LICE_IFont* font);
   3821 #endif
   3822 
   3823 #if defined(REAPERAPI_WANT_LICE__DrawText) || !defined(REAPERAPI_MINIMAL)
   3824 REAPERAPI_DEF //==============================================
   3825 // LICE__DrawText
   3826 
   3827   int (*LICE__DrawText)(LICE_IFont* font, LICE_IBitmap* bm, const char* str, int strcnt, RECT* rect, UINT dtFlags);
   3828 #endif
   3829 
   3830 #if defined(REAPERAPI_WANT_LICE__GetBits) || !defined(REAPERAPI_MINIMAL)
   3831 REAPERAPI_DEF //==============================================
   3832 // LICE__GetBits
   3833 
   3834   void* (*LICE__GetBits)(LICE_IBitmap* bm);
   3835 #endif
   3836 
   3837 #if defined(REAPERAPI_WANT_LICE__GetDC) || !defined(REAPERAPI_MINIMAL)
   3838 REAPERAPI_DEF //==============================================
   3839 // LICE__GetDC
   3840 
   3841   HDC (*LICE__GetDC)(LICE_IBitmap* bm);
   3842 #endif
   3843 
   3844 #if defined(REAPERAPI_WANT_LICE__GetHeight) || !defined(REAPERAPI_MINIMAL)
   3845 REAPERAPI_DEF //==============================================
   3846 // LICE__GetHeight
   3847 
   3848   int (*LICE__GetHeight)(LICE_IBitmap* bm);
   3849 #endif
   3850 
   3851 #if defined(REAPERAPI_WANT_LICE__GetRowSpan) || !defined(REAPERAPI_MINIMAL)
   3852 REAPERAPI_DEF //==============================================
   3853 // LICE__GetRowSpan
   3854 
   3855   int (*LICE__GetRowSpan)(LICE_IBitmap* bm);
   3856 #endif
   3857 
   3858 #if defined(REAPERAPI_WANT_LICE__GetWidth) || !defined(REAPERAPI_MINIMAL)
   3859 REAPERAPI_DEF //==============================================
   3860 // LICE__GetWidth
   3861 
   3862   int (*LICE__GetWidth)(LICE_IBitmap* bm);
   3863 #endif
   3864 
   3865 #if defined(REAPERAPI_WANT_LICE__IsFlipped) || !defined(REAPERAPI_MINIMAL)
   3866 REAPERAPI_DEF //==============================================
   3867 // LICE__IsFlipped
   3868 
   3869   bool (*LICE__IsFlipped)(LICE_IBitmap* bm);
   3870 #endif
   3871 
   3872 #if defined(REAPERAPI_WANT_LICE__resize) || !defined(REAPERAPI_MINIMAL)
   3873 REAPERAPI_DEF //==============================================
   3874 // LICE__resize
   3875 
   3876   bool (*LICE__resize)(LICE_IBitmap* bm, int w, int h);
   3877 #endif
   3878 
   3879 #if defined(REAPERAPI_WANT_LICE__SetBkColor) || !defined(REAPERAPI_MINIMAL)
   3880 REAPERAPI_DEF //==============================================
   3881 // LICE__SetBkColor
   3882 
   3883   LICE_pixel (*LICE__SetBkColor)(LICE_IFont* font, LICE_pixel color);
   3884 #endif
   3885 
   3886 #if defined(REAPERAPI_WANT_LICE__SetFromHFont) || !defined(REAPERAPI_MINIMAL)
   3887 REAPERAPI_DEF //==============================================
   3888 // LICE__SetFromHFont
   3889 // font must REMAIN valid,unless LICE_FONT_FLAG_PRECALCALL is set
   3890 
   3891   void (*LICE__SetFromHFont)(LICE_IFont* font, HFONT hfont, int flags);
   3892 #endif
   3893 
   3894 #if defined(REAPERAPI_WANT_LICE__SetTextColor) || !defined(REAPERAPI_MINIMAL)
   3895 REAPERAPI_DEF //==============================================
   3896 // LICE__SetTextColor
   3897 
   3898   LICE_pixel (*LICE__SetTextColor)(LICE_IFont* font, LICE_pixel color);
   3899 #endif
   3900 
   3901 #if defined(REAPERAPI_WANT_LICE__SetTextCombineMode) || !defined(REAPERAPI_MINIMAL)
   3902 REAPERAPI_DEF //==============================================
   3903 // LICE__SetTextCombineMode
   3904 
   3905   void (*LICE__SetTextCombineMode)(LICE_IFont* ifont, int mode, float alpha);
   3906 #endif
   3907 
   3908 #if defined(REAPERAPI_WANT_LICE_Arc) || !defined(REAPERAPI_MINIMAL)
   3909 REAPERAPI_DEF //==============================================
   3910 // LICE_Arc
   3911 
   3912   void (*LICE_Arc)(LICE_IBitmap* dest, float cx, float cy, float r, float minAngle, float maxAngle, LICE_pixel color, float alpha, int mode, bool aa);
   3913 #endif
   3914 
   3915 #if defined(REAPERAPI_WANT_LICE_Blit) || !defined(REAPERAPI_MINIMAL)
   3916 REAPERAPI_DEF //==============================================
   3917 // LICE_Blit
   3918 
   3919   void (*LICE_Blit)(LICE_IBitmap* dest, LICE_IBitmap* src, int dstx, int dsty, int srcx, int srcy, int srcw, int srch, float alpha, int mode);
   3920 #endif
   3921 
   3922 #if defined(REAPERAPI_WANT_LICE_Blur) || !defined(REAPERAPI_MINIMAL)
   3923 REAPERAPI_DEF //==============================================
   3924 // LICE_Blur
   3925 
   3926   void (*LICE_Blur)(LICE_IBitmap* dest, LICE_IBitmap* src, int dstx, int dsty, int srcx, int srcy, int srcw, int srch);
   3927 #endif
   3928 
   3929 #if defined(REAPERAPI_WANT_LICE_BorderedRect) || !defined(REAPERAPI_MINIMAL)
   3930 REAPERAPI_DEF //==============================================
   3931 // LICE_BorderedRect
   3932 
   3933   void (*LICE_BorderedRect)(LICE_IBitmap* dest, int x, int y, int w, int h, LICE_pixel bgcolor, LICE_pixel fgcolor, float alpha, int mode);
   3934 #endif
   3935 
   3936 #if defined(REAPERAPI_WANT_LICE_Circle) || !defined(REAPERAPI_MINIMAL)
   3937 REAPERAPI_DEF //==============================================
   3938 // LICE_Circle
   3939 
   3940   void (*LICE_Circle)(LICE_IBitmap* dest, float cx, float cy, float r, LICE_pixel color, float alpha, int mode, bool aa);
   3941 #endif
   3942 
   3943 #if defined(REAPERAPI_WANT_LICE_Clear) || !defined(REAPERAPI_MINIMAL)
   3944 REAPERAPI_DEF //==============================================
   3945 // LICE_Clear
   3946 
   3947   void (*LICE_Clear)(LICE_IBitmap* dest, LICE_pixel color);
   3948 #endif
   3949 
   3950 #if defined(REAPERAPI_WANT_LICE_ClearRect) || !defined(REAPERAPI_MINIMAL)
   3951 REAPERAPI_DEF //==============================================
   3952 // LICE_ClearRect
   3953 
   3954   void (*LICE_ClearRect)(LICE_IBitmap* dest, int x, int y, int w, int h, LICE_pixel mask, LICE_pixel orbits);
   3955 #endif
   3956 
   3957 #if defined(REAPERAPI_WANT_LICE_ClipLine) || !defined(REAPERAPI_MINIMAL)
   3958 REAPERAPI_DEF //==============================================
   3959 // LICE_ClipLine
   3960 // Returns false if the line is entirely offscreen.
   3961 
   3962   bool (*LICE_ClipLine)(int* pX1Out, int* pY1Out, int* pX2Out, int* pY2Out, int xLo, int yLo, int xHi, int yHi);
   3963 #endif
   3964 
   3965 #if defined(REAPERAPI_WANT_LICE_Copy) || !defined(REAPERAPI_MINIMAL)
   3966 REAPERAPI_DEF //==============================================
   3967 // LICE_Copy
   3968 
   3969   void (*LICE_Copy)(LICE_IBitmap* dest, LICE_IBitmap* src);
   3970 #endif
   3971 
   3972 #if defined(REAPERAPI_WANT_LICE_CreateBitmap) || !defined(REAPERAPI_MINIMAL)
   3973 REAPERAPI_DEF //==============================================
   3974 // LICE_CreateBitmap
   3975 // create a new bitmap. this is like calling new LICE_MemBitmap (mode=0) or new LICE_SysBitmap (mode=1).
   3976 
   3977   LICE_IBitmap* (*LICE_CreateBitmap)(int mode, int w, int h);
   3978 #endif
   3979 
   3980 #if defined(REAPERAPI_WANT_LICE_CreateFont) || !defined(REAPERAPI_MINIMAL)
   3981 REAPERAPI_DEF //==============================================
   3982 // LICE_CreateFont
   3983 
   3984   LICE_IFont* (*LICE_CreateFont)();
   3985 #endif
   3986 
   3987 #if defined(REAPERAPI_WANT_LICE_DrawCBezier) || !defined(REAPERAPI_MINIMAL)
   3988 REAPERAPI_DEF //==============================================
   3989 // LICE_DrawCBezier
   3990 
   3991   void (*LICE_DrawCBezier)(LICE_IBitmap* dest, double xstart, double ystart, double xctl1, double yctl1, double xctl2, double yctl2, double xend, double yend, LICE_pixel color, float alpha, int mode, bool aa, double tol);
   3992 #endif
   3993 
   3994 #if defined(REAPERAPI_WANT_LICE_DrawChar) || !defined(REAPERAPI_MINIMAL)
   3995 REAPERAPI_DEF //==============================================
   3996 // LICE_DrawChar
   3997 
   3998   void (*LICE_DrawChar)(LICE_IBitmap* bm, int x, int y, char c, LICE_pixel color, float alpha, int mode);
   3999 #endif
   4000 
   4001 #if defined(REAPERAPI_WANT_LICE_DrawGlyph) || !defined(REAPERAPI_MINIMAL)
   4002 REAPERAPI_DEF //==============================================
   4003 // LICE_DrawGlyph
   4004 
   4005   void (*LICE_DrawGlyph)(LICE_IBitmap* dest, int x, int y, LICE_pixel color, LICE_pixel_chan* alphas, int glyph_w, int glyph_h, float alpha, int mode);
   4006 #endif
   4007 
   4008 #if defined(REAPERAPI_WANT_LICE_DrawRect) || !defined(REAPERAPI_MINIMAL)
   4009 REAPERAPI_DEF //==============================================
   4010 // LICE_DrawRect
   4011 
   4012   void (*LICE_DrawRect)(LICE_IBitmap* dest, int x, int y, int w, int h, LICE_pixel color, float alpha, int mode);
   4013 #endif
   4014 
   4015 #if defined(REAPERAPI_WANT_LICE_DrawText) || !defined(REAPERAPI_MINIMAL)
   4016 REAPERAPI_DEF //==============================================
   4017 // LICE_DrawText
   4018 
   4019   void (*LICE_DrawText)(LICE_IBitmap* bm, int x, int y, const char* string, LICE_pixel color, float alpha, int mode);
   4020 #endif
   4021 
   4022 #if defined(REAPERAPI_WANT_LICE_FillCBezier) || !defined(REAPERAPI_MINIMAL)
   4023 REAPERAPI_DEF //==============================================
   4024 // LICE_FillCBezier
   4025 
   4026   void (*LICE_FillCBezier)(LICE_IBitmap* dest, double xstart, double ystart, double xctl1, double yctl1, double xctl2, double yctl2, double xend, double yend, int yfill, LICE_pixel color, float alpha, int mode, bool aa, double tol);
   4027 #endif
   4028 
   4029 #if defined(REAPERAPI_WANT_LICE_FillCircle) || !defined(REAPERAPI_MINIMAL)
   4030 REAPERAPI_DEF //==============================================
   4031 // LICE_FillCircle
   4032 
   4033   void (*LICE_FillCircle)(LICE_IBitmap* dest, float cx, float cy, float r, LICE_pixel color, float alpha, int mode, bool aa);
   4034 #endif
   4035 
   4036 #if defined(REAPERAPI_WANT_LICE_FillConvexPolygon) || !defined(REAPERAPI_MINIMAL)
   4037 REAPERAPI_DEF //==============================================
   4038 // LICE_FillConvexPolygon
   4039 
   4040   void (*LICE_FillConvexPolygon)(LICE_IBitmap* dest, int* x, int* y, int npoints, LICE_pixel color, float alpha, int mode);
   4041 #endif
   4042 
   4043 #if defined(REAPERAPI_WANT_LICE_FillRect) || !defined(REAPERAPI_MINIMAL)
   4044 REAPERAPI_DEF //==============================================
   4045 // LICE_FillRect
   4046 
   4047   void (*LICE_FillRect)(LICE_IBitmap* dest, int x, int y, int w, int h, LICE_pixel color, float alpha, int mode);
   4048 #endif
   4049 
   4050 #if defined(REAPERAPI_WANT_LICE_FillTrapezoid) || !defined(REAPERAPI_MINIMAL)
   4051 REAPERAPI_DEF //==============================================
   4052 // LICE_FillTrapezoid
   4053 
   4054   void (*LICE_FillTrapezoid)(LICE_IBitmap* dest, int x1a, int x1b, int y1, int x2a, int x2b, int y2, LICE_pixel color, float alpha, int mode);
   4055 #endif
   4056 
   4057 #if defined(REAPERAPI_WANT_LICE_FillTriangle) || !defined(REAPERAPI_MINIMAL)
   4058 REAPERAPI_DEF //==============================================
   4059 // LICE_FillTriangle
   4060 
   4061   void (*LICE_FillTriangle)(LICE_IBitmap* dest, int x1, int y1, int x2, int y2, int x3, int y3, LICE_pixel color, float alpha, int mode);
   4062 #endif
   4063 
   4064 #if defined(REAPERAPI_WANT_LICE_GetPixel) || !defined(REAPERAPI_MINIMAL)
   4065 REAPERAPI_DEF //==============================================
   4066 // LICE_GetPixel
   4067 
   4068   LICE_pixel (*LICE_GetPixel)(LICE_IBitmap* bm, int x, int y);
   4069 #endif
   4070 
   4071 #if defined(REAPERAPI_WANT_LICE_GradRect) || !defined(REAPERAPI_MINIMAL)
   4072 REAPERAPI_DEF //==============================================
   4073 // LICE_GradRect
   4074 
   4075   void (*LICE_GradRect)(LICE_IBitmap* dest, int dstx, int dsty, int dstw, int dsth, float ir, float ig, float ib, float ia, float drdx, float dgdx, float dbdx, float dadx, float drdy, float dgdy, float dbdy, float dady, int mode);
   4076 #endif
   4077 
   4078 #if defined(REAPERAPI_WANT_LICE_Line) || !defined(REAPERAPI_MINIMAL)
   4079 REAPERAPI_DEF //==============================================
   4080 // LICE_Line
   4081 
   4082   void (*LICE_Line)(LICE_IBitmap* dest, float x1, float y1, float x2, float y2, LICE_pixel color, float alpha, int mode, bool aa);
   4083 #endif
   4084 
   4085 #if defined(REAPERAPI_WANT_LICE_LineInt) || !defined(REAPERAPI_MINIMAL)
   4086 REAPERAPI_DEF //==============================================
   4087 // LICE_LineInt
   4088 
   4089   void (*LICE_LineInt)(LICE_IBitmap* dest, int x1, int y1, int x2, int y2, LICE_pixel color, float alpha, int mode, bool aa);
   4090 #endif
   4091 
   4092 #if defined(REAPERAPI_WANT_LICE_LoadPNG) || !defined(REAPERAPI_MINIMAL)
   4093 REAPERAPI_DEF //==============================================
   4094 // LICE_LoadPNG
   4095 
   4096   LICE_IBitmap* (*LICE_LoadPNG)(const char* filename, LICE_IBitmap* bmp);
   4097 #endif
   4098 
   4099 #if defined(REAPERAPI_WANT_LICE_LoadPNGFromResource) || !defined(REAPERAPI_MINIMAL)
   4100 REAPERAPI_DEF //==============================================
   4101 // LICE_LoadPNGFromResource
   4102 
   4103   LICE_IBitmap* (*LICE_LoadPNGFromResource)(HINSTANCE hInst, const char* resid, LICE_IBitmap* bmp);
   4104 #endif
   4105 
   4106 #if defined(REAPERAPI_WANT_LICE_MeasureText) || !defined(REAPERAPI_MINIMAL)
   4107 REAPERAPI_DEF //==============================================
   4108 // LICE_MeasureText
   4109 
   4110   void (*LICE_MeasureText)(const char* string, int* w, int* h);
   4111 #endif
   4112 
   4113 #if defined(REAPERAPI_WANT_LICE_MultiplyAddRect) || !defined(REAPERAPI_MINIMAL)
   4114 REAPERAPI_DEF //==============================================
   4115 // LICE_MultiplyAddRect
   4116 
   4117   void (*LICE_MultiplyAddRect)(LICE_IBitmap* dest, int x, int y, int w, int h, float rsc, float gsc, float bsc, float asc, float radd, float gadd, float badd, float aadd);
   4118 #endif
   4119 
   4120 #if defined(REAPERAPI_WANT_LICE_PutPixel) || !defined(REAPERAPI_MINIMAL)
   4121 REAPERAPI_DEF //==============================================
   4122 // LICE_PutPixel
   4123 
   4124   void (*LICE_PutPixel)(LICE_IBitmap* bm, int x, int y, LICE_pixel color, float alpha, int mode);
   4125 #endif
   4126 
   4127 #if defined(REAPERAPI_WANT_LICE_RotatedBlit) || !defined(REAPERAPI_MINIMAL)
   4128 REAPERAPI_DEF //==============================================
   4129 // LICE_RotatedBlit
   4130 // these coordinates are offset from the center of the image,in source pixel coordinates
   4131 
   4132   void (*LICE_RotatedBlit)(LICE_IBitmap* dest, LICE_IBitmap* src, int dstx, int dsty, int dstw, int dsth, float srcx, float srcy, float srcw, float srch, float angle, bool cliptosourcerect, float alpha, int mode, float rotxcent, float rotycent);
   4133 #endif
   4134 
   4135 #if defined(REAPERAPI_WANT_LICE_RoundRect) || !defined(REAPERAPI_MINIMAL)
   4136 REAPERAPI_DEF //==============================================
   4137 // LICE_RoundRect
   4138 
   4139   void (*LICE_RoundRect)(LICE_IBitmap* drawbm, float xpos, float ypos, float w, float h, int cornerradius, LICE_pixel col, float alpha, int mode, bool aa);
   4140 #endif
   4141 
   4142 #if defined(REAPERAPI_WANT_LICE_ScaledBlit) || !defined(REAPERAPI_MINIMAL)
   4143 REAPERAPI_DEF //==============================================
   4144 // LICE_ScaledBlit
   4145 
   4146   void (*LICE_ScaledBlit)(LICE_IBitmap* dest, LICE_IBitmap* src, int dstx, int dsty, int dstw, int dsth, float srcx, float srcy, float srcw, float srch, float alpha, int mode);
   4147 #endif
   4148 
   4149 #if defined(REAPERAPI_WANT_LICE_SimpleFill) || !defined(REAPERAPI_MINIMAL)
   4150 REAPERAPI_DEF //==============================================
   4151 // LICE_SimpleFill
   4152 
   4153   void (*LICE_SimpleFill)(LICE_IBitmap* dest, int x, int y, LICE_pixel newcolor, LICE_pixel comparemask, LICE_pixel keepmask);
   4154 #endif
   4155 
   4156 #if defined(REAPERAPI_WANT_LICE_ThickFLine) || !defined(REAPERAPI_MINIMAL)
   4157 REAPERAPI_DEF //==============================================
   4158 // LICE_ThickFLine
   4159 // always AA. wid is not affected by scaling (1 is always normal line, 2 is always 2 physical pixels, etc)
   4160 
   4161   void (*LICE_ThickFLine)(LICE_IBitmap* dest, double x1, double y1, double x2, double y2, LICE_pixel color, float alpha, int mode, int wid);
   4162 #endif
   4163 
   4164 #endif // !REAPERAPI_NO_LICE
   4165 #if defined(REAPERAPI_WANT_LocalizeString) || !defined(REAPERAPI_MINIMAL)
   4166 REAPERAPI_DEF //==============================================
   4167 // LocalizeString
   4168 // Returns a localized version of src_string, in section section. flags can have 1 set to only localize if sprintf-style formatting matches the original.
   4169 
   4170   const char* (*LocalizeString)(const char* src_string, const char* section, int flagsOptional);
   4171 #endif
   4172 
   4173 #if defined(REAPERAPI_WANT_Loop_OnArrow) || !defined(REAPERAPI_MINIMAL)
   4174 REAPERAPI_DEF //==============================================
   4175 // Loop_OnArrow
   4176 // Move the loop selection left or right. Returns true if snap is enabled.
   4177 
   4178   bool (*Loop_OnArrow)(ReaProject* project, int direction);
   4179 #endif
   4180 
   4181 #if defined(REAPERAPI_WANT_Main_OnCommand) || !defined(REAPERAPI_MINIMAL)
   4182 REAPERAPI_DEF //==============================================
   4183 // Main_OnCommand
   4184 // See Main_OnCommandEx.
   4185 
   4186   void (*Main_OnCommand)(int command, int flag);
   4187 #endif
   4188 
   4189 #if defined(REAPERAPI_WANT_Main_OnCommandEx) || !defined(REAPERAPI_MINIMAL)
   4190 REAPERAPI_DEF //==============================================
   4191 // Main_OnCommandEx
   4192 // Performs an action belonging to the main action section. To perform non-native actions (ReaScripts, custom or extension plugins' actions) safely, see NamedCommandLookup().
   4193 
   4194   void (*Main_OnCommandEx)(int command, int flag, ReaProject* proj);
   4195 #endif
   4196 
   4197 #if defined(REAPERAPI_WANT_Main_openProject) || !defined(REAPERAPI_MINIMAL)
   4198 REAPERAPI_DEF //==============================================
   4199 // Main_openProject
   4200 // opens a project. will prompt the user to save unless name is prefixed with 'noprompt:'. If name is prefixed with 'template:', project file will be loaded as a template.
   4201 // If passed a .RTrackTemplate file, adds the template to the existing project.
   4202 
   4203   void (*Main_openProject)(const char* name);
   4204 #endif
   4205 
   4206 #if defined(REAPERAPI_WANT_Main_SaveProject) || !defined(REAPERAPI_MINIMAL)
   4207 REAPERAPI_DEF //==============================================
   4208 // Main_SaveProject
   4209 // Save the project.
   4210 
   4211   void (*Main_SaveProject)(ReaProject* proj, bool forceSaveAsInOptional);
   4212 #endif
   4213 
   4214 #if defined(REAPERAPI_WANT_Main_SaveProjectEx) || !defined(REAPERAPI_MINIMAL)
   4215 REAPERAPI_DEF //==============================================
   4216 // Main_SaveProjectEx
   4217 // Save the project. options: &1=save selected tracks as track template, &2=include media with track template, &4=include envelopes with track template. See Main_openProject, Main_SaveProject.
   4218 
   4219   void (*Main_SaveProjectEx)(ReaProject* proj, const char* filename, int options);
   4220 #endif
   4221 
   4222 #if defined(REAPERAPI_WANT_Main_UpdateLoopInfo) || !defined(REAPERAPI_MINIMAL)
   4223 REAPERAPI_DEF //==============================================
   4224 // Main_UpdateLoopInfo
   4225 
   4226   void (*Main_UpdateLoopInfo)(int ignoremask);
   4227 #endif
   4228 
   4229 #if defined(REAPERAPI_WANT_MarkProjectDirty) || !defined(REAPERAPI_MINIMAL)
   4230 REAPERAPI_DEF //==============================================
   4231 // MarkProjectDirty
   4232 // Marks project as dirty (needing save) if 'undo/prompt to save' is enabled in preferences.
   4233 
   4234   void (*MarkProjectDirty)(ReaProject* proj);
   4235 #endif
   4236 
   4237 #if defined(REAPERAPI_WANT_MarkTrackItemsDirty) || !defined(REAPERAPI_MINIMAL)
   4238 REAPERAPI_DEF //==============================================
   4239 // MarkTrackItemsDirty
   4240 // If track is supplied, item is ignored
   4241 
   4242   void (*MarkTrackItemsDirty)(MediaTrack* track, MediaItem* item);
   4243 #endif
   4244 
   4245 #if defined(REAPERAPI_WANT_Master_GetPlayRate) || !defined(REAPERAPI_MINIMAL)
   4246 REAPERAPI_DEF //==============================================
   4247 // Master_GetPlayRate
   4248 
   4249   double (*Master_GetPlayRate)(ReaProject* project);
   4250 #endif
   4251 
   4252 #if defined(REAPERAPI_WANT_Master_GetPlayRateAtTime) || !defined(REAPERAPI_MINIMAL)
   4253 REAPERAPI_DEF //==============================================
   4254 // Master_GetPlayRateAtTime
   4255 
   4256   double (*Master_GetPlayRateAtTime)(double time_s, ReaProject* proj);
   4257 #endif
   4258 
   4259 #if defined(REAPERAPI_WANT_Master_GetTempo) || !defined(REAPERAPI_MINIMAL)
   4260 REAPERAPI_DEF //==============================================
   4261 // Master_GetTempo
   4262 
   4263   double (*Master_GetTempo)();
   4264 #endif
   4265 
   4266 #if defined(REAPERAPI_WANT_Master_NormalizePlayRate) || !defined(REAPERAPI_MINIMAL)
   4267 REAPERAPI_DEF //==============================================
   4268 // Master_NormalizePlayRate
   4269 // Convert play rate to/from a value between 0 and 1, representing the position on the project playrate slider.
   4270 
   4271   double (*Master_NormalizePlayRate)(double playrate, bool isnormalized);
   4272 #endif
   4273 
   4274 #if defined(REAPERAPI_WANT_Master_NormalizeTempo) || !defined(REAPERAPI_MINIMAL)
   4275 REAPERAPI_DEF //==============================================
   4276 // Master_NormalizeTempo
   4277 // Convert the tempo to/from a value between 0 and 1, representing bpm in the range of 40-296 bpm.
   4278 
   4279   double (*Master_NormalizeTempo)(double bpm, bool isnormalized);
   4280 #endif
   4281 
   4282 #if defined(REAPERAPI_WANT_MB) || !defined(REAPERAPI_MINIMAL)
   4283 REAPERAPI_DEF //==============================================
   4284 // MB
   4285 // type 0=OK,1=OKCANCEL,2=ABORTRETRYIGNORE,3=YESNOCANCEL,4=YESNO,5=RETRYCANCEL : ret 1=OK,2=CANCEL,3=ABORT,4=RETRY,5=IGNORE,6=YES,7=NO
   4286 
   4287   int (*MB)(const char* msg, const char* title, int type);
   4288 #endif
   4289 
   4290 #if defined(REAPERAPI_WANT_MediaItemDescendsFromTrack) || !defined(REAPERAPI_MINIMAL)
   4291 REAPERAPI_DEF //==============================================
   4292 // MediaItemDescendsFromTrack
   4293 // Returns 1 if the track holds the item, 2 if the track is a folder containing the track that holds the item, etc.
   4294 
   4295   int (*MediaItemDescendsFromTrack)(MediaItem* item, MediaTrack* track);
   4296 #endif
   4297 
   4298 #if defined(REAPERAPI_WANT_MIDI_CountEvts) || !defined(REAPERAPI_MINIMAL)
   4299 REAPERAPI_DEF //==============================================
   4300 // MIDI_CountEvts
   4301 // Count the number of notes, CC events, and text/sysex events in a given MIDI item.
   4302 
   4303   int (*MIDI_CountEvts)(MediaItem_Take* take, int* notecntOut, int* ccevtcntOut, int* textsyxevtcntOut);
   4304 #endif
   4305 
   4306 #if defined(REAPERAPI_WANT_MIDI_DeleteCC) || !defined(REAPERAPI_MINIMAL)
   4307 REAPERAPI_DEF //==============================================
   4308 // MIDI_DeleteCC
   4309 // Delete a MIDI CC event.
   4310 
   4311   bool (*MIDI_DeleteCC)(MediaItem_Take* take, int ccidx);
   4312 #endif
   4313 
   4314 #if defined(REAPERAPI_WANT_MIDI_DeleteEvt) || !defined(REAPERAPI_MINIMAL)
   4315 REAPERAPI_DEF //==============================================
   4316 // MIDI_DeleteEvt
   4317 // Delete a MIDI event.
   4318 
   4319   bool (*MIDI_DeleteEvt)(MediaItem_Take* take, int evtidx);
   4320 #endif
   4321 
   4322 #if defined(REAPERAPI_WANT_MIDI_DeleteNote) || !defined(REAPERAPI_MINIMAL)
   4323 REAPERAPI_DEF //==============================================
   4324 // MIDI_DeleteNote
   4325 // Delete a MIDI note.
   4326 
   4327   bool (*MIDI_DeleteNote)(MediaItem_Take* take, int noteidx);
   4328 #endif
   4329 
   4330 #if defined(REAPERAPI_WANT_MIDI_DeleteTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   4331 REAPERAPI_DEF //==============================================
   4332 // MIDI_DeleteTextSysexEvt
   4333 // Delete a MIDI text or sysex event.
   4334 
   4335   bool (*MIDI_DeleteTextSysexEvt)(MediaItem_Take* take, int textsyxevtidx);
   4336 #endif
   4337 
   4338 #if defined(REAPERAPI_WANT_MIDI_DisableSort) || !defined(REAPERAPI_MINIMAL)
   4339 REAPERAPI_DEF //==============================================
   4340 // MIDI_DisableSort
   4341 // Disable sorting for all MIDI insert, delete, get and set functions, until MIDI_Sort is called.
   4342 
   4343   void (*MIDI_DisableSort)(MediaItem_Take* take);
   4344 #endif
   4345 
   4346 #if defined(REAPERAPI_WANT_MIDI_EnumSelCC) || !defined(REAPERAPI_MINIMAL)
   4347 REAPERAPI_DEF //==============================================
   4348 // MIDI_EnumSelCC
   4349 // Returns the index of the next selected MIDI CC event after ccidx (-1 if there are no more selected events).
   4350 
   4351   int (*MIDI_EnumSelCC)(MediaItem_Take* take, int ccidx);
   4352 #endif
   4353 
   4354 #if defined(REAPERAPI_WANT_MIDI_EnumSelEvts) || !defined(REAPERAPI_MINIMAL)
   4355 REAPERAPI_DEF //==============================================
   4356 // MIDI_EnumSelEvts
   4357 // Returns the index of the next selected MIDI event after evtidx (-1 if there are no more selected events).
   4358 
   4359   int (*MIDI_EnumSelEvts)(MediaItem_Take* take, int evtidx);
   4360 #endif
   4361 
   4362 #if defined(REAPERAPI_WANT_MIDI_EnumSelNotes) || !defined(REAPERAPI_MINIMAL)
   4363 REAPERAPI_DEF //==============================================
   4364 // MIDI_EnumSelNotes
   4365 // Returns the index of the next selected MIDI note after noteidx (-1 if there are no more selected events).
   4366 
   4367   int (*MIDI_EnumSelNotes)(MediaItem_Take* take, int noteidx);
   4368 #endif
   4369 
   4370 #if defined(REAPERAPI_WANT_MIDI_EnumSelTextSysexEvts) || !defined(REAPERAPI_MINIMAL)
   4371 REAPERAPI_DEF //==============================================
   4372 // MIDI_EnumSelTextSysexEvts
   4373 // Returns the index of the next selected MIDI text/sysex event after textsyxidx (-1 if there are no more selected events).
   4374 
   4375   int (*MIDI_EnumSelTextSysexEvts)(MediaItem_Take* take, int textsyxidx);
   4376 #endif
   4377 
   4378 #if defined(REAPERAPI_WANT_MIDI_eventlist_Create) || !defined(REAPERAPI_MINIMAL)
   4379 REAPERAPI_DEF //==============================================
   4380 // MIDI_eventlist_Create
   4381 // Create a MIDI_eventlist object. The returned object must be deleted with MIDI_eventlist_destroy().
   4382 
   4383   MIDI_eventlist* (*MIDI_eventlist_Create)();
   4384 #endif
   4385 
   4386 #if defined(REAPERAPI_WANT_MIDI_eventlist_Destroy) || !defined(REAPERAPI_MINIMAL)
   4387 REAPERAPI_DEF //==============================================
   4388 // MIDI_eventlist_Destroy
   4389 // Destroy a MIDI_eventlist object that was created using MIDI_eventlist_Create().
   4390 
   4391   void (*MIDI_eventlist_Destroy)(MIDI_eventlist* evtlist);
   4392 #endif
   4393 
   4394 #if defined(REAPERAPI_WANT_MIDI_GetAllEvts) || !defined(REAPERAPI_MINIMAL)
   4395 REAPERAPI_DEF //==============================================
   4396 // MIDI_GetAllEvts
   4397 // Get all MIDI data. MIDI buffer is returned as a list of { int offset, char flag, int msglen, unsigned char msg[] }.
   4398 // offset: MIDI ticks from previous event
   4399 // flag: &1=selected &2=muted
   4400 // flag high 4 bits for CC shape: &16=linear, &32=slow start/end, &16|32=fast start, &64=fast end, &64|16=bezier
   4401 // msg: the MIDI message.
   4402 // A meta-event of type 0xF followed by 'CCBZ ' and 5 more bytes represents bezier curve data for the previous MIDI event: 1 byte for the bezier type (usually 0) and 4 bytes for the bezier tension as a float.
   4403 // For tick intervals longer than a 32 bit word can represent, zero-length meta events may be placed between valid events.
   4404 // See MIDI_SetAllEvts.
   4405 
   4406   bool (*MIDI_GetAllEvts)(MediaItem_Take* take, char* bufOutNeedBig, int* bufOutNeedBig_sz);
   4407 #endif
   4408 
   4409 #if defined(REAPERAPI_WANT_MIDI_GetCC) || !defined(REAPERAPI_MINIMAL)
   4410 REAPERAPI_DEF //==============================================
   4411 // MIDI_GetCC
   4412 // Get MIDI CC event properties.
   4413 
   4414   bool (*MIDI_GetCC)(MediaItem_Take* take, int ccidx, bool* selectedOut, bool* mutedOut, double* ppqposOut, int* chanmsgOut, int* chanOut, int* msg2Out, int* msg3Out);
   4415 #endif
   4416 
   4417 #if defined(REAPERAPI_WANT_MIDI_GetCCShape) || !defined(REAPERAPI_MINIMAL)
   4418 REAPERAPI_DEF //==============================================
   4419 // MIDI_GetCCShape
   4420 // Get CC shape and bezier tension. See MIDI_GetCC, MIDI_SetCCShape
   4421 
   4422   bool (*MIDI_GetCCShape)(MediaItem_Take* take, int ccidx, int* shapeOut, double* beztensionOut);
   4423 #endif
   4424 
   4425 #if defined(REAPERAPI_WANT_MIDI_GetEvt) || !defined(REAPERAPI_MINIMAL)
   4426 REAPERAPI_DEF //==============================================
   4427 // MIDI_GetEvt
   4428 // Get MIDI event properties.
   4429 
   4430   bool (*MIDI_GetEvt)(MediaItem_Take* take, int evtidx, bool* selectedOut, bool* mutedOut, double* ppqposOut, char* msgOut, int* msgOut_sz);
   4431 #endif
   4432 
   4433 #if defined(REAPERAPI_WANT_MIDI_GetGrid) || !defined(REAPERAPI_MINIMAL)
   4434 REAPERAPI_DEF //==============================================
   4435 // MIDI_GetGrid
   4436 // 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.
   4437 
   4438   double (*MIDI_GetGrid)(MediaItem_Take* take, double* swingOutOptional, double* noteLenOutOptional);
   4439 #endif
   4440 
   4441 #if defined(REAPERAPI_WANT_MIDI_GetHash) || !defined(REAPERAPI_MINIMAL)
   4442 REAPERAPI_DEF //==============================================
   4443 // MIDI_GetHash
   4444 // 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
   4445 
   4446   bool (*MIDI_GetHash)(MediaItem_Take* take, bool notesonly, char* hashOut, int hashOut_sz);
   4447 #endif
   4448 
   4449 #if defined(REAPERAPI_WANT_MIDI_GetNote) || !defined(REAPERAPI_MINIMAL)
   4450 REAPERAPI_DEF //==============================================
   4451 // MIDI_GetNote
   4452 // Get MIDI note properties.
   4453 
   4454   bool (*MIDI_GetNote)(MediaItem_Take* take, int noteidx, bool* selectedOut, bool* mutedOut, double* startppqposOut, double* endppqposOut, int* chanOut, int* pitchOut, int* velOut);
   4455 #endif
   4456 
   4457 #if defined(REAPERAPI_WANT_MIDI_GetPPQPos_EndOfMeasure) || !defined(REAPERAPI_MINIMAL)
   4458 REAPERAPI_DEF //==============================================
   4459 // MIDI_GetPPQPos_EndOfMeasure
   4460 // Returns the MIDI tick (ppq) position corresponding to the end of the measure.
   4461 
   4462   double (*MIDI_GetPPQPos_EndOfMeasure)(MediaItem_Take* take, double ppqpos);
   4463 #endif
   4464 
   4465 #if defined(REAPERAPI_WANT_MIDI_GetPPQPos_StartOfMeasure) || !defined(REAPERAPI_MINIMAL)
   4466 REAPERAPI_DEF //==============================================
   4467 // MIDI_GetPPQPos_StartOfMeasure
   4468 // Returns the MIDI tick (ppq) position corresponding to the start of the measure.
   4469 
   4470   double (*MIDI_GetPPQPos_StartOfMeasure)(MediaItem_Take* take, double ppqpos);
   4471 #endif
   4472 
   4473 #if defined(REAPERAPI_WANT_MIDI_GetPPQPosFromProjQN) || !defined(REAPERAPI_MINIMAL)
   4474 REAPERAPI_DEF //==============================================
   4475 // MIDI_GetPPQPosFromProjQN
   4476 // Returns the MIDI tick (ppq) position corresponding to a specific project time in quarter notes.
   4477 
   4478   double (*MIDI_GetPPQPosFromProjQN)(MediaItem_Take* take, double projqn);
   4479 #endif
   4480 
   4481 #if defined(REAPERAPI_WANT_MIDI_GetPPQPosFromProjTime) || !defined(REAPERAPI_MINIMAL)
   4482 REAPERAPI_DEF //==============================================
   4483 // MIDI_GetPPQPosFromProjTime
   4484 // Returns the MIDI tick (ppq) position corresponding to a specific project time in seconds.
   4485 
   4486   double (*MIDI_GetPPQPosFromProjTime)(MediaItem_Take* take, double projtime);
   4487 #endif
   4488 
   4489 #if defined(REAPERAPI_WANT_MIDI_GetProjQNFromPPQPos) || !defined(REAPERAPI_MINIMAL)
   4490 REAPERAPI_DEF //==============================================
   4491 // MIDI_GetProjQNFromPPQPos
   4492 // Returns the project time in quarter notes corresponding to a specific MIDI tick (ppq) position.
   4493 
   4494   double (*MIDI_GetProjQNFromPPQPos)(MediaItem_Take* take, double ppqpos);
   4495 #endif
   4496 
   4497 #if defined(REAPERAPI_WANT_MIDI_GetProjTimeFromPPQPos) || !defined(REAPERAPI_MINIMAL)
   4498 REAPERAPI_DEF //==============================================
   4499 // MIDI_GetProjTimeFromPPQPos
   4500 // Returns the project time in seconds corresponding to a specific MIDI tick (ppq) position.
   4501 
   4502   double (*MIDI_GetProjTimeFromPPQPos)(MediaItem_Take* take, double ppqpos);
   4503 #endif
   4504 
   4505 #if defined(REAPERAPI_WANT_MIDI_GetRecentInputEvent) || !defined(REAPERAPI_MINIMAL)
   4506 REAPERAPI_DEF //==============================================
   4507 // MIDI_GetRecentInputEvent
   4508 // Gets a recent MIDI input event from the global history. idx=0 for the most recent event, which also latches to the latest MIDI event state (to get a more recent list, calling with idx=0 is necessary). idx=1 next most recent event, returns a non-zero sequence number for the event, or zero if no more events. tsOut will be set to the timestamp in samples relative to the current position (0 is current, -48000 is one second ago, etc). devIdxOut will have the low 16 bits set to the input device index, and 0x10000 will be set if device was enabled only for control. projPosOut will be set to project position in seconds if project was playing back at time of event, otherwise -1. Large SysEx events will not be included in this event list.
   4509 
   4510   int (*MIDI_GetRecentInputEvent)(int idx, char* bufOut, int* bufOut_sz, int* tsOut, int* devIdxOut, double* projPosOut, int* projLoopCntOut);
   4511 #endif
   4512 
   4513 #if defined(REAPERAPI_WANT_MIDI_GetScale) || !defined(REAPERAPI_MINIMAL)
   4514 REAPERAPI_DEF //==============================================
   4515 // MIDI_GetScale
   4516 // 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.
   4517 
   4518   bool (*MIDI_GetScale)(MediaItem_Take* take, int* rootOut, int* scaleOut, char* nameOut, int nameOut_sz);
   4519 #endif
   4520 
   4521 #if defined(REAPERAPI_WANT_MIDI_GetTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   4522 REAPERAPI_DEF //==============================================
   4523 // MIDI_GetTextSysexEvt
   4524 // Get MIDI meta-event properties. Allowable types are -1:sysex (msg should not include bounding F0..F7), 1-14:MIDI text event types, 15=REAPER notation event. For all other meta-messages, type is returned as -2 and msg returned as all zeroes. See MIDI_GetEvt.
   4525 
   4526   bool (*MIDI_GetTextSysexEvt)(MediaItem_Take* take, int textsyxevtidx, bool* selectedOutOptional, bool* mutedOutOptional, double* ppqposOutOptional, int* typeOutOptional, char* msgOptional, int* msgOptional_sz);
   4527 #endif
   4528 
   4529 #if defined(REAPERAPI_WANT_MIDI_GetTrackHash) || !defined(REAPERAPI_MINIMAL)
   4530 REAPERAPI_DEF //==============================================
   4531 // MIDI_GetTrackHash
   4532 // 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
   4533 
   4534   bool (*MIDI_GetTrackHash)(MediaTrack* track, bool notesonly, char* hashOut, int hashOut_sz);
   4535 #endif
   4536 
   4537 #if defined(REAPERAPI_WANT_midi_init) || !defined(REAPERAPI_MINIMAL)
   4538 REAPERAPI_DEF //==============================================
   4539 // midi_init
   4540 // Opens MIDI devices as configured in preferences. force_reinit_input and force_reinit_output force a particular device index to close/re-open (pass -1 to not force any devices to reopen).
   4541 
   4542   void (*midi_init)(int force_reinit_input, int force_reinit_output);
   4543 #endif
   4544 
   4545 #if defined(REAPERAPI_WANT_MIDI_InsertCC) || !defined(REAPERAPI_MINIMAL)
   4546 REAPERAPI_DEF //==============================================
   4547 // MIDI_InsertCC
   4548 // Insert a new MIDI CC event.
   4549 
   4550   bool (*MIDI_InsertCC)(MediaItem_Take* take, bool selected, bool muted, double ppqpos, int chanmsg, int chan, int msg2, int msg3);
   4551 #endif
   4552 
   4553 #if defined(REAPERAPI_WANT_MIDI_InsertEvt) || !defined(REAPERAPI_MINIMAL)
   4554 REAPERAPI_DEF //==============================================
   4555 // MIDI_InsertEvt
   4556 // Insert a new MIDI event.
   4557 
   4558   bool (*MIDI_InsertEvt)(MediaItem_Take* take, bool selected, bool muted, double ppqpos, const char* bytestr, int bytestr_sz);
   4559 #endif
   4560 
   4561 #if defined(REAPERAPI_WANT_MIDI_InsertNote) || !defined(REAPERAPI_MINIMAL)
   4562 REAPERAPI_DEF //==============================================
   4563 // MIDI_InsertNote
   4564 // Insert a new MIDI note. Set noSort if inserting multiple events, then call MIDI_Sort when done.
   4565 
   4566   bool (*MIDI_InsertNote)(MediaItem_Take* take, bool selected, bool muted, double startppqpos, double endppqpos, int chan, int pitch, int vel, const bool* noSortInOptional);
   4567 #endif
   4568 
   4569 #if defined(REAPERAPI_WANT_MIDI_InsertTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   4570 REAPERAPI_DEF //==============================================
   4571 // MIDI_InsertTextSysexEvt
   4572 // Insert a new MIDI text or sysex event. Allowable types are -1:sysex (msg should not include bounding F0..F7), 1-14:MIDI text event types, 15=REAPER notation event.
   4573 
   4574   bool (*MIDI_InsertTextSysexEvt)(MediaItem_Take* take, bool selected, bool muted, double ppqpos, int type, const char* bytestr, int bytestr_sz);
   4575 #endif
   4576 
   4577 #if defined(REAPERAPI_WANT_midi_reinit) || !defined(REAPERAPI_MINIMAL)
   4578 REAPERAPI_DEF //==============================================
   4579 // midi_reinit
   4580 // Reset (close and re-open) all MIDI devices
   4581 
   4582   void (*midi_reinit)();
   4583 #endif
   4584 
   4585 #if defined(REAPERAPI_WANT_MIDI_SelectAll) || !defined(REAPERAPI_MINIMAL)
   4586 REAPERAPI_DEF //==============================================
   4587 // MIDI_SelectAll
   4588 // Select or deselect all MIDI content.
   4589 
   4590   void (*MIDI_SelectAll)(MediaItem_Take* take, bool select);
   4591 #endif
   4592 
   4593 #if defined(REAPERAPI_WANT_MIDI_SetAllEvts) || !defined(REAPERAPI_MINIMAL)
   4594 REAPERAPI_DEF //==============================================
   4595 // MIDI_SetAllEvts
   4596 // Set all MIDI data. MIDI buffer is passed in as a list of { int offset, char flag, int msglen, unsigned char msg[] }.
   4597 // offset: MIDI ticks from previous event
   4598 // flag: &1=selected &2=muted
   4599 // flag high 4 bits for CC shape: &16=linear, &32=slow start/end, &16|32=fast start, &64=fast end, &64|16=bezier
   4600 // msg: the MIDI message.
   4601 // A meta-event of type 0xF followed by 'CCBZ ' and 5 more bytes represents bezier curve data for the previous MIDI event: 1 byte for the bezier type (usually 0) and 4 bytes for the bezier tension as a float.
   4602 // For tick intervals longer than a 32 bit word can represent, zero-length meta events may be placed between valid events.
   4603 // See MIDI_GetAllEvts.
   4604 
   4605   bool (*MIDI_SetAllEvts)(MediaItem_Take* take, const char* buf, int buf_sz);
   4606 #endif
   4607 
   4608 #if defined(REAPERAPI_WANT_MIDI_SetCC) || !defined(REAPERAPI_MINIMAL)
   4609 REAPERAPI_DEF //==============================================
   4610 // MIDI_SetCC
   4611 // 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.
   4612 
   4613   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);
   4614 #endif
   4615 
   4616 #if defined(REAPERAPI_WANT_MIDI_SetCCShape) || !defined(REAPERAPI_MINIMAL)
   4617 REAPERAPI_DEF //==============================================
   4618 // MIDI_SetCCShape
   4619 // Set CC shape and bezier tension. set noSort if setting multiple events, then call MIDI_Sort when done. See MIDI_SetCC, MIDI_GetCCShape
   4620 
   4621   bool (*MIDI_SetCCShape)(MediaItem_Take* take, int ccidx, int shape, double beztension, const bool* noSortInOptional);
   4622 #endif
   4623 
   4624 #if defined(REAPERAPI_WANT_MIDI_SetEvt) || !defined(REAPERAPI_MINIMAL)
   4625 REAPERAPI_DEF //==============================================
   4626 // MIDI_SetEvt
   4627 // Set MIDI event properties. Properties passed as NULL will not be set.  set noSort if setting multiple events, then call MIDI_Sort when done.
   4628 
   4629   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);
   4630 #endif
   4631 
   4632 #if defined(REAPERAPI_WANT_MIDI_SetItemExtents) || !defined(REAPERAPI_MINIMAL)
   4633 REAPERAPI_DEF //==============================================
   4634 // MIDI_SetItemExtents
   4635 // Set the start/end positions of a media item that contains a MIDI take.
   4636 
   4637   bool (*MIDI_SetItemExtents)(MediaItem* item, double startQN, double endQN);
   4638 #endif
   4639 
   4640 #if defined(REAPERAPI_WANT_MIDI_SetNote) || !defined(REAPERAPI_MINIMAL)
   4641 REAPERAPI_DEF //==============================================
   4642 // MIDI_SetNote
   4643 // 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.
   4644 
   4645   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);
   4646 #endif
   4647 
   4648 #if defined(REAPERAPI_WANT_MIDI_SetTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   4649 REAPERAPI_DEF //==============================================
   4650 // MIDI_SetTextSysexEvt
   4651 // 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-14:MIDI text event types, 15=REAPER notation event. set noSort if setting multiple events, then call MIDI_Sort when done.
   4652 
   4653   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);
   4654 #endif
   4655 
   4656 #if defined(REAPERAPI_WANT_MIDI_Sort) || !defined(REAPERAPI_MINIMAL)
   4657 REAPERAPI_DEF //==============================================
   4658 // MIDI_Sort
   4659 // Sort MIDI events after multiple calls to MIDI_SetNote, MIDI_SetCC, etc.
   4660 
   4661   void (*MIDI_Sort)(MediaItem_Take* take);
   4662 #endif
   4663 
   4664 #if defined(REAPERAPI_WANT_MIDIEditor_EnumTakes) || !defined(REAPERAPI_MINIMAL)
   4665 REAPERAPI_DEF //==============================================
   4666 // MIDIEditor_EnumTakes
   4667 // list the takes that are currently being edited in this MIDI editor, starting with the active take. See MIDIEditor_GetTake
   4668 
   4669   MediaItem_Take* (*MIDIEditor_EnumTakes)(HWND midieditor, int takeindex, bool editable_only);
   4670 #endif
   4671 
   4672 #if defined(REAPERAPI_WANT_MIDIEditor_GetActive) || !defined(REAPERAPI_MINIMAL)
   4673 REAPERAPI_DEF //==============================================
   4674 // MIDIEditor_GetActive
   4675 // get a pointer to the focused MIDI editor window
   4676 // see MIDIEditor_GetMode, MIDIEditor_OnCommand
   4677 
   4678   HWND (*MIDIEditor_GetActive)();
   4679 #endif
   4680 
   4681 #if defined(REAPERAPI_WANT_MIDIEditor_GetMode) || !defined(REAPERAPI_MINIMAL)
   4682 REAPERAPI_DEF //==============================================
   4683 // MIDIEditor_GetMode
   4684 // get the mode of a MIDI editor (0=piano roll, 1=event list, -1=invalid editor)
   4685 // see MIDIEditor_GetActive, MIDIEditor_OnCommand
   4686 
   4687   int (*MIDIEditor_GetMode)(HWND midieditor);
   4688 #endif
   4689 
   4690 #if defined(REAPERAPI_WANT_MIDIEditor_GetSetting_int) || !defined(REAPERAPI_MINIMAL)
   4691 REAPERAPI_DEF //==============================================
   4692 // MIDIEditor_GetSetting_int
   4693 // Get settings from a MIDI editor. setting_desc can be:
   4694 // snap_enabled: returns 0 or 1
   4695 // active_note_row: returns 0-127
   4696 // last_clicked_cc_lane: returns 0-127=CC, 0x100|(0-31)=14-bit CC, 0x200=velocity, 0x201=pitch, 0x202=program, 0x203=channel pressure, 0x204=bank/program select, 0x205=text, 0x206=sysex, 0x207=off velocity, 0x208=notation events, 0x210=media item lane
   4697 // default_note_vel: returns 0-127
   4698 // default_note_chan: returns 0-15
   4699 // default_note_len: returns default length in MIDI ticks
   4700 // scale_enabled: returns 0-1
   4701 // scale_root: returns 0-12 (0=C)
   4702 // list_cnt: if viewing list view, returns event count
   4703 // if setting_desc is unsupported, the function returns -1.
   4704 // See MIDIEditor_SetSetting_int, MIDIEditor_GetActive, MIDIEditor_GetSetting_str
   4705 // 
   4706 
   4707   int (*MIDIEditor_GetSetting_int)(HWND midieditor, const char* setting_desc);
   4708 #endif
   4709 
   4710 #if defined(REAPERAPI_WANT_MIDIEditor_GetSetting_str) || !defined(REAPERAPI_MINIMAL)
   4711 REAPERAPI_DEF //==============================================
   4712 // MIDIEditor_GetSetting_str
   4713 // Get settings from a MIDI editor. setting_desc can be:
   4714 // last_clicked_cc_lane: returns text description ("velocity", "pitch", etc)
   4715 // scale: returns the scale record, for example "102034050607" for a major scale
   4716 // list_X: if viewing list view, returns string describing event at row X (0-based). String will have a list of key=value pairs, e.g. 'pos=4.0 len=4.0 offvel=127 msg=90317F'. pos/len times are in QN, len/offvel may not be present if event is not a note. other keys which may be present include pos_pq/len_pq, sel, mute, ccval14, ccshape, ccbeztension.
   4717 // if setting_desc is unsupported, the function returns false.
   4718 // See MIDIEditor_GetActive, MIDIEditor_GetSetting_int
   4719 // 
   4720 
   4721   bool (*MIDIEditor_GetSetting_str)(HWND midieditor, const char* setting_desc, char* bufOut, int bufOut_sz);
   4722 #endif
   4723 
   4724 #if defined(REAPERAPI_WANT_MIDIEditor_GetTake) || !defined(REAPERAPI_MINIMAL)
   4725 REAPERAPI_DEF //==============================================
   4726 // MIDIEditor_GetTake
   4727 // get the take that is currently being edited in this MIDI editor. see MIDIEditor_EnumTakes
   4728 
   4729   MediaItem_Take* (*MIDIEditor_GetTake)(HWND midieditor);
   4730 #endif
   4731 
   4732 #if defined(REAPERAPI_WANT_MIDIEditor_LastFocused_OnCommand) || !defined(REAPERAPI_MINIMAL)
   4733 REAPERAPI_DEF //==============================================
   4734 // MIDIEditor_LastFocused_OnCommand
   4735 // 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.
   4736 // see MIDIEditor_OnCommand
   4737 
   4738   bool (*MIDIEditor_LastFocused_OnCommand)(int command_id, bool islistviewcommand);
   4739 #endif
   4740 
   4741 #if defined(REAPERAPI_WANT_MIDIEditor_OnCommand) || !defined(REAPERAPI_MINIMAL)
   4742 REAPERAPI_DEF //==============================================
   4743 // MIDIEditor_OnCommand
   4744 // Send an action command to a MIDI editor. Returns false if the supplied MIDI editor pointer is not valid (not an open MIDI editor).
   4745 // see MIDIEditor_GetActive, MIDIEditor_LastFocused_OnCommand
   4746 
   4747   bool (*MIDIEditor_OnCommand)(HWND midieditor, int command_id);
   4748 #endif
   4749 
   4750 #if defined(REAPERAPI_WANT_MIDIEditor_SetSetting_int) || !defined(REAPERAPI_MINIMAL)
   4751 REAPERAPI_DEF //==============================================
   4752 // MIDIEditor_SetSetting_int
   4753 // Set settings for a MIDI editor. setting_desc can be:
   4754 // active_note_row: 0-127
   4755 // See MIDIEditor_GetSetting_int
   4756 // 
   4757 
   4758   bool (*MIDIEditor_SetSetting_int)(HWND midieditor, const char* setting_desc, int setting);
   4759 #endif
   4760 
   4761 #if defined(REAPERAPI_WANT_mkpanstr) || !defined(REAPERAPI_MINIMAL)
   4762 REAPERAPI_DEF //==============================================
   4763 // mkpanstr
   4764 
   4765   void (*mkpanstr)(char* strNeed64, double pan);
   4766 #endif
   4767 
   4768 #if defined(REAPERAPI_WANT_mkvolpanstr) || !defined(REAPERAPI_MINIMAL)
   4769 REAPERAPI_DEF //==============================================
   4770 // mkvolpanstr
   4771 
   4772   void (*mkvolpanstr)(char* strNeed64, double vol, double pan);
   4773 #endif
   4774 
   4775 #if defined(REAPERAPI_WANT_mkvolstr) || !defined(REAPERAPI_MINIMAL)
   4776 REAPERAPI_DEF //==============================================
   4777 // mkvolstr
   4778 
   4779   void (*mkvolstr)(char* strNeed64, double vol);
   4780 #endif
   4781 
   4782 #if defined(REAPERAPI_WANT_MoveEditCursor) || !defined(REAPERAPI_MINIMAL)
   4783 REAPERAPI_DEF //==============================================
   4784 // MoveEditCursor
   4785 
   4786   void (*MoveEditCursor)(double adjamt, bool dosel);
   4787 #endif
   4788 
   4789 #if defined(REAPERAPI_WANT_MoveMediaItemToTrack) || !defined(REAPERAPI_MINIMAL)
   4790 REAPERAPI_DEF //==============================================
   4791 // MoveMediaItemToTrack
   4792 // returns TRUE if move succeeded
   4793 
   4794   bool (*MoveMediaItemToTrack)(MediaItem* item, MediaTrack* desttr);
   4795 #endif
   4796 
   4797 #if defined(REAPERAPI_WANT_MuteAllTracks) || !defined(REAPERAPI_MINIMAL)
   4798 REAPERAPI_DEF //==============================================
   4799 // MuteAllTracks
   4800 
   4801   void (*MuteAllTracks)(bool mute);
   4802 #endif
   4803 
   4804 #if defined(REAPERAPI_WANT_my_getViewport) || !defined(REAPERAPI_MINIMAL)
   4805 REAPERAPI_DEF //==============================================
   4806 // my_getViewport
   4807 
   4808   void (*my_getViewport)(RECT* r, const RECT* sr, bool wantWorkArea);
   4809 #endif
   4810 
   4811 #if defined(REAPERAPI_WANT_NamedCommandLookup) || !defined(REAPERAPI_MINIMAL)
   4812 REAPERAPI_DEF //==============================================
   4813 // NamedCommandLookup
   4814 // 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.
   4815 
   4816   int (*NamedCommandLookup)(const char* command_name);
   4817 #endif
   4818 
   4819 #if defined(REAPERAPI_WANT_OnPauseButton) || !defined(REAPERAPI_MINIMAL)
   4820 REAPERAPI_DEF //==============================================
   4821 // OnPauseButton
   4822 // direct way to simulate pause button hit
   4823 
   4824   void (*OnPauseButton)();
   4825 #endif
   4826 
   4827 #if defined(REAPERAPI_WANT_OnPauseButtonEx) || !defined(REAPERAPI_MINIMAL)
   4828 REAPERAPI_DEF //==============================================
   4829 // OnPauseButtonEx
   4830 // direct way to simulate pause button hit
   4831 
   4832   void (*OnPauseButtonEx)(ReaProject* proj);
   4833 #endif
   4834 
   4835 #if defined(REAPERAPI_WANT_OnPlayButton) || !defined(REAPERAPI_MINIMAL)
   4836 REAPERAPI_DEF //==============================================
   4837 // OnPlayButton
   4838 // direct way to simulate play button hit
   4839 
   4840   void (*OnPlayButton)();
   4841 #endif
   4842 
   4843 #if defined(REAPERAPI_WANT_OnPlayButtonEx) || !defined(REAPERAPI_MINIMAL)
   4844 REAPERAPI_DEF //==============================================
   4845 // OnPlayButtonEx
   4846 // direct way to simulate play button hit
   4847 
   4848   void (*OnPlayButtonEx)(ReaProject* proj);
   4849 #endif
   4850 
   4851 #if defined(REAPERAPI_WANT_OnStopButton) || !defined(REAPERAPI_MINIMAL)
   4852 REAPERAPI_DEF //==============================================
   4853 // OnStopButton
   4854 // direct way to simulate stop button hit
   4855 
   4856   void (*OnStopButton)();
   4857 #endif
   4858 
   4859 #if defined(REAPERAPI_WANT_OnStopButtonEx) || !defined(REAPERAPI_MINIMAL)
   4860 REAPERAPI_DEF //==============================================
   4861 // OnStopButtonEx
   4862 // direct way to simulate stop button hit
   4863 
   4864   void (*OnStopButtonEx)(ReaProject* proj);
   4865 #endif
   4866 
   4867 #if defined(REAPERAPI_WANT_OpenColorThemeFile) || !defined(REAPERAPI_MINIMAL)
   4868 REAPERAPI_DEF //==============================================
   4869 // OpenColorThemeFile
   4870 
   4871   bool (*OpenColorThemeFile)(const char* fn);
   4872 #endif
   4873 
   4874 #if defined(REAPERAPI_WANT_OpenMediaExplorer) || !defined(REAPERAPI_MINIMAL)
   4875 REAPERAPI_DEF //==============================================
   4876 // OpenMediaExplorer
   4877 // Opens mediafn in the Media Explorer, play=true will play the file immediately (or toggle playback if mediafn was already open), =false will just select it.
   4878 
   4879   HWND (*OpenMediaExplorer)(const char* mediafn, bool play);
   4880 #endif
   4881 
   4882 #if defined(REAPERAPI_WANT_OscLocalMessageToHost) || !defined(REAPERAPI_MINIMAL)
   4883 REAPERAPI_DEF //==============================================
   4884 // OscLocalMessageToHost
   4885 // 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.
   4886 
   4887   void (*OscLocalMessageToHost)(const char* message, const double* valueInOptional);
   4888 #endif
   4889 
   4890 #if defined(REAPERAPI_WANT_parse_timestr) || !defined(REAPERAPI_MINIMAL)
   4891 REAPERAPI_DEF //==============================================
   4892 // parse_timestr
   4893 // Parse hh:mm:ss.sss time string, return time in seconds (or 0.0 on error). See parse_timestr_pos, parse_timestr_len.
   4894 
   4895   double (*parse_timestr)(const char* buf);
   4896 #endif
   4897 
   4898 #if defined(REAPERAPI_WANT_parse_timestr_len) || !defined(REAPERAPI_MINIMAL)
   4899 REAPERAPI_DEF //==============================================
   4900 // parse_timestr_len
   4901 // time formatting mode overrides: -1=proj default.
   4902 // 0=time
   4903 // 1=measures.beats + time
   4904 // 2=measures.beats
   4905 // 3=seconds
   4906 // 4=samples
   4907 // 5=h:m:s:f
   4908 // 
   4909 
   4910   double (*parse_timestr_len)(const char* buf, double offset, int modeoverride);
   4911 #endif
   4912 
   4913 #if defined(REAPERAPI_WANT_parse_timestr_pos) || !defined(REAPERAPI_MINIMAL)
   4914 REAPERAPI_DEF //==============================================
   4915 // parse_timestr_pos
   4916 // Parse time string, time formatting mode overrides: -1=proj default.
   4917 // 0=time
   4918 // 1=measures.beats + time
   4919 // 2=measures.beats
   4920 // 3=seconds
   4921 // 4=samples
   4922 // 5=h:m:s:f
   4923 // 
   4924 
   4925   double (*parse_timestr_pos)(const char* buf, int modeoverride);
   4926 #endif
   4927 
   4928 #if defined(REAPERAPI_WANT_parsepanstr) || !defined(REAPERAPI_MINIMAL)
   4929 REAPERAPI_DEF //==============================================
   4930 // parsepanstr
   4931 
   4932   double (*parsepanstr)(const char* str);
   4933 #endif
   4934 
   4935 #if defined(REAPERAPI_WANT_PCM_Sink_Create) || !defined(REAPERAPI_MINIMAL)
   4936 REAPERAPI_DEF //==============================================
   4937 // PCM_Sink_Create
   4938 
   4939   PCM_sink* (*PCM_Sink_Create)(const char* filename, const char* cfg, int cfg_sz, int nch, int srate, bool buildpeaks);
   4940 #endif
   4941 
   4942 #if defined(REAPERAPI_WANT_PCM_Sink_CreateEx) || !defined(REAPERAPI_MINIMAL)
   4943 REAPERAPI_DEF //==============================================
   4944 // PCM_Sink_CreateEx
   4945 
   4946   PCM_sink* (*PCM_Sink_CreateEx)(ReaProject* proj, const char* filename, const char* cfg, int cfg_sz, int nch, int srate, bool buildpeaks);
   4947 #endif
   4948 
   4949 #if defined(REAPERAPI_WANT_PCM_Sink_CreateMIDIFile) || !defined(REAPERAPI_MINIMAL)
   4950 REAPERAPI_DEF //==============================================
   4951 // PCM_Sink_CreateMIDIFile
   4952 
   4953   PCM_sink* (*PCM_Sink_CreateMIDIFile)(const char* filename, const char* cfg, int cfg_sz, double bpm, int div);
   4954 #endif
   4955 
   4956 #if defined(REAPERAPI_WANT_PCM_Sink_CreateMIDIFileEx) || !defined(REAPERAPI_MINIMAL)
   4957 REAPERAPI_DEF //==============================================
   4958 // PCM_Sink_CreateMIDIFileEx
   4959 
   4960   PCM_sink* (*PCM_Sink_CreateMIDIFileEx)(ReaProject* proj, const char* filename, const char* cfg, int cfg_sz, double bpm, int div);
   4961 #endif
   4962 
   4963 #if defined(REAPERAPI_WANT_PCM_Sink_Enum) || !defined(REAPERAPI_MINIMAL)
   4964 REAPERAPI_DEF //==============================================
   4965 // PCM_Sink_Enum
   4966 
   4967   unsigned int (*PCM_Sink_Enum)(int idx, const char** descstrOut);
   4968 #endif
   4969 
   4970 #if defined(REAPERAPI_WANT_PCM_Sink_GetExtension) || !defined(REAPERAPI_MINIMAL)
   4971 REAPERAPI_DEF //==============================================
   4972 // PCM_Sink_GetExtension
   4973 
   4974   const char* (*PCM_Sink_GetExtension)(const char* data, int data_sz);
   4975 #endif
   4976 
   4977 #if defined(REAPERAPI_WANT_PCM_Sink_ShowConfig) || !defined(REAPERAPI_MINIMAL)
   4978 REAPERAPI_DEF //==============================================
   4979 // PCM_Sink_ShowConfig
   4980 
   4981   HWND (*PCM_Sink_ShowConfig)(const char* cfg, int cfg_sz, HWND hwndParent);
   4982 #endif
   4983 
   4984 #if defined(REAPERAPI_WANT_PCM_Source_BuildPeaks) || !defined(REAPERAPI_MINIMAL)
   4985 REAPERAPI_DEF //==============================================
   4986 // PCM_Source_BuildPeaks
   4987 // Calls and returns PCM_source::PeaksBuild_Begin() if mode=0, PeaksBuild_Run() if mode=1, and PeaksBuild_Finish() if mode=2. Normal use is to call PCM_Source_BuildPeaks(src,0), and if that returns nonzero, call PCM_Source_BuildPeaks(src,1) periodically until it returns zero (it returns the percentage of the file remaining), then call PCM_Source_BuildPeaks(src,2) to finalize. If PCM_Source_BuildPeaks(src,0) returns zero, then no further action is necessary.
   4988 
   4989   int (*PCM_Source_BuildPeaks)(PCM_source* src, int mode);
   4990 #endif
   4991 
   4992 #if defined(REAPERAPI_WANT_PCM_Source_CreateFromFile) || !defined(REAPERAPI_MINIMAL)
   4993 REAPERAPI_DEF //==============================================
   4994 // PCM_Source_CreateFromFile
   4995 // See PCM_Source_CreateFromFileEx.
   4996 
   4997   PCM_source* (*PCM_Source_CreateFromFile)(const char* filename);
   4998 #endif
   4999 
   5000 #if defined(REAPERAPI_WANT_PCM_Source_CreateFromFileEx) || !defined(REAPERAPI_MINIMAL)
   5001 REAPERAPI_DEF //==============================================
   5002 // PCM_Source_CreateFromFileEx
   5003 // Create a PCM_source from filename, and override pref of MIDI files being imported as in-project MIDI events.
   5004 
   5005   PCM_source* (*PCM_Source_CreateFromFileEx)(const char* filename, bool forcenoMidiImp);
   5006 #endif
   5007 
   5008 #if defined(REAPERAPI_WANT_PCM_Source_CreateFromSimple) || !defined(REAPERAPI_MINIMAL)
   5009 REAPERAPI_DEF //==============================================
   5010 // PCM_Source_CreateFromSimple
   5011 // Creates a PCM_source from a ISimpleMediaDecoder
   5012 // (if fn is non-null, it will open the file in dec)
   5013 
   5014   PCM_source* (*PCM_Source_CreateFromSimple)(ISimpleMediaDecoder* dec, const char* fn);
   5015 #endif
   5016 
   5017 #if defined(REAPERAPI_WANT_PCM_Source_CreateFromType) || !defined(REAPERAPI_MINIMAL)
   5018 REAPERAPI_DEF //==============================================
   5019 // PCM_Source_CreateFromType
   5020 // Create a PCM_source from a "type" (use this if you're going to load its state via LoadState/ProjectStateContext).
   5021 // Valid types include "WAVE", "MIDI", or whatever plug-ins define as well.
   5022 
   5023   PCM_source* (*PCM_Source_CreateFromType)(const char* sourcetype);
   5024 #endif
   5025 
   5026 #if defined(REAPERAPI_WANT_PCM_Source_Destroy) || !defined(REAPERAPI_MINIMAL)
   5027 REAPERAPI_DEF //==============================================
   5028 // PCM_Source_Destroy
   5029 // Deletes a PCM_source -- be sure that you remove any project reference before deleting a source
   5030 
   5031   void (*PCM_Source_Destroy)(PCM_source* src);
   5032 #endif
   5033 
   5034 #if defined(REAPERAPI_WANT_PCM_Source_GetPeaks) || !defined(REAPERAPI_MINIMAL)
   5035 REAPERAPI_DEF //==============================================
   5036 // PCM_Source_GetPeaks
   5037 // Gets block of peak samples to buf. Note that the peak samples are interleaved, but in two or three blocks (maximums, then minimums, then extra). Return value has 20 bits of returned sample count, then 4 bits of output_mode (0xf00000), then a bit to signify whether extra_type was available (0x1000000). extra_type can be 115 ('s') for spectral information, which will return peak samples as integers with the low 15 bits frequency, next 14 bits tonality.
   5038 
   5039   int (*PCM_Source_GetPeaks)(PCM_source* src, double peakrate, double starttime, int numchannels, int numsamplesperchannel, int want_extra_type, double* buf);
   5040 #endif
   5041 
   5042 #if defined(REAPERAPI_WANT_PCM_Source_GetSectionInfo) || !defined(REAPERAPI_MINIMAL)
   5043 REAPERAPI_DEF //==============================================
   5044 // PCM_Source_GetSectionInfo
   5045 // If a section/reverse block, retrieves offset/len/reverse. return true if success
   5046 
   5047   bool (*PCM_Source_GetSectionInfo)(PCM_source* src, double* offsOut, double* lenOut, bool* revOut);
   5048 #endif
   5049 
   5050 #if defined(REAPERAPI_WANT_PeakBuild_Create) || !defined(REAPERAPI_MINIMAL)
   5051 REAPERAPI_DEF //==============================================
   5052 // PeakBuild_Create
   5053 
   5054   REAPER_PeakBuild_Interface* (*PeakBuild_Create)(PCM_source* src, const char* fn, int srate, int nch);
   5055 #endif
   5056 
   5057 #if defined(REAPERAPI_WANT_PeakBuild_CreateEx) || !defined(REAPERAPI_MINIMAL)
   5058 REAPERAPI_DEF //==============================================
   5059 // PeakBuild_CreateEx
   5060 // flags&1 for FP support
   5061 
   5062   REAPER_PeakBuild_Interface* (*PeakBuild_CreateEx)(PCM_source* src, const char* fn, int srate, int nch, int flags);
   5063 #endif
   5064 
   5065 #if defined(REAPERAPI_WANT_PeakGet_Create) || !defined(REAPERAPI_MINIMAL)
   5066 REAPERAPI_DEF //==============================================
   5067 // PeakGet_Create
   5068 
   5069   REAPER_PeakGet_Interface* (*PeakGet_Create)(const char* fn, int srate, int nch);
   5070 #endif
   5071 
   5072 #if defined(REAPERAPI_WANT_PitchShiftSubModeMenu) || !defined(REAPERAPI_MINIMAL)
   5073 REAPERAPI_DEF //==============================================
   5074 // PitchShiftSubModeMenu
   5075 // menu to select/modify pitch shifter submode, returns new value (or old value if no item selected)
   5076 
   5077   int (*PitchShiftSubModeMenu)(HWND hwnd, int x, int y, int mode, int submode_sel);
   5078 #endif
   5079 
   5080 #if defined(REAPERAPI_WANT_PlayPreview) || !defined(REAPERAPI_MINIMAL)
   5081 REAPERAPI_DEF //==============================================
   5082 // PlayPreview
   5083 // return nonzero on success
   5084 
   5085   int (*PlayPreview)(preview_register_t* preview);
   5086 #endif
   5087 
   5088 #if defined(REAPERAPI_WANT_PlayPreviewEx) || !defined(REAPERAPI_MINIMAL)
   5089 REAPERAPI_DEF //==============================================
   5090 // PlayPreviewEx
   5091 // return nonzero on success. bufflags &1=buffer source, &2=treat length changes in source as varispeed and adjust internal state accordingly if buffering. measure_align<0=play immediately, >0=align playback with measure start
   5092 
   5093   int (*PlayPreviewEx)(preview_register_t* preview, int bufflags, double measure_align);
   5094 #endif
   5095 
   5096 #if defined(REAPERAPI_WANT_PlayTrackPreview) || !defined(REAPERAPI_MINIMAL)
   5097 REAPERAPI_DEF //==============================================
   5098 // PlayTrackPreview
   5099 // return nonzero on success,in these,m_out_chan is a track index (0-n)
   5100 
   5101   int (*PlayTrackPreview)(preview_register_t* preview);
   5102 #endif
   5103 
   5104 #if defined(REAPERAPI_WANT_PlayTrackPreview2) || !defined(REAPERAPI_MINIMAL)
   5105 REAPERAPI_DEF //==============================================
   5106 // PlayTrackPreview2
   5107 // return nonzero on success,in these,m_out_chan is a track index (0-n)
   5108 
   5109   int (*PlayTrackPreview2)(ReaProject* proj, preview_register_t* preview);
   5110 #endif
   5111 
   5112 #if defined(REAPERAPI_WANT_PlayTrackPreview2Ex) || !defined(REAPERAPI_MINIMAL)
   5113 REAPERAPI_DEF //==============================================
   5114 // PlayTrackPreview2Ex
   5115 // return nonzero on success,in these,m_out_chan is a track index (0-n). see PlayPreviewEx
   5116 
   5117   int (*PlayTrackPreview2Ex)(ReaProject* proj, preview_register_t* preview, int flags, double measure_align);
   5118 #endif
   5119 
   5120 #if defined(REAPERAPI_WANT_plugin_getapi) || !defined(REAPERAPI_MINIMAL)
   5121 REAPERAPI_DEF //==============================================
   5122 // plugin_getapi
   5123 
   5124   void* (*plugin_getapi)(const char* name);
   5125 #endif
   5126 
   5127 #if defined(REAPERAPI_WANT_plugin_getFilterList) || !defined(REAPERAPI_MINIMAL)
   5128 REAPERAPI_DEF //==============================================
   5129 // plugin_getFilterList
   5130 // Returns a double-NULL terminated list of importable media files, suitable for passing to GetOpenFileName() etc. Includes *.* (All files).
   5131 
   5132   const char* (*plugin_getFilterList)();
   5133 #endif
   5134 
   5135 #if defined(REAPERAPI_WANT_plugin_getImportableProjectFilterList) || !defined(REAPERAPI_MINIMAL)
   5136 REAPERAPI_DEF //==============================================
   5137 // plugin_getImportableProjectFilterList
   5138 // Returns a double-NULL terminated list of importable project files, suitable for passing to GetOpenFileName() etc. Includes *.* (All files).
   5139 
   5140   const char* (*plugin_getImportableProjectFilterList)();
   5141 #endif
   5142 
   5143 #if defined(REAPERAPI_WANT_plugin_register) || !defined(REAPERAPI_MINIMAL)
   5144 REAPERAPI_DEF //==============================================
   5145 // plugin_register
   5146 // Alias for reaper_plugin_info_t::Register, see reaper_plugin.h for documented uses.
   5147 
   5148   int (*plugin_register)(const char* name, void* infostruct);
   5149 #endif
   5150 
   5151 #if defined(REAPERAPI_WANT_PluginWantsAlwaysRunFx) || !defined(REAPERAPI_MINIMAL)
   5152 REAPERAPI_DEF //==============================================
   5153 // PluginWantsAlwaysRunFx
   5154 
   5155   void (*PluginWantsAlwaysRunFx)(int amt);
   5156 #endif
   5157 
   5158 #if defined(REAPERAPI_WANT_PreventUIRefresh) || !defined(REAPERAPI_MINIMAL)
   5159 REAPERAPI_DEF //==============================================
   5160 // PreventUIRefresh
   5161 // adds prevent_count to the UI refresh prevention state; always add then remove the same amount, or major disfunction will occur
   5162 
   5163   void (*PreventUIRefresh)(int prevent_count);
   5164 #endif
   5165 
   5166 #if defined(REAPERAPI_WANT_projectconfig_var_addr) || !defined(REAPERAPI_MINIMAL)
   5167 REAPERAPI_DEF //==============================================
   5168 // projectconfig_var_addr
   5169 
   5170   void* (*projectconfig_var_addr)(ReaProject* proj, int idx);
   5171 #endif
   5172 
   5173 #if defined(REAPERAPI_WANT_projectconfig_var_getoffs) || !defined(REAPERAPI_MINIMAL)
   5174 REAPERAPI_DEF //==============================================
   5175 // projectconfig_var_getoffs
   5176 // returns offset to pass to projectconfig_var_addr() to get project-config var of name. szout gets size of object.
   5177 
   5178   int (*projectconfig_var_getoffs)(const char* name, int* szOut);
   5179 #endif
   5180 
   5181 #if defined(REAPERAPI_WANT_PromptForAction) || !defined(REAPERAPI_MINIMAL)
   5182 REAPERAPI_DEF //==============================================
   5183 // PromptForAction
   5184 // Uses the action list to choose an action. Call with session_mode=1 to create a session (init_id will be the initial action to select, or 0), then poll with session_mode=0, checking return value for user-selected action (will return 0 if no action selected yet, or -1 if the action window is no longer available). When finished, call with session_mode=-1.
   5185 
   5186   int (*PromptForAction)(int session_mode, int init_id, int section_id);
   5187 #endif
   5188 
   5189 #if defined(REAPERAPI_WANT_realloc_cmd_clear) || !defined(REAPERAPI_MINIMAL)
   5190 REAPERAPI_DEF //==============================================
   5191 // realloc_cmd_clear
   5192 // clears a buffer/buffer-size registration added with realloc_cmd_register_buf, and clears any later registrations, frees any allocated buffers. call after values are read from any registered pointers etc.
   5193 
   5194   void (*realloc_cmd_clear)(int tok);
   5195 #endif
   5196 
   5197 #if defined(REAPERAPI_WANT_realloc_cmd_ptr) || !defined(REAPERAPI_MINIMAL)
   5198 REAPERAPI_DEF //==============================================
   5199 // realloc_cmd_ptr
   5200 // special use for NeedBig script API functions - reallocates a NeedBig buffer and updates its size, returns false on error
   5201 
   5202   bool (*realloc_cmd_ptr)(char** ptr, int* ptr_size, int new_size);
   5203 #endif
   5204 
   5205 #if defined(REAPERAPI_WANT_realloc_cmd_register_buf) || !defined(REAPERAPI_MINIMAL)
   5206 REAPERAPI_DEF //==============================================
   5207 // realloc_cmd_register_buf
   5208 // registers a buffer/buffer-size which may be reallocated by an API (ptr/ptr_size will be updated to the new values). returns a token which should be passed to realloc_cmd_clear after API call and values are read.
   5209 
   5210   int (*realloc_cmd_register_buf)(char** ptr, int* ptr_size);
   5211 #endif
   5212 
   5213 #if defined(REAPERAPI_WANT_ReaperGetPitchShiftAPI) || !defined(REAPERAPI_MINIMAL)
   5214 REAPERAPI_DEF //==============================================
   5215 // ReaperGetPitchShiftAPI
   5216 // version must be REAPER_PITCHSHIFT_API_VER
   5217 
   5218   IReaperPitchShift* (*ReaperGetPitchShiftAPI)(int version);
   5219 #endif
   5220 
   5221 #if defined(REAPERAPI_WANT_ReaScriptError) || !defined(REAPERAPI_MINIMAL)
   5222 REAPERAPI_DEF //==============================================
   5223 // ReaScriptError
   5224 // Causes REAPER to display the error message after the current ReaScript finishes. If called within a Lua context and errmsg has a ! prefix, script execution will be terminated.
   5225 
   5226   void (*ReaScriptError)(const char* errmsg);
   5227 #endif
   5228 
   5229 #if defined(REAPERAPI_WANT_RecursiveCreateDirectory) || !defined(REAPERAPI_MINIMAL)
   5230 REAPERAPI_DEF //==============================================
   5231 // RecursiveCreateDirectory
   5232 // returns positive value on success, 0 on failure.
   5233 
   5234   int (*RecursiveCreateDirectory)(const char* path, size_t ignored);
   5235 #endif
   5236 
   5237 #if defined(REAPERAPI_WANT_reduce_open_files) || !defined(REAPERAPI_MINIMAL)
   5238 REAPERAPI_DEF //==============================================
   5239 // reduce_open_files
   5240 // garbage-collects extra open files and closes them. if flags has 1 set, this is done incrementally (call this from a regular timer, if desired). if flags has 2 set, files are aggressively closed (they may need to be re-opened very soon). returns number of files closed by this call.
   5241 
   5242   int (*reduce_open_files)(int flags);
   5243 #endif
   5244 
   5245 #if defined(REAPERAPI_WANT_RefreshToolbar) || !defined(REAPERAPI_MINIMAL)
   5246 REAPERAPI_DEF //==============================================
   5247 // RefreshToolbar
   5248 // See RefreshToolbar2.
   5249 
   5250   void (*RefreshToolbar)(int command_id);
   5251 #endif
   5252 
   5253 #if defined(REAPERAPI_WANT_RefreshToolbar2) || !defined(REAPERAPI_MINIMAL)
   5254 REAPERAPI_DEF //==============================================
   5255 // RefreshToolbar2
   5256 // Refresh the toolbar button states of a toggle action.
   5257 
   5258   void (*RefreshToolbar2)(int section_id, int command_id);
   5259 #endif
   5260 
   5261 #if defined(REAPERAPI_WANT_relative_fn) || !defined(REAPERAPI_MINIMAL)
   5262 REAPERAPI_DEF //==============================================
   5263 // relative_fn
   5264 // Makes a filename "in" relative to the current project, if any.
   5265 
   5266   void (*relative_fn)(const char* in, char* out, int out_sz);
   5267 #endif
   5268 
   5269 #if defined(REAPERAPI_WANT_RemoveTrackSend) || !defined(REAPERAPI_MINIMAL)
   5270 REAPERAPI_DEF //==============================================
   5271 // RemoveTrackSend
   5272 // Remove a send/receive/hardware output, return true on success. category is <0 for receives, 0=sends, >0 for hardware outputs. See CreateTrackSend, GetSetTrackSendInfo, GetTrackSendInfo_Value, SetTrackSendInfo_Value, GetTrackNumSends.
   5273 
   5274   bool (*RemoveTrackSend)(MediaTrack* tr, int category, int sendidx);
   5275 #endif
   5276 
   5277 #if defined(REAPERAPI_WANT_RenderFileSection) || !defined(REAPERAPI_MINIMAL)
   5278 REAPERAPI_DEF //==============================================
   5279 // RenderFileSection
   5280 // Not available while playing back.
   5281 
   5282   bool (*RenderFileSection)(const char* source_filename, const char* target_filename, double start_percent, double end_percent, double playrate);
   5283 #endif
   5284 
   5285 #if defined(REAPERAPI_WANT_ReorderSelectedTracks) || !defined(REAPERAPI_MINIMAL)
   5286 REAPERAPI_DEF //==============================================
   5287 // ReorderSelectedTracks
   5288 // Moves all selected tracks to immediately above track specified by index beforeTrackIdx, returns false if no tracks were selected. makePrevFolder=0 for normal, 1 = as child of track preceding track specified by beforeTrackIdx, 2 = if track preceding track specified by beforeTrackIdx is last track in folder, extend folder
   5289 
   5290   bool (*ReorderSelectedTracks)(int beforeTrackIdx, int makePrevFolder);
   5291 #endif
   5292 
   5293 #if defined(REAPERAPI_WANT_Resample_EnumModes) || !defined(REAPERAPI_MINIMAL)
   5294 REAPERAPI_DEF //==============================================
   5295 // Resample_EnumModes
   5296 
   5297   const char* (*Resample_EnumModes)(int mode);
   5298 #endif
   5299 
   5300 #if defined(REAPERAPI_WANT_Resampler_Create) || !defined(REAPERAPI_MINIMAL)
   5301 REAPERAPI_DEF //==============================================
   5302 // Resampler_Create
   5303 
   5304   REAPER_Resample_Interface* (*Resampler_Create)();
   5305 #endif
   5306 
   5307 #if defined(REAPERAPI_WANT_resolve_fn) || !defined(REAPERAPI_MINIMAL)
   5308 REAPERAPI_DEF //==============================================
   5309 // resolve_fn
   5310 // See resolve_fn2.
   5311 
   5312   void (*resolve_fn)(const char* in, char* out, int out_sz);
   5313 #endif
   5314 
   5315 #if defined(REAPERAPI_WANT_resolve_fn2) || !defined(REAPERAPI_MINIMAL)
   5316 REAPERAPI_DEF //==============================================
   5317 // resolve_fn2
   5318 // Resolves a filename "in" by using project settings etc. If no file found, out will be a copy of in.
   5319 
   5320   void (*resolve_fn2)(const char* in, char* out, int out_sz, const char* checkSubDirOptional);
   5321 #endif
   5322 
   5323 #if defined(REAPERAPI_WANT_ResolveRenderPattern) || !defined(REAPERAPI_MINIMAL)
   5324 REAPERAPI_DEF //==============================================
   5325 // ResolveRenderPattern
   5326 // Resolve a wildcard pattern into a set of nul-separated, double-nul terminated render target filenames. Returns the length of the string buffer needed for the returned file list. Call with path=NULL to suppress filtering out illegal pathnames, call with targets=NULL to get just the string buffer length.
   5327 
   5328   int (*ResolveRenderPattern)(ReaProject* project, const char* path, const char* pattern, char* targets, int targets_sz);
   5329 #endif
   5330 
   5331 #if defined(REAPERAPI_WANT_ReverseNamedCommandLookup) || !defined(REAPERAPI_MINIMAL)
   5332 REAPERAPI_DEF //==============================================
   5333 // ReverseNamedCommandLookup
   5334 // 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.
   5335 
   5336   const char* (*ReverseNamedCommandLookup)(int command_id);
   5337 #endif
   5338 
   5339 #if defined(REAPERAPI_WANT_ScaleFromEnvelopeMode) || !defined(REAPERAPI_MINIMAL)
   5340 REAPERAPI_DEF //==============================================
   5341 // ScaleFromEnvelopeMode
   5342 // See GetEnvelopeScalingMode.
   5343 
   5344   double (*ScaleFromEnvelopeMode)(int scaling_mode, double val);
   5345 #endif
   5346 
   5347 #if defined(REAPERAPI_WANT_ScaleToEnvelopeMode) || !defined(REAPERAPI_MINIMAL)
   5348 REAPERAPI_DEF //==============================================
   5349 // ScaleToEnvelopeMode
   5350 // See GetEnvelopeScalingMode.
   5351 
   5352   double (*ScaleToEnvelopeMode)(int scaling_mode, double val);
   5353 #endif
   5354 
   5355 #if defined(REAPERAPI_WANT_screenset_register) || !defined(REAPERAPI_MINIMAL)
   5356 REAPERAPI_DEF //==============================================
   5357 // screenset_register
   5358 
   5359   void (*screenset_register)(char* id, void* callbackFunc, void* param);
   5360 #endif
   5361 
   5362 #if defined(REAPERAPI_WANT_screenset_registerNew) || !defined(REAPERAPI_MINIMAL)
   5363 REAPERAPI_DEF //==============================================
   5364 // screenset_registerNew
   5365 
   5366   void (*screenset_registerNew)(char* id, screensetNewCallbackFunc callbackFunc, void* param);
   5367 #endif
   5368 
   5369 #if defined(REAPERAPI_WANT_screenset_unregister) || !defined(REAPERAPI_MINIMAL)
   5370 REAPERAPI_DEF //==============================================
   5371 // screenset_unregister
   5372 
   5373   void (*screenset_unregister)(char* id);
   5374 #endif
   5375 
   5376 #if defined(REAPERAPI_WANT_screenset_unregisterByParam) || !defined(REAPERAPI_MINIMAL)
   5377 REAPERAPI_DEF //==============================================
   5378 // screenset_unregisterByParam
   5379 
   5380   void (*screenset_unregisterByParam)(void* param);
   5381 #endif
   5382 
   5383 #if defined(REAPERAPI_WANT_screenset_updateLastFocus) || !defined(REAPERAPI_MINIMAL)
   5384 REAPERAPI_DEF //==============================================
   5385 // screenset_updateLastFocus
   5386 
   5387   void (*screenset_updateLastFocus)(HWND prevWin);
   5388 #endif
   5389 
   5390 #if defined(REAPERAPI_WANT_SectionFromUniqueID) || !defined(REAPERAPI_MINIMAL)
   5391 REAPERAPI_DEF //==============================================
   5392 // SectionFromUniqueID
   5393 
   5394   KbdSectionInfo* (*SectionFromUniqueID)(int uniqueID);
   5395 #endif
   5396 
   5397 #if defined(REAPERAPI_WANT_SelectAllMediaItems) || !defined(REAPERAPI_MINIMAL)
   5398 REAPERAPI_DEF //==============================================
   5399 // SelectAllMediaItems
   5400 
   5401   void (*SelectAllMediaItems)(ReaProject* proj, bool selected);
   5402 #endif
   5403 
   5404 #if defined(REAPERAPI_WANT_SelectProjectInstance) || !defined(REAPERAPI_MINIMAL)
   5405 REAPERAPI_DEF //==============================================
   5406 // SelectProjectInstance
   5407 
   5408   void (*SelectProjectInstance)(ReaProject* proj);
   5409 #endif
   5410 
   5411 #if defined(REAPERAPI_WANT_SendLocalOscMessage) || !defined(REAPERAPI_MINIMAL)
   5412 REAPERAPI_DEF //==============================================
   5413 // SendLocalOscMessage
   5414 // Send an OSC message to REAPER. See CreateLocalOscHandler, DestroyLocalOscHandler.
   5415 
   5416   void (*SendLocalOscMessage)(void* local_osc_handler, const char* msg, int msglen);
   5417 #endif
   5418 
   5419 #if defined(REAPERAPI_WANT_SetActiveTake) || !defined(REAPERAPI_MINIMAL)
   5420 REAPERAPI_DEF //==============================================
   5421 // SetActiveTake
   5422 // set this take active in this media item
   5423 
   5424   void (*SetActiveTake)(MediaItem_Take* take);
   5425 #endif
   5426 
   5427 #if defined(REAPERAPI_WANT_SetAutomationMode) || !defined(REAPERAPI_MINIMAL)
   5428 REAPERAPI_DEF //==============================================
   5429 // SetAutomationMode
   5430 // sets all or selected tracks to mode.
   5431 
   5432   void (*SetAutomationMode)(int mode, bool onlySel);
   5433 #endif
   5434 
   5435 #if defined(REAPERAPI_WANT_SetCurrentBPM) || !defined(REAPERAPI_MINIMAL)
   5436 REAPERAPI_DEF //==============================================
   5437 // SetCurrentBPM
   5438 // set current BPM in project, set wantUndo=true to add undo point
   5439 
   5440   void (*SetCurrentBPM)(ReaProject* __proj, double bpm, bool wantUndo);
   5441 #endif
   5442 
   5443 #if defined(REAPERAPI_WANT_SetCursorContext) || !defined(REAPERAPI_MINIMAL)
   5444 REAPERAPI_DEF //==============================================
   5445 // SetCursorContext
   5446 // 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)
   5447 
   5448   void (*SetCursorContext)(int mode, TrackEnvelope* envInOptional);
   5449 #endif
   5450 
   5451 #if defined(REAPERAPI_WANT_SetEditCurPos) || !defined(REAPERAPI_MINIMAL)
   5452 REAPERAPI_DEF //==============================================
   5453 // SetEditCurPos
   5454 
   5455   void (*SetEditCurPos)(double time, bool moveview, bool seekplay);
   5456 #endif
   5457 
   5458 #if defined(REAPERAPI_WANT_SetEditCurPos2) || !defined(REAPERAPI_MINIMAL)
   5459 REAPERAPI_DEF //==============================================
   5460 // SetEditCurPos2
   5461 
   5462   void (*SetEditCurPos2)(ReaProject* proj, double time, bool moveview, bool seekplay);
   5463 #endif
   5464 
   5465 #if defined(REAPERAPI_WANT_SetEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   5466 REAPERAPI_DEF //==============================================
   5467 // SetEnvelopePoint
   5468 // 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 SetEnvelopePointEx.
   5469 
   5470   bool (*SetEnvelopePoint)(TrackEnvelope* envelope, int ptidx, double* timeInOptional, double* valueInOptional, int* shapeInOptional, double* tensionInOptional, bool* selectedInOptional, bool* noSortInOptional);
   5471 #endif
   5472 
   5473 #if defined(REAPERAPI_WANT_SetEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   5474 REAPERAPI_DEF //==============================================
   5475 // SetEnvelopePointEx
   5476 // 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.
   5477 // autoitem_idx=-1 for the underlying envelope, 0 for the first automation item on the envelope, etc.
   5478 // For automation items, pass autoitem_idx|0x10000000 to base ptidx on the number of points in one full loop iteration,
   5479 // even if the automation item is trimmed so that not all points are visible.
   5480 // Otherwise, ptidx will be based on the number of visible points in the automation item, including all loop iterations.
   5481 // See CountEnvelopePointsEx, GetEnvelopePointEx, InsertEnvelopePointEx, DeleteEnvelopePointEx.
   5482 
   5483   bool (*SetEnvelopePointEx)(TrackEnvelope* envelope, int autoitem_idx, int ptidx, double* timeInOptional, double* valueInOptional, int* shapeInOptional, double* tensionInOptional, bool* selectedInOptional, bool* noSortInOptional);
   5484 #endif
   5485 
   5486 #if defined(REAPERAPI_WANT_SetEnvelopeStateChunk) || !defined(REAPERAPI_MINIMAL)
   5487 REAPERAPI_DEF //==============================================
   5488 // SetEnvelopeStateChunk
   5489 // Sets the RPPXML state of an envelope, returns true if successful. Undo flag is a performance/caching hint.
   5490 
   5491   bool (*SetEnvelopeStateChunk)(TrackEnvelope* env, const char* str, bool isundoOptional);
   5492 #endif
   5493 
   5494 #if defined(REAPERAPI_WANT_SetExtState) || !defined(REAPERAPI_MINIMAL)
   5495 REAPERAPI_DEF //==============================================
   5496 // SetExtState
   5497 // 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.
   5498 
   5499   void (*SetExtState)(const char* section, const char* key, const char* value, bool persist);
   5500 #endif
   5501 
   5502 #if defined(REAPERAPI_WANT_SetGlobalAutomationOverride) || !defined(REAPERAPI_MINIMAL)
   5503 REAPERAPI_DEF //==============================================
   5504 // SetGlobalAutomationOverride
   5505 // mode: see GetGlobalAutomationOverride
   5506 
   5507   void (*SetGlobalAutomationOverride)(int mode);
   5508 #endif
   5509 
   5510 #if defined(REAPERAPI_WANT_SetItemStateChunk) || !defined(REAPERAPI_MINIMAL)
   5511 REAPERAPI_DEF //==============================================
   5512 // SetItemStateChunk
   5513 // Sets the RPPXML state of an item, returns true if successful. Undo flag is a performance/caching hint.
   5514 
   5515   bool (*SetItemStateChunk)(MediaItem* item, const char* str, bool isundoOptional);
   5516 #endif
   5517 
   5518 #if defined(REAPERAPI_WANT_SetMasterTrackVisibility) || !defined(REAPERAPI_MINIMAL)
   5519 REAPERAPI_DEF //==============================================
   5520 // SetMasterTrackVisibility
   5521 // set &1 to show the master track in the TCP, &2 to HIDE in the mixer. Returns the previous visibility state. See GetMasterTrackVisibility.
   5522 
   5523   int (*SetMasterTrackVisibility)(int flag);
   5524 #endif
   5525 
   5526 #if defined(REAPERAPI_WANT_SetMediaItemInfo_Value) || !defined(REAPERAPI_MINIMAL)
   5527 REAPERAPI_DEF //==============================================
   5528 // SetMediaItemInfo_Value
   5529 // Set media item numerical-value attributes.
   5530 // B_MUTE : bool * : muted (item solo overrides). setting this value will clear C_MUTE_SOLO.
   5531 // B_MUTE_ACTUAL : bool * : muted (ignores solo). setting this value will not affect C_MUTE_SOLO.
   5532 // C_MUTE_SOLO : char * : solo override (-1=soloed, 0=no override, 1=unsoloed). note that this API does not automatically unsolo other items when soloing (nor clear the unsolos when clearing the last soloed item), it must be done by the caller via action or via this API.
   5533 // B_LOOPSRC : bool * : loop source
   5534 // B_ALLTAKESPLAY : bool * : all takes play
   5535 // B_UISEL : bool * : selected in arrange view
   5536 // C_BEATATTACHMODE : char * : item timebase, -1=track or project default, 1=beats (position, length, rate), 2=beats (position only). for auto-stretch timebase: C_BEATATTACHMODE=1, C_AUTOSTRETCH=1
   5537 // C_AUTOSTRETCH: : char * : auto-stretch at project tempo changes, 1=enabled, requires C_BEATATTACHMODE=1
   5538 // C_LOCK : char * : locked, &1=locked
   5539 // D_VOL : double * : item volume,  0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   5540 // D_POSITION : double * : item position in seconds
   5541 // D_LENGTH : double * : item length in seconds
   5542 // D_SNAPOFFSET : double * : item snap offset in seconds
   5543 // D_FADEINLEN : double * : item manual fadein length in seconds
   5544 // D_FADEOUTLEN : double * : item manual fadeout length in seconds
   5545 // D_FADEINDIR : double * : item fadein curvature, -1..1
   5546 // D_FADEOUTDIR : double * : item fadeout curvature, -1..1
   5547 // D_FADEINLEN_AUTO : double * : item auto-fadein length in seconds, -1=no auto-fadein
   5548 // D_FADEOUTLEN_AUTO : double * : item auto-fadeout length in seconds, -1=no auto-fadeout
   5549 // C_FADEINSHAPE : int * : fadein shape, 0..6, 0=linear
   5550 // C_FADEOUTSHAPE : int * : fadeout shape, 0..6, 0=linear
   5551 // I_GROUPID : int * : group ID, 0=no group
   5552 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   5553 // I_LASTH : int * : height in pixels (read-only)
   5554 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   5555 // I_CURTAKE : int * : active take number
   5556 // IP_ITEMNUMBER : int : item number on this track (read-only, returns the item number directly)
   5557 // F_FREEMODE_Y : float * : free item positioning Y-position, 0=top of track, 1=bottom of track (will never be 1)
   5558 // F_FREEMODE_H : float * : free item positioning height, 0=no height, 1=full height of track (will never be 0)
   5559 // 
   5560 
   5561   bool (*SetMediaItemInfo_Value)(MediaItem* item, const char* parmname, double newvalue);
   5562 #endif
   5563 
   5564 #if defined(REAPERAPI_WANT_SetMediaItemLength) || !defined(REAPERAPI_MINIMAL)
   5565 REAPERAPI_DEF //==============================================
   5566 // SetMediaItemLength
   5567 // Redraws the screen only if refreshUI == true.
   5568 // See UpdateArrange().
   5569 
   5570   bool (*SetMediaItemLength)(MediaItem* item, double length, bool refreshUI);
   5571 #endif
   5572 
   5573 #if defined(REAPERAPI_WANT_SetMediaItemPosition) || !defined(REAPERAPI_MINIMAL)
   5574 REAPERAPI_DEF //==============================================
   5575 // SetMediaItemPosition
   5576 // Redraws the screen only if refreshUI == true.
   5577 // See UpdateArrange().
   5578 
   5579   bool (*SetMediaItemPosition)(MediaItem* item, double position, bool refreshUI);
   5580 #endif
   5581 
   5582 #if defined(REAPERAPI_WANT_SetMediaItemSelected) || !defined(REAPERAPI_MINIMAL)
   5583 REAPERAPI_DEF //==============================================
   5584 // SetMediaItemSelected
   5585 
   5586   void (*SetMediaItemSelected)(MediaItem* item, bool selected);
   5587 #endif
   5588 
   5589 #if defined(REAPERAPI_WANT_SetMediaItemTake_Source) || !defined(REAPERAPI_MINIMAL)
   5590 REAPERAPI_DEF //==============================================
   5591 // SetMediaItemTake_Source
   5592 // Set media source of media item take. The old source will not be destroyed, it is the caller's responsibility to retrieve it and destroy it after. If source already exists in any project, it will be duplicated before being set. C/C++ code should not use this and instead use GetSetMediaItemTakeInfo() with P_SOURCE to manage ownership directly.
   5593 
   5594   bool (*SetMediaItemTake_Source)(MediaItem_Take* take, PCM_source* source);
   5595 #endif
   5596 
   5597 #if defined(REAPERAPI_WANT_SetMediaItemTakeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   5598 REAPERAPI_DEF //==============================================
   5599 // SetMediaItemTakeInfo_Value
   5600 // Set media item take numerical-value attributes.
   5601 // D_STARTOFFS : double * : start offset in source media, in seconds
   5602 // D_VOL : double * : take volume, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc, negative if take polarity is flipped
   5603 // D_PAN : double * : take pan, -1..1
   5604 // D_PANLAW : double * : take pan law, -1=default, 0.5=-6dB, 1.0=+0dB, etc
   5605 // D_PLAYRATE : double * : take playback rate, 0.5=half speed, 1=normal, 2=double speed, etc
   5606 // D_PITCH : double * : take pitch adjustment in semitones, -12=one octave down, 0=normal, +12=one octave up, etc
   5607 // B_PPITCH : bool * : preserve pitch when changing playback rate
   5608 // I_LASTY : int * : Y-position (relative to top of track) in pixels (read-only)
   5609 // I_LASTH : int * : height in pixels (read-only)
   5610 // I_CHANMODE : int * : channel mode, 0=normal, 1=reverse stereo, 2=downmix, 3=left, 4=right
   5611 // I_PITCHMODE : int * : pitch shifter mode, -1=projext default, otherwise high 2 bytes=shifter, low 2 bytes=parameter
   5612 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   5613 // IP_TAKENUMBER : int : take number (read-only, returns the take number directly)
   5614 // 
   5615 
   5616   bool (*SetMediaItemTakeInfo_Value)(MediaItem_Take* take, const char* parmname, double newvalue);
   5617 #endif
   5618 
   5619 #if defined(REAPERAPI_WANT_SetMediaTrackInfo_Value) || !defined(REAPERAPI_MINIMAL)
   5620 REAPERAPI_DEF //==============================================
   5621 // SetMediaTrackInfo_Value
   5622 // Set track numerical-value attributes.
   5623 // B_MUTE : bool * : muted
   5624 // B_PHASE : bool * : track phase inverted
   5625 // B_RECMON_IN_EFFECT : bool * : record monitoring in effect (current audio-thread playback state, read-only)
   5626 // IP_TRACKNUMBER : int : track number 1-based, 0=not found, -1=master track (read-only, returns the int directly)
   5627 // I_SOLO : int * : soloed, 0=not soloed, 1=soloed, 2=soloed in place, 5=safe soloed, 6=safe soloed in place
   5628 // B_SOLO_DEFEAT : bool * : when set, if anything else is soloed and this track is not muted, this track acts soloed
   5629 // I_FXEN : int * : fx enabled, 0=bypassed, !0=fx active
   5630 // I_RECARM : int * : record armed, 0=not record armed, 1=record armed
   5631 // I_RECINPUT : int * : record input, <0=no input. if 4096 set, input is MIDI and low 5 bits represent channel (0=all, 1-16=only chan), next 6 bits represent physical input (63=all, 62=VKB). If 4096 is not set, low 10 bits (0..1023) are input start channel (ReaRoute/Loopback start at 512). If 2048 is set, input is multichannel input (using track channel count), or if 1024 is set, input is stereo input, otherwise input is mono.
   5632 // I_RECMODE : int * : record mode, 0=input, 1=stereo out, 2=none, 3=stereo out w/latency compensation, 4=midi output, 5=mono out, 6=mono out w/ latency compensation, 7=midi overdub, 8=midi replace
   5633 // I_RECMODE_FLAGS : int * : record mode flags, &3=output recording mode (0=post fader, 1=pre-fx, 2=post-fx/pre-fader)
   5634 // I_RECMON : int * : record monitoring, 0=off, 1=normal, 2=not when playing (tape style)
   5635 // I_RECMONITEMS : int * : monitor items while recording, 0=off, 1=on
   5636 // B_AUTO_RECARM : bool * : automatically set record arm when selected (does not immediately affect recarm state, script should set directly if desired)
   5637 // I_VUMODE : int * : track vu mode, &1:disabled, &30==0:stereo peaks, &30==2:multichannel peaks, &30==4:stereo RMS, &30==8:combined RMS, &30==12:LUFS-M, &30==16:LUFS-S (readout=max), &30==20:LUFS-S (readout=current), &32:LUFS calculation on channels 1+2 only
   5638 // I_AUTOMODE : int * : track automation mode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch
   5639 // I_NCHAN : int * : number of track channels, 2-64, even numbers only
   5640 // I_SELECTED : int * : track selected, 0=unselected, 1=selected
   5641 // I_WNDH : int * : current TCP window height in pixels including envelopes (read-only)
   5642 // I_TCPH : int * : current TCP window height in pixels not including envelopes (read-only)
   5643 // I_TCPY : int * : current TCP window Y-position in pixels relative to top of arrange view (read-only)
   5644 // I_MCPX : int * : current MCP X-position in pixels relative to mixer container (read-only)
   5645 // I_MCPY : int * : current MCP Y-position in pixels relative to mixer container (read-only)
   5646 // I_MCPW : int * : current MCP width in pixels (read-only)
   5647 // I_MCPH : int * : current MCP height in pixels (read-only)
   5648 // I_FOLDERDEPTH : int * : folder depth change, 0=normal, 1=track is a folder parent, -1=track is the last in the innermost folder, -2=track is the last in the innermost and next-innermost folders, etc
   5649 // I_FOLDERCOMPACT : int * : folder compacted state (only valid on folders), 0=normal, 1=small, 2=tiny children
   5650 // I_MIDIHWOUT : int * : track midi hardware output index, <0=disabled, low 5 bits are which channels (0=all, 1-16), next 5 bits are output device index (0-31)
   5651 // I_PERFFLAGS : int * : track performance flags, &1=no media buffering, &2=no anticipative FX
   5652 // I_CUSTOMCOLOR : int * : custom color, OS dependent color|0x1000000 (i.e. ColorToNative(r,g,b)|0x1000000). If you do not |0x1000000, then it will not be used, but will store the color
   5653 // I_HEIGHTOVERRIDE : int * : custom height override for TCP window, 0 for none, otherwise size in pixels
   5654 // B_HEIGHTLOCK : bool * : track height lock (must set I_HEIGHTOVERRIDE before locking)
   5655 // D_VOL : double * : trim volume of track, 0=-inf, 0.5=-6dB, 1=+0dB, 2=+6dB, etc
   5656 // D_PAN : double * : trim pan of track, -1..1
   5657 // D_WIDTH : double * : width of track, -1..1
   5658 // D_DUALPANL : double * : dualpan position 1, -1..1, only if I_PANMODE==6
   5659 // D_DUALPANR : double * : dualpan position 2, -1..1, only if I_PANMODE==6
   5660 // I_PANMODE : int * : pan mode, 0=classic 3.x, 3=new balance, 5=stereo pan, 6=dual pan
   5661 // D_PANLAW : double * : pan law of track, <0=project default, 0.5=-6dB, 0.707..=-3dB, 1=+0dB, 1.414..=-3dB with gain compensation, 2=-6dB with gain compensation, etc
   5662 // I_PANLAW_FLAGS : int * : pan law flags, 0=sine taper, 1=hybrid taper with deprecated behavior when gain compensation enabled, 2=linear taper, 3=hybrid taper
   5663 // P_ENV:<envchunkname or P_ENV:{GUID... : TrackEnvelope * : (read-only) chunkname can be <VOLENV, <PANENV, etc; GUID is the stringified envelope GUID.
   5664 // B_SHOWINMIXER : bool * : track control panel visible in mixer (do not use on master track)
   5665 // B_SHOWINTCP : bool * : track control panel visible in arrange view (do not use on master track)
   5666 // B_MAINSEND : bool * : track sends audio to parent
   5667 // C_MAINSEND_OFFS : char * : channel offset of track send to parent
   5668 // C_MAINSEND_NCH : char * : channel count of track send to parent (0=use all child track channels, 1=use one channel only)
   5669 // I_FREEMODE : int * : 1=track free item positioning enabled, 2=track fixed lanes enabled (call UpdateTimeline() after changing)
   5670 // C_BEATATTACHMODE : char * : track timebase, -1=project default, 0=time, 1=beats (position, length, rate), 2=beats (position only)
   5671 // F_MCP_FXSEND_SCALE : float * : scale of fx+send area in MCP (0=minimum allowed, 1=maximum allowed)
   5672 // F_MCP_FXPARM_SCALE : float * : scale of fx parameter area in MCP (0=minimum allowed, 1=maximum allowed)
   5673 // F_MCP_SENDRGN_SCALE : float * : scale of send area as proportion of the fx+send total area (0=minimum allowed, 1=maximum allowed)
   5674 // F_TCP_FXPARM_SCALE : float * : scale of TCP parameter area when TCP FX are embedded (0=min allowed, default, 1=max allowed)
   5675 // I_PLAY_OFFSET_FLAG : int * : track media playback offset state, &1=bypassed, &2=offset value is measured in samples (otherwise measured in seconds)
   5676 // D_PLAY_OFFSET : double * : track media playback offset, units depend on I_PLAY_OFFSET_FLAG
   5677 // 
   5678 
   5679   bool (*SetMediaTrackInfo_Value)(MediaTrack* tr, const char* parmname, double newvalue);
   5680 #endif
   5681 
   5682 #if defined(REAPERAPI_WANT_SetMIDIEditorGrid) || !defined(REAPERAPI_MINIMAL)
   5683 REAPERAPI_DEF //==============================================
   5684 // SetMIDIEditorGrid
   5685 // Set the MIDI editor grid division. 0.25=quarter note, 1.0/3.0=half note tripet, etc.
   5686 
   5687   void (*SetMIDIEditorGrid)(ReaProject* project, double division);
   5688 #endif
   5689 
   5690 #if defined(REAPERAPI_WANT_SetMixerScroll) || !defined(REAPERAPI_MINIMAL)
   5691 REAPERAPI_DEF //==============================================
   5692 // SetMixerScroll
   5693 // 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.
   5694 
   5695   MediaTrack* (*SetMixerScroll)(MediaTrack* leftmosttrack);
   5696 #endif
   5697 
   5698 #if defined(REAPERAPI_WANT_SetMouseModifier) || !defined(REAPERAPI_MINIMAL)
   5699 REAPERAPI_DEF //==============================================
   5700 // SetMouseModifier
   5701 // Set the mouse modifier assignment for a specific modifier key assignment, in a specific context.
   5702 // Context is a string like "MM_CTX_ITEM". Find these strings by modifying an assignment in 
   5703 // Preferences/Editing/Mouse Modifiers, then looking in reaper-mouse.ini.
   5704 // Modifier flag is a number from 0 to 15: add 1 for shift, 2 for control, 4 for alt, 8 for win.
   5705 // (macOS: add 1 for shift, 2 for command, 4 for opt, 8 for control.)
   5706 // For left-click and double-click contexts, the action can be any built-in command ID number
   5707 // or any custom action ID string. Find built-in command IDs in the REAPER actions window
   5708 // (enable "show action IDs" in the context menu), and find custom action ID strings in reaper-kb.ini.
   5709 // For built-in mouse modifier behaviors, find action IDs (which will be low numbers)
   5710 // by modifying an assignment in Preferences/Editing/Mouse Modifiers, then looking in reaper-mouse.ini.
   5711 // Assigning an action of -1 will reset that mouse modifier behavior to factory default.
   5712 // See GetMouseModifier.
   5713 // 
   5714 
   5715   void (*SetMouseModifier)(const char* context, int modifier_flag, const char* action);
   5716 #endif
   5717 
   5718 #if defined(REAPERAPI_WANT_SetOnlyTrackSelected) || !defined(REAPERAPI_MINIMAL)
   5719 REAPERAPI_DEF //==============================================
   5720 // SetOnlyTrackSelected
   5721 // Set exactly one track selected, deselect all others
   5722 
   5723   void (*SetOnlyTrackSelected)(MediaTrack* track);
   5724 #endif
   5725 
   5726 #if defined(REAPERAPI_WANT_SetProjectGrid) || !defined(REAPERAPI_MINIMAL)
   5727 REAPERAPI_DEF //==============================================
   5728 // SetProjectGrid
   5729 // Set the arrange view grid division. 0.25=quarter note, 1.0/3.0=half note triplet, etc.
   5730 
   5731   void (*SetProjectGrid)(ReaProject* project, double division);
   5732 #endif
   5733 
   5734 #if defined(REAPERAPI_WANT_SetProjectMarker) || !defined(REAPERAPI_MINIMAL)
   5735 REAPERAPI_DEF //==============================================
   5736 // SetProjectMarker
   5737 
   5738   bool (*SetProjectMarker)(int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name);
   5739 #endif
   5740 
   5741 #if defined(REAPERAPI_WANT_SetProjectMarker2) || !defined(REAPERAPI_MINIMAL)
   5742 REAPERAPI_DEF //==============================================
   5743 // SetProjectMarker2
   5744 
   5745   bool (*SetProjectMarker2)(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name);
   5746 #endif
   5747 
   5748 #if defined(REAPERAPI_WANT_SetProjectMarker3) || !defined(REAPERAPI_MINIMAL)
   5749 REAPERAPI_DEF //==============================================
   5750 // SetProjectMarker3
   5751 
   5752   bool (*SetProjectMarker3)(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name, int color);
   5753 #endif
   5754 
   5755 #if defined(REAPERAPI_WANT_SetProjectMarker4) || !defined(REAPERAPI_MINIMAL)
   5756 REAPERAPI_DEF //==============================================
   5757 // SetProjectMarker4
   5758 // color should be 0 to not change, or ColorToNative(r,g,b)|0x1000000, flags&1 to clear name
   5759 
   5760   bool (*SetProjectMarker4)(ReaProject* proj, int markrgnindexnumber, bool isrgn, double pos, double rgnend, const char* name, int color, int flags);
   5761 #endif
   5762 
   5763 #if defined(REAPERAPI_WANT_SetProjectMarkerByIndex) || !defined(REAPERAPI_MINIMAL)
   5764 REAPERAPI_DEF //==============================================
   5765 // SetProjectMarkerByIndex
   5766 // See SetProjectMarkerByIndex2.
   5767 
   5768   bool (*SetProjectMarkerByIndex)(ReaProject* proj, int markrgnidx, bool isrgn, double pos, double rgnend, int IDnumber, const char* name, int color);
   5769 #endif
   5770 
   5771 #if defined(REAPERAPI_WANT_SetProjectMarkerByIndex2) || !defined(REAPERAPI_MINIMAL)
   5772 REAPERAPI_DEF //==============================================
   5773 // SetProjectMarkerByIndex2
   5774 // 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.
   5775 
   5776   bool (*SetProjectMarkerByIndex2)(ReaProject* proj, int markrgnidx, bool isrgn, double pos, double rgnend, int IDnumber, const char* name, int color, int flags);
   5777 #endif
   5778 
   5779 #if defined(REAPERAPI_WANT_SetProjExtState) || !defined(REAPERAPI_MINIMAL)
   5780 REAPERAPI_DEF //==============================================
   5781 // SetProjExtState
   5782 // 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.
   5783 
   5784   int (*SetProjExtState)(ReaProject* proj, const char* extname, const char* key, const char* value);
   5785 #endif
   5786 
   5787 #if defined(REAPERAPI_WANT_SetRegionRenderMatrix) || !defined(REAPERAPI_MINIMAL)
   5788 REAPERAPI_DEF //==============================================
   5789 // SetRegionRenderMatrix
   5790 // Add (flag > 0) or remove (flag < 0) a track from this region when using the region render matrix. If adding, flag==2 means force mono, flag==4 means force stereo, flag==N means force N/2 channels.
   5791 
   5792   void (*SetRegionRenderMatrix)(ReaProject* proj, int regionindex, MediaTrack* track, int flag);
   5793 #endif
   5794 
   5795 #if defined(REAPERAPI_WANT_SetRenderLastError) || !defined(REAPERAPI_MINIMAL)
   5796 REAPERAPI_DEF //==============================================
   5797 // SetRenderLastError
   5798 // Used by pcmsink objects to set an error to display while creating the pcmsink object.
   5799 
   5800   void (*SetRenderLastError)(const char* errorstr);
   5801 #endif
   5802 
   5803 #if defined(REAPERAPI_WANT_SetTakeMarker) || !defined(REAPERAPI_MINIMAL)
   5804 REAPERAPI_DEF //==============================================
   5805 // SetTakeMarker
   5806 // Inserts or updates a take marker. If idx<0, a take marker will be added, otherwise an existing take marker will be updated. Returns the index of the new or updated take marker (which may change if srcPos is updated). See GetNumTakeMarkers, GetTakeMarker, DeleteTakeMarker
   5807 
   5808   int (*SetTakeMarker)(MediaItem_Take* take, int idx, const char* nameIn, double* srcposInOptional, int* colorInOptional);
   5809 #endif
   5810 
   5811 #if defined(REAPERAPI_WANT_SetTakeStretchMarker) || !defined(REAPERAPI_MINIMAL)
   5812 REAPERAPI_DEF //==============================================
   5813 // SetTakeStretchMarker
   5814 // 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).
   5815 
   5816   int (*SetTakeStretchMarker)(MediaItem_Take* take, int idx, double pos, const double* srcposInOptional);
   5817 #endif
   5818 
   5819 #if defined(REAPERAPI_WANT_SetTakeStretchMarkerSlope) || !defined(REAPERAPI_MINIMAL)
   5820 REAPERAPI_DEF //==============================================
   5821 // SetTakeStretchMarkerSlope
   5822 // See GetTakeStretchMarkerSlope
   5823 
   5824   bool (*SetTakeStretchMarkerSlope)(MediaItem_Take* take, int idx, double slope);
   5825 #endif
   5826 
   5827 #if defined(REAPERAPI_WANT_SetTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   5828 REAPERAPI_DEF //==============================================
   5829 // SetTempoTimeSigMarker
   5830 // 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.
   5831 
   5832   bool (*SetTempoTimeSigMarker)(ReaProject* proj, int ptidx, double timepos, int measurepos, double beatpos, double bpm, int timesig_num, int timesig_denom, bool lineartempo);
   5833 #endif
   5834 
   5835 #if defined(REAPERAPI_WANT_SetThemeColor) || !defined(REAPERAPI_MINIMAL)
   5836 REAPERAPI_DEF //==============================================
   5837 // SetThemeColor
   5838 // Temporarily updates the theme color to the color specified (or the theme default color if -1 is specified). Returns -1 on failure, otherwise returns the color (or transformed-color). Note that the UI is not updated by this, the caller should call UpdateArrange() etc as necessary. If the low bit of flags is set, any color transformations are bypassed. To read a value see GetThemeColor.
   5839 
   5840   int (*SetThemeColor)(const char* ini_key, int color, int flagsOptional);
   5841 #endif
   5842 
   5843 #if defined(REAPERAPI_WANT_SetToggleCommandState) || !defined(REAPERAPI_MINIMAL)
   5844 REAPERAPI_DEF //==============================================
   5845 // SetToggleCommandState
   5846 // Updates the toggle state of an action, returns true if succeeded. Only ReaScripts can have their toggle states changed programmatically. See RefreshToolbar2.
   5847 
   5848   bool (*SetToggleCommandState)(int section_id, int command_id, int state);
   5849 #endif
   5850 
   5851 #if defined(REAPERAPI_WANT_SetTrackAutomationMode) || !defined(REAPERAPI_MINIMAL)
   5852 REAPERAPI_DEF //==============================================
   5853 // SetTrackAutomationMode
   5854 
   5855   void (*SetTrackAutomationMode)(MediaTrack* tr, int mode);
   5856 #endif
   5857 
   5858 #if defined(REAPERAPI_WANT_SetTrackColor) || !defined(REAPERAPI_MINIMAL)
   5859 REAPERAPI_DEF //==============================================
   5860 // SetTrackColor
   5861 // Set the custom track color, color is OS dependent (i.e. ColorToNative(r,g,b). To unset the track color, see SetMediaTrackInfo_Value I_CUSTOMCOLOR
   5862 
   5863   void (*SetTrackColor)(MediaTrack* track, int color);
   5864 #endif
   5865 
   5866 #if defined(REAPERAPI_WANT_SetTrackMIDILyrics) || !defined(REAPERAPI_MINIMAL)
   5867 REAPERAPI_DEF //==============================================
   5868 // SetTrackMIDILyrics
   5869 // Set all MIDI lyrics on the track. Lyrics will be stuffed into any MIDI items found in range. Flag is unused at present. str is passed in as beat position, tab, text, tab (example with flag=2: "1.1.2\tLyric for measure 1 beat 2\t2.1.1\tLyric for measure 2 beat 1	"). See GetTrackMIDILyrics
   5870 
   5871   bool (*SetTrackMIDILyrics)(MediaTrack* track, int flag, const char* str);
   5872 #endif
   5873 
   5874 #if defined(REAPERAPI_WANT_SetTrackMIDINoteName) || !defined(REAPERAPI_MINIMAL)
   5875 REAPERAPI_DEF //==============================================
   5876 // SetTrackMIDINoteName
   5877 // channel < 0 assigns these note names to all channels.
   5878 
   5879   bool (*SetTrackMIDINoteName)(int track, int pitch, int chan, const char* name);
   5880 #endif
   5881 
   5882 #if defined(REAPERAPI_WANT_SetTrackMIDINoteNameEx) || !defined(REAPERAPI_MINIMAL)
   5883 REAPERAPI_DEF //==============================================
   5884 // SetTrackMIDINoteNameEx
   5885 // channel < 0 assigns note name to all channels. pitch 128 assigns name for CC0, pitch 129 for CC1, etc.
   5886 
   5887   bool (*SetTrackMIDINoteNameEx)(ReaProject* proj, MediaTrack* track, int pitch, int chan, const char* name);
   5888 #endif
   5889 
   5890 #if defined(REAPERAPI_WANT_SetTrackSelected) || !defined(REAPERAPI_MINIMAL)
   5891 REAPERAPI_DEF //==============================================
   5892 // SetTrackSelected
   5893 
   5894   void (*SetTrackSelected)(MediaTrack* track, bool selected);
   5895 #endif
   5896 
   5897 #if defined(REAPERAPI_WANT_SetTrackSendInfo_Value) || !defined(REAPERAPI_MINIMAL)
   5898 REAPERAPI_DEF //==============================================
   5899 // SetTrackSendInfo_Value
   5900 // Set send/receive/hardware output numerical-value attributes, return true on success.
   5901 // category is <0 for receives, 0=sends, >0 for hardware outputs
   5902 // parameter names:
   5903 // B_MUTE : bool *
   5904 // B_PHASE : bool * : true to flip phase
   5905 // B_MONO : bool *
   5906 // D_VOL : double * : 1.0 = +0dB etc
   5907 // D_PAN : double * : -1..+1
   5908 // D_PANLAW : double * : 1.0=+0.0db, 0.5=-6dB, -1.0 = projdef etc
   5909 // I_SENDMODE : int * : 0=post-fader, 1=pre-fx, 2=post-fx (deprecated), 3=post-fx
   5910 // I_AUTOMODE : int * : automation mode (-1=use track automode, 0=trim/off, 1=read, 2=touch, 3=write, 4=latch)
   5911 // I_SRCCHAN : int * : index,&1024=mono, -1 for none
   5912 // I_DSTCHAN : int * : index, &1024=mono, otherwise stereo pair, hwout:&512=rearoute
   5913 // I_MIDIFLAGS : int * : low 5 bits=source channel 0=all, 1-16, next 5 bits=dest channel, 0=orig, 1-16=chan
   5914 // See CreateTrackSend, RemoveTrackSend, GetTrackNumSends.
   5915 
   5916   bool (*SetTrackSendInfo_Value)(MediaTrack* tr, int category, int sendidx, const char* parmname, double newvalue);
   5917 #endif
   5918 
   5919 #if defined(REAPERAPI_WANT_SetTrackSendUIPan) || !defined(REAPERAPI_MINIMAL)
   5920 REAPERAPI_DEF //==============================================
   5921 // SetTrackSendUIPan
   5922 // send_idx<0 for receives, >=0 for hw ouputs, >=nb_of_hw_ouputs for sends. isend=1 for end of edit, -1 for an instant edit (such as reset), 0 for normal tweak.
   5923 
   5924   bool (*SetTrackSendUIPan)(MediaTrack* track, int send_idx, double pan, int isend);
   5925 #endif
   5926 
   5927 #if defined(REAPERAPI_WANT_SetTrackSendUIVol) || !defined(REAPERAPI_MINIMAL)
   5928 REAPERAPI_DEF //==============================================
   5929 // SetTrackSendUIVol
   5930 // send_idx<0 for receives, >=0 for hw ouputs, >=nb_of_hw_ouputs for sends. isend=1 for end of edit, -1 for an instant edit (such as reset), 0 for normal tweak.
   5931 
   5932   bool (*SetTrackSendUIVol)(MediaTrack* track, int send_idx, double vol, int isend);
   5933 #endif
   5934 
   5935 #if defined(REAPERAPI_WANT_SetTrackStateChunk) || !defined(REAPERAPI_MINIMAL)
   5936 REAPERAPI_DEF //==============================================
   5937 // SetTrackStateChunk
   5938 // Sets the RPPXML state of a track, returns true if successful. Undo flag is a performance/caching hint.
   5939 
   5940   bool (*SetTrackStateChunk)(MediaTrack* track, const char* str, bool isundoOptional);
   5941 #endif
   5942 
   5943 #if defined(REAPERAPI_WANT_ShowActionList) || !defined(REAPERAPI_MINIMAL)
   5944 REAPERAPI_DEF //==============================================
   5945 // ShowActionList
   5946 
   5947   void (*ShowActionList)(KbdSectionInfo* caller, HWND callerWnd);
   5948 #endif
   5949 
   5950 #if defined(REAPERAPI_WANT_ShowConsoleMsg) || !defined(REAPERAPI_MINIMAL)
   5951 REAPERAPI_DEF //==============================================
   5952 // ShowConsoleMsg
   5953 // Show a message to the user (also useful for debugging). Send "\n" for newline, "" to clear the console. See ClearConsole
   5954 
   5955   void (*ShowConsoleMsg)(const char* msg);
   5956 #endif
   5957 
   5958 #if defined(REAPERAPI_WANT_ShowMessageBox) || !defined(REAPERAPI_MINIMAL)
   5959 REAPERAPI_DEF //==============================================
   5960 // ShowMessageBox
   5961 // type 0=OK,1=OKCANCEL,2=ABORTRETRYIGNORE,3=YESNOCANCEL,4=YESNO,5=RETRYCANCEL : ret 1=OK,2=CANCEL,3=ABORT,4=RETRY,5=IGNORE,6=YES,7=NO
   5962 
   5963   int (*ShowMessageBox)(const char* msg, const char* title, int type);
   5964 #endif
   5965 
   5966 #if defined(REAPERAPI_WANT_ShowPopupMenu) || !defined(REAPERAPI_MINIMAL)
   5967 REAPERAPI_DEF //==============================================
   5968 // ShowPopupMenu
   5969 // shows a context menu, valid names include: track_input, track_panel, track_area, track_routing, item, ruler, envelope, envelope_point, envelope_item. ctxOptional can be a track pointer for track_*, item pointer for item* (but is optional). for envelope_point, ctx2Optional has point index, ctx3Optional has item index (0=main envelope, 1=first AI). for envelope_item, ctx2Optional has AI index (1=first AI)
   5970 
   5971   void (*ShowPopupMenu)(const char* name, int x, int y, HWND hwndParentOptional, void* ctxOptional, int ctx2Optional, int ctx3Optional);
   5972 #endif
   5973 
   5974 #if defined(REAPERAPI_WANT_SLIDER2DB) || !defined(REAPERAPI_MINIMAL)
   5975 REAPERAPI_DEF //==============================================
   5976 // SLIDER2DB
   5977 
   5978   double (*SLIDER2DB)(double y);
   5979 #endif
   5980 
   5981 #if defined(REAPERAPI_WANT_SnapToGrid) || !defined(REAPERAPI_MINIMAL)
   5982 REAPERAPI_DEF //==============================================
   5983 // SnapToGrid
   5984 
   5985   double (*SnapToGrid)(ReaProject* project, double time_pos);
   5986 #endif
   5987 
   5988 #if defined(REAPERAPI_WANT_SoloAllTracks) || !defined(REAPERAPI_MINIMAL)
   5989 REAPERAPI_DEF //==============================================
   5990 // SoloAllTracks
   5991 // solo=2 for SIP
   5992 
   5993   void (*SoloAllTracks)(int solo);
   5994 #endif
   5995 
   5996 #if defined(REAPERAPI_WANT_Splash_GetWnd) || !defined(REAPERAPI_MINIMAL)
   5997 REAPERAPI_DEF //==============================================
   5998 // Splash_GetWnd
   5999 // gets the splash window, in case you want to display a message over it. Returns NULL when the splash window is not displayed.
   6000 
   6001   HWND (*Splash_GetWnd)();
   6002 #endif
   6003 
   6004 #if defined(REAPERAPI_WANT_SplitMediaItem) || !defined(REAPERAPI_MINIMAL)
   6005 REAPERAPI_DEF //==============================================
   6006 // SplitMediaItem
   6007 // the original item becomes the left-hand split, the function returns the right-hand split (or NULL if the split failed)
   6008 
   6009   MediaItem* (*SplitMediaItem)(MediaItem* item, double position);
   6010 #endif
   6011 
   6012 #if defined(REAPERAPI_WANT_StopPreview) || !defined(REAPERAPI_MINIMAL)
   6013 REAPERAPI_DEF //==============================================
   6014 // StopPreview
   6015 // return nonzero on success
   6016 
   6017   int (*StopPreview)(preview_register_t* preview);
   6018 #endif
   6019 
   6020 #if defined(REAPERAPI_WANT_StopTrackPreview) || !defined(REAPERAPI_MINIMAL)
   6021 REAPERAPI_DEF //==============================================
   6022 // StopTrackPreview
   6023 // return nonzero on success
   6024 
   6025   int (*StopTrackPreview)(preview_register_t* preview);
   6026 #endif
   6027 
   6028 #if defined(REAPERAPI_WANT_StopTrackPreview2) || !defined(REAPERAPI_MINIMAL)
   6029 REAPERAPI_DEF //==============================================
   6030 // StopTrackPreview2
   6031 // return nonzero on success
   6032 
   6033   int (*StopTrackPreview2)(ReaProject* proj, preview_register_t* preview);
   6034 #endif
   6035 
   6036 #if defined(REAPERAPI_WANT_stringToGuid) || !defined(REAPERAPI_MINIMAL)
   6037 REAPERAPI_DEF //==============================================
   6038 // stringToGuid
   6039 
   6040   void (*stringToGuid)(const char* str, GUID* g);
   6041 #endif
   6042 
   6043 #if defined(REAPERAPI_WANT_StuffMIDIMessage) || !defined(REAPERAPI_MINIMAL)
   6044 REAPERAPI_DEF //==============================================
   6045 // StuffMIDIMessage
   6046 // Stuffs a 3 byte MIDI message into either the Virtual MIDI Keyboard queue, or the MIDI-as-control input queue, or sends to a MIDI hardware output. mode=0 for VKB, 1 for control (actions map etc), 2 for VKB-on-current-channel; 16 for external MIDI device 0, 17 for external MIDI device 1, etc; see GetNumMIDIOutputs, GetMIDIOutputName.
   6047 
   6048   void (*StuffMIDIMessage)(int mode, int msg1, int msg2, int msg3);
   6049 #endif
   6050 
   6051 #if defined(REAPERAPI_WANT_TakeFX_AddByName) || !defined(REAPERAPI_MINIMAL)
   6052 REAPERAPI_DEF //==============================================
   6053 // TakeFX_AddByName
   6054 // Adds or queries the position of a named FX in a take. See TrackFX_AddByName() for information on fxname and instantiate.
   6055 
   6056   int (*TakeFX_AddByName)(MediaItem_Take* take, const char* fxname, int instantiate);
   6057 #endif
   6058 
   6059 #if defined(REAPERAPI_WANT_TakeFX_CopyToTake) || !defined(REAPERAPI_MINIMAL)
   6060 REAPERAPI_DEF //==============================================
   6061 // TakeFX_CopyToTake
   6062 // Copies (or moves) FX from src_take to dest_take. Can be used with src_take=dest_take to reorder.
   6063 
   6064   void (*TakeFX_CopyToTake)(MediaItem_Take* src_take, int src_fx, MediaItem_Take* dest_take, int dest_fx, bool is_move);
   6065 #endif
   6066 
   6067 #if defined(REAPERAPI_WANT_TakeFX_CopyToTrack) || !defined(REAPERAPI_MINIMAL)
   6068 REAPERAPI_DEF //==============================================
   6069 // TakeFX_CopyToTrack
   6070 // Copies (or moves) FX from src_take to dest_track. dest_fx can have 0x1000000 set to reference input FX.
   6071 
   6072   void (*TakeFX_CopyToTrack)(MediaItem_Take* src_take, int src_fx, MediaTrack* dest_track, int dest_fx, bool is_move);
   6073 #endif
   6074 
   6075 #if defined(REAPERAPI_WANT_TakeFX_Delete) || !defined(REAPERAPI_MINIMAL)
   6076 REAPERAPI_DEF //==============================================
   6077 // TakeFX_Delete
   6078 // Remove a FX from take chain (returns true on success)
   6079 
   6080   bool (*TakeFX_Delete)(MediaItem_Take* take, int fx);
   6081 #endif
   6082 
   6083 #if defined(REAPERAPI_WANT_TakeFX_EndParamEdit) || !defined(REAPERAPI_MINIMAL)
   6084 REAPERAPI_DEF //==============================================
   6085 // TakeFX_EndParamEdit
   6086 
   6087   bool (*TakeFX_EndParamEdit)(MediaItem_Take* take, int fx, int param);
   6088 #endif
   6089 
   6090 #if defined(REAPERAPI_WANT_TakeFX_FormatParamValue) || !defined(REAPERAPI_MINIMAL)
   6091 REAPERAPI_DEF //==============================================
   6092 // TakeFX_FormatParamValue
   6093 // Note: only works with FX that support Cockos VST extensions.
   6094 
   6095   bool (*TakeFX_FormatParamValue)(MediaItem_Take* take, int fx, int param, double val, char* bufOut, int bufOut_sz);
   6096 #endif
   6097 
   6098 #if defined(REAPERAPI_WANT_TakeFX_FormatParamValueNormalized) || !defined(REAPERAPI_MINIMAL)
   6099 REAPERAPI_DEF //==============================================
   6100 // TakeFX_FormatParamValueNormalized
   6101 // Note: only works with FX that support Cockos VST extensions.
   6102 
   6103   bool (*TakeFX_FormatParamValueNormalized)(MediaItem_Take* take, int fx, int param, double value, char* buf, int buf_sz);
   6104 #endif
   6105 
   6106 #if defined(REAPERAPI_WANT_TakeFX_GetChainVisible) || !defined(REAPERAPI_MINIMAL)
   6107 REAPERAPI_DEF //==============================================
   6108 // TakeFX_GetChainVisible
   6109 // returns index of effect visible in chain, or -1 for chain hidden, or -2 for chain visible but no effect selected
   6110 
   6111   int (*TakeFX_GetChainVisible)(MediaItem_Take* take);
   6112 #endif
   6113 
   6114 #if defined(REAPERAPI_WANT_TakeFX_GetCount) || !defined(REAPERAPI_MINIMAL)
   6115 REAPERAPI_DEF //==============================================
   6116 // TakeFX_GetCount
   6117 
   6118   int (*TakeFX_GetCount)(MediaItem_Take* take);
   6119 #endif
   6120 
   6121 #if defined(REAPERAPI_WANT_TakeFX_GetEnabled) || !defined(REAPERAPI_MINIMAL)
   6122 REAPERAPI_DEF //==============================================
   6123 // TakeFX_GetEnabled
   6124 // See TakeFX_SetEnabled
   6125 
   6126   bool (*TakeFX_GetEnabled)(MediaItem_Take* take, int fx);
   6127 #endif
   6128 
   6129 #if defined(REAPERAPI_WANT_TakeFX_GetEnvelope) || !defined(REAPERAPI_MINIMAL)
   6130 REAPERAPI_DEF //==============================================
   6131 // TakeFX_GetEnvelope
   6132 // Returns the FX parameter envelope. If the envelope does not exist and create=true, the envelope will be created.
   6133 
   6134   TrackEnvelope* (*TakeFX_GetEnvelope)(MediaItem_Take* take, int fxindex, int parameterindex, bool create);
   6135 #endif
   6136 
   6137 #if defined(REAPERAPI_WANT_TakeFX_GetFloatingWindow) || !defined(REAPERAPI_MINIMAL)
   6138 REAPERAPI_DEF //==============================================
   6139 // TakeFX_GetFloatingWindow
   6140 // returns HWND of floating window for effect index, if any
   6141 
   6142   HWND (*TakeFX_GetFloatingWindow)(MediaItem_Take* take, int index);
   6143 #endif
   6144 
   6145 #if defined(REAPERAPI_WANT_TakeFX_GetFormattedParamValue) || !defined(REAPERAPI_MINIMAL)
   6146 REAPERAPI_DEF //==============================================
   6147 // TakeFX_GetFormattedParamValue
   6148 
   6149   bool (*TakeFX_GetFormattedParamValue)(MediaItem_Take* take, int fx, int param, char* bufOut, int bufOut_sz);
   6150 #endif
   6151 
   6152 #if defined(REAPERAPI_WANT_TakeFX_GetFXGUID) || !defined(REAPERAPI_MINIMAL)
   6153 REAPERAPI_DEF //==============================================
   6154 // TakeFX_GetFXGUID
   6155 
   6156   GUID* (*TakeFX_GetFXGUID)(MediaItem_Take* take, int fx);
   6157 #endif
   6158 
   6159 #if defined(REAPERAPI_WANT_TakeFX_GetFXName) || !defined(REAPERAPI_MINIMAL)
   6160 REAPERAPI_DEF //==============================================
   6161 // TakeFX_GetFXName
   6162 
   6163   bool (*TakeFX_GetFXName)(MediaItem_Take* take, int fx, char* bufOut, int bufOut_sz);
   6164 #endif
   6165 
   6166 #if defined(REAPERAPI_WANT_TakeFX_GetIOSize) || !defined(REAPERAPI_MINIMAL)
   6167 REAPERAPI_DEF //==============================================
   6168 // TakeFX_GetIOSize
   6169 // Gets the number of input/output pins for FX if available, returns plug-in type or -1 on error
   6170 
   6171   int (*TakeFX_GetIOSize)(MediaItem_Take* take, int fx, int* inputPinsOut, int* outputPinsOut);
   6172 #endif
   6173 
   6174 #if defined(REAPERAPI_WANT_TakeFX_GetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   6175 REAPERAPI_DEF //==============================================
   6176 // TakeFX_GetNamedConfigParm
   6177 // gets plug-in specific named configuration value (returns true on success). see TrackFX_GetNamedConfigParm
   6178 
   6179   bool (*TakeFX_GetNamedConfigParm)(MediaItem_Take* take, int fx, const char* parmname, char* bufOut, int bufOut_sz);
   6180 #endif
   6181 
   6182 #if defined(REAPERAPI_WANT_TakeFX_GetNumParams) || !defined(REAPERAPI_MINIMAL)
   6183 REAPERAPI_DEF //==============================================
   6184 // TakeFX_GetNumParams
   6185 
   6186   int (*TakeFX_GetNumParams)(MediaItem_Take* take, int fx);
   6187 #endif
   6188 
   6189 #if defined(REAPERAPI_WANT_TakeFX_GetOffline) || !defined(REAPERAPI_MINIMAL)
   6190 REAPERAPI_DEF //==============================================
   6191 // TakeFX_GetOffline
   6192 // See TakeFX_SetOffline
   6193 
   6194   bool (*TakeFX_GetOffline)(MediaItem_Take* take, int fx);
   6195 #endif
   6196 
   6197 #if defined(REAPERAPI_WANT_TakeFX_GetOpen) || !defined(REAPERAPI_MINIMAL)
   6198 REAPERAPI_DEF //==============================================
   6199 // TakeFX_GetOpen
   6200 // Returns true if this FX UI is open in the FX chain window or a floating window. See TakeFX_SetOpen
   6201 
   6202   bool (*TakeFX_GetOpen)(MediaItem_Take* take, int fx);
   6203 #endif
   6204 
   6205 #if defined(REAPERAPI_WANT_TakeFX_GetParam) || !defined(REAPERAPI_MINIMAL)
   6206 REAPERAPI_DEF //==============================================
   6207 // TakeFX_GetParam
   6208 
   6209   double (*TakeFX_GetParam)(MediaItem_Take* take, int fx, int param, double* minvalOut, double* maxvalOut);
   6210 #endif
   6211 
   6212 #if defined(REAPERAPI_WANT_TakeFX_GetParameterStepSizes) || !defined(REAPERAPI_MINIMAL)
   6213 REAPERAPI_DEF //==============================================
   6214 // TakeFX_GetParameterStepSizes
   6215 
   6216   bool (*TakeFX_GetParameterStepSizes)(MediaItem_Take* take, int fx, int param, double* stepOut, double* smallstepOut, double* largestepOut, bool* istoggleOut);
   6217 #endif
   6218 
   6219 #if defined(REAPERAPI_WANT_TakeFX_GetParamEx) || !defined(REAPERAPI_MINIMAL)
   6220 REAPERAPI_DEF //==============================================
   6221 // TakeFX_GetParamEx
   6222 
   6223   double (*TakeFX_GetParamEx)(MediaItem_Take* take, int fx, int param, double* minvalOut, double* maxvalOut, double* midvalOut);
   6224 #endif
   6225 
   6226 #if defined(REAPERAPI_WANT_TakeFX_GetParamFromIdent) || !defined(REAPERAPI_MINIMAL)
   6227 REAPERAPI_DEF //==============================================
   6228 // TakeFX_GetParamFromIdent
   6229 // gets the parameter index from an identifying string (:wet, :bypass, or a string returned from GetParamIdent), or -1 if unknown.
   6230 
   6231   int (*TakeFX_GetParamFromIdent)(MediaItem_Take* take, int fx, const char* ident_str);
   6232 #endif
   6233 
   6234 #if defined(REAPERAPI_WANT_TakeFX_GetParamIdent) || !defined(REAPERAPI_MINIMAL)
   6235 REAPERAPI_DEF //==============================================
   6236 // TakeFX_GetParamIdent
   6237 // gets an identifying string for the parameter
   6238 
   6239   bool (*TakeFX_GetParamIdent)(MediaItem_Take* take, int fx, int param, char* bufOut, int bufOut_sz);
   6240 #endif
   6241 
   6242 #if defined(REAPERAPI_WANT_TakeFX_GetParamName) || !defined(REAPERAPI_MINIMAL)
   6243 REAPERAPI_DEF //==============================================
   6244 // TakeFX_GetParamName
   6245 
   6246   bool (*TakeFX_GetParamName)(MediaItem_Take* take, int fx, int param, char* bufOut, int bufOut_sz);
   6247 #endif
   6248 
   6249 #if defined(REAPERAPI_WANT_TakeFX_GetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   6250 REAPERAPI_DEF //==============================================
   6251 // TakeFX_GetParamNormalized
   6252 
   6253   double (*TakeFX_GetParamNormalized)(MediaItem_Take* take, int fx, int param);
   6254 #endif
   6255 
   6256 #if defined(REAPERAPI_WANT_TakeFX_GetPinMappings) || !defined(REAPERAPI_MINIMAL)
   6257 REAPERAPI_DEF //==============================================
   6258 // TakeFX_GetPinMappings
   6259 // gets the effective channel mapping bitmask for a particular pin. high32Out will be set to the high 32 bits
   6260 
   6261   int (*TakeFX_GetPinMappings)(MediaItem_Take* take, int fx, int isoutput, int pin, int* high32Out);
   6262 #endif
   6263 
   6264 #if defined(REAPERAPI_WANT_TakeFX_GetPreset) || !defined(REAPERAPI_MINIMAL)
   6265 REAPERAPI_DEF //==============================================
   6266 // TakeFX_GetPreset
   6267 // Get the name of the preset currently showing in the REAPER dropdown, or the full path to a factory preset file for VST3 plug-ins (.vstpreset). Returns false if the current FX parameters do not exactly match the preset (in other words, if the user loaded the preset but moved the knobs afterward). See TakeFX_SetPreset.
   6268 
   6269   bool (*TakeFX_GetPreset)(MediaItem_Take* take, int fx, char* presetnameOut, int presetnameOut_sz);
   6270 #endif
   6271 
   6272 #if defined(REAPERAPI_WANT_TakeFX_GetPresetIndex) || !defined(REAPERAPI_MINIMAL)
   6273 REAPERAPI_DEF //==============================================
   6274 // TakeFX_GetPresetIndex
   6275 // Returns current preset index, or -1 if error. numberOfPresetsOut will be set to total number of presets available. See TakeFX_SetPresetByIndex
   6276 
   6277   int (*TakeFX_GetPresetIndex)(MediaItem_Take* take, int fx, int* numberOfPresetsOut);
   6278 #endif
   6279 
   6280 #if defined(REAPERAPI_WANT_TakeFX_GetUserPresetFilename) || !defined(REAPERAPI_MINIMAL)
   6281 REAPERAPI_DEF //==============================================
   6282 // TakeFX_GetUserPresetFilename
   6283 
   6284   void (*TakeFX_GetUserPresetFilename)(MediaItem_Take* take, int fx, char* fnOut, int fnOut_sz);
   6285 #endif
   6286 
   6287 #if defined(REAPERAPI_WANT_TakeFX_NavigatePresets) || !defined(REAPERAPI_MINIMAL)
   6288 REAPERAPI_DEF //==============================================
   6289 // TakeFX_NavigatePresets
   6290 // presetmove==1 activates the next preset, presetmove==-1 activates the previous preset, etc.
   6291 
   6292   bool (*TakeFX_NavigatePresets)(MediaItem_Take* take, int fx, int presetmove);
   6293 #endif
   6294 
   6295 #if defined(REAPERAPI_WANT_TakeFX_SetEnabled) || !defined(REAPERAPI_MINIMAL)
   6296 REAPERAPI_DEF //==============================================
   6297 // TakeFX_SetEnabled
   6298 // See TakeFX_GetEnabled
   6299 
   6300   void (*TakeFX_SetEnabled)(MediaItem_Take* take, int fx, bool enabled);
   6301 #endif
   6302 
   6303 #if defined(REAPERAPI_WANT_TakeFX_SetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   6304 REAPERAPI_DEF //==============================================
   6305 // TakeFX_SetNamedConfigParm
   6306 // gets plug-in specific named configuration value (returns true on success)
   6307 
   6308   bool (*TakeFX_SetNamedConfigParm)(MediaItem_Take* take, int fx, const char* parmname, const char* value);
   6309 #endif
   6310 
   6311 #if defined(REAPERAPI_WANT_TakeFX_SetOffline) || !defined(REAPERAPI_MINIMAL)
   6312 REAPERAPI_DEF //==============================================
   6313 // TakeFX_SetOffline
   6314 // See TakeFX_GetOffline
   6315 
   6316   void (*TakeFX_SetOffline)(MediaItem_Take* take, int fx, bool offline);
   6317 #endif
   6318 
   6319 #if defined(REAPERAPI_WANT_TakeFX_SetOpen) || !defined(REAPERAPI_MINIMAL)
   6320 REAPERAPI_DEF //==============================================
   6321 // TakeFX_SetOpen
   6322 // Open this FX UI. See TakeFX_GetOpen
   6323 
   6324   void (*TakeFX_SetOpen)(MediaItem_Take* take, int fx, bool open);
   6325 #endif
   6326 
   6327 #if defined(REAPERAPI_WANT_TakeFX_SetParam) || !defined(REAPERAPI_MINIMAL)
   6328 REAPERAPI_DEF //==============================================
   6329 // TakeFX_SetParam
   6330 
   6331   bool (*TakeFX_SetParam)(MediaItem_Take* take, int fx, int param, double val);
   6332 #endif
   6333 
   6334 #if defined(REAPERAPI_WANT_TakeFX_SetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   6335 REAPERAPI_DEF //==============================================
   6336 // TakeFX_SetParamNormalized
   6337 
   6338   bool (*TakeFX_SetParamNormalized)(MediaItem_Take* take, int fx, int param, double value);
   6339 #endif
   6340 
   6341 #if defined(REAPERAPI_WANT_TakeFX_SetPinMappings) || !defined(REAPERAPI_MINIMAL)
   6342 REAPERAPI_DEF //==============================================
   6343 // TakeFX_SetPinMappings
   6344 // sets the channel mapping bitmask for a particular pin. returns false if unsupported (not all types of plug-ins support this capability)
   6345 
   6346   bool (*TakeFX_SetPinMappings)(MediaItem_Take* take, int fx, int isoutput, int pin, int low32bits, int hi32bits);
   6347 #endif
   6348 
   6349 #if defined(REAPERAPI_WANT_TakeFX_SetPreset) || !defined(REAPERAPI_MINIMAL)
   6350 REAPERAPI_DEF //==============================================
   6351 // TakeFX_SetPreset
   6352 // Activate a preset with the name shown in the REAPER dropdown. Full paths to .vstpreset files are also supported for VST3 plug-ins. See TakeFX_GetPreset.
   6353 
   6354   bool (*TakeFX_SetPreset)(MediaItem_Take* take, int fx, const char* presetname);
   6355 #endif
   6356 
   6357 #if defined(REAPERAPI_WANT_TakeFX_SetPresetByIndex) || !defined(REAPERAPI_MINIMAL)
   6358 REAPERAPI_DEF //==============================================
   6359 // TakeFX_SetPresetByIndex
   6360 // Sets the preset idx, or the factory preset (idx==-2), or the default user preset (idx==-1). Returns true on success. See TakeFX_GetPresetIndex.
   6361 
   6362   bool (*TakeFX_SetPresetByIndex)(MediaItem_Take* take, int fx, int idx);
   6363 #endif
   6364 
   6365 #if defined(REAPERAPI_WANT_TakeFX_Show) || !defined(REAPERAPI_MINIMAL)
   6366 REAPERAPI_DEF //==============================================
   6367 // TakeFX_Show
   6368 // showflag=0 for hidechain, =1 for show chain(index valid), =2 for hide floating window(index valid), =3 for show floating window (index valid)
   6369 
   6370   void (*TakeFX_Show)(MediaItem_Take* take, int index, int showFlag);
   6371 #endif
   6372 
   6373 #if defined(REAPERAPI_WANT_TakeIsMIDI) || !defined(REAPERAPI_MINIMAL)
   6374 REAPERAPI_DEF //==============================================
   6375 // TakeIsMIDI
   6376 // Returns true if the active take contains MIDI.
   6377 
   6378   bool (*TakeIsMIDI)(MediaItem_Take* take);
   6379 #endif
   6380 
   6381 #if defined(REAPERAPI_WANT_ThemeLayout_GetLayout) || !defined(REAPERAPI_MINIMAL)
   6382 REAPERAPI_DEF //==============================================
   6383 // ThemeLayout_GetLayout
   6384 // Gets theme layout information. section can be 'global' for global layout override, 'seclist' to enumerate a list of layout sections, otherwise a layout section such as 'mcp', 'tcp', 'trans', etc. idx can be -1 to query the current value, -2 to get the description of the section (if not global), -3 will return the current context DPI-scaling (256=normal, 512=retina, etc), or 0..x. returns false if failed.
   6385 
   6386   bool (*ThemeLayout_GetLayout)(const char* section, int idx, char* nameOut, int nameOut_sz);
   6387 #endif
   6388 
   6389 #if defined(REAPERAPI_WANT_ThemeLayout_GetParameter) || !defined(REAPERAPI_MINIMAL)
   6390 REAPERAPI_DEF //==============================================
   6391 // ThemeLayout_GetParameter
   6392 // returns theme layout parameter. return value is cfg-name, or nil/empty if out of range.
   6393 
   6394   const char* (*ThemeLayout_GetParameter)(int wp, const char** descOutOptional, int* valueOutOptional, int* defValueOutOptional, int* minValueOutOptional, int* maxValueOutOptional);
   6395 #endif
   6396 
   6397 #if defined(REAPERAPI_WANT_ThemeLayout_RefreshAll) || !defined(REAPERAPI_MINIMAL)
   6398 REAPERAPI_DEF //==============================================
   6399 // ThemeLayout_RefreshAll
   6400 // Refreshes all layouts
   6401 
   6402   void (*ThemeLayout_RefreshAll)();
   6403 #endif
   6404 
   6405 #if defined(REAPERAPI_WANT_ThemeLayout_SetLayout) || !defined(REAPERAPI_MINIMAL)
   6406 REAPERAPI_DEF //==============================================
   6407 // ThemeLayout_SetLayout
   6408 // Sets theme layout override for a particular section -- section can be 'global' or 'mcp' etc. If setting global layout, prefix a ! to the layout string to clear any per-layout overrides. Returns false if failed.
   6409 
   6410   bool (*ThemeLayout_SetLayout)(const char* section, const char*  layout);
   6411 #endif
   6412 
   6413 #if defined(REAPERAPI_WANT_ThemeLayout_SetParameter) || !defined(REAPERAPI_MINIMAL)
   6414 REAPERAPI_DEF //==============================================
   6415 // ThemeLayout_SetParameter
   6416 // sets theme layout parameter to value. persist=true in order to have change loaded on next theme load. note that the caller should update layouts via ??? to make changes visible.
   6417 
   6418   bool (*ThemeLayout_SetParameter)(int wp, int value, bool persist);
   6419 #endif
   6420 
   6421 #if defined(REAPERAPI_WANT_time_precise) || !defined(REAPERAPI_MINIMAL)
   6422 REAPERAPI_DEF //==============================================
   6423 // time_precise
   6424 // Gets a precise system timestamp in seconds
   6425 
   6426   double (*time_precise)();
   6427 #endif
   6428 
   6429 #if defined(REAPERAPI_WANT_TimeMap2_beatsToTime) || !defined(REAPERAPI_MINIMAL)
   6430 REAPERAPI_DEF //==============================================
   6431 // TimeMap2_beatsToTime
   6432 // convert a beat position (or optionally a beats+measures if measures is non-NULL) to time.
   6433 
   6434   double (*TimeMap2_beatsToTime)(ReaProject* proj, double tpos, const int* measuresInOptional);
   6435 #endif
   6436 
   6437 #if defined(REAPERAPI_WANT_TimeMap2_GetDividedBpmAtTime) || !defined(REAPERAPI_MINIMAL)
   6438 REAPERAPI_DEF //==============================================
   6439 // TimeMap2_GetDividedBpmAtTime
   6440 // get the effective BPM at the time (seconds) position (i.e. 2x in /8 signatures)
   6441 
   6442   double (*TimeMap2_GetDividedBpmAtTime)(ReaProject* proj, double time);
   6443 #endif
   6444 
   6445 #if defined(REAPERAPI_WANT_TimeMap2_GetNextChangeTime) || !defined(REAPERAPI_MINIMAL)
   6446 REAPERAPI_DEF //==============================================
   6447 // TimeMap2_GetNextChangeTime
   6448 // when does the next time map (tempo or time sig) change occur
   6449 
   6450   double (*TimeMap2_GetNextChangeTime)(ReaProject* proj, double time);
   6451 #endif
   6452 
   6453 #if defined(REAPERAPI_WANT_TimeMap2_QNToTime) || !defined(REAPERAPI_MINIMAL)
   6454 REAPERAPI_DEF //==============================================
   6455 // TimeMap2_QNToTime
   6456 // converts project QN position to time.
   6457 
   6458   double (*TimeMap2_QNToTime)(ReaProject* proj, double qn);
   6459 #endif
   6460 
   6461 #if defined(REAPERAPI_WANT_TimeMap2_timeToBeats) || !defined(REAPERAPI_MINIMAL)
   6462 REAPERAPI_DEF //==============================================
   6463 // TimeMap2_timeToBeats
   6464 // convert a time into beats.
   6465 // if measures is non-NULL, measures will be set to the measure count, return value will be beats since measure.
   6466 // if cml is non-NULL, will be set to current measure length in beats (i.e. time signature numerator)
   6467 // if fullbeats is non-NULL, and measures is non-NULL, fullbeats will get the full beat count (same value returned if measures is NULL).
   6468 // if cdenom is non-NULL, will be set to the current time signature denominator.
   6469 
   6470   double (*TimeMap2_timeToBeats)(ReaProject* proj, double tpos, int* measuresOutOptional, int* cmlOutOptional, double* fullbeatsOutOptional, int* cdenomOutOptional);
   6471 #endif
   6472 
   6473 #if defined(REAPERAPI_WANT_TimeMap2_timeToQN) || !defined(REAPERAPI_MINIMAL)
   6474 REAPERAPI_DEF //==============================================
   6475 // TimeMap2_timeToQN
   6476 // converts project time position to QN position.
   6477 
   6478   double (*TimeMap2_timeToQN)(ReaProject* proj, double tpos);
   6479 #endif
   6480 
   6481 #if defined(REAPERAPI_WANT_TimeMap_curFrameRate) || !defined(REAPERAPI_MINIMAL)
   6482 REAPERAPI_DEF //==============================================
   6483 // TimeMap_curFrameRate
   6484 // Gets project framerate, and optionally whether it is drop-frame timecode
   6485 
   6486   double (*TimeMap_curFrameRate)(ReaProject* proj, bool* dropFrameOut);
   6487 #endif
   6488 
   6489 #if defined(REAPERAPI_WANT_TimeMap_GetDividedBpmAtTime) || !defined(REAPERAPI_MINIMAL)
   6490 REAPERAPI_DEF //==============================================
   6491 // TimeMap_GetDividedBpmAtTime
   6492 // get the effective BPM at the time (seconds) position (i.e. 2x in /8 signatures)
   6493 
   6494   double (*TimeMap_GetDividedBpmAtTime)(double time);
   6495 #endif
   6496 
   6497 #if defined(REAPERAPI_WANT_TimeMap_GetMeasureInfo) || !defined(REAPERAPI_MINIMAL)
   6498 REAPERAPI_DEF //==============================================
   6499 // TimeMap_GetMeasureInfo
   6500 // Get the QN position and time signature information for the start of a measure. Return the time in seconds of the measure start.
   6501 
   6502   double (*TimeMap_GetMeasureInfo)(ReaProject* proj, int measure, double* qn_startOut, double* qn_endOut, int* timesig_numOut, int* timesig_denomOut, double* tempoOut);
   6503 #endif
   6504 
   6505 #if defined(REAPERAPI_WANT_TimeMap_GetMetronomePattern) || !defined(REAPERAPI_MINIMAL)
   6506 REAPERAPI_DEF //==============================================
   6507 // TimeMap_GetMetronomePattern
   6508 // 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.
   6509 
   6510   int (*TimeMap_GetMetronomePattern)(ReaProject* proj, double time, char* pattern, int pattern_sz);
   6511 #endif
   6512 
   6513 #if defined(REAPERAPI_WANT_TimeMap_GetTimeSigAtTime) || !defined(REAPERAPI_MINIMAL)
   6514 REAPERAPI_DEF //==============================================
   6515 // TimeMap_GetTimeSigAtTime
   6516 // get the effective time signature and tempo
   6517 
   6518   void (*TimeMap_GetTimeSigAtTime)(ReaProject* proj, double time, int* timesig_numOut, int* timesig_denomOut, double* tempoOut);
   6519 #endif
   6520 
   6521 #if defined(REAPERAPI_WANT_TimeMap_QNToMeasures) || !defined(REAPERAPI_MINIMAL)
   6522 REAPERAPI_DEF //==============================================
   6523 // TimeMap_QNToMeasures
   6524 // Find which measure the given QN position falls in.
   6525 
   6526   int (*TimeMap_QNToMeasures)(ReaProject* proj, double qn, double* qnMeasureStartOutOptional, double* qnMeasureEndOutOptional);
   6527 #endif
   6528 
   6529 #if defined(REAPERAPI_WANT_TimeMap_QNToTime) || !defined(REAPERAPI_MINIMAL)
   6530 REAPERAPI_DEF //==============================================
   6531 // TimeMap_QNToTime
   6532 // converts project QN position to time.
   6533 
   6534   double (*TimeMap_QNToTime)(double qn);
   6535 #endif
   6536 
   6537 #if defined(REAPERAPI_WANT_TimeMap_QNToTime_abs) || !defined(REAPERAPI_MINIMAL)
   6538 REAPERAPI_DEF //==============================================
   6539 // TimeMap_QNToTime_abs
   6540 // 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
   6541 
   6542   double (*TimeMap_QNToTime_abs)(ReaProject* proj, double qn);
   6543 #endif
   6544 
   6545 #if defined(REAPERAPI_WANT_TimeMap_timeToQN) || !defined(REAPERAPI_MINIMAL)
   6546 REAPERAPI_DEF //==============================================
   6547 // TimeMap_timeToQN
   6548 // converts project QN position to time.
   6549 
   6550   double (*TimeMap_timeToQN)(double tpos);
   6551 #endif
   6552 
   6553 #if defined(REAPERAPI_WANT_TimeMap_timeToQN_abs) || !defined(REAPERAPI_MINIMAL)
   6554 REAPERAPI_DEF //==============================================
   6555 // TimeMap_timeToQN_abs
   6556 // 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
   6557 
   6558   double (*TimeMap_timeToQN_abs)(ReaProject* proj, double tpos);
   6559 #endif
   6560 
   6561 #if defined(REAPERAPI_WANT_ToggleTrackSendUIMute) || !defined(REAPERAPI_MINIMAL)
   6562 REAPERAPI_DEF //==============================================
   6563 // ToggleTrackSendUIMute
   6564 // send_idx<0 for receives, >=0 for hw ouputs, >=nb_of_hw_ouputs for sends.
   6565 
   6566   bool (*ToggleTrackSendUIMute)(MediaTrack* track, int send_idx);
   6567 #endif
   6568 
   6569 #if defined(REAPERAPI_WANT_Track_GetPeakHoldDB) || !defined(REAPERAPI_MINIMAL)
   6570 REAPERAPI_DEF //==============================================
   6571 // Track_GetPeakHoldDB
   6572 // Returns meter hold state, in dB*0.01 (0 = +0dB, -0.01 = -1dB, 0.02 = +2dB, etc). If clear is set, clears the meter hold. If channel==1024 or channel==1025, returns loudness values if this is the master track or this track's VU meters are set to display loudness.
   6573 
   6574   double (*Track_GetPeakHoldDB)(MediaTrack* track, int channel, bool clear);
   6575 #endif
   6576 
   6577 #if defined(REAPERAPI_WANT_Track_GetPeakInfo) || !defined(REAPERAPI_MINIMAL)
   6578 REAPERAPI_DEF //==============================================
   6579 // Track_GetPeakInfo
   6580 // Returns peak meter value (1.0=+0dB, 0.0=-inf) for channel. If channel==1024 or channel==1025, returns loudness values if this is the master track or this track's VU meters are set to display loudness.
   6581 
   6582   double (*Track_GetPeakInfo)(MediaTrack* track, int channel);
   6583 #endif
   6584 
   6585 #if defined(REAPERAPI_WANT_TrackCtl_SetToolTip) || !defined(REAPERAPI_MINIMAL)
   6586 REAPERAPI_DEF //==============================================
   6587 // TrackCtl_SetToolTip
   6588 // displays tooltip at location, or removes if empty string
   6589 
   6590   void (*TrackCtl_SetToolTip)(const char* fmt, int xpos, int ypos, bool topmost);
   6591 #endif
   6592 
   6593 #if defined(REAPERAPI_WANT_TrackFX_AddByName) || !defined(REAPERAPI_MINIMAL)
   6594 REAPERAPI_DEF //==============================================
   6595 // TrackFX_AddByName
   6596 // Adds or queries the position of a named FX from the track FX chain (recFX=false) or record input FX/monitoring FX (recFX=true, monitoring FX are on master track). Specify a negative value for instantiate to always create a new effect, 0 to only query the first instance of an effect, or a positive value to add an instance if one is not found. If instantiate is <= -1000, it is used for the insertion position (-1000 is first item in chain, -1001 is second, etc). fxname can have prefix to specify type: VST3:,VST2:,VST:,AU:,JS:, or DX:, or FXADD: which adds selected items from the currently-open FX browser, FXADD:2 to limit to 2 FX added, or FXADD:2e to only succeed if exactly 2 FX are selected. Returns -1 on failure or the new position in chain on success.
   6597 
   6598   int (*TrackFX_AddByName)(MediaTrack* track, const char* fxname, bool recFX, int instantiate);
   6599 #endif
   6600 
   6601 #if defined(REAPERAPI_WANT_TrackFX_CopyToTake) || !defined(REAPERAPI_MINIMAL)
   6602 REAPERAPI_DEF //==============================================
   6603 // TrackFX_CopyToTake
   6604 // Copies (or moves) FX from src_track to dest_take. src_fx can have 0x1000000 set to reference input FX.
   6605 
   6606   void (*TrackFX_CopyToTake)(MediaTrack* src_track, int src_fx, MediaItem_Take* dest_take, int dest_fx, bool is_move);
   6607 #endif
   6608 
   6609 #if defined(REAPERAPI_WANT_TrackFX_CopyToTrack) || !defined(REAPERAPI_MINIMAL)
   6610 REAPERAPI_DEF //==============================================
   6611 // TrackFX_CopyToTrack
   6612 // Copies (or moves) FX from src_track to dest_track. Can be used with src_track=dest_track to reorder, FX indices have 0x1000000 set to reference input FX.
   6613 
   6614   void (*TrackFX_CopyToTrack)(MediaTrack* src_track, int src_fx, MediaTrack* dest_track, int dest_fx, bool is_move);
   6615 #endif
   6616 
   6617 #if defined(REAPERAPI_WANT_TrackFX_Delete) || !defined(REAPERAPI_MINIMAL)
   6618 REAPERAPI_DEF //==============================================
   6619 // TrackFX_Delete
   6620 // Remove a FX from track chain (returns true on success)
   6621 
   6622   bool (*TrackFX_Delete)(MediaTrack* track, int fx);
   6623 #endif
   6624 
   6625 #if defined(REAPERAPI_WANT_TrackFX_EndParamEdit) || !defined(REAPERAPI_MINIMAL)
   6626 REAPERAPI_DEF //==============================================
   6627 // TrackFX_EndParamEdit
   6628 
   6629   bool (*TrackFX_EndParamEdit)(MediaTrack* track, int fx, int param);
   6630 #endif
   6631 
   6632 #if defined(REAPERAPI_WANT_TrackFX_FormatParamValue) || !defined(REAPERAPI_MINIMAL)
   6633 REAPERAPI_DEF //==============================================
   6634 // TrackFX_FormatParamValue
   6635 // Note: only works with FX that support Cockos VST extensions.
   6636 
   6637   bool (*TrackFX_FormatParamValue)(MediaTrack* track, int fx, int param, double val, char* bufOut, int bufOut_sz);
   6638 #endif
   6639 
   6640 #if defined(REAPERAPI_WANT_TrackFX_FormatParamValueNormalized) || !defined(REAPERAPI_MINIMAL)
   6641 REAPERAPI_DEF //==============================================
   6642 // TrackFX_FormatParamValueNormalized
   6643 // Note: only works with FX that support Cockos VST extensions.
   6644 
   6645   bool (*TrackFX_FormatParamValueNormalized)(MediaTrack* track, int fx, int param, double value, char* buf, int buf_sz);
   6646 #endif
   6647 
   6648 #if defined(REAPERAPI_WANT_TrackFX_GetByName) || !defined(REAPERAPI_MINIMAL)
   6649 REAPERAPI_DEF //==============================================
   6650 // TrackFX_GetByName
   6651 // 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. Deprecated in favor of TrackFX_AddByName.
   6652 
   6653   int (*TrackFX_GetByName)(MediaTrack* track, const char* fxname, bool instantiate);
   6654 #endif
   6655 
   6656 #if defined(REAPERAPI_WANT_TrackFX_GetChainVisible) || !defined(REAPERAPI_MINIMAL)
   6657 REAPERAPI_DEF //==============================================
   6658 // TrackFX_GetChainVisible
   6659 // returns index of effect visible in chain, or -1 for chain hidden, or -2 for chain visible but no effect selected
   6660 
   6661   int (*TrackFX_GetChainVisible)(MediaTrack* track);
   6662 #endif
   6663 
   6664 #if defined(REAPERAPI_WANT_TrackFX_GetCount) || !defined(REAPERAPI_MINIMAL)
   6665 REAPERAPI_DEF //==============================================
   6666 // TrackFX_GetCount
   6667 
   6668   int (*TrackFX_GetCount)(MediaTrack* track);
   6669 #endif
   6670 
   6671 #if defined(REAPERAPI_WANT_TrackFX_GetEnabled) || !defined(REAPERAPI_MINIMAL)
   6672 REAPERAPI_DEF //==============================================
   6673 // TrackFX_GetEnabled
   6674 // See TrackFX_SetEnabled
   6675 
   6676   bool (*TrackFX_GetEnabled)(MediaTrack* track, int fx);
   6677 #endif
   6678 
   6679 #if defined(REAPERAPI_WANT_TrackFX_GetEQ) || !defined(REAPERAPI_MINIMAL)
   6680 REAPERAPI_DEF //==============================================
   6681 // TrackFX_GetEQ
   6682 // 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.
   6683 
   6684   int (*TrackFX_GetEQ)(MediaTrack* track, bool instantiate);
   6685 #endif
   6686 
   6687 #if defined(REAPERAPI_WANT_TrackFX_GetEQBandEnabled) || !defined(REAPERAPI_MINIMAL)
   6688 REAPERAPI_DEF //==============================================
   6689 // TrackFX_GetEQBandEnabled
   6690 // Returns true if the EQ band is enabled.
   6691 // Returns false if the band is disabled, or if track/fxidx is not ReaEQ.
   6692 // Bandtype: -1=master gain, 0=hipass, 1=loshelf, 2=band, 3=notch, 4=hishelf, 5=lopass, 6=bandpass, 7=parallel bandpass.
   6693 // Bandidx (ignored for master gain): 0=target first band matching bandtype, 1=target 2nd band matching bandtype, etc.
   6694 // 
   6695 // See TrackFX_GetEQ, TrackFX_GetEQParam, TrackFX_SetEQParam, TrackFX_SetEQBandEnabled.
   6696 
   6697   bool (*TrackFX_GetEQBandEnabled)(MediaTrack* track, int fxidx, int bandtype, int bandidx);
   6698 #endif
   6699 
   6700 #if defined(REAPERAPI_WANT_TrackFX_GetEQParam) || !defined(REAPERAPI_MINIMAL)
   6701 REAPERAPI_DEF //==============================================
   6702 // TrackFX_GetEQParam
   6703 // Returns false if track/fxidx is not ReaEQ.
   6704 // Bandtype: -1=master gain, 0=hipass, 1=loshelf, 2=band, 3=notch, 4=hishelf, 5=lopass, 6=bandpass, 7=parallel bandpass.
   6705 // Bandidx (ignored for master gain): 0=target first band matching bandtype, 1=target 2nd band matching bandtype, etc.
   6706 // Paramtype (ignored for master gain): 0=freq, 1=gain, 2=Q.
   6707 // See TrackFX_GetEQ, TrackFX_SetEQParam, TrackFX_GetEQBandEnabled, TrackFX_SetEQBandEnabled.
   6708 
   6709   bool (*TrackFX_GetEQParam)(MediaTrack* track, int fxidx, int paramidx, int* bandtypeOut, int* bandidxOut, int* paramtypeOut, double* normvalOut);
   6710 #endif
   6711 
   6712 #if defined(REAPERAPI_WANT_TrackFX_GetFloatingWindow) || !defined(REAPERAPI_MINIMAL)
   6713 REAPERAPI_DEF //==============================================
   6714 // TrackFX_GetFloatingWindow
   6715 // returns HWND of floating window for effect index, if any
   6716 
   6717   HWND (*TrackFX_GetFloatingWindow)(MediaTrack* track, int index);
   6718 #endif
   6719 
   6720 #if defined(REAPERAPI_WANT_TrackFX_GetFormattedParamValue) || !defined(REAPERAPI_MINIMAL)
   6721 REAPERAPI_DEF //==============================================
   6722 // TrackFX_GetFormattedParamValue
   6723 
   6724   bool (*TrackFX_GetFormattedParamValue)(MediaTrack* track, int fx, int param, char* bufOut, int bufOut_sz);
   6725 #endif
   6726 
   6727 #if defined(REAPERAPI_WANT_TrackFX_GetFXGUID) || !defined(REAPERAPI_MINIMAL)
   6728 REAPERAPI_DEF //==============================================
   6729 // TrackFX_GetFXGUID
   6730 
   6731   GUID* (*TrackFX_GetFXGUID)(MediaTrack* track, int fx);
   6732 #endif
   6733 
   6734 #if defined(REAPERAPI_WANT_TrackFX_GetFXName) || !defined(REAPERAPI_MINIMAL)
   6735 REAPERAPI_DEF //==============================================
   6736 // TrackFX_GetFXName
   6737 
   6738   bool (*TrackFX_GetFXName)(MediaTrack* track, int fx, char* bufOut, int bufOut_sz);
   6739 #endif
   6740 
   6741 #if defined(REAPERAPI_WANT_TrackFX_GetInstrument) || !defined(REAPERAPI_MINIMAL)
   6742 REAPERAPI_DEF //==============================================
   6743 // TrackFX_GetInstrument
   6744 // Get the index of the first track FX insert that is a virtual instrument, or -1 if none. See TrackFX_GetEQ, TrackFX_GetByName.
   6745 
   6746   int (*TrackFX_GetInstrument)(MediaTrack* track);
   6747 #endif
   6748 
   6749 #if defined(REAPERAPI_WANT_TrackFX_GetIOSize) || !defined(REAPERAPI_MINIMAL)
   6750 REAPERAPI_DEF //==============================================
   6751 // TrackFX_GetIOSize
   6752 // Gets the number of input/output pins for FX if available, returns plug-in type or -1 on error
   6753 
   6754   int (*TrackFX_GetIOSize)(MediaTrack* track, int fx, int* inputPinsOut, int* outputPinsOut);
   6755 #endif
   6756 
   6757 #if defined(REAPERAPI_WANT_TrackFX_GetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   6758 REAPERAPI_DEF //==============================================
   6759 // TrackFX_GetNamedConfigParm
   6760 // gets plug-in specific named configuration value (returns true on success). Special values: 'pdc' returns PDC latency. 'in_pin_0' returns name of first input pin (if available), 'out_pin_0' returns name of first output pin (if available), etc. 'fx_type' returns type string, 'fx_ident' returns type-specific identifier, 'fx_name' returns pre-aliased name.
   6761 
   6762   bool (*TrackFX_GetNamedConfigParm)(MediaTrack* track, int fx, const char* parmname, char* bufOut, int bufOut_sz);
   6763 #endif
   6764 
   6765 #if defined(REAPERAPI_WANT_TrackFX_GetNumParams) || !defined(REAPERAPI_MINIMAL)
   6766 REAPERAPI_DEF //==============================================
   6767 // TrackFX_GetNumParams
   6768 
   6769   int (*TrackFX_GetNumParams)(MediaTrack* track, int fx);
   6770 #endif
   6771 
   6772 #if defined(REAPERAPI_WANT_TrackFX_GetOffline) || !defined(REAPERAPI_MINIMAL)
   6773 REAPERAPI_DEF //==============================================
   6774 // TrackFX_GetOffline
   6775 // See TrackFX_SetOffline
   6776 
   6777   bool (*TrackFX_GetOffline)(MediaTrack* track, int fx);
   6778 #endif
   6779 
   6780 #if defined(REAPERAPI_WANT_TrackFX_GetOpen) || !defined(REAPERAPI_MINIMAL)
   6781 REAPERAPI_DEF //==============================================
   6782 // TrackFX_GetOpen
   6783 // Returns true if this FX UI is open in the FX chain window or a floating window. See TrackFX_SetOpen
   6784 
   6785   bool (*TrackFX_GetOpen)(MediaTrack* track, int fx);
   6786 #endif
   6787 
   6788 #if defined(REAPERAPI_WANT_TrackFX_GetParam) || !defined(REAPERAPI_MINIMAL)
   6789 REAPERAPI_DEF //==============================================
   6790 // TrackFX_GetParam
   6791 
   6792   double (*TrackFX_GetParam)(MediaTrack* track, int fx, int param, double* minvalOut, double* maxvalOut);
   6793 #endif
   6794 
   6795 #if defined(REAPERAPI_WANT_TrackFX_GetParameterStepSizes) || !defined(REAPERAPI_MINIMAL)
   6796 REAPERAPI_DEF //==============================================
   6797 // TrackFX_GetParameterStepSizes
   6798 
   6799   bool (*TrackFX_GetParameterStepSizes)(MediaTrack* track, int fx, int param, double* stepOut, double* smallstepOut, double* largestepOut, bool* istoggleOut);
   6800 #endif
   6801 
   6802 #if defined(REAPERAPI_WANT_TrackFX_GetParamEx) || !defined(REAPERAPI_MINIMAL)
   6803 REAPERAPI_DEF //==============================================
   6804 // TrackFX_GetParamEx
   6805 
   6806   double (*TrackFX_GetParamEx)(MediaTrack* track, int fx, int param, double* minvalOut, double* maxvalOut, double* midvalOut);
   6807 #endif
   6808 
   6809 #if defined(REAPERAPI_WANT_TrackFX_GetParamFromIdent) || !defined(REAPERAPI_MINIMAL)
   6810 REAPERAPI_DEF //==============================================
   6811 // TrackFX_GetParamFromIdent
   6812 // gets the parameter index from an identifying string (:wet, :bypass, :delta, or a string returned from GetParamIdent), or -1 if unknown.
   6813 
   6814   int (*TrackFX_GetParamFromIdent)(MediaTrack* track, int fx, const char* ident_str);
   6815 #endif
   6816 
   6817 #if defined(REAPERAPI_WANT_TrackFX_GetParamIdent) || !defined(REAPERAPI_MINIMAL)
   6818 REAPERAPI_DEF //==============================================
   6819 // TrackFX_GetParamIdent
   6820 // gets an identifying string for the parameter
   6821 
   6822   bool (*TrackFX_GetParamIdent)(MediaTrack* track, int fx, int param, char* bufOut, int bufOut_sz);
   6823 #endif
   6824 
   6825 #if defined(REAPERAPI_WANT_TrackFX_GetParamName) || !defined(REAPERAPI_MINIMAL)
   6826 REAPERAPI_DEF //==============================================
   6827 // TrackFX_GetParamName
   6828 
   6829   bool (*TrackFX_GetParamName)(MediaTrack* track, int fx, int param, char* bufOut, int bufOut_sz);
   6830 #endif
   6831 
   6832 #if defined(REAPERAPI_WANT_TrackFX_GetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   6833 REAPERAPI_DEF //==============================================
   6834 // TrackFX_GetParamNormalized
   6835 
   6836   double (*TrackFX_GetParamNormalized)(MediaTrack* track, int fx, int param);
   6837 #endif
   6838 
   6839 #if defined(REAPERAPI_WANT_TrackFX_GetPinMappings) || !defined(REAPERAPI_MINIMAL)
   6840 REAPERAPI_DEF //==============================================
   6841 // TrackFX_GetPinMappings
   6842 // gets the effective channel mapping bitmask for a particular pin. high32Out will be set to the high 32 bits
   6843 
   6844   int (*TrackFX_GetPinMappings)(MediaTrack* tr, int fx, int isoutput, int pin, int* high32Out);
   6845 #endif
   6846 
   6847 #if defined(REAPERAPI_WANT_TrackFX_GetPreset) || !defined(REAPERAPI_MINIMAL)
   6848 REAPERAPI_DEF //==============================================
   6849 // TrackFX_GetPreset
   6850 // Get the name of the preset currently showing in the REAPER dropdown, or the full path to a factory preset file for VST3 plug-ins (.vstpreset). Returns false if the current FX parameters do not exactly match the preset (in other words, if the user loaded the preset but moved the knobs afterward). See TrackFX_SetPreset.
   6851 
   6852   bool (*TrackFX_GetPreset)(MediaTrack* track, int fx, char* presetnameOut, int presetnameOut_sz);
   6853 #endif
   6854 
   6855 #if defined(REAPERAPI_WANT_TrackFX_GetPresetIndex) || !defined(REAPERAPI_MINIMAL)
   6856 REAPERAPI_DEF //==============================================
   6857 // TrackFX_GetPresetIndex
   6858 // Returns current preset index, or -1 if error. numberOfPresetsOut will be set to total number of presets available. See TrackFX_SetPresetByIndex
   6859 
   6860   int (*TrackFX_GetPresetIndex)(MediaTrack* track, int fx, int* numberOfPresetsOut);
   6861 #endif
   6862 
   6863 #if defined(REAPERAPI_WANT_TrackFX_GetRecChainVisible) || !defined(REAPERAPI_MINIMAL)
   6864 REAPERAPI_DEF //==============================================
   6865 // TrackFX_GetRecChainVisible
   6866 // returns index of effect visible in record input chain, or -1 for chain hidden, or -2 for chain visible but no effect selected
   6867 
   6868   int (*TrackFX_GetRecChainVisible)(MediaTrack* track);
   6869 #endif
   6870 
   6871 #if defined(REAPERAPI_WANT_TrackFX_GetRecCount) || !defined(REAPERAPI_MINIMAL)
   6872 REAPERAPI_DEF //==============================================
   6873 // TrackFX_GetRecCount
   6874 // returns count of record input FX. To access record input FX, use a FX indices [0x1000000..0x1000000+n). On the master track, this accesses monitoring FX rather than record input FX.
   6875 
   6876   int (*TrackFX_GetRecCount)(MediaTrack* track);
   6877 #endif
   6878 
   6879 #if defined(REAPERAPI_WANT_TrackFX_GetUserPresetFilename) || !defined(REAPERAPI_MINIMAL)
   6880 REAPERAPI_DEF //==============================================
   6881 // TrackFX_GetUserPresetFilename
   6882 
   6883   void (*TrackFX_GetUserPresetFilename)(MediaTrack* track, int fx, char* fnOut, int fnOut_sz);
   6884 #endif
   6885 
   6886 #if defined(REAPERAPI_WANT_TrackFX_NavigatePresets) || !defined(REAPERAPI_MINIMAL)
   6887 REAPERAPI_DEF //==============================================
   6888 // TrackFX_NavigatePresets
   6889 // presetmove==1 activates the next preset, presetmove==-1 activates the previous preset, etc.
   6890 
   6891   bool (*TrackFX_NavigatePresets)(MediaTrack* track, int fx, int presetmove);
   6892 #endif
   6893 
   6894 #if defined(REAPERAPI_WANT_TrackFX_SetEnabled) || !defined(REAPERAPI_MINIMAL)
   6895 REAPERAPI_DEF //==============================================
   6896 // TrackFX_SetEnabled
   6897 // See TrackFX_GetEnabled
   6898 
   6899   void (*TrackFX_SetEnabled)(MediaTrack* track, int fx, bool enabled);
   6900 #endif
   6901 
   6902 #if defined(REAPERAPI_WANT_TrackFX_SetEQBandEnabled) || !defined(REAPERAPI_MINIMAL)
   6903 REAPERAPI_DEF //==============================================
   6904 // TrackFX_SetEQBandEnabled
   6905 // Enable or disable a ReaEQ band.
   6906 // Returns false if track/fxidx is not ReaEQ.
   6907 // Bandtype: -1=master gain, 0=hipass, 1=loshelf, 2=band, 3=notch, 4=hishelf, 5=lopass, 6=bandpass, 7=parallel bandpass.
   6908 // Bandidx (ignored for master gain): 0=target first band matching bandtype, 1=target 2nd band matching bandtype, etc.
   6909 // 
   6910 // See TrackFX_GetEQ, TrackFX_GetEQParam, TrackFX_SetEQParam, TrackFX_GetEQBandEnabled.
   6911 
   6912   bool (*TrackFX_SetEQBandEnabled)(MediaTrack* track, int fxidx, int bandtype, int bandidx, bool enable);
   6913 #endif
   6914 
   6915 #if defined(REAPERAPI_WANT_TrackFX_SetEQParam) || !defined(REAPERAPI_MINIMAL)
   6916 REAPERAPI_DEF //==============================================
   6917 // TrackFX_SetEQParam
   6918 // Returns false if track/fxidx is not ReaEQ. Targets a band matching bandtype.
   6919 // Bandtype: -1=master gain, 0=hipass, 1=loshelf, 2=band, 3=notch, 4=hishelf, 5=lopass, 6=bandpass, 7=parallel bandpass.
   6920 // Bandidx (ignored for master gain): 0=target first band matching bandtype, 1=target 2nd band matching bandtype, etc.
   6921 // Paramtype (ignored for master gain): 0=freq, 1=gain, 2=Q.
   6922 // See TrackFX_GetEQ, TrackFX_GetEQParam, TrackFX_GetEQBandEnabled, TrackFX_SetEQBandEnabled.
   6923 
   6924   bool (*TrackFX_SetEQParam)(MediaTrack* track, int fxidx, int bandtype, int bandidx, int paramtype, double val, bool isnorm);
   6925 #endif
   6926 
   6927 #if defined(REAPERAPI_WANT_TrackFX_SetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   6928 REAPERAPI_DEF //==============================================
   6929 // TrackFX_SetNamedConfigParm
   6930 // sets plug-in specific named configuration value (returns true on success)
   6931 
   6932   bool (*TrackFX_SetNamedConfigParm)(MediaTrack* track, int fx, const char* parmname, const char* value);
   6933 #endif
   6934 
   6935 #if defined(REAPERAPI_WANT_TrackFX_SetOffline) || !defined(REAPERAPI_MINIMAL)
   6936 REAPERAPI_DEF //==============================================
   6937 // TrackFX_SetOffline
   6938 // See TrackFX_GetOffline
   6939 
   6940   void (*TrackFX_SetOffline)(MediaTrack* track, int fx, bool offline);
   6941 #endif
   6942 
   6943 #if defined(REAPERAPI_WANT_TrackFX_SetOpen) || !defined(REAPERAPI_MINIMAL)
   6944 REAPERAPI_DEF //==============================================
   6945 // TrackFX_SetOpen
   6946 // Open this FX UI. See TrackFX_GetOpen
   6947 
   6948   void (*TrackFX_SetOpen)(MediaTrack* track, int fx, bool open);
   6949 #endif
   6950 
   6951 #if defined(REAPERAPI_WANT_TrackFX_SetParam) || !defined(REAPERAPI_MINIMAL)
   6952 REAPERAPI_DEF //==============================================
   6953 // TrackFX_SetParam
   6954 
   6955   bool (*TrackFX_SetParam)(MediaTrack* track, int fx, int param, double val);
   6956 #endif
   6957 
   6958 #if defined(REAPERAPI_WANT_TrackFX_SetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   6959 REAPERAPI_DEF //==============================================
   6960 // TrackFX_SetParamNormalized
   6961 
   6962   bool (*TrackFX_SetParamNormalized)(MediaTrack* track, int fx, int param, double value);
   6963 #endif
   6964 
   6965 #if defined(REAPERAPI_WANT_TrackFX_SetPinMappings) || !defined(REAPERAPI_MINIMAL)
   6966 REAPERAPI_DEF //==============================================
   6967 // TrackFX_SetPinMappings
   6968 // sets the channel mapping bitmask for a particular pin. returns false if unsupported (not all types of plug-ins support this capability)
   6969 
   6970   bool (*TrackFX_SetPinMappings)(MediaTrack* tr, int fx, int isoutput, int pin, int low32bits, int hi32bits);
   6971 #endif
   6972 
   6973 #if defined(REAPERAPI_WANT_TrackFX_SetPreset) || !defined(REAPERAPI_MINIMAL)
   6974 REAPERAPI_DEF //==============================================
   6975 // TrackFX_SetPreset
   6976 // Activate a preset with the name shown in the REAPER dropdown. Full paths to .vstpreset files are also supported for VST3 plug-ins. See TrackFX_GetPreset.
   6977 
   6978   bool (*TrackFX_SetPreset)(MediaTrack* track, int fx, const char* presetname);
   6979 #endif
   6980 
   6981 #if defined(REAPERAPI_WANT_TrackFX_SetPresetByIndex) || !defined(REAPERAPI_MINIMAL)
   6982 REAPERAPI_DEF //==============================================
   6983 // TrackFX_SetPresetByIndex
   6984 // Sets the preset idx, or the factory preset (idx==-2), or the default user preset (idx==-1). Returns true on success. See TrackFX_GetPresetIndex.
   6985 
   6986   bool (*TrackFX_SetPresetByIndex)(MediaTrack* track, int fx, int idx);
   6987 #endif
   6988 
   6989 #if defined(REAPERAPI_WANT_TrackFX_Show) || !defined(REAPERAPI_MINIMAL)
   6990 REAPERAPI_DEF //==============================================
   6991 // TrackFX_Show
   6992 // showflag=0 for hidechain, =1 for show chain(index valid), =2 for hide floating window(index valid), =3 for show floating window (index valid)
   6993 
   6994   void (*TrackFX_Show)(MediaTrack* track, int index, int showFlag);
   6995 #endif
   6996 
   6997 #if defined(REAPERAPI_WANT_TrackList_AdjustWindows) || !defined(REAPERAPI_MINIMAL)
   6998 REAPERAPI_DEF //==============================================
   6999 // TrackList_AdjustWindows
   7000 
   7001   void (*TrackList_AdjustWindows)(bool isMinor);
   7002 #endif
   7003 
   7004 #if defined(REAPERAPI_WANT_TrackList_UpdateAllExternalSurfaces) || !defined(REAPERAPI_MINIMAL)
   7005 REAPERAPI_DEF //==============================================
   7006 // TrackList_UpdateAllExternalSurfaces
   7007 
   7008   void (*TrackList_UpdateAllExternalSurfaces)();
   7009 #endif
   7010 
   7011 #if defined(REAPERAPI_WANT_Undo_BeginBlock) || !defined(REAPERAPI_MINIMAL)
   7012 REAPERAPI_DEF //==============================================
   7013 // Undo_BeginBlock
   7014 // call to start a new block
   7015 
   7016   void (*Undo_BeginBlock)();
   7017 #endif
   7018 
   7019 #if defined(REAPERAPI_WANT_Undo_BeginBlock2) || !defined(REAPERAPI_MINIMAL)
   7020 REAPERAPI_DEF //==============================================
   7021 // Undo_BeginBlock2
   7022 // call to start a new block
   7023 
   7024   void (*Undo_BeginBlock2)(ReaProject* proj);
   7025 #endif
   7026 
   7027 #if defined(REAPERAPI_WANT_Undo_CanRedo2) || !defined(REAPERAPI_MINIMAL)
   7028 REAPERAPI_DEF //==============================================
   7029 // Undo_CanRedo2
   7030 // returns string of next action,if able,NULL if not
   7031 
   7032   const char* (*Undo_CanRedo2)(ReaProject* proj);
   7033 #endif
   7034 
   7035 #if defined(REAPERAPI_WANT_Undo_CanUndo2) || !defined(REAPERAPI_MINIMAL)
   7036 REAPERAPI_DEF //==============================================
   7037 // Undo_CanUndo2
   7038 // returns string of last action,if able,NULL if not
   7039 
   7040   const char* (*Undo_CanUndo2)(ReaProject* proj);
   7041 #endif
   7042 
   7043 #if defined(REAPERAPI_WANT_Undo_DoRedo2) || !defined(REAPERAPI_MINIMAL)
   7044 REAPERAPI_DEF //==============================================
   7045 // Undo_DoRedo2
   7046 // nonzero if success
   7047 
   7048   int (*Undo_DoRedo2)(ReaProject* proj);
   7049 #endif
   7050 
   7051 #if defined(REAPERAPI_WANT_Undo_DoUndo2) || !defined(REAPERAPI_MINIMAL)
   7052 REAPERAPI_DEF //==============================================
   7053 // Undo_DoUndo2
   7054 // nonzero if success
   7055 
   7056   int (*Undo_DoUndo2)(ReaProject* proj);
   7057 #endif
   7058 
   7059 #if defined(REAPERAPI_WANT_Undo_EndBlock) || !defined(REAPERAPI_MINIMAL)
   7060 REAPERAPI_DEF //==============================================
   7061 // Undo_EndBlock
   7062 // call to end the block,with extra flags if any,and a description
   7063 
   7064   void (*Undo_EndBlock)(const char* descchange, int extraflags);
   7065 #endif
   7066 
   7067 #if defined(REAPERAPI_WANT_Undo_EndBlock2) || !defined(REAPERAPI_MINIMAL)
   7068 REAPERAPI_DEF //==============================================
   7069 // Undo_EndBlock2
   7070 // call to end the block,with extra flags if any,and a description
   7071 
   7072   void (*Undo_EndBlock2)(ReaProject* proj, const char* descchange, int extraflags);
   7073 #endif
   7074 
   7075 #if defined(REAPERAPI_WANT_Undo_OnStateChange) || !defined(REAPERAPI_MINIMAL)
   7076 REAPERAPI_DEF //==============================================
   7077 // Undo_OnStateChange
   7078 // limited state change to items
   7079 
   7080   void (*Undo_OnStateChange)(const char* descchange);
   7081 #endif
   7082 
   7083 #if defined(REAPERAPI_WANT_Undo_OnStateChange2) || !defined(REAPERAPI_MINIMAL)
   7084 REAPERAPI_DEF //==============================================
   7085 // Undo_OnStateChange2
   7086 // limited state change to items
   7087 
   7088   void (*Undo_OnStateChange2)(ReaProject* proj, const char* descchange);
   7089 #endif
   7090 
   7091 #if defined(REAPERAPI_WANT_Undo_OnStateChange_Item) || !defined(REAPERAPI_MINIMAL)
   7092 REAPERAPI_DEF //==============================================
   7093 // Undo_OnStateChange_Item
   7094 
   7095   void (*Undo_OnStateChange_Item)(ReaProject* proj, const char* name, MediaItem* item);
   7096 #endif
   7097 
   7098 #if defined(REAPERAPI_WANT_Undo_OnStateChangeEx) || !defined(REAPERAPI_MINIMAL)
   7099 REAPERAPI_DEF //==============================================
   7100 // Undo_OnStateChangeEx
   7101 // trackparm=-1 by default,or if updating one fx chain,you can specify track index
   7102 
   7103   void (*Undo_OnStateChangeEx)(const char* descchange, int whichStates, int trackparm);
   7104 #endif
   7105 
   7106 #if defined(REAPERAPI_WANT_Undo_OnStateChangeEx2) || !defined(REAPERAPI_MINIMAL)
   7107 REAPERAPI_DEF //==============================================
   7108 // Undo_OnStateChangeEx2
   7109 // trackparm=-1 by default,or if updating one fx chain,you can specify track index
   7110 
   7111   void (*Undo_OnStateChangeEx2)(ReaProject* proj, const char* descchange, int whichStates, int trackparm);
   7112 #endif
   7113 
   7114 #if defined(REAPERAPI_WANT_update_disk_counters) || !defined(REAPERAPI_MINIMAL)
   7115 REAPERAPI_DEF //==============================================
   7116 // update_disk_counters
   7117 // Updates disk I/O statistics with bytes transferred since last call. notify REAPER of a write error by calling with readamt=0, writeamt=-101010110 for unknown or -101010111 for disk full
   7118 
   7119   void (*update_disk_counters)(int readamt, int writeamt);
   7120 #endif
   7121 
   7122 #if defined(REAPERAPI_WANT_UpdateArrange) || !defined(REAPERAPI_MINIMAL)
   7123 REAPERAPI_DEF //==============================================
   7124 // UpdateArrange
   7125 // Redraw the arrange view
   7126 
   7127   void (*UpdateArrange)();
   7128 #endif
   7129 
   7130 #if defined(REAPERAPI_WANT_UpdateItemInProject) || !defined(REAPERAPI_MINIMAL)
   7131 REAPERAPI_DEF //==============================================
   7132 // UpdateItemInProject
   7133 
   7134   void (*UpdateItemInProject)(MediaItem* item);
   7135 #endif
   7136 
   7137 #if defined(REAPERAPI_WANT_UpdateTimeline) || !defined(REAPERAPI_MINIMAL)
   7138 REAPERAPI_DEF //==============================================
   7139 // UpdateTimeline
   7140 // Redraw the arrange view and ruler
   7141 
   7142   void (*UpdateTimeline)();
   7143 #endif
   7144 
   7145 #if defined(REAPERAPI_WANT_ValidatePtr) || !defined(REAPERAPI_MINIMAL)
   7146 REAPERAPI_DEF //==============================================
   7147 // ValidatePtr
   7148 // see ValidatePtr2
   7149 
   7150   bool (*ValidatePtr)(void* pointer, const char* ctypename);
   7151 #endif
   7152 
   7153 #if defined(REAPERAPI_WANT_ValidatePtr2) || !defined(REAPERAPI_MINIMAL)
   7154 REAPERAPI_DEF //==============================================
   7155 // ValidatePtr2
   7156 // Return true if the pointer is a valid object of the right type in proj (proj is ignored if pointer is itself a project). Supported types are: ReaProject*, MediaTrack*, MediaItem*, MediaItem_Take*, TrackEnvelope* and PCM_source*.
   7157 
   7158   bool (*ValidatePtr2)(ReaProject* proj, void* pointer, const char* ctypename);
   7159 #endif
   7160 
   7161 #if defined(REAPERAPI_WANT_ViewPrefs) || !defined(REAPERAPI_MINIMAL)
   7162 REAPERAPI_DEF //==============================================
   7163 // ViewPrefs
   7164 // Opens the prefs to a page, use pageByName if page is 0.
   7165 
   7166   void (*ViewPrefs)(int page, const char* pageByName);
   7167 #endif
   7168 
   7169 #if defined(REAPERAPI_WANT_WDL_VirtualWnd_ScaledBlitBG) || !defined(REAPERAPI_MINIMAL)
   7170 REAPERAPI_DEF //==============================================
   7171 // WDL_VirtualWnd_ScaledBlitBG
   7172 
   7173   bool (*WDL_VirtualWnd_ScaledBlitBG)(LICE_IBitmap* dest, WDL_VirtualWnd_BGCfg* src, int destx, int desty, int destw, int desth, int clipx, int clipy, int clipw, int cliph, float alpha, int mode);
   7174 #endif
   7175 
   7176 #ifdef REAPERAPI_IMPLEMENT
   7177   int REAPERAPI_LoadAPI(void *(*getAPI)(const char *))
   7178   {
   7179     static const struct { void **dest; const char *name; } table[]={
   7180       #if defined(REAPERAPI_WANT___mergesort) || !defined(REAPERAPI_MINIMAL)
   7181         {(void**)&__mergesort,"__mergesort"},
   7182       #endif
   7183       #if defined(REAPERAPI_WANT_AddCustomizableMenu) || !defined(REAPERAPI_MINIMAL)
   7184         {(void**)&AddCustomizableMenu,"AddCustomizableMenu"},
   7185       #endif
   7186       #if defined(REAPERAPI_WANT_AddExtensionsMainMenu) || !defined(REAPERAPI_MINIMAL)
   7187         {(void**)&AddExtensionsMainMenu,"AddExtensionsMainMenu"},
   7188       #endif
   7189       #if defined(REAPERAPI_WANT_AddMediaItemToTrack) || !defined(REAPERAPI_MINIMAL)
   7190         {(void**)&AddMediaItemToTrack,"AddMediaItemToTrack"},
   7191       #endif
   7192       #if defined(REAPERAPI_WANT_AddProjectMarker) || !defined(REAPERAPI_MINIMAL)
   7193         {(void**)&AddProjectMarker,"AddProjectMarker"},
   7194       #endif
   7195       #if defined(REAPERAPI_WANT_AddProjectMarker2) || !defined(REAPERAPI_MINIMAL)
   7196         {(void**)&AddProjectMarker2,"AddProjectMarker2"},
   7197       #endif
   7198       #if defined(REAPERAPI_WANT_AddRemoveReaScript) || !defined(REAPERAPI_MINIMAL)
   7199         {(void**)&AddRemoveReaScript,"AddRemoveReaScript"},
   7200       #endif
   7201       #if defined(REAPERAPI_WANT_AddTakeToMediaItem) || !defined(REAPERAPI_MINIMAL)
   7202         {(void**)&AddTakeToMediaItem,"AddTakeToMediaItem"},
   7203       #endif
   7204       #if defined(REAPERAPI_WANT_AddTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   7205         {(void**)&AddTempoTimeSigMarker,"AddTempoTimeSigMarker"},
   7206       #endif
   7207       #if defined(REAPERAPI_WANT_adjustZoom) || !defined(REAPERAPI_MINIMAL)
   7208         {(void**)&adjustZoom,"adjustZoom"},
   7209       #endif
   7210       #if defined(REAPERAPI_WANT_AnyTrackSolo) || !defined(REAPERAPI_MINIMAL)
   7211         {(void**)&AnyTrackSolo,"AnyTrackSolo"},
   7212       #endif
   7213       #if defined(REAPERAPI_WANT_APIExists) || !defined(REAPERAPI_MINIMAL)
   7214         {(void**)&APIExists,"APIExists"},
   7215       #endif
   7216       #if defined(REAPERAPI_WANT_APITest) || !defined(REAPERAPI_MINIMAL)
   7217         {(void**)&APITest,"APITest"},
   7218       #endif
   7219       #if defined(REAPERAPI_WANT_ApplyNudge) || !defined(REAPERAPI_MINIMAL)
   7220         {(void**)&ApplyNudge,"ApplyNudge"},
   7221       #endif
   7222       #if defined(REAPERAPI_WANT_ArmCommand) || !defined(REAPERAPI_MINIMAL)
   7223         {(void**)&ArmCommand,"ArmCommand"},
   7224       #endif
   7225       #if defined(REAPERAPI_WANT_Audio_Init) || !defined(REAPERAPI_MINIMAL)
   7226         {(void**)&Audio_Init,"Audio_Init"},
   7227       #endif
   7228       #if defined(REAPERAPI_WANT_Audio_IsPreBuffer) || !defined(REAPERAPI_MINIMAL)
   7229         {(void**)&Audio_IsPreBuffer,"Audio_IsPreBuffer"},
   7230       #endif
   7231       #if defined(REAPERAPI_WANT_Audio_IsRunning) || !defined(REAPERAPI_MINIMAL)
   7232         {(void**)&Audio_IsRunning,"Audio_IsRunning"},
   7233       #endif
   7234       #if defined(REAPERAPI_WANT_Audio_Quit) || !defined(REAPERAPI_MINIMAL)
   7235         {(void**)&Audio_Quit,"Audio_Quit"},
   7236       #endif
   7237       #if defined(REAPERAPI_WANT_Audio_RegHardwareHook) || !defined(REAPERAPI_MINIMAL)
   7238         {(void**)&Audio_RegHardwareHook,"Audio_RegHardwareHook"},
   7239       #endif
   7240       #if defined(REAPERAPI_WANT_AudioAccessorStateChanged) || !defined(REAPERAPI_MINIMAL)
   7241         {(void**)&AudioAccessorStateChanged,"AudioAccessorStateChanged"},
   7242       #endif
   7243       #if defined(REAPERAPI_WANT_AudioAccessorUpdate) || !defined(REAPERAPI_MINIMAL)
   7244         {(void**)&AudioAccessorUpdate,"AudioAccessorUpdate"},
   7245       #endif
   7246       #if defined(REAPERAPI_WANT_AudioAccessorValidateState) || !defined(REAPERAPI_MINIMAL)
   7247         {(void**)&AudioAccessorValidateState,"AudioAccessorValidateState"},
   7248       #endif
   7249       #if defined(REAPERAPI_WANT_BypassFxAllTracks) || !defined(REAPERAPI_MINIMAL)
   7250         {(void**)&BypassFxAllTracks,"BypassFxAllTracks"},
   7251       #endif
   7252       #if defined(REAPERAPI_WANT_CalcMediaSrcLoudness) || !defined(REAPERAPI_MINIMAL)
   7253         {(void**)&CalcMediaSrcLoudness,"CalcMediaSrcLoudness"},
   7254       #endif
   7255       #if defined(REAPERAPI_WANT_CalculateNormalization) || !defined(REAPERAPI_MINIMAL)
   7256         {(void**)&CalculateNormalization,"CalculateNormalization"},
   7257       #endif
   7258       #if defined(REAPERAPI_WANT_CalculatePeaks) || !defined(REAPERAPI_MINIMAL)
   7259         {(void**)&CalculatePeaks,"CalculatePeaks"},
   7260       #endif
   7261       #if defined(REAPERAPI_WANT_CalculatePeaksFloatSrcPtr) || !defined(REAPERAPI_MINIMAL)
   7262         {(void**)&CalculatePeaksFloatSrcPtr,"CalculatePeaksFloatSrcPtr"},
   7263       #endif
   7264       #if defined(REAPERAPI_WANT_ClearAllRecArmed) || !defined(REAPERAPI_MINIMAL)
   7265         {(void**)&ClearAllRecArmed,"ClearAllRecArmed"},
   7266       #endif
   7267       #if defined(REAPERAPI_WANT_ClearConsole) || !defined(REAPERAPI_MINIMAL)
   7268         {(void**)&ClearConsole,"ClearConsole"},
   7269       #endif
   7270       #if defined(REAPERAPI_WANT_ClearPeakCache) || !defined(REAPERAPI_MINIMAL)
   7271         {(void**)&ClearPeakCache,"ClearPeakCache"},
   7272       #endif
   7273       #if defined(REAPERAPI_WANT_ColorFromNative) || !defined(REAPERAPI_MINIMAL)
   7274         {(void**)&ColorFromNative,"ColorFromNative"},
   7275       #endif
   7276       #if defined(REAPERAPI_WANT_ColorToNative) || !defined(REAPERAPI_MINIMAL)
   7277         {(void**)&ColorToNative,"ColorToNative"},
   7278       #endif
   7279       #if defined(REAPERAPI_WANT_CountActionShortcuts) || !defined(REAPERAPI_MINIMAL)
   7280         {(void**)&CountActionShortcuts,"CountActionShortcuts"},
   7281       #endif
   7282       #if defined(REAPERAPI_WANT_CountAutomationItems) || !defined(REAPERAPI_MINIMAL)
   7283         {(void**)&CountAutomationItems,"CountAutomationItems"},
   7284       #endif
   7285       #if defined(REAPERAPI_WANT_CountEnvelopePoints) || !defined(REAPERAPI_MINIMAL)
   7286         {(void**)&CountEnvelopePoints,"CountEnvelopePoints"},
   7287       #endif
   7288       #if defined(REAPERAPI_WANT_CountEnvelopePointsEx) || !defined(REAPERAPI_MINIMAL)
   7289         {(void**)&CountEnvelopePointsEx,"CountEnvelopePointsEx"},
   7290       #endif
   7291       #if defined(REAPERAPI_WANT_CountMediaItems) || !defined(REAPERAPI_MINIMAL)
   7292         {(void**)&CountMediaItems,"CountMediaItems"},
   7293       #endif
   7294       #if defined(REAPERAPI_WANT_CountProjectMarkers) || !defined(REAPERAPI_MINIMAL)
   7295         {(void**)&CountProjectMarkers,"CountProjectMarkers"},
   7296       #endif
   7297       #if defined(REAPERAPI_WANT_CountSelectedMediaItems) || !defined(REAPERAPI_MINIMAL)
   7298         {(void**)&CountSelectedMediaItems,"CountSelectedMediaItems"},
   7299       #endif
   7300       #if defined(REAPERAPI_WANT_CountSelectedTracks) || !defined(REAPERAPI_MINIMAL)
   7301         {(void**)&CountSelectedTracks,"CountSelectedTracks"},
   7302       #endif
   7303       #if defined(REAPERAPI_WANT_CountSelectedTracks2) || !defined(REAPERAPI_MINIMAL)
   7304         {(void**)&CountSelectedTracks2,"CountSelectedTracks2"},
   7305       #endif
   7306       #if defined(REAPERAPI_WANT_CountTakeEnvelopes) || !defined(REAPERAPI_MINIMAL)
   7307         {(void**)&CountTakeEnvelopes,"CountTakeEnvelopes"},
   7308       #endif
   7309       #if defined(REAPERAPI_WANT_CountTakes) || !defined(REAPERAPI_MINIMAL)
   7310         {(void**)&CountTakes,"CountTakes"},
   7311       #endif
   7312       #if defined(REAPERAPI_WANT_CountTCPFXParms) || !defined(REAPERAPI_MINIMAL)
   7313         {(void**)&CountTCPFXParms,"CountTCPFXParms"},
   7314       #endif
   7315       #if defined(REAPERAPI_WANT_CountTempoTimeSigMarkers) || !defined(REAPERAPI_MINIMAL)
   7316         {(void**)&CountTempoTimeSigMarkers,"CountTempoTimeSigMarkers"},
   7317       #endif
   7318       #if defined(REAPERAPI_WANT_CountTrackEnvelopes) || !defined(REAPERAPI_MINIMAL)
   7319         {(void**)&CountTrackEnvelopes,"CountTrackEnvelopes"},
   7320       #endif
   7321       #if defined(REAPERAPI_WANT_CountTrackMediaItems) || !defined(REAPERAPI_MINIMAL)
   7322         {(void**)&CountTrackMediaItems,"CountTrackMediaItems"},
   7323       #endif
   7324       #if defined(REAPERAPI_WANT_CountTracks) || !defined(REAPERAPI_MINIMAL)
   7325         {(void**)&CountTracks,"CountTracks"},
   7326       #endif
   7327       #if defined(REAPERAPI_WANT_CreateLocalOscHandler) || !defined(REAPERAPI_MINIMAL)
   7328         {(void**)&CreateLocalOscHandler,"CreateLocalOscHandler"},
   7329       #endif
   7330       #if defined(REAPERAPI_WANT_CreateMIDIInput) || !defined(REAPERAPI_MINIMAL)
   7331         {(void**)&CreateMIDIInput,"CreateMIDIInput"},
   7332       #endif
   7333       #if defined(REAPERAPI_WANT_CreateMIDIOutput) || !defined(REAPERAPI_MINIMAL)
   7334         {(void**)&CreateMIDIOutput,"CreateMIDIOutput"},
   7335       #endif
   7336       #if defined(REAPERAPI_WANT_CreateNewMIDIItemInProj) || !defined(REAPERAPI_MINIMAL)
   7337         {(void**)&CreateNewMIDIItemInProj,"CreateNewMIDIItemInProj"},
   7338       #endif
   7339       #if defined(REAPERAPI_WANT_CreateTakeAudioAccessor) || !defined(REAPERAPI_MINIMAL)
   7340         {(void**)&CreateTakeAudioAccessor,"CreateTakeAudioAccessor"},
   7341       #endif
   7342       #if defined(REAPERAPI_WANT_CreateTrackAudioAccessor) || !defined(REAPERAPI_MINIMAL)
   7343         {(void**)&CreateTrackAudioAccessor,"CreateTrackAudioAccessor"},
   7344       #endif
   7345       #if defined(REAPERAPI_WANT_CreateTrackSend) || !defined(REAPERAPI_MINIMAL)
   7346         {(void**)&CreateTrackSend,"CreateTrackSend"},
   7347       #endif
   7348       #if defined(REAPERAPI_WANT_CSurf_FlushUndo) || !defined(REAPERAPI_MINIMAL)
   7349         {(void**)&CSurf_FlushUndo,"CSurf_FlushUndo"},
   7350       #endif
   7351       #if defined(REAPERAPI_WANT_CSurf_GetTouchState) || !defined(REAPERAPI_MINIMAL)
   7352         {(void**)&CSurf_GetTouchState,"CSurf_GetTouchState"},
   7353       #endif
   7354       #if defined(REAPERAPI_WANT_CSurf_GoEnd) || !defined(REAPERAPI_MINIMAL)
   7355         {(void**)&CSurf_GoEnd,"CSurf_GoEnd"},
   7356       #endif
   7357       #if defined(REAPERAPI_WANT_CSurf_GoStart) || !defined(REAPERAPI_MINIMAL)
   7358         {(void**)&CSurf_GoStart,"CSurf_GoStart"},
   7359       #endif
   7360       #if defined(REAPERAPI_WANT_CSurf_NumTracks) || !defined(REAPERAPI_MINIMAL)
   7361         {(void**)&CSurf_NumTracks,"CSurf_NumTracks"},
   7362       #endif
   7363       #if defined(REAPERAPI_WANT_CSurf_OnArrow) || !defined(REAPERAPI_MINIMAL)
   7364         {(void**)&CSurf_OnArrow,"CSurf_OnArrow"},
   7365       #endif
   7366       #if defined(REAPERAPI_WANT_CSurf_OnFwd) || !defined(REAPERAPI_MINIMAL)
   7367         {(void**)&CSurf_OnFwd,"CSurf_OnFwd"},
   7368       #endif
   7369       #if defined(REAPERAPI_WANT_CSurf_OnFXChange) || !defined(REAPERAPI_MINIMAL)
   7370         {(void**)&CSurf_OnFXChange,"CSurf_OnFXChange"},
   7371       #endif
   7372       #if defined(REAPERAPI_WANT_CSurf_OnInputMonitorChange) || !defined(REAPERAPI_MINIMAL)
   7373         {(void**)&CSurf_OnInputMonitorChange,"CSurf_OnInputMonitorChange"},
   7374       #endif
   7375       #if defined(REAPERAPI_WANT_CSurf_OnInputMonitorChangeEx) || !defined(REAPERAPI_MINIMAL)
   7376         {(void**)&CSurf_OnInputMonitorChangeEx,"CSurf_OnInputMonitorChangeEx"},
   7377       #endif
   7378       #if defined(REAPERAPI_WANT_CSurf_OnMuteChange) || !defined(REAPERAPI_MINIMAL)
   7379         {(void**)&CSurf_OnMuteChange,"CSurf_OnMuteChange"},
   7380       #endif
   7381       #if defined(REAPERAPI_WANT_CSurf_OnMuteChangeEx) || !defined(REAPERAPI_MINIMAL)
   7382         {(void**)&CSurf_OnMuteChangeEx,"CSurf_OnMuteChangeEx"},
   7383       #endif
   7384       #if defined(REAPERAPI_WANT_CSurf_OnOscControlMessage) || !defined(REAPERAPI_MINIMAL)
   7385         {(void**)&CSurf_OnOscControlMessage,"CSurf_OnOscControlMessage"},
   7386       #endif
   7387       #if defined(REAPERAPI_WANT_CSurf_OnPanChange) || !defined(REAPERAPI_MINIMAL)
   7388         {(void**)&CSurf_OnPanChange,"CSurf_OnPanChange"},
   7389       #endif
   7390       #if defined(REAPERAPI_WANT_CSurf_OnPanChangeEx) || !defined(REAPERAPI_MINIMAL)
   7391         {(void**)&CSurf_OnPanChangeEx,"CSurf_OnPanChangeEx"},
   7392       #endif
   7393       #if defined(REAPERAPI_WANT_CSurf_OnPause) || !defined(REAPERAPI_MINIMAL)
   7394         {(void**)&CSurf_OnPause,"CSurf_OnPause"},
   7395       #endif
   7396       #if defined(REAPERAPI_WANT_CSurf_OnPlay) || !defined(REAPERAPI_MINIMAL)
   7397         {(void**)&CSurf_OnPlay,"CSurf_OnPlay"},
   7398       #endif
   7399       #if defined(REAPERAPI_WANT_CSurf_OnPlayRateChange) || !defined(REAPERAPI_MINIMAL)
   7400         {(void**)&CSurf_OnPlayRateChange,"CSurf_OnPlayRateChange"},
   7401       #endif
   7402       #if defined(REAPERAPI_WANT_CSurf_OnRecArmChange) || !defined(REAPERAPI_MINIMAL)
   7403         {(void**)&CSurf_OnRecArmChange,"CSurf_OnRecArmChange"},
   7404       #endif
   7405       #if defined(REAPERAPI_WANT_CSurf_OnRecArmChangeEx) || !defined(REAPERAPI_MINIMAL)
   7406         {(void**)&CSurf_OnRecArmChangeEx,"CSurf_OnRecArmChangeEx"},
   7407       #endif
   7408       #if defined(REAPERAPI_WANT_CSurf_OnRecord) || !defined(REAPERAPI_MINIMAL)
   7409         {(void**)&CSurf_OnRecord,"CSurf_OnRecord"},
   7410       #endif
   7411       #if defined(REAPERAPI_WANT_CSurf_OnRecvPanChange) || !defined(REAPERAPI_MINIMAL)
   7412         {(void**)&CSurf_OnRecvPanChange,"CSurf_OnRecvPanChange"},
   7413       #endif
   7414       #if defined(REAPERAPI_WANT_CSurf_OnRecvVolumeChange) || !defined(REAPERAPI_MINIMAL)
   7415         {(void**)&CSurf_OnRecvVolumeChange,"CSurf_OnRecvVolumeChange"},
   7416       #endif
   7417       #if defined(REAPERAPI_WANT_CSurf_OnRew) || !defined(REAPERAPI_MINIMAL)
   7418         {(void**)&CSurf_OnRew,"CSurf_OnRew"},
   7419       #endif
   7420       #if defined(REAPERAPI_WANT_CSurf_OnRewFwd) || !defined(REAPERAPI_MINIMAL)
   7421         {(void**)&CSurf_OnRewFwd,"CSurf_OnRewFwd"},
   7422       #endif
   7423       #if defined(REAPERAPI_WANT_CSurf_OnScroll) || !defined(REAPERAPI_MINIMAL)
   7424         {(void**)&CSurf_OnScroll,"CSurf_OnScroll"},
   7425       #endif
   7426       #if defined(REAPERAPI_WANT_CSurf_OnSelectedChange) || !defined(REAPERAPI_MINIMAL)
   7427         {(void**)&CSurf_OnSelectedChange,"CSurf_OnSelectedChange"},
   7428       #endif
   7429       #if defined(REAPERAPI_WANT_CSurf_OnSendPanChange) || !defined(REAPERAPI_MINIMAL)
   7430         {(void**)&CSurf_OnSendPanChange,"CSurf_OnSendPanChange"},
   7431       #endif
   7432       #if defined(REAPERAPI_WANT_CSurf_OnSendVolumeChange) || !defined(REAPERAPI_MINIMAL)
   7433         {(void**)&CSurf_OnSendVolumeChange,"CSurf_OnSendVolumeChange"},
   7434       #endif
   7435       #if defined(REAPERAPI_WANT_CSurf_OnSoloChange) || !defined(REAPERAPI_MINIMAL)
   7436         {(void**)&CSurf_OnSoloChange,"CSurf_OnSoloChange"},
   7437       #endif
   7438       #if defined(REAPERAPI_WANT_CSurf_OnSoloChangeEx) || !defined(REAPERAPI_MINIMAL)
   7439         {(void**)&CSurf_OnSoloChangeEx,"CSurf_OnSoloChangeEx"},
   7440       #endif
   7441       #if defined(REAPERAPI_WANT_CSurf_OnStop) || !defined(REAPERAPI_MINIMAL)
   7442         {(void**)&CSurf_OnStop,"CSurf_OnStop"},
   7443       #endif
   7444       #if defined(REAPERAPI_WANT_CSurf_OnTempoChange) || !defined(REAPERAPI_MINIMAL)
   7445         {(void**)&CSurf_OnTempoChange,"CSurf_OnTempoChange"},
   7446       #endif
   7447       #if defined(REAPERAPI_WANT_CSurf_OnTrackSelection) || !defined(REAPERAPI_MINIMAL)
   7448         {(void**)&CSurf_OnTrackSelection,"CSurf_OnTrackSelection"},
   7449       #endif
   7450       #if defined(REAPERAPI_WANT_CSurf_OnVolumeChange) || !defined(REAPERAPI_MINIMAL)
   7451         {(void**)&CSurf_OnVolumeChange,"CSurf_OnVolumeChange"},
   7452       #endif
   7453       #if defined(REAPERAPI_WANT_CSurf_OnVolumeChangeEx) || !defined(REAPERAPI_MINIMAL)
   7454         {(void**)&CSurf_OnVolumeChangeEx,"CSurf_OnVolumeChangeEx"},
   7455       #endif
   7456       #if defined(REAPERAPI_WANT_CSurf_OnWidthChange) || !defined(REAPERAPI_MINIMAL)
   7457         {(void**)&CSurf_OnWidthChange,"CSurf_OnWidthChange"},
   7458       #endif
   7459       #if defined(REAPERAPI_WANT_CSurf_OnWidthChangeEx) || !defined(REAPERAPI_MINIMAL)
   7460         {(void**)&CSurf_OnWidthChangeEx,"CSurf_OnWidthChangeEx"},
   7461       #endif
   7462       #if defined(REAPERAPI_WANT_CSurf_OnZoom) || !defined(REAPERAPI_MINIMAL)
   7463         {(void**)&CSurf_OnZoom,"CSurf_OnZoom"},
   7464       #endif
   7465       #if defined(REAPERAPI_WANT_CSurf_ResetAllCachedVolPanStates) || !defined(REAPERAPI_MINIMAL)
   7466         {(void**)&CSurf_ResetAllCachedVolPanStates,"CSurf_ResetAllCachedVolPanStates"},
   7467       #endif
   7468       #if defined(REAPERAPI_WANT_CSurf_ScrubAmt) || !defined(REAPERAPI_MINIMAL)
   7469         {(void**)&CSurf_ScrubAmt,"CSurf_ScrubAmt"},
   7470       #endif
   7471       #if defined(REAPERAPI_WANT_CSurf_SetAutoMode) || !defined(REAPERAPI_MINIMAL)
   7472         {(void**)&CSurf_SetAutoMode,"CSurf_SetAutoMode"},
   7473       #endif
   7474       #if defined(REAPERAPI_WANT_CSurf_SetPlayState) || !defined(REAPERAPI_MINIMAL)
   7475         {(void**)&CSurf_SetPlayState,"CSurf_SetPlayState"},
   7476       #endif
   7477       #if defined(REAPERAPI_WANT_CSurf_SetRepeatState) || !defined(REAPERAPI_MINIMAL)
   7478         {(void**)&CSurf_SetRepeatState,"CSurf_SetRepeatState"},
   7479       #endif
   7480       #if defined(REAPERAPI_WANT_CSurf_SetSurfaceMute) || !defined(REAPERAPI_MINIMAL)
   7481         {(void**)&CSurf_SetSurfaceMute,"CSurf_SetSurfaceMute"},
   7482       #endif
   7483       #if defined(REAPERAPI_WANT_CSurf_SetSurfacePan) || !defined(REAPERAPI_MINIMAL)
   7484         {(void**)&CSurf_SetSurfacePan,"CSurf_SetSurfacePan"},
   7485       #endif
   7486       #if defined(REAPERAPI_WANT_CSurf_SetSurfaceRecArm) || !defined(REAPERAPI_MINIMAL)
   7487         {(void**)&CSurf_SetSurfaceRecArm,"CSurf_SetSurfaceRecArm"},
   7488       #endif
   7489       #if defined(REAPERAPI_WANT_CSurf_SetSurfaceSelected) || !defined(REAPERAPI_MINIMAL)
   7490         {(void**)&CSurf_SetSurfaceSelected,"CSurf_SetSurfaceSelected"},
   7491       #endif
   7492       #if defined(REAPERAPI_WANT_CSurf_SetSurfaceSolo) || !defined(REAPERAPI_MINIMAL)
   7493         {(void**)&CSurf_SetSurfaceSolo,"CSurf_SetSurfaceSolo"},
   7494       #endif
   7495       #if defined(REAPERAPI_WANT_CSurf_SetSurfaceVolume) || !defined(REAPERAPI_MINIMAL)
   7496         {(void**)&CSurf_SetSurfaceVolume,"CSurf_SetSurfaceVolume"},
   7497       #endif
   7498       #if defined(REAPERAPI_WANT_CSurf_SetTrackListChange) || !defined(REAPERAPI_MINIMAL)
   7499         {(void**)&CSurf_SetTrackListChange,"CSurf_SetTrackListChange"},
   7500       #endif
   7501       #if defined(REAPERAPI_WANT_CSurf_TrackFromID) || !defined(REAPERAPI_MINIMAL)
   7502         {(void**)&CSurf_TrackFromID,"CSurf_TrackFromID"},
   7503       #endif
   7504       #if defined(REAPERAPI_WANT_CSurf_TrackToID) || !defined(REAPERAPI_MINIMAL)
   7505         {(void**)&CSurf_TrackToID,"CSurf_TrackToID"},
   7506       #endif
   7507       #if defined(REAPERAPI_WANT_DB2SLIDER) || !defined(REAPERAPI_MINIMAL)
   7508         {(void**)&DB2SLIDER,"DB2SLIDER"},
   7509       #endif
   7510       #if defined(REAPERAPI_WANT_DeleteActionShortcut) || !defined(REAPERAPI_MINIMAL)
   7511         {(void**)&DeleteActionShortcut,"DeleteActionShortcut"},
   7512       #endif
   7513       #if defined(REAPERAPI_WANT_DeleteEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   7514         {(void**)&DeleteEnvelopePointEx,"DeleteEnvelopePointEx"},
   7515       #endif
   7516       #if defined(REAPERAPI_WANT_DeleteEnvelopePointRange) || !defined(REAPERAPI_MINIMAL)
   7517         {(void**)&DeleteEnvelopePointRange,"DeleteEnvelopePointRange"},
   7518       #endif
   7519       #if defined(REAPERAPI_WANT_DeleteEnvelopePointRangeEx) || !defined(REAPERAPI_MINIMAL)
   7520         {(void**)&DeleteEnvelopePointRangeEx,"DeleteEnvelopePointRangeEx"},
   7521       #endif
   7522       #if defined(REAPERAPI_WANT_DeleteExtState) || !defined(REAPERAPI_MINIMAL)
   7523         {(void**)&DeleteExtState,"DeleteExtState"},
   7524       #endif
   7525       #if defined(REAPERAPI_WANT_DeleteProjectMarker) || !defined(REAPERAPI_MINIMAL)
   7526         {(void**)&DeleteProjectMarker,"DeleteProjectMarker"},
   7527       #endif
   7528       #if defined(REAPERAPI_WANT_DeleteProjectMarkerByIndex) || !defined(REAPERAPI_MINIMAL)
   7529         {(void**)&DeleteProjectMarkerByIndex,"DeleteProjectMarkerByIndex"},
   7530       #endif
   7531       #if defined(REAPERAPI_WANT_DeleteTakeMarker) || !defined(REAPERAPI_MINIMAL)
   7532         {(void**)&DeleteTakeMarker,"DeleteTakeMarker"},
   7533       #endif
   7534       #if defined(REAPERAPI_WANT_DeleteTakeStretchMarkers) || !defined(REAPERAPI_MINIMAL)
   7535         {(void**)&DeleteTakeStretchMarkers,"DeleteTakeStretchMarkers"},
   7536       #endif
   7537       #if defined(REAPERAPI_WANT_DeleteTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   7538         {(void**)&DeleteTempoTimeSigMarker,"DeleteTempoTimeSigMarker"},
   7539       #endif
   7540       #if defined(REAPERAPI_WANT_DeleteTrack) || !defined(REAPERAPI_MINIMAL)
   7541         {(void**)&DeleteTrack,"DeleteTrack"},
   7542       #endif
   7543       #if defined(REAPERAPI_WANT_DeleteTrackMediaItem) || !defined(REAPERAPI_MINIMAL)
   7544         {(void**)&DeleteTrackMediaItem,"DeleteTrackMediaItem"},
   7545       #endif
   7546       #if defined(REAPERAPI_WANT_DestroyAudioAccessor) || !defined(REAPERAPI_MINIMAL)
   7547         {(void**)&DestroyAudioAccessor,"DestroyAudioAccessor"},
   7548       #endif
   7549       #if defined(REAPERAPI_WANT_DestroyLocalOscHandler) || !defined(REAPERAPI_MINIMAL)
   7550         {(void**)&DestroyLocalOscHandler,"DestroyLocalOscHandler"},
   7551       #endif
   7552       #if defined(REAPERAPI_WANT_DoActionShortcutDialog) || !defined(REAPERAPI_MINIMAL)
   7553         {(void**)&DoActionShortcutDialog,"DoActionShortcutDialog"},
   7554       #endif
   7555       #if defined(REAPERAPI_WANT_Dock_UpdateDockID) || !defined(REAPERAPI_MINIMAL)
   7556         {(void**)&Dock_UpdateDockID,"Dock_UpdateDockID"},
   7557       #endif
   7558       #if defined(REAPERAPI_WANT_DockGetPosition) || !defined(REAPERAPI_MINIMAL)
   7559         {(void**)&DockGetPosition,"DockGetPosition"},
   7560       #endif
   7561       #if defined(REAPERAPI_WANT_DockIsChildOfDock) || !defined(REAPERAPI_MINIMAL)
   7562         {(void**)&DockIsChildOfDock,"DockIsChildOfDock"},
   7563       #endif
   7564       #if defined(REAPERAPI_WANT_DockWindowActivate) || !defined(REAPERAPI_MINIMAL)
   7565         {(void**)&DockWindowActivate,"DockWindowActivate"},
   7566       #endif
   7567       #if defined(REAPERAPI_WANT_DockWindowAdd) || !defined(REAPERAPI_MINIMAL)
   7568         {(void**)&DockWindowAdd,"DockWindowAdd"},
   7569       #endif
   7570       #if defined(REAPERAPI_WANT_DockWindowAddEx) || !defined(REAPERAPI_MINIMAL)
   7571         {(void**)&DockWindowAddEx,"DockWindowAddEx"},
   7572       #endif
   7573       #if defined(REAPERAPI_WANT_DockWindowRefresh) || !defined(REAPERAPI_MINIMAL)
   7574         {(void**)&DockWindowRefresh,"DockWindowRefresh"},
   7575       #endif
   7576       #if defined(REAPERAPI_WANT_DockWindowRefreshForHWND) || !defined(REAPERAPI_MINIMAL)
   7577         {(void**)&DockWindowRefreshForHWND,"DockWindowRefreshForHWND"},
   7578       #endif
   7579       #if defined(REAPERAPI_WANT_DockWindowRemove) || !defined(REAPERAPI_MINIMAL)
   7580         {(void**)&DockWindowRemove,"DockWindowRemove"},
   7581       #endif
   7582       #if defined(REAPERAPI_WANT_DuplicateCustomizableMenu) || !defined(REAPERAPI_MINIMAL)
   7583         {(void**)&DuplicateCustomizableMenu,"DuplicateCustomizableMenu"},
   7584       #endif
   7585       #if defined(REAPERAPI_WANT_EditTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   7586         {(void**)&EditTempoTimeSigMarker,"EditTempoTimeSigMarker"},
   7587       #endif
   7588       #if defined(REAPERAPI_WANT_EnsureNotCompletelyOffscreen) || !defined(REAPERAPI_MINIMAL)
   7589         {(void**)&EnsureNotCompletelyOffscreen,"EnsureNotCompletelyOffscreen"},
   7590       #endif
   7591       #if defined(REAPERAPI_WANT_EnumerateFiles) || !defined(REAPERAPI_MINIMAL)
   7592         {(void**)&EnumerateFiles,"EnumerateFiles"},
   7593       #endif
   7594       #if defined(REAPERAPI_WANT_EnumerateSubdirectories) || !defined(REAPERAPI_MINIMAL)
   7595         {(void**)&EnumerateSubdirectories,"EnumerateSubdirectories"},
   7596       #endif
   7597       #if defined(REAPERAPI_WANT_EnumPitchShiftModes) || !defined(REAPERAPI_MINIMAL)
   7598         {(void**)&EnumPitchShiftModes,"EnumPitchShiftModes"},
   7599       #endif
   7600       #if defined(REAPERAPI_WANT_EnumPitchShiftSubModes) || !defined(REAPERAPI_MINIMAL)
   7601         {(void**)&EnumPitchShiftSubModes,"EnumPitchShiftSubModes"},
   7602       #endif
   7603       #if defined(REAPERAPI_WANT_EnumProjectMarkers) || !defined(REAPERAPI_MINIMAL)
   7604         {(void**)&EnumProjectMarkers,"EnumProjectMarkers"},
   7605       #endif
   7606       #if defined(REAPERAPI_WANT_EnumProjectMarkers2) || !defined(REAPERAPI_MINIMAL)
   7607         {(void**)&EnumProjectMarkers2,"EnumProjectMarkers2"},
   7608       #endif
   7609       #if defined(REAPERAPI_WANT_EnumProjectMarkers3) || !defined(REAPERAPI_MINIMAL)
   7610         {(void**)&EnumProjectMarkers3,"EnumProjectMarkers3"},
   7611       #endif
   7612       #if defined(REAPERAPI_WANT_EnumProjects) || !defined(REAPERAPI_MINIMAL)
   7613         {(void**)&EnumProjects,"EnumProjects"},
   7614       #endif
   7615       #if defined(REAPERAPI_WANT_EnumProjExtState) || !defined(REAPERAPI_MINIMAL)
   7616         {(void**)&EnumProjExtState,"EnumProjExtState"},
   7617       #endif
   7618       #if defined(REAPERAPI_WANT_EnumRegionRenderMatrix) || !defined(REAPERAPI_MINIMAL)
   7619         {(void**)&EnumRegionRenderMatrix,"EnumRegionRenderMatrix"},
   7620       #endif
   7621       #if defined(REAPERAPI_WANT_EnumTrackMIDIProgramNames) || !defined(REAPERAPI_MINIMAL)
   7622         {(void**)&EnumTrackMIDIProgramNames,"EnumTrackMIDIProgramNames"},
   7623       #endif
   7624       #if defined(REAPERAPI_WANT_EnumTrackMIDIProgramNamesEx) || !defined(REAPERAPI_MINIMAL)
   7625         {(void**)&EnumTrackMIDIProgramNamesEx,"EnumTrackMIDIProgramNamesEx"},
   7626       #endif
   7627       #if defined(REAPERAPI_WANT_Envelope_Evaluate) || !defined(REAPERAPI_MINIMAL)
   7628         {(void**)&Envelope_Evaluate,"Envelope_Evaluate"},
   7629       #endif
   7630       #if defined(REAPERAPI_WANT_Envelope_FormatValue) || !defined(REAPERAPI_MINIMAL)
   7631         {(void**)&Envelope_FormatValue,"Envelope_FormatValue"},
   7632       #endif
   7633       #if defined(REAPERAPI_WANT_Envelope_GetParentTake) || !defined(REAPERAPI_MINIMAL)
   7634         {(void**)&Envelope_GetParentTake,"Envelope_GetParentTake"},
   7635       #endif
   7636       #if defined(REAPERAPI_WANT_Envelope_GetParentTrack) || !defined(REAPERAPI_MINIMAL)
   7637         {(void**)&Envelope_GetParentTrack,"Envelope_GetParentTrack"},
   7638       #endif
   7639       #if defined(REAPERAPI_WANT_Envelope_SortPoints) || !defined(REAPERAPI_MINIMAL)
   7640         {(void**)&Envelope_SortPoints,"Envelope_SortPoints"},
   7641       #endif
   7642       #if defined(REAPERAPI_WANT_Envelope_SortPointsEx) || !defined(REAPERAPI_MINIMAL)
   7643         {(void**)&Envelope_SortPointsEx,"Envelope_SortPointsEx"},
   7644       #endif
   7645       #if defined(REAPERAPI_WANT_ExecProcess) || !defined(REAPERAPI_MINIMAL)
   7646         {(void**)&ExecProcess,"ExecProcess"},
   7647       #endif
   7648       #if defined(REAPERAPI_WANT_file_exists) || !defined(REAPERAPI_MINIMAL)
   7649         {(void**)&file_exists,"file_exists"},
   7650       #endif
   7651       #if defined(REAPERAPI_WANT_FindTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   7652         {(void**)&FindTempoTimeSigMarker,"FindTempoTimeSigMarker"},
   7653       #endif
   7654       #if defined(REAPERAPI_WANT_format_timestr) || !defined(REAPERAPI_MINIMAL)
   7655         {(void**)&format_timestr,"format_timestr"},
   7656       #endif
   7657       #if defined(REAPERAPI_WANT_format_timestr_len) || !defined(REAPERAPI_MINIMAL)
   7658         {(void**)&format_timestr_len,"format_timestr_len"},
   7659       #endif
   7660       #if defined(REAPERAPI_WANT_format_timestr_pos) || !defined(REAPERAPI_MINIMAL)
   7661         {(void**)&format_timestr_pos,"format_timestr_pos"},
   7662       #endif
   7663       #if defined(REAPERAPI_WANT_FreeHeapPtr) || !defined(REAPERAPI_MINIMAL)
   7664         {(void**)&FreeHeapPtr,"FreeHeapPtr"},
   7665       #endif
   7666       #if defined(REAPERAPI_WANT_genGuid) || !defined(REAPERAPI_MINIMAL)
   7667         {(void**)&genGuid,"genGuid"},
   7668       #endif
   7669       #if defined(REAPERAPI_WANT_get_config_var) || !defined(REAPERAPI_MINIMAL)
   7670         {(void**)&get_config_var,"get_config_var"},
   7671       #endif
   7672       #if defined(REAPERAPI_WANT_get_config_var_string) || !defined(REAPERAPI_MINIMAL)
   7673         {(void**)&get_config_var_string,"get_config_var_string"},
   7674       #endif
   7675       #if defined(REAPERAPI_WANT_get_ini_file) || !defined(REAPERAPI_MINIMAL)
   7676         {(void**)&get_ini_file,"get_ini_file"},
   7677       #endif
   7678       #if defined(REAPERAPI_WANT_get_midi_config_var) || !defined(REAPERAPI_MINIMAL)
   7679         {(void**)&get_midi_config_var,"get_midi_config_var"},
   7680       #endif
   7681       #if defined(REAPERAPI_WANT_GetActionShortcutDesc) || !defined(REAPERAPI_MINIMAL)
   7682         {(void**)&GetActionShortcutDesc,"GetActionShortcutDesc"},
   7683       #endif
   7684       #if defined(REAPERAPI_WANT_GetActiveTake) || !defined(REAPERAPI_MINIMAL)
   7685         {(void**)&GetActiveTake,"GetActiveTake"},
   7686       #endif
   7687       #if defined(REAPERAPI_WANT_GetAllProjectPlayStates) || !defined(REAPERAPI_MINIMAL)
   7688         {(void**)&GetAllProjectPlayStates,"GetAllProjectPlayStates"},
   7689       #endif
   7690       #if defined(REAPERAPI_WANT_GetAppVersion) || !defined(REAPERAPI_MINIMAL)
   7691         {(void**)&GetAppVersion,"GetAppVersion"},
   7692       #endif
   7693       #if defined(REAPERAPI_WANT_GetArmedCommand) || !defined(REAPERAPI_MINIMAL)
   7694         {(void**)&GetArmedCommand,"GetArmedCommand"},
   7695       #endif
   7696       #if defined(REAPERAPI_WANT_GetAudioAccessorEndTime) || !defined(REAPERAPI_MINIMAL)
   7697         {(void**)&GetAudioAccessorEndTime,"GetAudioAccessorEndTime"},
   7698       #endif
   7699       #if defined(REAPERAPI_WANT_GetAudioAccessorHash) || !defined(REAPERAPI_MINIMAL)
   7700         {(void**)&GetAudioAccessorHash,"GetAudioAccessorHash"},
   7701       #endif
   7702       #if defined(REAPERAPI_WANT_GetAudioAccessorSamples) || !defined(REAPERAPI_MINIMAL)
   7703         {(void**)&GetAudioAccessorSamples,"GetAudioAccessorSamples"},
   7704       #endif
   7705       #if defined(REAPERAPI_WANT_GetAudioAccessorStartTime) || !defined(REAPERAPI_MINIMAL)
   7706         {(void**)&GetAudioAccessorStartTime,"GetAudioAccessorStartTime"},
   7707       #endif
   7708       #if defined(REAPERAPI_WANT_GetAudioDeviceInfo) || !defined(REAPERAPI_MINIMAL)
   7709         {(void**)&GetAudioDeviceInfo,"GetAudioDeviceInfo"},
   7710       #endif
   7711       #if defined(REAPERAPI_WANT_GetColorTheme) || !defined(REAPERAPI_MINIMAL)
   7712         {(void**)&GetColorTheme,"GetColorTheme"},
   7713       #endif
   7714       #if defined(REAPERAPI_WANT_GetColorThemeStruct) || !defined(REAPERAPI_MINIMAL)
   7715         {(void**)&GetColorThemeStruct,"GetColorThemeStruct"},
   7716       #endif
   7717       #if defined(REAPERAPI_WANT_GetConfigWantsDock) || !defined(REAPERAPI_MINIMAL)
   7718         {(void**)&GetConfigWantsDock,"GetConfigWantsDock"},
   7719       #endif
   7720       #if defined(REAPERAPI_WANT_GetContextMenu) || !defined(REAPERAPI_MINIMAL)
   7721         {(void**)&GetContextMenu,"GetContextMenu"},
   7722       #endif
   7723       #if defined(REAPERAPI_WANT_GetCurrentProjectInLoadSave) || !defined(REAPERAPI_MINIMAL)
   7724         {(void**)&GetCurrentProjectInLoadSave,"GetCurrentProjectInLoadSave"},
   7725       #endif
   7726       #if defined(REAPERAPI_WANT_GetCursorContext) || !defined(REAPERAPI_MINIMAL)
   7727         {(void**)&GetCursorContext,"GetCursorContext"},
   7728       #endif
   7729       #if defined(REAPERAPI_WANT_GetCursorContext2) || !defined(REAPERAPI_MINIMAL)
   7730         {(void**)&GetCursorContext2,"GetCursorContext2"},
   7731       #endif
   7732       #if defined(REAPERAPI_WANT_GetCursorPosition) || !defined(REAPERAPI_MINIMAL)
   7733         {(void**)&GetCursorPosition,"GetCursorPosition"},
   7734       #endif
   7735       #if defined(REAPERAPI_WANT_GetCursorPositionEx) || !defined(REAPERAPI_MINIMAL)
   7736         {(void**)&GetCursorPositionEx,"GetCursorPositionEx"},
   7737       #endif
   7738       #if defined(REAPERAPI_WANT_GetDisplayedMediaItemColor) || !defined(REAPERAPI_MINIMAL)
   7739         {(void**)&GetDisplayedMediaItemColor,"GetDisplayedMediaItemColor"},
   7740       #endif
   7741       #if defined(REAPERAPI_WANT_GetDisplayedMediaItemColor2) || !defined(REAPERAPI_MINIMAL)
   7742         {(void**)&GetDisplayedMediaItemColor2,"GetDisplayedMediaItemColor2"},
   7743       #endif
   7744       #if defined(REAPERAPI_WANT_GetEnvelopeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   7745         {(void**)&GetEnvelopeInfo_Value,"GetEnvelopeInfo_Value"},
   7746       #endif
   7747       #if defined(REAPERAPI_WANT_GetEnvelopeName) || !defined(REAPERAPI_MINIMAL)
   7748         {(void**)&GetEnvelopeName,"GetEnvelopeName"},
   7749       #endif
   7750       #if defined(REAPERAPI_WANT_GetEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   7751         {(void**)&GetEnvelopePoint,"GetEnvelopePoint"},
   7752       #endif
   7753       #if defined(REAPERAPI_WANT_GetEnvelopePointByTime) || !defined(REAPERAPI_MINIMAL)
   7754         {(void**)&GetEnvelopePointByTime,"GetEnvelopePointByTime"},
   7755       #endif
   7756       #if defined(REAPERAPI_WANT_GetEnvelopePointByTimeEx) || !defined(REAPERAPI_MINIMAL)
   7757         {(void**)&GetEnvelopePointByTimeEx,"GetEnvelopePointByTimeEx"},
   7758       #endif
   7759       #if defined(REAPERAPI_WANT_GetEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   7760         {(void**)&GetEnvelopePointEx,"GetEnvelopePointEx"},
   7761       #endif
   7762       #if defined(REAPERAPI_WANT_GetEnvelopeScalingMode) || !defined(REAPERAPI_MINIMAL)
   7763         {(void**)&GetEnvelopeScalingMode,"GetEnvelopeScalingMode"},
   7764       #endif
   7765       #if defined(REAPERAPI_WANT_GetEnvelopeStateChunk) || !defined(REAPERAPI_MINIMAL)
   7766         {(void**)&GetEnvelopeStateChunk,"GetEnvelopeStateChunk"},
   7767       #endif
   7768       #if defined(REAPERAPI_WANT_GetExePath) || !defined(REAPERAPI_MINIMAL)
   7769         {(void**)&GetExePath,"GetExePath"},
   7770       #endif
   7771       #if defined(REAPERAPI_WANT_GetExtState) || !defined(REAPERAPI_MINIMAL)
   7772         {(void**)&GetExtState,"GetExtState"},
   7773       #endif
   7774       #if defined(REAPERAPI_WANT_GetFocusedFX) || !defined(REAPERAPI_MINIMAL)
   7775         {(void**)&GetFocusedFX,"GetFocusedFX"},
   7776       #endif
   7777       #if defined(REAPERAPI_WANT_GetFocusedFX2) || !defined(REAPERAPI_MINIMAL)
   7778         {(void**)&GetFocusedFX2,"GetFocusedFX2"},
   7779       #endif
   7780       #if defined(REAPERAPI_WANT_GetFreeDiskSpaceForRecordPath) || !defined(REAPERAPI_MINIMAL)
   7781         {(void**)&GetFreeDiskSpaceForRecordPath,"GetFreeDiskSpaceForRecordPath"},
   7782       #endif
   7783       #if defined(REAPERAPI_WANT_GetFXEnvelope) || !defined(REAPERAPI_MINIMAL)
   7784         {(void**)&GetFXEnvelope,"GetFXEnvelope"},
   7785       #endif
   7786       #if defined(REAPERAPI_WANT_GetGlobalAutomationOverride) || !defined(REAPERAPI_MINIMAL)
   7787         {(void**)&GetGlobalAutomationOverride,"GetGlobalAutomationOverride"},
   7788       #endif
   7789       #if defined(REAPERAPI_WANT_GetHZoomLevel) || !defined(REAPERAPI_MINIMAL)
   7790         {(void**)&GetHZoomLevel,"GetHZoomLevel"},
   7791       #endif
   7792       #if defined(REAPERAPI_WANT_GetIconThemePointer) || !defined(REAPERAPI_MINIMAL)
   7793         {(void**)&GetIconThemePointer,"GetIconThemePointer"},
   7794       #endif
   7795       #if defined(REAPERAPI_WANT_GetIconThemePointerForDPI) || !defined(REAPERAPI_MINIMAL)
   7796         {(void**)&GetIconThemePointerForDPI,"GetIconThemePointerForDPI"},
   7797       #endif
   7798       #if defined(REAPERAPI_WANT_GetIconThemeStruct) || !defined(REAPERAPI_MINIMAL)
   7799         {(void**)&GetIconThemeStruct,"GetIconThemeStruct"},
   7800       #endif
   7801       #if defined(REAPERAPI_WANT_GetInputChannelName) || !defined(REAPERAPI_MINIMAL)
   7802         {(void**)&GetInputChannelName,"GetInputChannelName"},
   7803       #endif
   7804       #if defined(REAPERAPI_WANT_GetInputOutputLatency) || !defined(REAPERAPI_MINIMAL)
   7805         {(void**)&GetInputOutputLatency,"GetInputOutputLatency"},
   7806       #endif
   7807       #if defined(REAPERAPI_WANT_GetItemEditingTime2) || !defined(REAPERAPI_MINIMAL)
   7808         {(void**)&GetItemEditingTime2,"GetItemEditingTime2"},
   7809       #endif
   7810       #if defined(REAPERAPI_WANT_GetItemFromPoint) || !defined(REAPERAPI_MINIMAL)
   7811         {(void**)&GetItemFromPoint,"GetItemFromPoint"},
   7812       #endif
   7813       #if defined(REAPERAPI_WANT_GetItemProjectContext) || !defined(REAPERAPI_MINIMAL)
   7814         {(void**)&GetItemProjectContext,"GetItemProjectContext"},
   7815       #endif
   7816       #if defined(REAPERAPI_WANT_GetItemStateChunk) || !defined(REAPERAPI_MINIMAL)
   7817         {(void**)&GetItemStateChunk,"GetItemStateChunk"},
   7818       #endif
   7819       #if defined(REAPERAPI_WANT_GetLastColorThemeFile) || !defined(REAPERAPI_MINIMAL)
   7820         {(void**)&GetLastColorThemeFile,"GetLastColorThemeFile"},
   7821       #endif
   7822       #if defined(REAPERAPI_WANT_GetLastMarkerAndCurRegion) || !defined(REAPERAPI_MINIMAL)
   7823         {(void**)&GetLastMarkerAndCurRegion,"GetLastMarkerAndCurRegion"},
   7824       #endif
   7825       #if defined(REAPERAPI_WANT_GetLastTouchedFX) || !defined(REAPERAPI_MINIMAL)
   7826         {(void**)&GetLastTouchedFX,"GetLastTouchedFX"},
   7827       #endif
   7828       #if defined(REAPERAPI_WANT_GetLastTouchedTrack) || !defined(REAPERAPI_MINIMAL)
   7829         {(void**)&GetLastTouchedTrack,"GetLastTouchedTrack"},
   7830       #endif
   7831       #if defined(REAPERAPI_WANT_GetMainHwnd) || !defined(REAPERAPI_MINIMAL)
   7832         {(void**)&GetMainHwnd,"GetMainHwnd"},
   7833       #endif
   7834       #if defined(REAPERAPI_WANT_GetMasterMuteSoloFlags) || !defined(REAPERAPI_MINIMAL)
   7835         {(void**)&GetMasterMuteSoloFlags,"GetMasterMuteSoloFlags"},
   7836       #endif
   7837       #if defined(REAPERAPI_WANT_GetMasterTrack) || !defined(REAPERAPI_MINIMAL)
   7838         {(void**)&GetMasterTrack,"GetMasterTrack"},
   7839       #endif
   7840       #if defined(REAPERAPI_WANT_GetMasterTrackVisibility) || !defined(REAPERAPI_MINIMAL)
   7841         {(void**)&GetMasterTrackVisibility,"GetMasterTrackVisibility"},
   7842       #endif
   7843       #if defined(REAPERAPI_WANT_GetMaxMidiInputs) || !defined(REAPERAPI_MINIMAL)
   7844         {(void**)&GetMaxMidiInputs,"GetMaxMidiInputs"},
   7845       #endif
   7846       #if defined(REAPERAPI_WANT_GetMaxMidiOutputs) || !defined(REAPERAPI_MINIMAL)
   7847         {(void**)&GetMaxMidiOutputs,"GetMaxMidiOutputs"},
   7848       #endif
   7849       #if defined(REAPERAPI_WANT_GetMediaFileMetadata) || !defined(REAPERAPI_MINIMAL)
   7850         {(void**)&GetMediaFileMetadata,"GetMediaFileMetadata"},
   7851       #endif
   7852       #if defined(REAPERAPI_WANT_GetMediaItem) || !defined(REAPERAPI_MINIMAL)
   7853         {(void**)&GetMediaItem,"GetMediaItem"},
   7854       #endif
   7855       #if defined(REAPERAPI_WANT_GetMediaItem_Track) || !defined(REAPERAPI_MINIMAL)
   7856         {(void**)&GetMediaItem_Track,"GetMediaItem_Track"},
   7857       #endif
   7858       #if defined(REAPERAPI_WANT_GetMediaItemInfo_Value) || !defined(REAPERAPI_MINIMAL)
   7859         {(void**)&GetMediaItemInfo_Value,"GetMediaItemInfo_Value"},
   7860       #endif
   7861       #if defined(REAPERAPI_WANT_GetMediaItemNumTakes) || !defined(REAPERAPI_MINIMAL)
   7862         {(void**)&GetMediaItemNumTakes,"GetMediaItemNumTakes"},
   7863       #endif
   7864       #if defined(REAPERAPI_WANT_GetMediaItemTake) || !defined(REAPERAPI_MINIMAL)
   7865         {(void**)&GetMediaItemTake,"GetMediaItemTake"},
   7866       #endif
   7867       #if defined(REAPERAPI_WANT_GetMediaItemTake_Item) || !defined(REAPERAPI_MINIMAL)
   7868         {(void**)&GetMediaItemTake_Item,"GetMediaItemTake_Item"},
   7869       #endif
   7870       #if defined(REAPERAPI_WANT_GetMediaItemTake_Peaks) || !defined(REAPERAPI_MINIMAL)
   7871         {(void**)&GetMediaItemTake_Peaks,"GetMediaItemTake_Peaks"},
   7872       #endif
   7873       #if defined(REAPERAPI_WANT_GetMediaItemTake_Source) || !defined(REAPERAPI_MINIMAL)
   7874         {(void**)&GetMediaItemTake_Source,"GetMediaItemTake_Source"},
   7875       #endif
   7876       #if defined(REAPERAPI_WANT_GetMediaItemTake_Track) || !defined(REAPERAPI_MINIMAL)
   7877         {(void**)&GetMediaItemTake_Track,"GetMediaItemTake_Track"},
   7878       #endif
   7879       #if defined(REAPERAPI_WANT_GetMediaItemTakeByGUID) || !defined(REAPERAPI_MINIMAL)
   7880         {(void**)&GetMediaItemTakeByGUID,"GetMediaItemTakeByGUID"},
   7881       #endif
   7882       #if defined(REAPERAPI_WANT_GetMediaItemTakeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   7883         {(void**)&GetMediaItemTakeInfo_Value,"GetMediaItemTakeInfo_Value"},
   7884       #endif
   7885       #if defined(REAPERAPI_WANT_GetMediaItemTrack) || !defined(REAPERAPI_MINIMAL)
   7886         {(void**)&GetMediaItemTrack,"GetMediaItemTrack"},
   7887       #endif
   7888       #if defined(REAPERAPI_WANT_GetMediaSourceFileName) || !defined(REAPERAPI_MINIMAL)
   7889         {(void**)&GetMediaSourceFileName,"GetMediaSourceFileName"},
   7890       #endif
   7891       #if defined(REAPERAPI_WANT_GetMediaSourceLength) || !defined(REAPERAPI_MINIMAL)
   7892         {(void**)&GetMediaSourceLength,"GetMediaSourceLength"},
   7893       #endif
   7894       #if defined(REAPERAPI_WANT_GetMediaSourceNumChannels) || !defined(REAPERAPI_MINIMAL)
   7895         {(void**)&GetMediaSourceNumChannels,"GetMediaSourceNumChannels"},
   7896       #endif
   7897       #if defined(REAPERAPI_WANT_GetMediaSourceParent) || !defined(REAPERAPI_MINIMAL)
   7898         {(void**)&GetMediaSourceParent,"GetMediaSourceParent"},
   7899       #endif
   7900       #if defined(REAPERAPI_WANT_GetMediaSourceSampleRate) || !defined(REAPERAPI_MINIMAL)
   7901         {(void**)&GetMediaSourceSampleRate,"GetMediaSourceSampleRate"},
   7902       #endif
   7903       #if defined(REAPERAPI_WANT_GetMediaSourceType) || !defined(REAPERAPI_MINIMAL)
   7904         {(void**)&GetMediaSourceType,"GetMediaSourceType"},
   7905       #endif
   7906       #if defined(REAPERAPI_WANT_GetMediaTrackInfo_Value) || !defined(REAPERAPI_MINIMAL)
   7907         {(void**)&GetMediaTrackInfo_Value,"GetMediaTrackInfo_Value"},
   7908       #endif
   7909       #if defined(REAPERAPI_WANT_GetMIDIInputName) || !defined(REAPERAPI_MINIMAL)
   7910         {(void**)&GetMIDIInputName,"GetMIDIInputName"},
   7911       #endif
   7912       #if defined(REAPERAPI_WANT_GetMIDIOutputName) || !defined(REAPERAPI_MINIMAL)
   7913         {(void**)&GetMIDIOutputName,"GetMIDIOutputName"},
   7914       #endif
   7915       #if defined(REAPERAPI_WANT_GetMixerScroll) || !defined(REAPERAPI_MINIMAL)
   7916         {(void**)&GetMixerScroll,"GetMixerScroll"},
   7917       #endif
   7918       #if defined(REAPERAPI_WANT_GetMouseModifier) || !defined(REAPERAPI_MINIMAL)
   7919         {(void**)&GetMouseModifier,"GetMouseModifier"},
   7920       #endif
   7921       #if defined(REAPERAPI_WANT_GetMousePosition) || !defined(REAPERAPI_MINIMAL)
   7922         {(void**)&GetMousePosition,"GetMousePosition"},
   7923       #endif
   7924       #if defined(REAPERAPI_WANT_GetNumAudioInputs) || !defined(REAPERAPI_MINIMAL)
   7925         {(void**)&GetNumAudioInputs,"GetNumAudioInputs"},
   7926       #endif
   7927       #if defined(REAPERAPI_WANT_GetNumAudioOutputs) || !defined(REAPERAPI_MINIMAL)
   7928         {(void**)&GetNumAudioOutputs,"GetNumAudioOutputs"},
   7929       #endif
   7930       #if defined(REAPERAPI_WANT_GetNumMIDIInputs) || !defined(REAPERAPI_MINIMAL)
   7931         {(void**)&GetNumMIDIInputs,"GetNumMIDIInputs"},
   7932       #endif
   7933       #if defined(REAPERAPI_WANT_GetNumMIDIOutputs) || !defined(REAPERAPI_MINIMAL)
   7934         {(void**)&GetNumMIDIOutputs,"GetNumMIDIOutputs"},
   7935       #endif
   7936       #if defined(REAPERAPI_WANT_GetNumTakeMarkers) || !defined(REAPERAPI_MINIMAL)
   7937         {(void**)&GetNumTakeMarkers,"GetNumTakeMarkers"},
   7938       #endif
   7939       #if defined(REAPERAPI_WANT_GetNumTracks) || !defined(REAPERAPI_MINIMAL)
   7940         {(void**)&GetNumTracks,"GetNumTracks"},
   7941       #endif
   7942       #if defined(REAPERAPI_WANT_GetOS) || !defined(REAPERAPI_MINIMAL)
   7943         {(void**)&GetOS,"GetOS"},
   7944       #endif
   7945       #if defined(REAPERAPI_WANT_GetOutputChannelName) || !defined(REAPERAPI_MINIMAL)
   7946         {(void**)&GetOutputChannelName,"GetOutputChannelName"},
   7947       #endif
   7948       #if defined(REAPERAPI_WANT_GetOutputLatency) || !defined(REAPERAPI_MINIMAL)
   7949         {(void**)&GetOutputLatency,"GetOutputLatency"},
   7950       #endif
   7951       #if defined(REAPERAPI_WANT_GetParentTrack) || !defined(REAPERAPI_MINIMAL)
   7952         {(void**)&GetParentTrack,"GetParentTrack"},
   7953       #endif
   7954       #if defined(REAPERAPI_WANT_GetPeakFileName) || !defined(REAPERAPI_MINIMAL)
   7955         {(void**)&GetPeakFileName,"GetPeakFileName"},
   7956       #endif
   7957       #if defined(REAPERAPI_WANT_GetPeakFileNameEx) || !defined(REAPERAPI_MINIMAL)
   7958         {(void**)&GetPeakFileNameEx,"GetPeakFileNameEx"},
   7959       #endif
   7960       #if defined(REAPERAPI_WANT_GetPeakFileNameEx2) || !defined(REAPERAPI_MINIMAL)
   7961         {(void**)&GetPeakFileNameEx2,"GetPeakFileNameEx2"},
   7962       #endif
   7963       #if defined(REAPERAPI_WANT_GetPeaksBitmap) || !defined(REAPERAPI_MINIMAL)
   7964         {(void**)&GetPeaksBitmap,"GetPeaksBitmap"},
   7965       #endif
   7966       #if defined(REAPERAPI_WANT_GetPlayPosition) || !defined(REAPERAPI_MINIMAL)
   7967         {(void**)&GetPlayPosition,"GetPlayPosition"},
   7968       #endif
   7969       #if defined(REAPERAPI_WANT_GetPlayPosition2) || !defined(REAPERAPI_MINIMAL)
   7970         {(void**)&GetPlayPosition2,"GetPlayPosition2"},
   7971       #endif
   7972       #if defined(REAPERAPI_WANT_GetPlayPosition2Ex) || !defined(REAPERAPI_MINIMAL)
   7973         {(void**)&GetPlayPosition2Ex,"GetPlayPosition2Ex"},
   7974       #endif
   7975       #if defined(REAPERAPI_WANT_GetPlayPositionEx) || !defined(REAPERAPI_MINIMAL)
   7976         {(void**)&GetPlayPositionEx,"GetPlayPositionEx"},
   7977       #endif
   7978       #if defined(REAPERAPI_WANT_GetPlayState) || !defined(REAPERAPI_MINIMAL)
   7979         {(void**)&GetPlayState,"GetPlayState"},
   7980       #endif
   7981       #if defined(REAPERAPI_WANT_GetPlayStateEx) || !defined(REAPERAPI_MINIMAL)
   7982         {(void**)&GetPlayStateEx,"GetPlayStateEx"},
   7983       #endif
   7984       #if defined(REAPERAPI_WANT_GetPreferredDiskReadMode) || !defined(REAPERAPI_MINIMAL)
   7985         {(void**)&GetPreferredDiskReadMode,"GetPreferredDiskReadMode"},
   7986       #endif
   7987       #if defined(REAPERAPI_WANT_GetPreferredDiskReadModePeak) || !defined(REAPERAPI_MINIMAL)
   7988         {(void**)&GetPreferredDiskReadModePeak,"GetPreferredDiskReadModePeak"},
   7989       #endif
   7990       #if defined(REAPERAPI_WANT_GetPreferredDiskWriteMode) || !defined(REAPERAPI_MINIMAL)
   7991         {(void**)&GetPreferredDiskWriteMode,"GetPreferredDiskWriteMode"},
   7992       #endif
   7993       #if defined(REAPERAPI_WANT_GetProjectLength) || !defined(REAPERAPI_MINIMAL)
   7994         {(void**)&GetProjectLength,"GetProjectLength"},
   7995       #endif
   7996       #if defined(REAPERAPI_WANT_GetProjectName) || !defined(REAPERAPI_MINIMAL)
   7997         {(void**)&GetProjectName,"GetProjectName"},
   7998       #endif
   7999       #if defined(REAPERAPI_WANT_GetProjectPath) || !defined(REAPERAPI_MINIMAL)
   8000         {(void**)&GetProjectPath,"GetProjectPath"},
   8001       #endif
   8002       #if defined(REAPERAPI_WANT_GetProjectPathEx) || !defined(REAPERAPI_MINIMAL)
   8003         {(void**)&GetProjectPathEx,"GetProjectPathEx"},
   8004       #endif
   8005       #if defined(REAPERAPI_WANT_GetProjectStateChangeCount) || !defined(REAPERAPI_MINIMAL)
   8006         {(void**)&GetProjectStateChangeCount,"GetProjectStateChangeCount"},
   8007       #endif
   8008       #if defined(REAPERAPI_WANT_GetProjectTimeOffset) || !defined(REAPERAPI_MINIMAL)
   8009         {(void**)&GetProjectTimeOffset,"GetProjectTimeOffset"},
   8010       #endif
   8011       #if defined(REAPERAPI_WANT_GetProjectTimeSignature) || !defined(REAPERAPI_MINIMAL)
   8012         {(void**)&GetProjectTimeSignature,"GetProjectTimeSignature"},
   8013       #endif
   8014       #if defined(REAPERAPI_WANT_GetProjectTimeSignature2) || !defined(REAPERAPI_MINIMAL)
   8015         {(void**)&GetProjectTimeSignature2,"GetProjectTimeSignature2"},
   8016       #endif
   8017       #if defined(REAPERAPI_WANT_GetProjExtState) || !defined(REAPERAPI_MINIMAL)
   8018         {(void**)&GetProjExtState,"GetProjExtState"},
   8019       #endif
   8020       #if defined(REAPERAPI_WANT_GetResourcePath) || !defined(REAPERAPI_MINIMAL)
   8021         {(void**)&GetResourcePath,"GetResourcePath"},
   8022       #endif
   8023       #if defined(REAPERAPI_WANT_GetSelectedEnvelope) || !defined(REAPERAPI_MINIMAL)
   8024         {(void**)&GetSelectedEnvelope,"GetSelectedEnvelope"},
   8025       #endif
   8026       #if defined(REAPERAPI_WANT_GetSelectedMediaItem) || !defined(REAPERAPI_MINIMAL)
   8027         {(void**)&GetSelectedMediaItem,"GetSelectedMediaItem"},
   8028       #endif
   8029       #if defined(REAPERAPI_WANT_GetSelectedTrack) || !defined(REAPERAPI_MINIMAL)
   8030         {(void**)&GetSelectedTrack,"GetSelectedTrack"},
   8031       #endif
   8032       #if defined(REAPERAPI_WANT_GetSelectedTrack2) || !defined(REAPERAPI_MINIMAL)
   8033         {(void**)&GetSelectedTrack2,"GetSelectedTrack2"},
   8034       #endif
   8035       #if defined(REAPERAPI_WANT_GetSelectedTrackEnvelope) || !defined(REAPERAPI_MINIMAL)
   8036         {(void**)&GetSelectedTrackEnvelope,"GetSelectedTrackEnvelope"},
   8037       #endif
   8038       #if defined(REAPERAPI_WANT_GetSet_ArrangeView2) || !defined(REAPERAPI_MINIMAL)
   8039         {(void**)&GetSet_ArrangeView2,"GetSet_ArrangeView2"},
   8040       #endif
   8041       #if defined(REAPERAPI_WANT_GetSet_LoopTimeRange) || !defined(REAPERAPI_MINIMAL)
   8042         {(void**)&GetSet_LoopTimeRange,"GetSet_LoopTimeRange"},
   8043       #endif
   8044       #if defined(REAPERAPI_WANT_GetSet_LoopTimeRange2) || !defined(REAPERAPI_MINIMAL)
   8045         {(void**)&GetSet_LoopTimeRange2,"GetSet_LoopTimeRange2"},
   8046       #endif
   8047       #if defined(REAPERAPI_WANT_GetSetAutomationItemInfo) || !defined(REAPERAPI_MINIMAL)
   8048         {(void**)&GetSetAutomationItemInfo,"GetSetAutomationItemInfo"},
   8049       #endif
   8050       #if defined(REAPERAPI_WANT_GetSetAutomationItemInfo_String) || !defined(REAPERAPI_MINIMAL)
   8051         {(void**)&GetSetAutomationItemInfo_String,"GetSetAutomationItemInfo_String"},
   8052       #endif
   8053       #if defined(REAPERAPI_WANT_GetSetEnvelopeInfo_String) || !defined(REAPERAPI_MINIMAL)
   8054         {(void**)&GetSetEnvelopeInfo_String,"GetSetEnvelopeInfo_String"},
   8055       #endif
   8056       #if defined(REAPERAPI_WANT_GetSetEnvelopeState) || !defined(REAPERAPI_MINIMAL)
   8057         {(void**)&GetSetEnvelopeState,"GetSetEnvelopeState"},
   8058       #endif
   8059       #if defined(REAPERAPI_WANT_GetSetEnvelopeState2) || !defined(REAPERAPI_MINIMAL)
   8060         {(void**)&GetSetEnvelopeState2,"GetSetEnvelopeState2"},
   8061       #endif
   8062       #if defined(REAPERAPI_WANT_GetSetItemState) || !defined(REAPERAPI_MINIMAL)
   8063         {(void**)&GetSetItemState,"GetSetItemState"},
   8064       #endif
   8065       #if defined(REAPERAPI_WANT_GetSetItemState2) || !defined(REAPERAPI_MINIMAL)
   8066         {(void**)&GetSetItemState2,"GetSetItemState2"},
   8067       #endif
   8068       #if defined(REAPERAPI_WANT_GetSetMediaItemInfo) || !defined(REAPERAPI_MINIMAL)
   8069         {(void**)&GetSetMediaItemInfo,"GetSetMediaItemInfo"},
   8070       #endif
   8071       #if defined(REAPERAPI_WANT_GetSetMediaItemInfo_String) || !defined(REAPERAPI_MINIMAL)
   8072         {(void**)&GetSetMediaItemInfo_String,"GetSetMediaItemInfo_String"},
   8073       #endif
   8074       #if defined(REAPERAPI_WANT_GetSetMediaItemTakeInfo) || !defined(REAPERAPI_MINIMAL)
   8075         {(void**)&GetSetMediaItemTakeInfo,"GetSetMediaItemTakeInfo"},
   8076       #endif
   8077       #if defined(REAPERAPI_WANT_GetSetMediaItemTakeInfo_String) || !defined(REAPERAPI_MINIMAL)
   8078         {(void**)&GetSetMediaItemTakeInfo_String,"GetSetMediaItemTakeInfo_String"},
   8079       #endif
   8080       #if defined(REAPERAPI_WANT_GetSetMediaTrackInfo) || !defined(REAPERAPI_MINIMAL)
   8081         {(void**)&GetSetMediaTrackInfo,"GetSetMediaTrackInfo"},
   8082       #endif
   8083       #if defined(REAPERAPI_WANT_GetSetMediaTrackInfo_String) || !defined(REAPERAPI_MINIMAL)
   8084         {(void**)&GetSetMediaTrackInfo_String,"GetSetMediaTrackInfo_String"},
   8085       #endif
   8086       #if defined(REAPERAPI_WANT_GetSetObjectState) || !defined(REAPERAPI_MINIMAL)
   8087         {(void**)&GetSetObjectState,"GetSetObjectState"},
   8088       #endif
   8089       #if defined(REAPERAPI_WANT_GetSetObjectState2) || !defined(REAPERAPI_MINIMAL)
   8090         {(void**)&GetSetObjectState2,"GetSetObjectState2"},
   8091       #endif
   8092       #if defined(REAPERAPI_WANT_GetSetProjectAuthor) || !defined(REAPERAPI_MINIMAL)
   8093         {(void**)&GetSetProjectAuthor,"GetSetProjectAuthor"},
   8094       #endif
   8095       #if defined(REAPERAPI_WANT_GetSetProjectGrid) || !defined(REAPERAPI_MINIMAL)
   8096         {(void**)&GetSetProjectGrid,"GetSetProjectGrid"},
   8097       #endif
   8098       #if defined(REAPERAPI_WANT_GetSetProjectInfo) || !defined(REAPERAPI_MINIMAL)
   8099         {(void**)&GetSetProjectInfo,"GetSetProjectInfo"},
   8100       #endif
   8101       #if defined(REAPERAPI_WANT_GetSetProjectInfo_String) || !defined(REAPERAPI_MINIMAL)
   8102         {(void**)&GetSetProjectInfo_String,"GetSetProjectInfo_String"},
   8103       #endif
   8104       #if defined(REAPERAPI_WANT_GetSetProjectNotes) || !defined(REAPERAPI_MINIMAL)
   8105         {(void**)&GetSetProjectNotes,"GetSetProjectNotes"},
   8106       #endif
   8107       #if defined(REAPERAPI_WANT_GetSetRepeat) || !defined(REAPERAPI_MINIMAL)
   8108         {(void**)&GetSetRepeat,"GetSetRepeat"},
   8109       #endif
   8110       #if defined(REAPERAPI_WANT_GetSetRepeatEx) || !defined(REAPERAPI_MINIMAL)
   8111         {(void**)&GetSetRepeatEx,"GetSetRepeatEx"},
   8112       #endif
   8113       #if defined(REAPERAPI_WANT_GetSetTrackGroupMembership) || !defined(REAPERAPI_MINIMAL)
   8114         {(void**)&GetSetTrackGroupMembership,"GetSetTrackGroupMembership"},
   8115       #endif
   8116       #if defined(REAPERAPI_WANT_GetSetTrackGroupMembershipHigh) || !defined(REAPERAPI_MINIMAL)
   8117         {(void**)&GetSetTrackGroupMembershipHigh,"GetSetTrackGroupMembershipHigh"},
   8118       #endif
   8119       #if defined(REAPERAPI_WANT_GetSetTrackMIDISupportFile) || !defined(REAPERAPI_MINIMAL)
   8120         {(void**)&GetSetTrackMIDISupportFile,"GetSetTrackMIDISupportFile"},
   8121       #endif
   8122       #if defined(REAPERAPI_WANT_GetSetTrackSendInfo) || !defined(REAPERAPI_MINIMAL)
   8123         {(void**)&GetSetTrackSendInfo,"GetSetTrackSendInfo"},
   8124       #endif
   8125       #if defined(REAPERAPI_WANT_GetSetTrackSendInfo_String) || !defined(REAPERAPI_MINIMAL)
   8126         {(void**)&GetSetTrackSendInfo_String,"GetSetTrackSendInfo_String"},
   8127       #endif
   8128       #if defined(REAPERAPI_WANT_GetSetTrackState) || !defined(REAPERAPI_MINIMAL)
   8129         {(void**)&GetSetTrackState,"GetSetTrackState"},
   8130       #endif
   8131       #if defined(REAPERAPI_WANT_GetSetTrackState2) || !defined(REAPERAPI_MINIMAL)
   8132         {(void**)&GetSetTrackState2,"GetSetTrackState2"},
   8133       #endif
   8134       #if defined(REAPERAPI_WANT_GetSubProjectFromSource) || !defined(REAPERAPI_MINIMAL)
   8135         {(void**)&GetSubProjectFromSource,"GetSubProjectFromSource"},
   8136       #endif
   8137       #if defined(REAPERAPI_WANT_GetTake) || !defined(REAPERAPI_MINIMAL)
   8138         {(void**)&GetTake,"GetTake"},
   8139       #endif
   8140       #if defined(REAPERAPI_WANT_GetTakeEnvelope) || !defined(REAPERAPI_MINIMAL)
   8141         {(void**)&GetTakeEnvelope,"GetTakeEnvelope"},
   8142       #endif
   8143       #if defined(REAPERAPI_WANT_GetTakeEnvelopeByName) || !defined(REAPERAPI_MINIMAL)
   8144         {(void**)&GetTakeEnvelopeByName,"GetTakeEnvelopeByName"},
   8145       #endif
   8146       #if defined(REAPERAPI_WANT_GetTakeMarker) || !defined(REAPERAPI_MINIMAL)
   8147         {(void**)&GetTakeMarker,"GetTakeMarker"},
   8148       #endif
   8149       #if defined(REAPERAPI_WANT_GetTakeName) || !defined(REAPERAPI_MINIMAL)
   8150         {(void**)&GetTakeName,"GetTakeName"},
   8151       #endif
   8152       #if defined(REAPERAPI_WANT_GetTakeNumStretchMarkers) || !defined(REAPERAPI_MINIMAL)
   8153         {(void**)&GetTakeNumStretchMarkers,"GetTakeNumStretchMarkers"},
   8154       #endif
   8155       #if defined(REAPERAPI_WANT_GetTakeStretchMarker) || !defined(REAPERAPI_MINIMAL)
   8156         {(void**)&GetTakeStretchMarker,"GetTakeStretchMarker"},
   8157       #endif
   8158       #if defined(REAPERAPI_WANT_GetTakeStretchMarkerSlope) || !defined(REAPERAPI_MINIMAL)
   8159         {(void**)&GetTakeStretchMarkerSlope,"GetTakeStretchMarkerSlope"},
   8160       #endif
   8161       #if defined(REAPERAPI_WANT_GetTCPFXParm) || !defined(REAPERAPI_MINIMAL)
   8162         {(void**)&GetTCPFXParm,"GetTCPFXParm"},
   8163       #endif
   8164       #if defined(REAPERAPI_WANT_GetTempoMatchPlayRate) || !defined(REAPERAPI_MINIMAL)
   8165         {(void**)&GetTempoMatchPlayRate,"GetTempoMatchPlayRate"},
   8166       #endif
   8167       #if defined(REAPERAPI_WANT_GetTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   8168         {(void**)&GetTempoTimeSigMarker,"GetTempoTimeSigMarker"},
   8169       #endif
   8170       #if defined(REAPERAPI_WANT_GetThemeColor) || !defined(REAPERAPI_MINIMAL)
   8171         {(void**)&GetThemeColor,"GetThemeColor"},
   8172       #endif
   8173       #if defined(REAPERAPI_WANT_GetThingFromPoint) || !defined(REAPERAPI_MINIMAL)
   8174         {(void**)&GetThingFromPoint,"GetThingFromPoint"},
   8175       #endif
   8176       #if defined(REAPERAPI_WANT_GetToggleCommandState) || !defined(REAPERAPI_MINIMAL)
   8177         {(void**)&GetToggleCommandState,"GetToggleCommandState"},
   8178       #endif
   8179       #if defined(REAPERAPI_WANT_GetToggleCommandState2) || !defined(REAPERAPI_MINIMAL)
   8180         {(void**)&GetToggleCommandState2,"GetToggleCommandState2"},
   8181       #endif
   8182       #if defined(REAPERAPI_WANT_GetToggleCommandStateEx) || !defined(REAPERAPI_MINIMAL)
   8183         {(void**)&GetToggleCommandStateEx,"GetToggleCommandStateEx"},
   8184       #endif
   8185       #if defined(REAPERAPI_WANT_GetToggleCommandStateThroughHooks) || !defined(REAPERAPI_MINIMAL)
   8186         {(void**)&GetToggleCommandStateThroughHooks,"GetToggleCommandStateThroughHooks"},
   8187       #endif
   8188       #if defined(REAPERAPI_WANT_GetTooltipWindow) || !defined(REAPERAPI_MINIMAL)
   8189         {(void**)&GetTooltipWindow,"GetTooltipWindow"},
   8190       #endif
   8191       #if defined(REAPERAPI_WANT_GetTrack) || !defined(REAPERAPI_MINIMAL)
   8192         {(void**)&GetTrack,"GetTrack"},
   8193       #endif
   8194       #if defined(REAPERAPI_WANT_GetTrackAutomationMode) || !defined(REAPERAPI_MINIMAL)
   8195         {(void**)&GetTrackAutomationMode,"GetTrackAutomationMode"},
   8196       #endif
   8197       #if defined(REAPERAPI_WANT_GetTrackColor) || !defined(REAPERAPI_MINIMAL)
   8198         {(void**)&GetTrackColor,"GetTrackColor"},
   8199       #endif
   8200       #if defined(REAPERAPI_WANT_GetTrackDepth) || !defined(REAPERAPI_MINIMAL)
   8201         {(void**)&GetTrackDepth,"GetTrackDepth"},
   8202       #endif
   8203       #if defined(REAPERAPI_WANT_GetTrackEnvelope) || !defined(REAPERAPI_MINIMAL)
   8204         {(void**)&GetTrackEnvelope,"GetTrackEnvelope"},
   8205       #endif
   8206       #if defined(REAPERAPI_WANT_GetTrackEnvelopeByChunkName) || !defined(REAPERAPI_MINIMAL)
   8207         {(void**)&GetTrackEnvelopeByChunkName,"GetTrackEnvelopeByChunkName"},
   8208       #endif
   8209       #if defined(REAPERAPI_WANT_GetTrackEnvelopeByName) || !defined(REAPERAPI_MINIMAL)
   8210         {(void**)&GetTrackEnvelopeByName,"GetTrackEnvelopeByName"},
   8211       #endif
   8212       #if defined(REAPERAPI_WANT_GetTrackFromPoint) || !defined(REAPERAPI_MINIMAL)
   8213         {(void**)&GetTrackFromPoint,"GetTrackFromPoint"},
   8214       #endif
   8215       #if defined(REAPERAPI_WANT_GetTrackGUID) || !defined(REAPERAPI_MINIMAL)
   8216         {(void**)&GetTrackGUID,"GetTrackGUID"},
   8217       #endif
   8218       #if defined(REAPERAPI_WANT_GetTrackInfo) || !defined(REAPERAPI_MINIMAL)
   8219         {(void**)&GetTrackInfo,"GetTrackInfo"},
   8220       #endif
   8221       #if defined(REAPERAPI_WANT_GetTrackMediaItem) || !defined(REAPERAPI_MINIMAL)
   8222         {(void**)&GetTrackMediaItem,"GetTrackMediaItem"},
   8223       #endif
   8224       #if defined(REAPERAPI_WANT_GetTrackMIDILyrics) || !defined(REAPERAPI_MINIMAL)
   8225         {(void**)&GetTrackMIDILyrics,"GetTrackMIDILyrics"},
   8226       #endif
   8227       #if defined(REAPERAPI_WANT_GetTrackMIDINoteName) || !defined(REAPERAPI_MINIMAL)
   8228         {(void**)&GetTrackMIDINoteName,"GetTrackMIDINoteName"},
   8229       #endif
   8230       #if defined(REAPERAPI_WANT_GetTrackMIDINoteNameEx) || !defined(REAPERAPI_MINIMAL)
   8231         {(void**)&GetTrackMIDINoteNameEx,"GetTrackMIDINoteNameEx"},
   8232       #endif
   8233       #if defined(REAPERAPI_WANT_GetTrackMIDINoteRange) || !defined(REAPERAPI_MINIMAL)
   8234         {(void**)&GetTrackMIDINoteRange,"GetTrackMIDINoteRange"},
   8235       #endif
   8236       #if defined(REAPERAPI_WANT_GetTrackName) || !defined(REAPERAPI_MINIMAL)
   8237         {(void**)&GetTrackName,"GetTrackName"},
   8238       #endif
   8239       #if defined(REAPERAPI_WANT_GetTrackNumMediaItems) || !defined(REAPERAPI_MINIMAL)
   8240         {(void**)&GetTrackNumMediaItems,"GetTrackNumMediaItems"},
   8241       #endif
   8242       #if defined(REAPERAPI_WANT_GetTrackNumSends) || !defined(REAPERAPI_MINIMAL)
   8243         {(void**)&GetTrackNumSends,"GetTrackNumSends"},
   8244       #endif
   8245       #if defined(REAPERAPI_WANT_GetTrackReceiveName) || !defined(REAPERAPI_MINIMAL)
   8246         {(void**)&GetTrackReceiveName,"GetTrackReceiveName"},
   8247       #endif
   8248       #if defined(REAPERAPI_WANT_GetTrackReceiveUIMute) || !defined(REAPERAPI_MINIMAL)
   8249         {(void**)&GetTrackReceiveUIMute,"GetTrackReceiveUIMute"},
   8250       #endif
   8251       #if defined(REAPERAPI_WANT_GetTrackReceiveUIVolPan) || !defined(REAPERAPI_MINIMAL)
   8252         {(void**)&GetTrackReceiveUIVolPan,"GetTrackReceiveUIVolPan"},
   8253       #endif
   8254       #if defined(REAPERAPI_WANT_GetTrackSendInfo_Value) || !defined(REAPERAPI_MINIMAL)
   8255         {(void**)&GetTrackSendInfo_Value,"GetTrackSendInfo_Value"},
   8256       #endif
   8257       #if defined(REAPERAPI_WANT_GetTrackSendName) || !defined(REAPERAPI_MINIMAL)
   8258         {(void**)&GetTrackSendName,"GetTrackSendName"},
   8259       #endif
   8260       #if defined(REAPERAPI_WANT_GetTrackSendUIMute) || !defined(REAPERAPI_MINIMAL)
   8261         {(void**)&GetTrackSendUIMute,"GetTrackSendUIMute"},
   8262       #endif
   8263       #if defined(REAPERAPI_WANT_GetTrackSendUIVolPan) || !defined(REAPERAPI_MINIMAL)
   8264         {(void**)&GetTrackSendUIVolPan,"GetTrackSendUIVolPan"},
   8265       #endif
   8266       #if defined(REAPERAPI_WANT_GetTrackState) || !defined(REAPERAPI_MINIMAL)
   8267         {(void**)&GetTrackState,"GetTrackState"},
   8268       #endif
   8269       #if defined(REAPERAPI_WANT_GetTrackStateChunk) || !defined(REAPERAPI_MINIMAL)
   8270         {(void**)&GetTrackStateChunk,"GetTrackStateChunk"},
   8271       #endif
   8272       #if defined(REAPERAPI_WANT_GetTrackUIMute) || !defined(REAPERAPI_MINIMAL)
   8273         {(void**)&GetTrackUIMute,"GetTrackUIMute"},
   8274       #endif
   8275       #if defined(REAPERAPI_WANT_GetTrackUIPan) || !defined(REAPERAPI_MINIMAL)
   8276         {(void**)&GetTrackUIPan,"GetTrackUIPan"},
   8277       #endif
   8278       #if defined(REAPERAPI_WANT_GetTrackUIVolPan) || !defined(REAPERAPI_MINIMAL)
   8279         {(void**)&GetTrackUIVolPan,"GetTrackUIVolPan"},
   8280       #endif
   8281       #if defined(REAPERAPI_WANT_GetUnderrunTime) || !defined(REAPERAPI_MINIMAL)
   8282         {(void**)&GetUnderrunTime,"GetUnderrunTime"},
   8283       #endif
   8284       #if defined(REAPERAPI_WANT_GetUserFileNameForRead) || !defined(REAPERAPI_MINIMAL)
   8285         {(void**)&GetUserFileNameForRead,"GetUserFileNameForRead"},
   8286       #endif
   8287       #if defined(REAPERAPI_WANT_GetUserInputs) || !defined(REAPERAPI_MINIMAL)
   8288         {(void**)&GetUserInputs,"GetUserInputs"},
   8289       #endif
   8290       #if defined(REAPERAPI_WANT_GoToMarker) || !defined(REAPERAPI_MINIMAL)
   8291         {(void**)&GoToMarker,"GoToMarker"},
   8292       #endif
   8293       #if defined(REAPERAPI_WANT_GoToRegion) || !defined(REAPERAPI_MINIMAL)
   8294         {(void**)&GoToRegion,"GoToRegion"},
   8295       #endif
   8296       #if defined(REAPERAPI_WANT_GR_SelectColor) || !defined(REAPERAPI_MINIMAL)
   8297         {(void**)&GR_SelectColor,"GR_SelectColor"},
   8298       #endif
   8299       #if defined(REAPERAPI_WANT_GSC_mainwnd) || !defined(REAPERAPI_MINIMAL)
   8300         {(void**)&GSC_mainwnd,"GSC_mainwnd"},
   8301       #endif
   8302       #if defined(REAPERAPI_WANT_guidToString) || !defined(REAPERAPI_MINIMAL)
   8303         {(void**)&guidToString,"guidToString"},
   8304       #endif
   8305       #if defined(REAPERAPI_WANT_HasExtState) || !defined(REAPERAPI_MINIMAL)
   8306         {(void**)&HasExtState,"HasExtState"},
   8307       #endif
   8308       #if defined(REAPERAPI_WANT_HasTrackMIDIPrograms) || !defined(REAPERAPI_MINIMAL)
   8309         {(void**)&HasTrackMIDIPrograms,"HasTrackMIDIPrograms"},
   8310       #endif
   8311       #if defined(REAPERAPI_WANT_HasTrackMIDIProgramsEx) || !defined(REAPERAPI_MINIMAL)
   8312         {(void**)&HasTrackMIDIProgramsEx,"HasTrackMIDIProgramsEx"},
   8313       #endif
   8314       #if defined(REAPERAPI_WANT_Help_Set) || !defined(REAPERAPI_MINIMAL)
   8315         {(void**)&Help_Set,"Help_Set"},
   8316       #endif
   8317       #if defined(REAPERAPI_WANT_HiresPeaksFromSource) || !defined(REAPERAPI_MINIMAL)
   8318         {(void**)&HiresPeaksFromSource,"HiresPeaksFromSource"},
   8319       #endif
   8320       #if defined(REAPERAPI_WANT_image_resolve_fn) || !defined(REAPERAPI_MINIMAL)
   8321         {(void**)&image_resolve_fn,"image_resolve_fn"},
   8322       #endif
   8323       #if defined(REAPERAPI_WANT_InsertAutomationItem) || !defined(REAPERAPI_MINIMAL)
   8324         {(void**)&InsertAutomationItem,"InsertAutomationItem"},
   8325       #endif
   8326       #if defined(REAPERAPI_WANT_InsertEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   8327         {(void**)&InsertEnvelopePoint,"InsertEnvelopePoint"},
   8328       #endif
   8329       #if defined(REAPERAPI_WANT_InsertEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   8330         {(void**)&InsertEnvelopePointEx,"InsertEnvelopePointEx"},
   8331       #endif
   8332       #if defined(REAPERAPI_WANT_InsertMedia) || !defined(REAPERAPI_MINIMAL)
   8333         {(void**)&InsertMedia,"InsertMedia"},
   8334       #endif
   8335       #if defined(REAPERAPI_WANT_InsertMediaSection) || !defined(REAPERAPI_MINIMAL)
   8336         {(void**)&InsertMediaSection,"InsertMediaSection"},
   8337       #endif
   8338       #if defined(REAPERAPI_WANT_InsertTrackAtIndex) || !defined(REAPERAPI_MINIMAL)
   8339         {(void**)&InsertTrackAtIndex,"InsertTrackAtIndex"},
   8340       #endif
   8341       #if defined(REAPERAPI_WANT_IsInRealTimeAudio) || !defined(REAPERAPI_MINIMAL)
   8342         {(void**)&IsInRealTimeAudio,"IsInRealTimeAudio"},
   8343       #endif
   8344       #if defined(REAPERAPI_WANT_IsItemTakeActiveForPlayback) || !defined(REAPERAPI_MINIMAL)
   8345         {(void**)&IsItemTakeActiveForPlayback,"IsItemTakeActiveForPlayback"},
   8346       #endif
   8347       #if defined(REAPERAPI_WANT_IsMediaExtension) || !defined(REAPERAPI_MINIMAL)
   8348         {(void**)&IsMediaExtension,"IsMediaExtension"},
   8349       #endif
   8350       #if defined(REAPERAPI_WANT_IsMediaItemSelected) || !defined(REAPERAPI_MINIMAL)
   8351         {(void**)&IsMediaItemSelected,"IsMediaItemSelected"},
   8352       #endif
   8353       #if defined(REAPERAPI_WANT_IsProjectDirty) || !defined(REAPERAPI_MINIMAL)
   8354         {(void**)&IsProjectDirty,"IsProjectDirty"},
   8355       #endif
   8356       #if defined(REAPERAPI_WANT_IsREAPER) || !defined(REAPERAPI_MINIMAL)
   8357         {(void**)&IsREAPER,"IsREAPER"},
   8358       #endif
   8359       #if defined(REAPERAPI_WANT_IsTrackSelected) || !defined(REAPERAPI_MINIMAL)
   8360         {(void**)&IsTrackSelected,"IsTrackSelected"},
   8361       #endif
   8362       #if defined(REAPERAPI_WANT_IsTrackVisible) || !defined(REAPERAPI_MINIMAL)
   8363         {(void**)&IsTrackVisible,"IsTrackVisible"},
   8364       #endif
   8365       #if defined(REAPERAPI_WANT_joystick_create) || !defined(REAPERAPI_MINIMAL)
   8366         {(void**)&joystick_create,"joystick_create"},
   8367       #endif
   8368       #if defined(REAPERAPI_WANT_joystick_destroy) || !defined(REAPERAPI_MINIMAL)
   8369         {(void**)&joystick_destroy,"joystick_destroy"},
   8370       #endif
   8371       #if defined(REAPERAPI_WANT_joystick_enum) || !defined(REAPERAPI_MINIMAL)
   8372         {(void**)&joystick_enum,"joystick_enum"},
   8373       #endif
   8374       #if defined(REAPERAPI_WANT_joystick_getaxis) || !defined(REAPERAPI_MINIMAL)
   8375         {(void**)&joystick_getaxis,"joystick_getaxis"},
   8376       #endif
   8377       #if defined(REAPERAPI_WANT_joystick_getbuttonmask) || !defined(REAPERAPI_MINIMAL)
   8378         {(void**)&joystick_getbuttonmask,"joystick_getbuttonmask"},
   8379       #endif
   8380       #if defined(REAPERAPI_WANT_joystick_getinfo) || !defined(REAPERAPI_MINIMAL)
   8381         {(void**)&joystick_getinfo,"joystick_getinfo"},
   8382       #endif
   8383       #if defined(REAPERAPI_WANT_joystick_getpov) || !defined(REAPERAPI_MINIMAL)
   8384         {(void**)&joystick_getpov,"joystick_getpov"},
   8385       #endif
   8386       #if defined(REAPERAPI_WANT_joystick_update) || !defined(REAPERAPI_MINIMAL)
   8387         {(void**)&joystick_update,"joystick_update"},
   8388       #endif
   8389       #if defined(REAPERAPI_WANT_kbd_enumerateActions) || !defined(REAPERAPI_MINIMAL)
   8390         {(void**)&kbd_enumerateActions,"kbd_enumerateActions"},
   8391       #endif
   8392       #if defined(REAPERAPI_WANT_kbd_formatKeyName) || !defined(REAPERAPI_MINIMAL)
   8393         {(void**)&kbd_formatKeyName,"kbd_formatKeyName"},
   8394       #endif
   8395       #if defined(REAPERAPI_WANT_kbd_getCommandName) || !defined(REAPERAPI_MINIMAL)
   8396         {(void**)&kbd_getCommandName,"kbd_getCommandName"},
   8397       #endif
   8398       #if defined(REAPERAPI_WANT_kbd_getTextFromCmd) || !defined(REAPERAPI_MINIMAL)
   8399         {(void**)&kbd_getTextFromCmd,"kbd_getTextFromCmd"},
   8400       #endif
   8401       #if defined(REAPERAPI_WANT_KBD_OnMainActionEx) || !defined(REAPERAPI_MINIMAL)
   8402         {(void**)&KBD_OnMainActionEx,"KBD_OnMainActionEx"},
   8403       #endif
   8404       #if defined(REAPERAPI_WANT_kbd_OnMidiEvent) || !defined(REAPERAPI_MINIMAL)
   8405         {(void**)&kbd_OnMidiEvent,"kbd_OnMidiEvent"},
   8406       #endif
   8407       #if defined(REAPERAPI_WANT_kbd_OnMidiList) || !defined(REAPERAPI_MINIMAL)
   8408         {(void**)&kbd_OnMidiList,"kbd_OnMidiList"},
   8409       #endif
   8410       #if defined(REAPERAPI_WANT_kbd_ProcessActionsMenu) || !defined(REAPERAPI_MINIMAL)
   8411         {(void**)&kbd_ProcessActionsMenu,"kbd_ProcessActionsMenu"},
   8412       #endif
   8413       #if defined(REAPERAPI_WANT_kbd_processMidiEventActionEx) || !defined(REAPERAPI_MINIMAL)
   8414         {(void**)&kbd_processMidiEventActionEx,"kbd_processMidiEventActionEx"},
   8415       #endif
   8416       #if defined(REAPERAPI_WANT_kbd_reprocessMenu) || !defined(REAPERAPI_MINIMAL)
   8417         {(void**)&kbd_reprocessMenu,"kbd_reprocessMenu"},
   8418       #endif
   8419       #if defined(REAPERAPI_WANT_kbd_RunCommandThroughHooks) || !defined(REAPERAPI_MINIMAL)
   8420         {(void**)&kbd_RunCommandThroughHooks,"kbd_RunCommandThroughHooks"},
   8421       #endif
   8422       #if defined(REAPERAPI_WANT_kbd_translateAccelerator) || !defined(REAPERAPI_MINIMAL)
   8423         {(void**)&kbd_translateAccelerator,"kbd_translateAccelerator"},
   8424       #endif
   8425       #if defined(REAPERAPI_WANT_kbd_translateMouse) || !defined(REAPERAPI_MINIMAL)
   8426         {(void**)&kbd_translateMouse,"kbd_translateMouse"},
   8427       #endif
   8428 
   8429 
   8430     #ifndef REAPERAPI_NO_LICE
   8431       #if defined(REAPERAPI_WANT_LICE__Destroy) || !defined(REAPERAPI_MINIMAL)
   8432         {(void**)&LICE__Destroy,"LICE__Destroy"},
   8433       #endif
   8434       #if defined(REAPERAPI_WANT_LICE__DestroyFont) || !defined(REAPERAPI_MINIMAL)
   8435         {(void**)&LICE__DestroyFont,"LICE__DestroyFont"},
   8436       #endif
   8437       #if defined(REAPERAPI_WANT_LICE__DrawText) || !defined(REAPERAPI_MINIMAL)
   8438         {(void**)&LICE__DrawText,"LICE__DrawText"},
   8439       #endif
   8440       #if defined(REAPERAPI_WANT_LICE__GetBits) || !defined(REAPERAPI_MINIMAL)
   8441         {(void**)&LICE__GetBits,"LICE__GetBits"},
   8442       #endif
   8443       #if defined(REAPERAPI_WANT_LICE__GetDC) || !defined(REAPERAPI_MINIMAL)
   8444         {(void**)&LICE__GetDC,"LICE__GetDC"},
   8445       #endif
   8446       #if defined(REAPERAPI_WANT_LICE__GetHeight) || !defined(REAPERAPI_MINIMAL)
   8447         {(void**)&LICE__GetHeight,"LICE__GetHeight"},
   8448       #endif
   8449       #if defined(REAPERAPI_WANT_LICE__GetRowSpan) || !defined(REAPERAPI_MINIMAL)
   8450         {(void**)&LICE__GetRowSpan,"LICE__GetRowSpan"},
   8451       #endif
   8452       #if defined(REAPERAPI_WANT_LICE__GetWidth) || !defined(REAPERAPI_MINIMAL)
   8453         {(void**)&LICE__GetWidth,"LICE__GetWidth"},
   8454       #endif
   8455       #if defined(REAPERAPI_WANT_LICE__IsFlipped) || !defined(REAPERAPI_MINIMAL)
   8456         {(void**)&LICE__IsFlipped,"LICE__IsFlipped"},
   8457       #endif
   8458       #if defined(REAPERAPI_WANT_LICE__resize) || !defined(REAPERAPI_MINIMAL)
   8459         {(void**)&LICE__resize,"LICE__resize"},
   8460       #endif
   8461       #if defined(REAPERAPI_WANT_LICE__SetBkColor) || !defined(REAPERAPI_MINIMAL)
   8462         {(void**)&LICE__SetBkColor,"LICE__SetBkColor"},
   8463       #endif
   8464       #if defined(REAPERAPI_WANT_LICE__SetFromHFont) || !defined(REAPERAPI_MINIMAL)
   8465         {(void**)&LICE__SetFromHFont,"LICE__SetFromHFont"},
   8466       #endif
   8467       #if defined(REAPERAPI_WANT_LICE__SetTextColor) || !defined(REAPERAPI_MINIMAL)
   8468         {(void**)&LICE__SetTextColor,"LICE__SetTextColor"},
   8469       #endif
   8470       #if defined(REAPERAPI_WANT_LICE__SetTextCombineMode) || !defined(REAPERAPI_MINIMAL)
   8471         {(void**)&LICE__SetTextCombineMode,"LICE__SetTextCombineMode"},
   8472       #endif
   8473       #if defined(REAPERAPI_WANT_LICE_Arc) || !defined(REAPERAPI_MINIMAL)
   8474         {(void**)&LICE_Arc,"LICE_Arc"},
   8475       #endif
   8476       #if defined(REAPERAPI_WANT_LICE_Blit) || !defined(REAPERAPI_MINIMAL)
   8477         {(void**)&LICE_Blit,"LICE_Blit"},
   8478       #endif
   8479       #if defined(REAPERAPI_WANT_LICE_Blur) || !defined(REAPERAPI_MINIMAL)
   8480         {(void**)&LICE_Blur,"LICE_Blur"},
   8481       #endif
   8482       #if defined(REAPERAPI_WANT_LICE_BorderedRect) || !defined(REAPERAPI_MINIMAL)
   8483         {(void**)&LICE_BorderedRect,"LICE_BorderedRect"},
   8484       #endif
   8485       #if defined(REAPERAPI_WANT_LICE_Circle) || !defined(REAPERAPI_MINIMAL)
   8486         {(void**)&LICE_Circle,"LICE_Circle"},
   8487       #endif
   8488       #if defined(REAPERAPI_WANT_LICE_Clear) || !defined(REAPERAPI_MINIMAL)
   8489         {(void**)&LICE_Clear,"LICE_Clear"},
   8490       #endif
   8491       #if defined(REAPERAPI_WANT_LICE_ClearRect) || !defined(REAPERAPI_MINIMAL)
   8492         {(void**)&LICE_ClearRect,"LICE_ClearRect"},
   8493       #endif
   8494       #if defined(REAPERAPI_WANT_LICE_ClipLine) || !defined(REAPERAPI_MINIMAL)
   8495         {(void**)&LICE_ClipLine,"LICE_ClipLine"},
   8496       #endif
   8497       #if defined(REAPERAPI_WANT_LICE_Copy) || !defined(REAPERAPI_MINIMAL)
   8498         {(void**)&LICE_Copy,"LICE_Copy"},
   8499       #endif
   8500       #if defined(REAPERAPI_WANT_LICE_CreateBitmap) || !defined(REAPERAPI_MINIMAL)
   8501         {(void**)&LICE_CreateBitmap,"LICE_CreateBitmap"},
   8502       #endif
   8503       #if defined(REAPERAPI_WANT_LICE_CreateFont) || !defined(REAPERAPI_MINIMAL)
   8504         {(void**)&LICE_CreateFont,"LICE_CreateFont"},
   8505       #endif
   8506       #if defined(REAPERAPI_WANT_LICE_DrawCBezier) || !defined(REAPERAPI_MINIMAL)
   8507         {(void**)&LICE_DrawCBezier,"LICE_DrawCBezier"},
   8508       #endif
   8509       #if defined(REAPERAPI_WANT_LICE_DrawChar) || !defined(REAPERAPI_MINIMAL)
   8510         {(void**)&LICE_DrawChar,"LICE_DrawChar"},
   8511       #endif
   8512       #if defined(REAPERAPI_WANT_LICE_DrawGlyph) || !defined(REAPERAPI_MINIMAL)
   8513         {(void**)&LICE_DrawGlyph,"LICE_DrawGlyph"},
   8514       #endif
   8515       #if defined(REAPERAPI_WANT_LICE_DrawRect) || !defined(REAPERAPI_MINIMAL)
   8516         {(void**)&LICE_DrawRect,"LICE_DrawRect"},
   8517       #endif
   8518       #if defined(REAPERAPI_WANT_LICE_DrawText) || !defined(REAPERAPI_MINIMAL)
   8519         {(void**)&LICE_DrawText,"LICE_DrawText"},
   8520       #endif
   8521       #if defined(REAPERAPI_WANT_LICE_FillCBezier) || !defined(REAPERAPI_MINIMAL)
   8522         {(void**)&LICE_FillCBezier,"LICE_FillCBezier"},
   8523       #endif
   8524       #if defined(REAPERAPI_WANT_LICE_FillCircle) || !defined(REAPERAPI_MINIMAL)
   8525         {(void**)&LICE_FillCircle,"LICE_FillCircle"},
   8526       #endif
   8527       #if defined(REAPERAPI_WANT_LICE_FillConvexPolygon) || !defined(REAPERAPI_MINIMAL)
   8528         {(void**)&LICE_FillConvexPolygon,"LICE_FillConvexPolygon"},
   8529       #endif
   8530       #if defined(REAPERAPI_WANT_LICE_FillRect) || !defined(REAPERAPI_MINIMAL)
   8531         {(void**)&LICE_FillRect,"LICE_FillRect"},
   8532       #endif
   8533       #if defined(REAPERAPI_WANT_LICE_FillTrapezoid) || !defined(REAPERAPI_MINIMAL)
   8534         {(void**)&LICE_FillTrapezoid,"LICE_FillTrapezoid"},
   8535       #endif
   8536       #if defined(REAPERAPI_WANT_LICE_FillTriangle) || !defined(REAPERAPI_MINIMAL)
   8537         {(void**)&LICE_FillTriangle,"LICE_FillTriangle"},
   8538       #endif
   8539       #if defined(REAPERAPI_WANT_LICE_GetPixel) || !defined(REAPERAPI_MINIMAL)
   8540         {(void**)&LICE_GetPixel,"LICE_GetPixel"},
   8541       #endif
   8542       #if defined(REAPERAPI_WANT_LICE_GradRect) || !defined(REAPERAPI_MINIMAL)
   8543         {(void**)&LICE_GradRect,"LICE_GradRect"},
   8544       #endif
   8545       #if defined(REAPERAPI_WANT_LICE_Line) || !defined(REAPERAPI_MINIMAL)
   8546         {(void**)&LICE_Line,"LICE_Line"},
   8547       #endif
   8548       #if defined(REAPERAPI_WANT_LICE_LineInt) || !defined(REAPERAPI_MINIMAL)
   8549         {(void**)&LICE_LineInt,"LICE_LineInt"},
   8550       #endif
   8551       #if defined(REAPERAPI_WANT_LICE_LoadPNG) || !defined(REAPERAPI_MINIMAL)
   8552         {(void**)&LICE_LoadPNG,"LICE_LoadPNG"},
   8553       #endif
   8554       #if defined(REAPERAPI_WANT_LICE_LoadPNGFromResource) || !defined(REAPERAPI_MINIMAL)
   8555         {(void**)&LICE_LoadPNGFromResource,"LICE_LoadPNGFromResource"},
   8556       #endif
   8557       #if defined(REAPERAPI_WANT_LICE_MeasureText) || !defined(REAPERAPI_MINIMAL)
   8558         {(void**)&LICE_MeasureText,"LICE_MeasureText"},
   8559       #endif
   8560       #if defined(REAPERAPI_WANT_LICE_MultiplyAddRect) || !defined(REAPERAPI_MINIMAL)
   8561         {(void**)&LICE_MultiplyAddRect,"LICE_MultiplyAddRect"},
   8562       #endif
   8563       #if defined(REAPERAPI_WANT_LICE_PutPixel) || !defined(REAPERAPI_MINIMAL)
   8564         {(void**)&LICE_PutPixel,"LICE_PutPixel"},
   8565       #endif
   8566       #if defined(REAPERAPI_WANT_LICE_RotatedBlit) || !defined(REAPERAPI_MINIMAL)
   8567         {(void**)&LICE_RotatedBlit,"LICE_RotatedBlit"},
   8568       #endif
   8569       #if defined(REAPERAPI_WANT_LICE_RoundRect) || !defined(REAPERAPI_MINIMAL)
   8570         {(void**)&LICE_RoundRect,"LICE_RoundRect"},
   8571       #endif
   8572       #if defined(REAPERAPI_WANT_LICE_ScaledBlit) || !defined(REAPERAPI_MINIMAL)
   8573         {(void**)&LICE_ScaledBlit,"LICE_ScaledBlit"},
   8574       #endif
   8575       #if defined(REAPERAPI_WANT_LICE_SimpleFill) || !defined(REAPERAPI_MINIMAL)
   8576         {(void**)&LICE_SimpleFill,"LICE_SimpleFill"},
   8577       #endif
   8578       #if defined(REAPERAPI_WANT_LICE_ThickFLine) || !defined(REAPERAPI_MINIMAL)
   8579         {(void**)&LICE_ThickFLine,"LICE_ThickFLine"},
   8580       #endif
   8581 
   8582     #endif // !REAPERAPI_NO_LICE
   8583 
   8584       #if defined(REAPERAPI_WANT_LocalizeString) || !defined(REAPERAPI_MINIMAL)
   8585         {(void**)&LocalizeString,"LocalizeString"},
   8586       #endif
   8587       #if defined(REAPERAPI_WANT_Loop_OnArrow) || !defined(REAPERAPI_MINIMAL)
   8588         {(void**)&Loop_OnArrow,"Loop_OnArrow"},
   8589       #endif
   8590       #if defined(REAPERAPI_WANT_Main_OnCommand) || !defined(REAPERAPI_MINIMAL)
   8591         {(void**)&Main_OnCommand,"Main_OnCommand"},
   8592       #endif
   8593       #if defined(REAPERAPI_WANT_Main_OnCommandEx) || !defined(REAPERAPI_MINIMAL)
   8594         {(void**)&Main_OnCommandEx,"Main_OnCommandEx"},
   8595       #endif
   8596       #if defined(REAPERAPI_WANT_Main_openProject) || !defined(REAPERAPI_MINIMAL)
   8597         {(void**)&Main_openProject,"Main_openProject"},
   8598       #endif
   8599       #if defined(REAPERAPI_WANT_Main_SaveProject) || !defined(REAPERAPI_MINIMAL)
   8600         {(void**)&Main_SaveProject,"Main_SaveProject"},
   8601       #endif
   8602       #if defined(REAPERAPI_WANT_Main_SaveProjectEx) || !defined(REAPERAPI_MINIMAL)
   8603         {(void**)&Main_SaveProjectEx,"Main_SaveProjectEx"},
   8604       #endif
   8605       #if defined(REAPERAPI_WANT_Main_UpdateLoopInfo) || !defined(REAPERAPI_MINIMAL)
   8606         {(void**)&Main_UpdateLoopInfo,"Main_UpdateLoopInfo"},
   8607       #endif
   8608       #if defined(REAPERAPI_WANT_MarkProjectDirty) || !defined(REAPERAPI_MINIMAL)
   8609         {(void**)&MarkProjectDirty,"MarkProjectDirty"},
   8610       #endif
   8611       #if defined(REAPERAPI_WANT_MarkTrackItemsDirty) || !defined(REAPERAPI_MINIMAL)
   8612         {(void**)&MarkTrackItemsDirty,"MarkTrackItemsDirty"},
   8613       #endif
   8614       #if defined(REAPERAPI_WANT_Master_GetPlayRate) || !defined(REAPERAPI_MINIMAL)
   8615         {(void**)&Master_GetPlayRate,"Master_GetPlayRate"},
   8616       #endif
   8617       #if defined(REAPERAPI_WANT_Master_GetPlayRateAtTime) || !defined(REAPERAPI_MINIMAL)
   8618         {(void**)&Master_GetPlayRateAtTime,"Master_GetPlayRateAtTime"},
   8619       #endif
   8620       #if defined(REAPERAPI_WANT_Master_GetTempo) || !defined(REAPERAPI_MINIMAL)
   8621         {(void**)&Master_GetTempo,"Master_GetTempo"},
   8622       #endif
   8623       #if defined(REAPERAPI_WANT_Master_NormalizePlayRate) || !defined(REAPERAPI_MINIMAL)
   8624         {(void**)&Master_NormalizePlayRate,"Master_NormalizePlayRate"},
   8625       #endif
   8626       #if defined(REAPERAPI_WANT_Master_NormalizeTempo) || !defined(REAPERAPI_MINIMAL)
   8627         {(void**)&Master_NormalizeTempo,"Master_NormalizeTempo"},
   8628       #endif
   8629       #if defined(REAPERAPI_WANT_MB) || !defined(REAPERAPI_MINIMAL)
   8630         {(void**)&MB,"MB"},
   8631       #endif
   8632       #if defined(REAPERAPI_WANT_MediaItemDescendsFromTrack) || !defined(REAPERAPI_MINIMAL)
   8633         {(void**)&MediaItemDescendsFromTrack,"MediaItemDescendsFromTrack"},
   8634       #endif
   8635       #if defined(REAPERAPI_WANT_MIDI_CountEvts) || !defined(REAPERAPI_MINIMAL)
   8636         {(void**)&MIDI_CountEvts,"MIDI_CountEvts"},
   8637       #endif
   8638       #if defined(REAPERAPI_WANT_MIDI_DeleteCC) || !defined(REAPERAPI_MINIMAL)
   8639         {(void**)&MIDI_DeleteCC,"MIDI_DeleteCC"},
   8640       #endif
   8641       #if defined(REAPERAPI_WANT_MIDI_DeleteEvt) || !defined(REAPERAPI_MINIMAL)
   8642         {(void**)&MIDI_DeleteEvt,"MIDI_DeleteEvt"},
   8643       #endif
   8644       #if defined(REAPERAPI_WANT_MIDI_DeleteNote) || !defined(REAPERAPI_MINIMAL)
   8645         {(void**)&MIDI_DeleteNote,"MIDI_DeleteNote"},
   8646       #endif
   8647       #if defined(REAPERAPI_WANT_MIDI_DeleteTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   8648         {(void**)&MIDI_DeleteTextSysexEvt,"MIDI_DeleteTextSysexEvt"},
   8649       #endif
   8650       #if defined(REAPERAPI_WANT_MIDI_DisableSort) || !defined(REAPERAPI_MINIMAL)
   8651         {(void**)&MIDI_DisableSort,"MIDI_DisableSort"},
   8652       #endif
   8653       #if defined(REAPERAPI_WANT_MIDI_EnumSelCC) || !defined(REAPERAPI_MINIMAL)
   8654         {(void**)&MIDI_EnumSelCC,"MIDI_EnumSelCC"},
   8655       #endif
   8656       #if defined(REAPERAPI_WANT_MIDI_EnumSelEvts) || !defined(REAPERAPI_MINIMAL)
   8657         {(void**)&MIDI_EnumSelEvts,"MIDI_EnumSelEvts"},
   8658       #endif
   8659       #if defined(REAPERAPI_WANT_MIDI_EnumSelNotes) || !defined(REAPERAPI_MINIMAL)
   8660         {(void**)&MIDI_EnumSelNotes,"MIDI_EnumSelNotes"},
   8661       #endif
   8662       #if defined(REAPERAPI_WANT_MIDI_EnumSelTextSysexEvts) || !defined(REAPERAPI_MINIMAL)
   8663         {(void**)&MIDI_EnumSelTextSysexEvts,"MIDI_EnumSelTextSysexEvts"},
   8664       #endif
   8665       #if defined(REAPERAPI_WANT_MIDI_eventlist_Create) || !defined(REAPERAPI_MINIMAL)
   8666         {(void**)&MIDI_eventlist_Create,"MIDI_eventlist_Create"},
   8667       #endif
   8668       #if defined(REAPERAPI_WANT_MIDI_eventlist_Destroy) || !defined(REAPERAPI_MINIMAL)
   8669         {(void**)&MIDI_eventlist_Destroy,"MIDI_eventlist_Destroy"},
   8670       #endif
   8671       #if defined(REAPERAPI_WANT_MIDI_GetAllEvts) || !defined(REAPERAPI_MINIMAL)
   8672         {(void**)&MIDI_GetAllEvts,"MIDI_GetAllEvts"},
   8673       #endif
   8674       #if defined(REAPERAPI_WANT_MIDI_GetCC) || !defined(REAPERAPI_MINIMAL)
   8675         {(void**)&MIDI_GetCC,"MIDI_GetCC"},
   8676       #endif
   8677       #if defined(REAPERAPI_WANT_MIDI_GetCCShape) || !defined(REAPERAPI_MINIMAL)
   8678         {(void**)&MIDI_GetCCShape,"MIDI_GetCCShape"},
   8679       #endif
   8680       #if defined(REAPERAPI_WANT_MIDI_GetEvt) || !defined(REAPERAPI_MINIMAL)
   8681         {(void**)&MIDI_GetEvt,"MIDI_GetEvt"},
   8682       #endif
   8683       #if defined(REAPERAPI_WANT_MIDI_GetGrid) || !defined(REAPERAPI_MINIMAL)
   8684         {(void**)&MIDI_GetGrid,"MIDI_GetGrid"},
   8685       #endif
   8686       #if defined(REAPERAPI_WANT_MIDI_GetHash) || !defined(REAPERAPI_MINIMAL)
   8687         {(void**)&MIDI_GetHash,"MIDI_GetHash"},
   8688       #endif
   8689       #if defined(REAPERAPI_WANT_MIDI_GetNote) || !defined(REAPERAPI_MINIMAL)
   8690         {(void**)&MIDI_GetNote,"MIDI_GetNote"},
   8691       #endif
   8692       #if defined(REAPERAPI_WANT_MIDI_GetPPQPos_EndOfMeasure) || !defined(REAPERAPI_MINIMAL)
   8693         {(void**)&MIDI_GetPPQPos_EndOfMeasure,"MIDI_GetPPQPos_EndOfMeasure"},
   8694       #endif
   8695       #if defined(REAPERAPI_WANT_MIDI_GetPPQPos_StartOfMeasure) || !defined(REAPERAPI_MINIMAL)
   8696         {(void**)&MIDI_GetPPQPos_StartOfMeasure,"MIDI_GetPPQPos_StartOfMeasure"},
   8697       #endif
   8698       #if defined(REAPERAPI_WANT_MIDI_GetPPQPosFromProjQN) || !defined(REAPERAPI_MINIMAL)
   8699         {(void**)&MIDI_GetPPQPosFromProjQN,"MIDI_GetPPQPosFromProjQN"},
   8700       #endif
   8701       #if defined(REAPERAPI_WANT_MIDI_GetPPQPosFromProjTime) || !defined(REAPERAPI_MINIMAL)
   8702         {(void**)&MIDI_GetPPQPosFromProjTime,"MIDI_GetPPQPosFromProjTime"},
   8703       #endif
   8704       #if defined(REAPERAPI_WANT_MIDI_GetProjQNFromPPQPos) || !defined(REAPERAPI_MINIMAL)
   8705         {(void**)&MIDI_GetProjQNFromPPQPos,"MIDI_GetProjQNFromPPQPos"},
   8706       #endif
   8707       #if defined(REAPERAPI_WANT_MIDI_GetProjTimeFromPPQPos) || !defined(REAPERAPI_MINIMAL)
   8708         {(void**)&MIDI_GetProjTimeFromPPQPos,"MIDI_GetProjTimeFromPPQPos"},
   8709       #endif
   8710       #if defined(REAPERAPI_WANT_MIDI_GetRecentInputEvent) || !defined(REAPERAPI_MINIMAL)
   8711         {(void**)&MIDI_GetRecentInputEvent,"MIDI_GetRecentInputEvent"},
   8712       #endif
   8713       #if defined(REAPERAPI_WANT_MIDI_GetScale) || !defined(REAPERAPI_MINIMAL)
   8714         {(void**)&MIDI_GetScale,"MIDI_GetScale"},
   8715       #endif
   8716       #if defined(REAPERAPI_WANT_MIDI_GetTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   8717         {(void**)&MIDI_GetTextSysexEvt,"MIDI_GetTextSysexEvt"},
   8718       #endif
   8719       #if defined(REAPERAPI_WANT_MIDI_GetTrackHash) || !defined(REAPERAPI_MINIMAL)
   8720         {(void**)&MIDI_GetTrackHash,"MIDI_GetTrackHash"},
   8721       #endif
   8722       #if defined(REAPERAPI_WANT_midi_init) || !defined(REAPERAPI_MINIMAL)
   8723         {(void**)&midi_init,"midi_init"},
   8724       #endif
   8725       #if defined(REAPERAPI_WANT_MIDI_InsertCC) || !defined(REAPERAPI_MINIMAL)
   8726         {(void**)&MIDI_InsertCC,"MIDI_InsertCC"},
   8727       #endif
   8728       #if defined(REAPERAPI_WANT_MIDI_InsertEvt) || !defined(REAPERAPI_MINIMAL)
   8729         {(void**)&MIDI_InsertEvt,"MIDI_InsertEvt"},
   8730       #endif
   8731       #if defined(REAPERAPI_WANT_MIDI_InsertNote) || !defined(REAPERAPI_MINIMAL)
   8732         {(void**)&MIDI_InsertNote,"MIDI_InsertNote"},
   8733       #endif
   8734       #if defined(REAPERAPI_WANT_MIDI_InsertTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   8735         {(void**)&MIDI_InsertTextSysexEvt,"MIDI_InsertTextSysexEvt"},
   8736       #endif
   8737       #if defined(REAPERAPI_WANT_midi_reinit) || !defined(REAPERAPI_MINIMAL)
   8738         {(void**)&midi_reinit,"midi_reinit"},
   8739       #endif
   8740       #if defined(REAPERAPI_WANT_MIDI_SelectAll) || !defined(REAPERAPI_MINIMAL)
   8741         {(void**)&MIDI_SelectAll,"MIDI_SelectAll"},
   8742       #endif
   8743       #if defined(REAPERAPI_WANT_MIDI_SetAllEvts) || !defined(REAPERAPI_MINIMAL)
   8744         {(void**)&MIDI_SetAllEvts,"MIDI_SetAllEvts"},
   8745       #endif
   8746       #if defined(REAPERAPI_WANT_MIDI_SetCC) || !defined(REAPERAPI_MINIMAL)
   8747         {(void**)&MIDI_SetCC,"MIDI_SetCC"},
   8748       #endif
   8749       #if defined(REAPERAPI_WANT_MIDI_SetCCShape) || !defined(REAPERAPI_MINIMAL)
   8750         {(void**)&MIDI_SetCCShape,"MIDI_SetCCShape"},
   8751       #endif
   8752       #if defined(REAPERAPI_WANT_MIDI_SetEvt) || !defined(REAPERAPI_MINIMAL)
   8753         {(void**)&MIDI_SetEvt,"MIDI_SetEvt"},
   8754       #endif
   8755       #if defined(REAPERAPI_WANT_MIDI_SetItemExtents) || !defined(REAPERAPI_MINIMAL)
   8756         {(void**)&MIDI_SetItemExtents,"MIDI_SetItemExtents"},
   8757       #endif
   8758       #if defined(REAPERAPI_WANT_MIDI_SetNote) || !defined(REAPERAPI_MINIMAL)
   8759         {(void**)&MIDI_SetNote,"MIDI_SetNote"},
   8760       #endif
   8761       #if defined(REAPERAPI_WANT_MIDI_SetTextSysexEvt) || !defined(REAPERAPI_MINIMAL)
   8762         {(void**)&MIDI_SetTextSysexEvt,"MIDI_SetTextSysexEvt"},
   8763       #endif
   8764       #if defined(REAPERAPI_WANT_MIDI_Sort) || !defined(REAPERAPI_MINIMAL)
   8765         {(void**)&MIDI_Sort,"MIDI_Sort"},
   8766       #endif
   8767       #if defined(REAPERAPI_WANT_MIDIEditor_EnumTakes) || !defined(REAPERAPI_MINIMAL)
   8768         {(void**)&MIDIEditor_EnumTakes,"MIDIEditor_EnumTakes"},
   8769       #endif
   8770       #if defined(REAPERAPI_WANT_MIDIEditor_GetActive) || !defined(REAPERAPI_MINIMAL)
   8771         {(void**)&MIDIEditor_GetActive,"MIDIEditor_GetActive"},
   8772       #endif
   8773       #if defined(REAPERAPI_WANT_MIDIEditor_GetMode) || !defined(REAPERAPI_MINIMAL)
   8774         {(void**)&MIDIEditor_GetMode,"MIDIEditor_GetMode"},
   8775       #endif
   8776       #if defined(REAPERAPI_WANT_MIDIEditor_GetSetting_int) || !defined(REAPERAPI_MINIMAL)
   8777         {(void**)&MIDIEditor_GetSetting_int,"MIDIEditor_GetSetting_int"},
   8778       #endif
   8779       #if defined(REAPERAPI_WANT_MIDIEditor_GetSetting_str) || !defined(REAPERAPI_MINIMAL)
   8780         {(void**)&MIDIEditor_GetSetting_str,"MIDIEditor_GetSetting_str"},
   8781       #endif
   8782       #if defined(REAPERAPI_WANT_MIDIEditor_GetTake) || !defined(REAPERAPI_MINIMAL)
   8783         {(void**)&MIDIEditor_GetTake,"MIDIEditor_GetTake"},
   8784       #endif
   8785       #if defined(REAPERAPI_WANT_MIDIEditor_LastFocused_OnCommand) || !defined(REAPERAPI_MINIMAL)
   8786         {(void**)&MIDIEditor_LastFocused_OnCommand,"MIDIEditor_LastFocused_OnCommand"},
   8787       #endif
   8788       #if defined(REAPERAPI_WANT_MIDIEditor_OnCommand) || !defined(REAPERAPI_MINIMAL)
   8789         {(void**)&MIDIEditor_OnCommand,"MIDIEditor_OnCommand"},
   8790       #endif
   8791       #if defined(REAPERAPI_WANT_MIDIEditor_SetSetting_int) || !defined(REAPERAPI_MINIMAL)
   8792         {(void**)&MIDIEditor_SetSetting_int,"MIDIEditor_SetSetting_int"},
   8793       #endif
   8794       #if defined(REAPERAPI_WANT_mkpanstr) || !defined(REAPERAPI_MINIMAL)
   8795         {(void**)&mkpanstr,"mkpanstr"},
   8796       #endif
   8797       #if defined(REAPERAPI_WANT_mkvolpanstr) || !defined(REAPERAPI_MINIMAL)
   8798         {(void**)&mkvolpanstr,"mkvolpanstr"},
   8799       #endif
   8800       #if defined(REAPERAPI_WANT_mkvolstr) || !defined(REAPERAPI_MINIMAL)
   8801         {(void**)&mkvolstr,"mkvolstr"},
   8802       #endif
   8803       #if defined(REAPERAPI_WANT_MoveEditCursor) || !defined(REAPERAPI_MINIMAL)
   8804         {(void**)&MoveEditCursor,"MoveEditCursor"},
   8805       #endif
   8806       #if defined(REAPERAPI_WANT_MoveMediaItemToTrack) || !defined(REAPERAPI_MINIMAL)
   8807         {(void**)&MoveMediaItemToTrack,"MoveMediaItemToTrack"},
   8808       #endif
   8809       #if defined(REAPERAPI_WANT_MuteAllTracks) || !defined(REAPERAPI_MINIMAL)
   8810         {(void**)&MuteAllTracks,"MuteAllTracks"},
   8811       #endif
   8812       #if defined(REAPERAPI_WANT_my_getViewport) || !defined(REAPERAPI_MINIMAL)
   8813         {(void**)&my_getViewport,"my_getViewport"},
   8814       #endif
   8815       #if defined(REAPERAPI_WANT_NamedCommandLookup) || !defined(REAPERAPI_MINIMAL)
   8816         {(void**)&NamedCommandLookup,"NamedCommandLookup"},
   8817       #endif
   8818       #if defined(REAPERAPI_WANT_OnPauseButton) || !defined(REAPERAPI_MINIMAL)
   8819         {(void**)&OnPauseButton,"OnPauseButton"},
   8820       #endif
   8821       #if defined(REAPERAPI_WANT_OnPauseButtonEx) || !defined(REAPERAPI_MINIMAL)
   8822         {(void**)&OnPauseButtonEx,"OnPauseButtonEx"},
   8823       #endif
   8824       #if defined(REAPERAPI_WANT_OnPlayButton) || !defined(REAPERAPI_MINIMAL)
   8825         {(void**)&OnPlayButton,"OnPlayButton"},
   8826       #endif
   8827       #if defined(REAPERAPI_WANT_OnPlayButtonEx) || !defined(REAPERAPI_MINIMAL)
   8828         {(void**)&OnPlayButtonEx,"OnPlayButtonEx"},
   8829       #endif
   8830       #if defined(REAPERAPI_WANT_OnStopButton) || !defined(REAPERAPI_MINIMAL)
   8831         {(void**)&OnStopButton,"OnStopButton"},
   8832       #endif
   8833       #if defined(REAPERAPI_WANT_OnStopButtonEx) || !defined(REAPERAPI_MINIMAL)
   8834         {(void**)&OnStopButtonEx,"OnStopButtonEx"},
   8835       #endif
   8836       #if defined(REAPERAPI_WANT_OpenColorThemeFile) || !defined(REAPERAPI_MINIMAL)
   8837         {(void**)&OpenColorThemeFile,"OpenColorThemeFile"},
   8838       #endif
   8839       #if defined(REAPERAPI_WANT_OpenMediaExplorer) || !defined(REAPERAPI_MINIMAL)
   8840         {(void**)&OpenMediaExplorer,"OpenMediaExplorer"},
   8841       #endif
   8842       #if defined(REAPERAPI_WANT_OscLocalMessageToHost) || !defined(REAPERAPI_MINIMAL)
   8843         {(void**)&OscLocalMessageToHost,"OscLocalMessageToHost"},
   8844       #endif
   8845       #if defined(REAPERAPI_WANT_parse_timestr) || !defined(REAPERAPI_MINIMAL)
   8846         {(void**)&parse_timestr,"parse_timestr"},
   8847       #endif
   8848       #if defined(REAPERAPI_WANT_parse_timestr_len) || !defined(REAPERAPI_MINIMAL)
   8849         {(void**)&parse_timestr_len,"parse_timestr_len"},
   8850       #endif
   8851       #if defined(REAPERAPI_WANT_parse_timestr_pos) || !defined(REAPERAPI_MINIMAL)
   8852         {(void**)&parse_timestr_pos,"parse_timestr_pos"},
   8853       #endif
   8854       #if defined(REAPERAPI_WANT_parsepanstr) || !defined(REAPERAPI_MINIMAL)
   8855         {(void**)&parsepanstr,"parsepanstr"},
   8856       #endif
   8857       #if defined(REAPERAPI_WANT_PCM_Sink_Create) || !defined(REAPERAPI_MINIMAL)
   8858         {(void**)&PCM_Sink_Create,"PCM_Sink_Create"},
   8859       #endif
   8860       #if defined(REAPERAPI_WANT_PCM_Sink_CreateEx) || !defined(REAPERAPI_MINIMAL)
   8861         {(void**)&PCM_Sink_CreateEx,"PCM_Sink_CreateEx"},
   8862       #endif
   8863       #if defined(REAPERAPI_WANT_PCM_Sink_CreateMIDIFile) || !defined(REAPERAPI_MINIMAL)
   8864         {(void**)&PCM_Sink_CreateMIDIFile,"PCM_Sink_CreateMIDIFile"},
   8865       #endif
   8866       #if defined(REAPERAPI_WANT_PCM_Sink_CreateMIDIFileEx) || !defined(REAPERAPI_MINIMAL)
   8867         {(void**)&PCM_Sink_CreateMIDIFileEx,"PCM_Sink_CreateMIDIFileEx"},
   8868       #endif
   8869       #if defined(REAPERAPI_WANT_PCM_Sink_Enum) || !defined(REAPERAPI_MINIMAL)
   8870         {(void**)&PCM_Sink_Enum,"PCM_Sink_Enum"},
   8871       #endif
   8872       #if defined(REAPERAPI_WANT_PCM_Sink_GetExtension) || !defined(REAPERAPI_MINIMAL)
   8873         {(void**)&PCM_Sink_GetExtension,"PCM_Sink_GetExtension"},
   8874       #endif
   8875       #if defined(REAPERAPI_WANT_PCM_Sink_ShowConfig) || !defined(REAPERAPI_MINIMAL)
   8876         {(void**)&PCM_Sink_ShowConfig,"PCM_Sink_ShowConfig"},
   8877       #endif
   8878       #if defined(REAPERAPI_WANT_PCM_Source_BuildPeaks) || !defined(REAPERAPI_MINIMAL)
   8879         {(void**)&PCM_Source_BuildPeaks,"PCM_Source_BuildPeaks"},
   8880       #endif
   8881       #if defined(REAPERAPI_WANT_PCM_Source_CreateFromFile) || !defined(REAPERAPI_MINIMAL)
   8882         {(void**)&PCM_Source_CreateFromFile,"PCM_Source_CreateFromFile"},
   8883       #endif
   8884       #if defined(REAPERAPI_WANT_PCM_Source_CreateFromFileEx) || !defined(REAPERAPI_MINIMAL)
   8885         {(void**)&PCM_Source_CreateFromFileEx,"PCM_Source_CreateFromFileEx"},
   8886       #endif
   8887       #if defined(REAPERAPI_WANT_PCM_Source_CreateFromSimple) || !defined(REAPERAPI_MINIMAL)
   8888         {(void**)&PCM_Source_CreateFromSimple,"PCM_Source_CreateFromSimple"},
   8889       #endif
   8890       #if defined(REAPERAPI_WANT_PCM_Source_CreateFromType) || !defined(REAPERAPI_MINIMAL)
   8891         {(void**)&PCM_Source_CreateFromType,"PCM_Source_CreateFromType"},
   8892       #endif
   8893       #if defined(REAPERAPI_WANT_PCM_Source_Destroy) || !defined(REAPERAPI_MINIMAL)
   8894         {(void**)&PCM_Source_Destroy,"PCM_Source_Destroy"},
   8895       #endif
   8896       #if defined(REAPERAPI_WANT_PCM_Source_GetPeaks) || !defined(REAPERAPI_MINIMAL)
   8897         {(void**)&PCM_Source_GetPeaks,"PCM_Source_GetPeaks"},
   8898       #endif
   8899       #if defined(REAPERAPI_WANT_PCM_Source_GetSectionInfo) || !defined(REAPERAPI_MINIMAL)
   8900         {(void**)&PCM_Source_GetSectionInfo,"PCM_Source_GetSectionInfo"},
   8901       #endif
   8902       #if defined(REAPERAPI_WANT_PeakBuild_Create) || !defined(REAPERAPI_MINIMAL)
   8903         {(void**)&PeakBuild_Create,"PeakBuild_Create"},
   8904       #endif
   8905       #if defined(REAPERAPI_WANT_PeakBuild_CreateEx) || !defined(REAPERAPI_MINIMAL)
   8906         {(void**)&PeakBuild_CreateEx,"PeakBuild_CreateEx"},
   8907       #endif
   8908       #if defined(REAPERAPI_WANT_PeakGet_Create) || !defined(REAPERAPI_MINIMAL)
   8909         {(void**)&PeakGet_Create,"PeakGet_Create"},
   8910       #endif
   8911       #if defined(REAPERAPI_WANT_PitchShiftSubModeMenu) || !defined(REAPERAPI_MINIMAL)
   8912         {(void**)&PitchShiftSubModeMenu,"PitchShiftSubModeMenu"},
   8913       #endif
   8914       #if defined(REAPERAPI_WANT_PlayPreview) || !defined(REAPERAPI_MINIMAL)
   8915         {(void**)&PlayPreview,"PlayPreview"},
   8916       #endif
   8917       #if defined(REAPERAPI_WANT_PlayPreviewEx) || !defined(REAPERAPI_MINIMAL)
   8918         {(void**)&PlayPreviewEx,"PlayPreviewEx"},
   8919       #endif
   8920       #if defined(REAPERAPI_WANT_PlayTrackPreview) || !defined(REAPERAPI_MINIMAL)
   8921         {(void**)&PlayTrackPreview,"PlayTrackPreview"},
   8922       #endif
   8923       #if defined(REAPERAPI_WANT_PlayTrackPreview2) || !defined(REAPERAPI_MINIMAL)
   8924         {(void**)&PlayTrackPreview2,"PlayTrackPreview2"},
   8925       #endif
   8926       #if defined(REAPERAPI_WANT_PlayTrackPreview2Ex) || !defined(REAPERAPI_MINIMAL)
   8927         {(void**)&PlayTrackPreview2Ex,"PlayTrackPreview2Ex"},
   8928       #endif
   8929       #if defined(REAPERAPI_WANT_plugin_getapi) || !defined(REAPERAPI_MINIMAL)
   8930         {(void**)&plugin_getapi,"plugin_getapi"},
   8931       #endif
   8932       #if defined(REAPERAPI_WANT_plugin_getFilterList) || !defined(REAPERAPI_MINIMAL)
   8933         {(void**)&plugin_getFilterList,"plugin_getFilterList"},
   8934       #endif
   8935       #if defined(REAPERAPI_WANT_plugin_getImportableProjectFilterList) || !defined(REAPERAPI_MINIMAL)
   8936         {(void**)&plugin_getImportableProjectFilterList,"plugin_getImportableProjectFilterList"},
   8937       #endif
   8938       #if defined(REAPERAPI_WANT_plugin_register) || !defined(REAPERAPI_MINIMAL)
   8939         {(void**)&plugin_register,"plugin_register"},
   8940       #endif
   8941       #if defined(REAPERAPI_WANT_PluginWantsAlwaysRunFx) || !defined(REAPERAPI_MINIMAL)
   8942         {(void**)&PluginWantsAlwaysRunFx,"PluginWantsAlwaysRunFx"},
   8943       #endif
   8944       #if defined(REAPERAPI_WANT_PreventUIRefresh) || !defined(REAPERAPI_MINIMAL)
   8945         {(void**)&PreventUIRefresh,"PreventUIRefresh"},
   8946       #endif
   8947       #if defined(REAPERAPI_WANT_projectconfig_var_addr) || !defined(REAPERAPI_MINIMAL)
   8948         {(void**)&projectconfig_var_addr,"projectconfig_var_addr"},
   8949       #endif
   8950       #if defined(REAPERAPI_WANT_projectconfig_var_getoffs) || !defined(REAPERAPI_MINIMAL)
   8951         {(void**)&projectconfig_var_getoffs,"projectconfig_var_getoffs"},
   8952       #endif
   8953       #if defined(REAPERAPI_WANT_PromptForAction) || !defined(REAPERAPI_MINIMAL)
   8954         {(void**)&PromptForAction,"PromptForAction"},
   8955       #endif
   8956       #if defined(REAPERAPI_WANT_realloc_cmd_clear) || !defined(REAPERAPI_MINIMAL)
   8957         {(void**)&realloc_cmd_clear,"realloc_cmd_clear"},
   8958       #endif
   8959       #if defined(REAPERAPI_WANT_realloc_cmd_ptr) || !defined(REAPERAPI_MINIMAL)
   8960         {(void**)&realloc_cmd_ptr,"realloc_cmd_ptr"},
   8961       #endif
   8962       #if defined(REAPERAPI_WANT_realloc_cmd_register_buf) || !defined(REAPERAPI_MINIMAL)
   8963         {(void**)&realloc_cmd_register_buf,"realloc_cmd_register_buf"},
   8964       #endif
   8965       #if defined(REAPERAPI_WANT_ReaperGetPitchShiftAPI) || !defined(REAPERAPI_MINIMAL)
   8966         {(void**)&ReaperGetPitchShiftAPI,"ReaperGetPitchShiftAPI"},
   8967       #endif
   8968       #if defined(REAPERAPI_WANT_ReaScriptError) || !defined(REAPERAPI_MINIMAL)
   8969         {(void**)&ReaScriptError,"ReaScriptError"},
   8970       #endif
   8971       #if defined(REAPERAPI_WANT_RecursiveCreateDirectory) || !defined(REAPERAPI_MINIMAL)
   8972         {(void**)&RecursiveCreateDirectory,"RecursiveCreateDirectory"},
   8973       #endif
   8974       #if defined(REAPERAPI_WANT_reduce_open_files) || !defined(REAPERAPI_MINIMAL)
   8975         {(void**)&reduce_open_files,"reduce_open_files"},
   8976       #endif
   8977       #if defined(REAPERAPI_WANT_RefreshToolbar) || !defined(REAPERAPI_MINIMAL)
   8978         {(void**)&RefreshToolbar,"RefreshToolbar"},
   8979       #endif
   8980       #if defined(REAPERAPI_WANT_RefreshToolbar2) || !defined(REAPERAPI_MINIMAL)
   8981         {(void**)&RefreshToolbar2,"RefreshToolbar2"},
   8982       #endif
   8983       #if defined(REAPERAPI_WANT_relative_fn) || !defined(REAPERAPI_MINIMAL)
   8984         {(void**)&relative_fn,"relative_fn"},
   8985       #endif
   8986       #if defined(REAPERAPI_WANT_RemoveTrackSend) || !defined(REAPERAPI_MINIMAL)
   8987         {(void**)&RemoveTrackSend,"RemoveTrackSend"},
   8988       #endif
   8989       #if defined(REAPERAPI_WANT_RenderFileSection) || !defined(REAPERAPI_MINIMAL)
   8990         {(void**)&RenderFileSection,"RenderFileSection"},
   8991       #endif
   8992       #if defined(REAPERAPI_WANT_ReorderSelectedTracks) || !defined(REAPERAPI_MINIMAL)
   8993         {(void**)&ReorderSelectedTracks,"ReorderSelectedTracks"},
   8994       #endif
   8995       #if defined(REAPERAPI_WANT_Resample_EnumModes) || !defined(REAPERAPI_MINIMAL)
   8996         {(void**)&Resample_EnumModes,"Resample_EnumModes"},
   8997       #endif
   8998       #if defined(REAPERAPI_WANT_Resampler_Create) || !defined(REAPERAPI_MINIMAL)
   8999         {(void**)&Resampler_Create,"Resampler_Create"},
   9000       #endif
   9001       #if defined(REAPERAPI_WANT_resolve_fn) || !defined(REAPERAPI_MINIMAL)
   9002         {(void**)&resolve_fn,"resolve_fn"},
   9003       #endif
   9004       #if defined(REAPERAPI_WANT_resolve_fn2) || !defined(REAPERAPI_MINIMAL)
   9005         {(void**)&resolve_fn2,"resolve_fn2"},
   9006       #endif
   9007       #if defined(REAPERAPI_WANT_ResolveRenderPattern) || !defined(REAPERAPI_MINIMAL)
   9008         {(void**)&ResolveRenderPattern,"ResolveRenderPattern"},
   9009       #endif
   9010       #if defined(REAPERAPI_WANT_ReverseNamedCommandLookup) || !defined(REAPERAPI_MINIMAL)
   9011         {(void**)&ReverseNamedCommandLookup,"ReverseNamedCommandLookup"},
   9012       #endif
   9013       #if defined(REAPERAPI_WANT_ScaleFromEnvelopeMode) || !defined(REAPERAPI_MINIMAL)
   9014         {(void**)&ScaleFromEnvelopeMode,"ScaleFromEnvelopeMode"},
   9015       #endif
   9016       #if defined(REAPERAPI_WANT_ScaleToEnvelopeMode) || !defined(REAPERAPI_MINIMAL)
   9017         {(void**)&ScaleToEnvelopeMode,"ScaleToEnvelopeMode"},
   9018       #endif
   9019       #if defined(REAPERAPI_WANT_screenset_register) || !defined(REAPERAPI_MINIMAL)
   9020         {(void**)&screenset_register,"screenset_register"},
   9021       #endif
   9022       #if defined(REAPERAPI_WANT_screenset_registerNew) || !defined(REAPERAPI_MINIMAL)
   9023         {(void**)&screenset_registerNew,"screenset_registerNew"},
   9024       #endif
   9025       #if defined(REAPERAPI_WANT_screenset_unregister) || !defined(REAPERAPI_MINIMAL)
   9026         {(void**)&screenset_unregister,"screenset_unregister"},
   9027       #endif
   9028       #if defined(REAPERAPI_WANT_screenset_unregisterByParam) || !defined(REAPERAPI_MINIMAL)
   9029         {(void**)&screenset_unregisterByParam,"screenset_unregisterByParam"},
   9030       #endif
   9031       #if defined(REAPERAPI_WANT_screenset_updateLastFocus) || !defined(REAPERAPI_MINIMAL)
   9032         {(void**)&screenset_updateLastFocus,"screenset_updateLastFocus"},
   9033       #endif
   9034       #if defined(REAPERAPI_WANT_SectionFromUniqueID) || !defined(REAPERAPI_MINIMAL)
   9035         {(void**)&SectionFromUniqueID,"SectionFromUniqueID"},
   9036       #endif
   9037       #if defined(REAPERAPI_WANT_SelectAllMediaItems) || !defined(REAPERAPI_MINIMAL)
   9038         {(void**)&SelectAllMediaItems,"SelectAllMediaItems"},
   9039       #endif
   9040       #if defined(REAPERAPI_WANT_SelectProjectInstance) || !defined(REAPERAPI_MINIMAL)
   9041         {(void**)&SelectProjectInstance,"SelectProjectInstance"},
   9042       #endif
   9043       #if defined(REAPERAPI_WANT_SendLocalOscMessage) || !defined(REAPERAPI_MINIMAL)
   9044         {(void**)&SendLocalOscMessage,"SendLocalOscMessage"},
   9045       #endif
   9046       #if defined(REAPERAPI_WANT_SetActiveTake) || !defined(REAPERAPI_MINIMAL)
   9047         {(void**)&SetActiveTake,"SetActiveTake"},
   9048       #endif
   9049       #if defined(REAPERAPI_WANT_SetAutomationMode) || !defined(REAPERAPI_MINIMAL)
   9050         {(void**)&SetAutomationMode,"SetAutomationMode"},
   9051       #endif
   9052       #if defined(REAPERAPI_WANT_SetCurrentBPM) || !defined(REAPERAPI_MINIMAL)
   9053         {(void**)&SetCurrentBPM,"SetCurrentBPM"},
   9054       #endif
   9055       #if defined(REAPERAPI_WANT_SetCursorContext) || !defined(REAPERAPI_MINIMAL)
   9056         {(void**)&SetCursorContext,"SetCursorContext"},
   9057       #endif
   9058       #if defined(REAPERAPI_WANT_SetEditCurPos) || !defined(REAPERAPI_MINIMAL)
   9059         {(void**)&SetEditCurPos,"SetEditCurPos"},
   9060       #endif
   9061       #if defined(REAPERAPI_WANT_SetEditCurPos2) || !defined(REAPERAPI_MINIMAL)
   9062         {(void**)&SetEditCurPos2,"SetEditCurPos2"},
   9063       #endif
   9064       #if defined(REAPERAPI_WANT_SetEnvelopePoint) || !defined(REAPERAPI_MINIMAL)
   9065         {(void**)&SetEnvelopePoint,"SetEnvelopePoint"},
   9066       #endif
   9067       #if defined(REAPERAPI_WANT_SetEnvelopePointEx) || !defined(REAPERAPI_MINIMAL)
   9068         {(void**)&SetEnvelopePointEx,"SetEnvelopePointEx"},
   9069       #endif
   9070       #if defined(REAPERAPI_WANT_SetEnvelopeStateChunk) || !defined(REAPERAPI_MINIMAL)
   9071         {(void**)&SetEnvelopeStateChunk,"SetEnvelopeStateChunk"},
   9072       #endif
   9073       #if defined(REAPERAPI_WANT_SetExtState) || !defined(REAPERAPI_MINIMAL)
   9074         {(void**)&SetExtState,"SetExtState"},
   9075       #endif
   9076       #if defined(REAPERAPI_WANT_SetGlobalAutomationOverride) || !defined(REAPERAPI_MINIMAL)
   9077         {(void**)&SetGlobalAutomationOverride,"SetGlobalAutomationOverride"},
   9078       #endif
   9079       #if defined(REAPERAPI_WANT_SetItemStateChunk) || !defined(REAPERAPI_MINIMAL)
   9080         {(void**)&SetItemStateChunk,"SetItemStateChunk"},
   9081       #endif
   9082       #if defined(REAPERAPI_WANT_SetMasterTrackVisibility) || !defined(REAPERAPI_MINIMAL)
   9083         {(void**)&SetMasterTrackVisibility,"SetMasterTrackVisibility"},
   9084       #endif
   9085       #if defined(REAPERAPI_WANT_SetMediaItemInfo_Value) || !defined(REAPERAPI_MINIMAL)
   9086         {(void**)&SetMediaItemInfo_Value,"SetMediaItemInfo_Value"},
   9087       #endif
   9088       #if defined(REAPERAPI_WANT_SetMediaItemLength) || !defined(REAPERAPI_MINIMAL)
   9089         {(void**)&SetMediaItemLength,"SetMediaItemLength"},
   9090       #endif
   9091       #if defined(REAPERAPI_WANT_SetMediaItemPosition) || !defined(REAPERAPI_MINIMAL)
   9092         {(void**)&SetMediaItemPosition,"SetMediaItemPosition"},
   9093       #endif
   9094       #if defined(REAPERAPI_WANT_SetMediaItemSelected) || !defined(REAPERAPI_MINIMAL)
   9095         {(void**)&SetMediaItemSelected,"SetMediaItemSelected"},
   9096       #endif
   9097       #if defined(REAPERAPI_WANT_SetMediaItemTake_Source) || !defined(REAPERAPI_MINIMAL)
   9098         {(void**)&SetMediaItemTake_Source,"SetMediaItemTake_Source"},
   9099       #endif
   9100       #if defined(REAPERAPI_WANT_SetMediaItemTakeInfo_Value) || !defined(REAPERAPI_MINIMAL)
   9101         {(void**)&SetMediaItemTakeInfo_Value,"SetMediaItemTakeInfo_Value"},
   9102       #endif
   9103       #if defined(REAPERAPI_WANT_SetMediaTrackInfo_Value) || !defined(REAPERAPI_MINIMAL)
   9104         {(void**)&SetMediaTrackInfo_Value,"SetMediaTrackInfo_Value"},
   9105       #endif
   9106       #if defined(REAPERAPI_WANT_SetMIDIEditorGrid) || !defined(REAPERAPI_MINIMAL)
   9107         {(void**)&SetMIDIEditorGrid,"SetMIDIEditorGrid"},
   9108       #endif
   9109       #if defined(REAPERAPI_WANT_SetMixerScroll) || !defined(REAPERAPI_MINIMAL)
   9110         {(void**)&SetMixerScroll,"SetMixerScroll"},
   9111       #endif
   9112       #if defined(REAPERAPI_WANT_SetMouseModifier) || !defined(REAPERAPI_MINIMAL)
   9113         {(void**)&SetMouseModifier,"SetMouseModifier"},
   9114       #endif
   9115       #if defined(REAPERAPI_WANT_SetOnlyTrackSelected) || !defined(REAPERAPI_MINIMAL)
   9116         {(void**)&SetOnlyTrackSelected,"SetOnlyTrackSelected"},
   9117       #endif
   9118       #if defined(REAPERAPI_WANT_SetProjectGrid) || !defined(REAPERAPI_MINIMAL)
   9119         {(void**)&SetProjectGrid,"SetProjectGrid"},
   9120       #endif
   9121       #if defined(REAPERAPI_WANT_SetProjectMarker) || !defined(REAPERAPI_MINIMAL)
   9122         {(void**)&SetProjectMarker,"SetProjectMarker"},
   9123       #endif
   9124       #if defined(REAPERAPI_WANT_SetProjectMarker2) || !defined(REAPERAPI_MINIMAL)
   9125         {(void**)&SetProjectMarker2,"SetProjectMarker2"},
   9126       #endif
   9127       #if defined(REAPERAPI_WANT_SetProjectMarker3) || !defined(REAPERAPI_MINIMAL)
   9128         {(void**)&SetProjectMarker3,"SetProjectMarker3"},
   9129       #endif
   9130       #if defined(REAPERAPI_WANT_SetProjectMarker4) || !defined(REAPERAPI_MINIMAL)
   9131         {(void**)&SetProjectMarker4,"SetProjectMarker4"},
   9132       #endif
   9133       #if defined(REAPERAPI_WANT_SetProjectMarkerByIndex) || !defined(REAPERAPI_MINIMAL)
   9134         {(void**)&SetProjectMarkerByIndex,"SetProjectMarkerByIndex"},
   9135       #endif
   9136       #if defined(REAPERAPI_WANT_SetProjectMarkerByIndex2) || !defined(REAPERAPI_MINIMAL)
   9137         {(void**)&SetProjectMarkerByIndex2,"SetProjectMarkerByIndex2"},
   9138       #endif
   9139       #if defined(REAPERAPI_WANT_SetProjExtState) || !defined(REAPERAPI_MINIMAL)
   9140         {(void**)&SetProjExtState,"SetProjExtState"},
   9141       #endif
   9142       #if defined(REAPERAPI_WANT_SetRegionRenderMatrix) || !defined(REAPERAPI_MINIMAL)
   9143         {(void**)&SetRegionRenderMatrix,"SetRegionRenderMatrix"},
   9144       #endif
   9145       #if defined(REAPERAPI_WANT_SetRenderLastError) || !defined(REAPERAPI_MINIMAL)
   9146         {(void**)&SetRenderLastError,"SetRenderLastError"},
   9147       #endif
   9148       #if defined(REAPERAPI_WANT_SetTakeMarker) || !defined(REAPERAPI_MINIMAL)
   9149         {(void**)&SetTakeMarker,"SetTakeMarker"},
   9150       #endif
   9151       #if defined(REAPERAPI_WANT_SetTakeStretchMarker) || !defined(REAPERAPI_MINIMAL)
   9152         {(void**)&SetTakeStretchMarker,"SetTakeStretchMarker"},
   9153       #endif
   9154       #if defined(REAPERAPI_WANT_SetTakeStretchMarkerSlope) || !defined(REAPERAPI_MINIMAL)
   9155         {(void**)&SetTakeStretchMarkerSlope,"SetTakeStretchMarkerSlope"},
   9156       #endif
   9157       #if defined(REAPERAPI_WANT_SetTempoTimeSigMarker) || !defined(REAPERAPI_MINIMAL)
   9158         {(void**)&SetTempoTimeSigMarker,"SetTempoTimeSigMarker"},
   9159       #endif
   9160       #if defined(REAPERAPI_WANT_SetThemeColor) || !defined(REAPERAPI_MINIMAL)
   9161         {(void**)&SetThemeColor,"SetThemeColor"},
   9162       #endif
   9163       #if defined(REAPERAPI_WANT_SetToggleCommandState) || !defined(REAPERAPI_MINIMAL)
   9164         {(void**)&SetToggleCommandState,"SetToggleCommandState"},
   9165       #endif
   9166       #if defined(REAPERAPI_WANT_SetTrackAutomationMode) || !defined(REAPERAPI_MINIMAL)
   9167         {(void**)&SetTrackAutomationMode,"SetTrackAutomationMode"},
   9168       #endif
   9169       #if defined(REAPERAPI_WANT_SetTrackColor) || !defined(REAPERAPI_MINIMAL)
   9170         {(void**)&SetTrackColor,"SetTrackColor"},
   9171       #endif
   9172       #if defined(REAPERAPI_WANT_SetTrackMIDILyrics) || !defined(REAPERAPI_MINIMAL)
   9173         {(void**)&SetTrackMIDILyrics,"SetTrackMIDILyrics"},
   9174       #endif
   9175       #if defined(REAPERAPI_WANT_SetTrackMIDINoteName) || !defined(REAPERAPI_MINIMAL)
   9176         {(void**)&SetTrackMIDINoteName,"SetTrackMIDINoteName"},
   9177       #endif
   9178       #if defined(REAPERAPI_WANT_SetTrackMIDINoteNameEx) || !defined(REAPERAPI_MINIMAL)
   9179         {(void**)&SetTrackMIDINoteNameEx,"SetTrackMIDINoteNameEx"},
   9180       #endif
   9181       #if defined(REAPERAPI_WANT_SetTrackSelected) || !defined(REAPERAPI_MINIMAL)
   9182         {(void**)&SetTrackSelected,"SetTrackSelected"},
   9183       #endif
   9184       #if defined(REAPERAPI_WANT_SetTrackSendInfo_Value) || !defined(REAPERAPI_MINIMAL)
   9185         {(void**)&SetTrackSendInfo_Value,"SetTrackSendInfo_Value"},
   9186       #endif
   9187       #if defined(REAPERAPI_WANT_SetTrackSendUIPan) || !defined(REAPERAPI_MINIMAL)
   9188         {(void**)&SetTrackSendUIPan,"SetTrackSendUIPan"},
   9189       #endif
   9190       #if defined(REAPERAPI_WANT_SetTrackSendUIVol) || !defined(REAPERAPI_MINIMAL)
   9191         {(void**)&SetTrackSendUIVol,"SetTrackSendUIVol"},
   9192       #endif
   9193       #if defined(REAPERAPI_WANT_SetTrackStateChunk) || !defined(REAPERAPI_MINIMAL)
   9194         {(void**)&SetTrackStateChunk,"SetTrackStateChunk"},
   9195       #endif
   9196       #if defined(REAPERAPI_WANT_ShowActionList) || !defined(REAPERAPI_MINIMAL)
   9197         {(void**)&ShowActionList,"ShowActionList"},
   9198       #endif
   9199       #if defined(REAPERAPI_WANT_ShowConsoleMsg) || !defined(REAPERAPI_MINIMAL)
   9200         {(void**)&ShowConsoleMsg,"ShowConsoleMsg"},
   9201       #endif
   9202       #if defined(REAPERAPI_WANT_ShowMessageBox) || !defined(REAPERAPI_MINIMAL)
   9203         {(void**)&ShowMessageBox,"ShowMessageBox"},
   9204       #endif
   9205       #if defined(REAPERAPI_WANT_ShowPopupMenu) || !defined(REAPERAPI_MINIMAL)
   9206         {(void**)&ShowPopupMenu,"ShowPopupMenu"},
   9207       #endif
   9208       #if defined(REAPERAPI_WANT_SLIDER2DB) || !defined(REAPERAPI_MINIMAL)
   9209         {(void**)&SLIDER2DB,"SLIDER2DB"},
   9210       #endif
   9211       #if defined(REAPERAPI_WANT_SnapToGrid) || !defined(REAPERAPI_MINIMAL)
   9212         {(void**)&SnapToGrid,"SnapToGrid"},
   9213       #endif
   9214       #if defined(REAPERAPI_WANT_SoloAllTracks) || !defined(REAPERAPI_MINIMAL)
   9215         {(void**)&SoloAllTracks,"SoloAllTracks"},
   9216       #endif
   9217       #if defined(REAPERAPI_WANT_Splash_GetWnd) || !defined(REAPERAPI_MINIMAL)
   9218         {(void**)&Splash_GetWnd,"Splash_GetWnd"},
   9219       #endif
   9220       #if defined(REAPERAPI_WANT_SplitMediaItem) || !defined(REAPERAPI_MINIMAL)
   9221         {(void**)&SplitMediaItem,"SplitMediaItem"},
   9222       #endif
   9223       #if defined(REAPERAPI_WANT_StopPreview) || !defined(REAPERAPI_MINIMAL)
   9224         {(void**)&StopPreview,"StopPreview"},
   9225       #endif
   9226       #if defined(REAPERAPI_WANT_StopTrackPreview) || !defined(REAPERAPI_MINIMAL)
   9227         {(void**)&StopTrackPreview,"StopTrackPreview"},
   9228       #endif
   9229       #if defined(REAPERAPI_WANT_StopTrackPreview2) || !defined(REAPERAPI_MINIMAL)
   9230         {(void**)&StopTrackPreview2,"StopTrackPreview2"},
   9231       #endif
   9232       #if defined(REAPERAPI_WANT_stringToGuid) || !defined(REAPERAPI_MINIMAL)
   9233         {(void**)&stringToGuid,"stringToGuid"},
   9234       #endif
   9235       #if defined(REAPERAPI_WANT_StuffMIDIMessage) || !defined(REAPERAPI_MINIMAL)
   9236         {(void**)&StuffMIDIMessage,"StuffMIDIMessage"},
   9237       #endif
   9238       #if defined(REAPERAPI_WANT_TakeFX_AddByName) || !defined(REAPERAPI_MINIMAL)
   9239         {(void**)&TakeFX_AddByName,"TakeFX_AddByName"},
   9240       #endif
   9241       #if defined(REAPERAPI_WANT_TakeFX_CopyToTake) || !defined(REAPERAPI_MINIMAL)
   9242         {(void**)&TakeFX_CopyToTake,"TakeFX_CopyToTake"},
   9243       #endif
   9244       #if defined(REAPERAPI_WANT_TakeFX_CopyToTrack) || !defined(REAPERAPI_MINIMAL)
   9245         {(void**)&TakeFX_CopyToTrack,"TakeFX_CopyToTrack"},
   9246       #endif
   9247       #if defined(REAPERAPI_WANT_TakeFX_Delete) || !defined(REAPERAPI_MINIMAL)
   9248         {(void**)&TakeFX_Delete,"TakeFX_Delete"},
   9249       #endif
   9250       #if defined(REAPERAPI_WANT_TakeFX_EndParamEdit) || !defined(REAPERAPI_MINIMAL)
   9251         {(void**)&TakeFX_EndParamEdit,"TakeFX_EndParamEdit"},
   9252       #endif
   9253       #if defined(REAPERAPI_WANT_TakeFX_FormatParamValue) || !defined(REAPERAPI_MINIMAL)
   9254         {(void**)&TakeFX_FormatParamValue,"TakeFX_FormatParamValue"},
   9255       #endif
   9256       #if defined(REAPERAPI_WANT_TakeFX_FormatParamValueNormalized) || !defined(REAPERAPI_MINIMAL)
   9257         {(void**)&TakeFX_FormatParamValueNormalized,"TakeFX_FormatParamValueNormalized"},
   9258       #endif
   9259       #if defined(REAPERAPI_WANT_TakeFX_GetChainVisible) || !defined(REAPERAPI_MINIMAL)
   9260         {(void**)&TakeFX_GetChainVisible,"TakeFX_GetChainVisible"},
   9261       #endif
   9262       #if defined(REAPERAPI_WANT_TakeFX_GetCount) || !defined(REAPERAPI_MINIMAL)
   9263         {(void**)&TakeFX_GetCount,"TakeFX_GetCount"},
   9264       #endif
   9265       #if defined(REAPERAPI_WANT_TakeFX_GetEnabled) || !defined(REAPERAPI_MINIMAL)
   9266         {(void**)&TakeFX_GetEnabled,"TakeFX_GetEnabled"},
   9267       #endif
   9268       #if defined(REAPERAPI_WANT_TakeFX_GetEnvelope) || !defined(REAPERAPI_MINIMAL)
   9269         {(void**)&TakeFX_GetEnvelope,"TakeFX_GetEnvelope"},
   9270       #endif
   9271       #if defined(REAPERAPI_WANT_TakeFX_GetFloatingWindow) || !defined(REAPERAPI_MINIMAL)
   9272         {(void**)&TakeFX_GetFloatingWindow,"TakeFX_GetFloatingWindow"},
   9273       #endif
   9274       #if defined(REAPERAPI_WANT_TakeFX_GetFormattedParamValue) || !defined(REAPERAPI_MINIMAL)
   9275         {(void**)&TakeFX_GetFormattedParamValue,"TakeFX_GetFormattedParamValue"},
   9276       #endif
   9277       #if defined(REAPERAPI_WANT_TakeFX_GetFXGUID) || !defined(REAPERAPI_MINIMAL)
   9278         {(void**)&TakeFX_GetFXGUID,"TakeFX_GetFXGUID"},
   9279       #endif
   9280       #if defined(REAPERAPI_WANT_TakeFX_GetFXName) || !defined(REAPERAPI_MINIMAL)
   9281         {(void**)&TakeFX_GetFXName,"TakeFX_GetFXName"},
   9282       #endif
   9283       #if defined(REAPERAPI_WANT_TakeFX_GetIOSize) || !defined(REAPERAPI_MINIMAL)
   9284         {(void**)&TakeFX_GetIOSize,"TakeFX_GetIOSize"},
   9285       #endif
   9286       #if defined(REAPERAPI_WANT_TakeFX_GetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   9287         {(void**)&TakeFX_GetNamedConfigParm,"TakeFX_GetNamedConfigParm"},
   9288       #endif
   9289       #if defined(REAPERAPI_WANT_TakeFX_GetNumParams) || !defined(REAPERAPI_MINIMAL)
   9290         {(void**)&TakeFX_GetNumParams,"TakeFX_GetNumParams"},
   9291       #endif
   9292       #if defined(REAPERAPI_WANT_TakeFX_GetOffline) || !defined(REAPERAPI_MINIMAL)
   9293         {(void**)&TakeFX_GetOffline,"TakeFX_GetOffline"},
   9294       #endif
   9295       #if defined(REAPERAPI_WANT_TakeFX_GetOpen) || !defined(REAPERAPI_MINIMAL)
   9296         {(void**)&TakeFX_GetOpen,"TakeFX_GetOpen"},
   9297       #endif
   9298       #if defined(REAPERAPI_WANT_TakeFX_GetParam) || !defined(REAPERAPI_MINIMAL)
   9299         {(void**)&TakeFX_GetParam,"TakeFX_GetParam"},
   9300       #endif
   9301       #if defined(REAPERAPI_WANT_TakeFX_GetParameterStepSizes) || !defined(REAPERAPI_MINIMAL)
   9302         {(void**)&TakeFX_GetParameterStepSizes,"TakeFX_GetParameterStepSizes"},
   9303       #endif
   9304       #if defined(REAPERAPI_WANT_TakeFX_GetParamEx) || !defined(REAPERAPI_MINIMAL)
   9305         {(void**)&TakeFX_GetParamEx,"TakeFX_GetParamEx"},
   9306       #endif
   9307       #if defined(REAPERAPI_WANT_TakeFX_GetParamFromIdent) || !defined(REAPERAPI_MINIMAL)
   9308         {(void**)&TakeFX_GetParamFromIdent,"TakeFX_GetParamFromIdent"},
   9309       #endif
   9310       #if defined(REAPERAPI_WANT_TakeFX_GetParamIdent) || !defined(REAPERAPI_MINIMAL)
   9311         {(void**)&TakeFX_GetParamIdent,"TakeFX_GetParamIdent"},
   9312       #endif
   9313       #if defined(REAPERAPI_WANT_TakeFX_GetParamName) || !defined(REAPERAPI_MINIMAL)
   9314         {(void**)&TakeFX_GetParamName,"TakeFX_GetParamName"},
   9315       #endif
   9316       #if defined(REAPERAPI_WANT_TakeFX_GetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   9317         {(void**)&TakeFX_GetParamNormalized,"TakeFX_GetParamNormalized"},
   9318       #endif
   9319       #if defined(REAPERAPI_WANT_TakeFX_GetPinMappings) || !defined(REAPERAPI_MINIMAL)
   9320         {(void**)&TakeFX_GetPinMappings,"TakeFX_GetPinMappings"},
   9321       #endif
   9322       #if defined(REAPERAPI_WANT_TakeFX_GetPreset) || !defined(REAPERAPI_MINIMAL)
   9323         {(void**)&TakeFX_GetPreset,"TakeFX_GetPreset"},
   9324       #endif
   9325       #if defined(REAPERAPI_WANT_TakeFX_GetPresetIndex) || !defined(REAPERAPI_MINIMAL)
   9326         {(void**)&TakeFX_GetPresetIndex,"TakeFX_GetPresetIndex"},
   9327       #endif
   9328       #if defined(REAPERAPI_WANT_TakeFX_GetUserPresetFilename) || !defined(REAPERAPI_MINIMAL)
   9329         {(void**)&TakeFX_GetUserPresetFilename,"TakeFX_GetUserPresetFilename"},
   9330       #endif
   9331       #if defined(REAPERAPI_WANT_TakeFX_NavigatePresets) || !defined(REAPERAPI_MINIMAL)
   9332         {(void**)&TakeFX_NavigatePresets,"TakeFX_NavigatePresets"},
   9333       #endif
   9334       #if defined(REAPERAPI_WANT_TakeFX_SetEnabled) || !defined(REAPERAPI_MINIMAL)
   9335         {(void**)&TakeFX_SetEnabled,"TakeFX_SetEnabled"},
   9336       #endif
   9337       #if defined(REAPERAPI_WANT_TakeFX_SetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   9338         {(void**)&TakeFX_SetNamedConfigParm,"TakeFX_SetNamedConfigParm"},
   9339       #endif
   9340       #if defined(REAPERAPI_WANT_TakeFX_SetOffline) || !defined(REAPERAPI_MINIMAL)
   9341         {(void**)&TakeFX_SetOffline,"TakeFX_SetOffline"},
   9342       #endif
   9343       #if defined(REAPERAPI_WANT_TakeFX_SetOpen) || !defined(REAPERAPI_MINIMAL)
   9344         {(void**)&TakeFX_SetOpen,"TakeFX_SetOpen"},
   9345       #endif
   9346       #if defined(REAPERAPI_WANT_TakeFX_SetParam) || !defined(REAPERAPI_MINIMAL)
   9347         {(void**)&TakeFX_SetParam,"TakeFX_SetParam"},
   9348       #endif
   9349       #if defined(REAPERAPI_WANT_TakeFX_SetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   9350         {(void**)&TakeFX_SetParamNormalized,"TakeFX_SetParamNormalized"},
   9351       #endif
   9352       #if defined(REAPERAPI_WANT_TakeFX_SetPinMappings) || !defined(REAPERAPI_MINIMAL)
   9353         {(void**)&TakeFX_SetPinMappings,"TakeFX_SetPinMappings"},
   9354       #endif
   9355       #if defined(REAPERAPI_WANT_TakeFX_SetPreset) || !defined(REAPERAPI_MINIMAL)
   9356         {(void**)&TakeFX_SetPreset,"TakeFX_SetPreset"},
   9357       #endif
   9358       #if defined(REAPERAPI_WANT_TakeFX_SetPresetByIndex) || !defined(REAPERAPI_MINIMAL)
   9359         {(void**)&TakeFX_SetPresetByIndex,"TakeFX_SetPresetByIndex"},
   9360       #endif
   9361       #if defined(REAPERAPI_WANT_TakeFX_Show) || !defined(REAPERAPI_MINIMAL)
   9362         {(void**)&TakeFX_Show,"TakeFX_Show"},
   9363       #endif
   9364       #if defined(REAPERAPI_WANT_TakeIsMIDI) || !defined(REAPERAPI_MINIMAL)
   9365         {(void**)&TakeIsMIDI,"TakeIsMIDI"},
   9366       #endif
   9367       #if defined(REAPERAPI_WANT_ThemeLayout_GetLayout) || !defined(REAPERAPI_MINIMAL)
   9368         {(void**)&ThemeLayout_GetLayout,"ThemeLayout_GetLayout"},
   9369       #endif
   9370       #if defined(REAPERAPI_WANT_ThemeLayout_GetParameter) || !defined(REAPERAPI_MINIMAL)
   9371         {(void**)&ThemeLayout_GetParameter,"ThemeLayout_GetParameter"},
   9372       #endif
   9373       #if defined(REAPERAPI_WANT_ThemeLayout_RefreshAll) || !defined(REAPERAPI_MINIMAL)
   9374         {(void**)&ThemeLayout_RefreshAll,"ThemeLayout_RefreshAll"},
   9375       #endif
   9376       #if defined(REAPERAPI_WANT_ThemeLayout_SetLayout) || !defined(REAPERAPI_MINIMAL)
   9377         {(void**)&ThemeLayout_SetLayout,"ThemeLayout_SetLayout"},
   9378       #endif
   9379       #if defined(REAPERAPI_WANT_ThemeLayout_SetParameter) || !defined(REAPERAPI_MINIMAL)
   9380         {(void**)&ThemeLayout_SetParameter,"ThemeLayout_SetParameter"},
   9381       #endif
   9382       #if defined(REAPERAPI_WANT_time_precise) || !defined(REAPERAPI_MINIMAL)
   9383         {(void**)&time_precise,"time_precise"},
   9384       #endif
   9385       #if defined(REAPERAPI_WANT_TimeMap2_beatsToTime) || !defined(REAPERAPI_MINIMAL)
   9386         {(void**)&TimeMap2_beatsToTime,"TimeMap2_beatsToTime"},
   9387       #endif
   9388       #if defined(REAPERAPI_WANT_TimeMap2_GetDividedBpmAtTime) || !defined(REAPERAPI_MINIMAL)
   9389         {(void**)&TimeMap2_GetDividedBpmAtTime,"TimeMap2_GetDividedBpmAtTime"},
   9390       #endif
   9391       #if defined(REAPERAPI_WANT_TimeMap2_GetNextChangeTime) || !defined(REAPERAPI_MINIMAL)
   9392         {(void**)&TimeMap2_GetNextChangeTime,"TimeMap2_GetNextChangeTime"},
   9393       #endif
   9394       #if defined(REAPERAPI_WANT_TimeMap2_QNToTime) || !defined(REAPERAPI_MINIMAL)
   9395         {(void**)&TimeMap2_QNToTime,"TimeMap2_QNToTime"},
   9396       #endif
   9397       #if defined(REAPERAPI_WANT_TimeMap2_timeToBeats) || !defined(REAPERAPI_MINIMAL)
   9398         {(void**)&TimeMap2_timeToBeats,"TimeMap2_timeToBeats"},
   9399       #endif
   9400       #if defined(REAPERAPI_WANT_TimeMap2_timeToQN) || !defined(REAPERAPI_MINIMAL)
   9401         {(void**)&TimeMap2_timeToQN,"TimeMap2_timeToQN"},
   9402       #endif
   9403       #if defined(REAPERAPI_WANT_TimeMap_curFrameRate) || !defined(REAPERAPI_MINIMAL)
   9404         {(void**)&TimeMap_curFrameRate,"TimeMap_curFrameRate"},
   9405       #endif
   9406       #if defined(REAPERAPI_WANT_TimeMap_GetDividedBpmAtTime) || !defined(REAPERAPI_MINIMAL)
   9407         {(void**)&TimeMap_GetDividedBpmAtTime,"TimeMap_GetDividedBpmAtTime"},
   9408       #endif
   9409       #if defined(REAPERAPI_WANT_TimeMap_GetMeasureInfo) || !defined(REAPERAPI_MINIMAL)
   9410         {(void**)&TimeMap_GetMeasureInfo,"TimeMap_GetMeasureInfo"},
   9411       #endif
   9412       #if defined(REAPERAPI_WANT_TimeMap_GetMetronomePattern) || !defined(REAPERAPI_MINIMAL)
   9413         {(void**)&TimeMap_GetMetronomePattern,"TimeMap_GetMetronomePattern"},
   9414       #endif
   9415       #if defined(REAPERAPI_WANT_TimeMap_GetTimeSigAtTime) || !defined(REAPERAPI_MINIMAL)
   9416         {(void**)&TimeMap_GetTimeSigAtTime,"TimeMap_GetTimeSigAtTime"},
   9417       #endif
   9418       #if defined(REAPERAPI_WANT_TimeMap_QNToMeasures) || !defined(REAPERAPI_MINIMAL)
   9419         {(void**)&TimeMap_QNToMeasures,"TimeMap_QNToMeasures"},
   9420       #endif
   9421       #if defined(REAPERAPI_WANT_TimeMap_QNToTime) || !defined(REAPERAPI_MINIMAL)
   9422         {(void**)&TimeMap_QNToTime,"TimeMap_QNToTime"},
   9423       #endif
   9424       #if defined(REAPERAPI_WANT_TimeMap_QNToTime_abs) || !defined(REAPERAPI_MINIMAL)
   9425         {(void**)&TimeMap_QNToTime_abs,"TimeMap_QNToTime_abs"},
   9426       #endif
   9427       #if defined(REAPERAPI_WANT_TimeMap_timeToQN) || !defined(REAPERAPI_MINIMAL)
   9428         {(void**)&TimeMap_timeToQN,"TimeMap_timeToQN"},
   9429       #endif
   9430       #if defined(REAPERAPI_WANT_TimeMap_timeToQN_abs) || !defined(REAPERAPI_MINIMAL)
   9431         {(void**)&TimeMap_timeToQN_abs,"TimeMap_timeToQN_abs"},
   9432       #endif
   9433       #if defined(REAPERAPI_WANT_ToggleTrackSendUIMute) || !defined(REAPERAPI_MINIMAL)
   9434         {(void**)&ToggleTrackSendUIMute,"ToggleTrackSendUIMute"},
   9435       #endif
   9436       #if defined(REAPERAPI_WANT_Track_GetPeakHoldDB) || !defined(REAPERAPI_MINIMAL)
   9437         {(void**)&Track_GetPeakHoldDB,"Track_GetPeakHoldDB"},
   9438       #endif
   9439       #if defined(REAPERAPI_WANT_Track_GetPeakInfo) || !defined(REAPERAPI_MINIMAL)
   9440         {(void**)&Track_GetPeakInfo,"Track_GetPeakInfo"},
   9441       #endif
   9442       #if defined(REAPERAPI_WANT_TrackCtl_SetToolTip) || !defined(REAPERAPI_MINIMAL)
   9443         {(void**)&TrackCtl_SetToolTip,"TrackCtl_SetToolTip"},
   9444       #endif
   9445       #if defined(REAPERAPI_WANT_TrackFX_AddByName) || !defined(REAPERAPI_MINIMAL)
   9446         {(void**)&TrackFX_AddByName,"TrackFX_AddByName"},
   9447       #endif
   9448       #if defined(REAPERAPI_WANT_TrackFX_CopyToTake) || !defined(REAPERAPI_MINIMAL)
   9449         {(void**)&TrackFX_CopyToTake,"TrackFX_CopyToTake"},
   9450       #endif
   9451       #if defined(REAPERAPI_WANT_TrackFX_CopyToTrack) || !defined(REAPERAPI_MINIMAL)
   9452         {(void**)&TrackFX_CopyToTrack,"TrackFX_CopyToTrack"},
   9453       #endif
   9454       #if defined(REAPERAPI_WANT_TrackFX_Delete) || !defined(REAPERAPI_MINIMAL)
   9455         {(void**)&TrackFX_Delete,"TrackFX_Delete"},
   9456       #endif
   9457       #if defined(REAPERAPI_WANT_TrackFX_EndParamEdit) || !defined(REAPERAPI_MINIMAL)
   9458         {(void**)&TrackFX_EndParamEdit,"TrackFX_EndParamEdit"},
   9459       #endif
   9460       #if defined(REAPERAPI_WANT_TrackFX_FormatParamValue) || !defined(REAPERAPI_MINIMAL)
   9461         {(void**)&TrackFX_FormatParamValue,"TrackFX_FormatParamValue"},
   9462       #endif
   9463       #if defined(REAPERAPI_WANT_TrackFX_FormatParamValueNormalized) || !defined(REAPERAPI_MINIMAL)
   9464         {(void**)&TrackFX_FormatParamValueNormalized,"TrackFX_FormatParamValueNormalized"},
   9465       #endif
   9466       #if defined(REAPERAPI_WANT_TrackFX_GetByName) || !defined(REAPERAPI_MINIMAL)
   9467         {(void**)&TrackFX_GetByName,"TrackFX_GetByName"},
   9468       #endif
   9469       #if defined(REAPERAPI_WANT_TrackFX_GetChainVisible) || !defined(REAPERAPI_MINIMAL)
   9470         {(void**)&TrackFX_GetChainVisible,"TrackFX_GetChainVisible"},
   9471       #endif
   9472       #if defined(REAPERAPI_WANT_TrackFX_GetCount) || !defined(REAPERAPI_MINIMAL)
   9473         {(void**)&TrackFX_GetCount,"TrackFX_GetCount"},
   9474       #endif
   9475       #if defined(REAPERAPI_WANT_TrackFX_GetEnabled) || !defined(REAPERAPI_MINIMAL)
   9476         {(void**)&TrackFX_GetEnabled,"TrackFX_GetEnabled"},
   9477       #endif
   9478       #if defined(REAPERAPI_WANT_TrackFX_GetEQ) || !defined(REAPERAPI_MINIMAL)
   9479         {(void**)&TrackFX_GetEQ,"TrackFX_GetEQ"},
   9480       #endif
   9481       #if defined(REAPERAPI_WANT_TrackFX_GetEQBandEnabled) || !defined(REAPERAPI_MINIMAL)
   9482         {(void**)&TrackFX_GetEQBandEnabled,"TrackFX_GetEQBandEnabled"},
   9483       #endif
   9484       #if defined(REAPERAPI_WANT_TrackFX_GetEQParam) || !defined(REAPERAPI_MINIMAL)
   9485         {(void**)&TrackFX_GetEQParam,"TrackFX_GetEQParam"},
   9486       #endif
   9487       #if defined(REAPERAPI_WANT_TrackFX_GetFloatingWindow) || !defined(REAPERAPI_MINIMAL)
   9488         {(void**)&TrackFX_GetFloatingWindow,"TrackFX_GetFloatingWindow"},
   9489       #endif
   9490       #if defined(REAPERAPI_WANT_TrackFX_GetFormattedParamValue) || !defined(REAPERAPI_MINIMAL)
   9491         {(void**)&TrackFX_GetFormattedParamValue,"TrackFX_GetFormattedParamValue"},
   9492       #endif
   9493       #if defined(REAPERAPI_WANT_TrackFX_GetFXGUID) || !defined(REAPERAPI_MINIMAL)
   9494         {(void**)&TrackFX_GetFXGUID,"TrackFX_GetFXGUID"},
   9495       #endif
   9496       #if defined(REAPERAPI_WANT_TrackFX_GetFXName) || !defined(REAPERAPI_MINIMAL)
   9497         {(void**)&TrackFX_GetFXName,"TrackFX_GetFXName"},
   9498       #endif
   9499       #if defined(REAPERAPI_WANT_TrackFX_GetInstrument) || !defined(REAPERAPI_MINIMAL)
   9500         {(void**)&TrackFX_GetInstrument,"TrackFX_GetInstrument"},
   9501       #endif
   9502       #if defined(REAPERAPI_WANT_TrackFX_GetIOSize) || !defined(REAPERAPI_MINIMAL)
   9503         {(void**)&TrackFX_GetIOSize,"TrackFX_GetIOSize"},
   9504       #endif
   9505       #if defined(REAPERAPI_WANT_TrackFX_GetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   9506         {(void**)&TrackFX_GetNamedConfigParm,"TrackFX_GetNamedConfigParm"},
   9507       #endif
   9508       #if defined(REAPERAPI_WANT_TrackFX_GetNumParams) || !defined(REAPERAPI_MINIMAL)
   9509         {(void**)&TrackFX_GetNumParams,"TrackFX_GetNumParams"},
   9510       #endif
   9511       #if defined(REAPERAPI_WANT_TrackFX_GetOffline) || !defined(REAPERAPI_MINIMAL)
   9512         {(void**)&TrackFX_GetOffline,"TrackFX_GetOffline"},
   9513       #endif
   9514       #if defined(REAPERAPI_WANT_TrackFX_GetOpen) || !defined(REAPERAPI_MINIMAL)
   9515         {(void**)&TrackFX_GetOpen,"TrackFX_GetOpen"},
   9516       #endif
   9517       #if defined(REAPERAPI_WANT_TrackFX_GetParam) || !defined(REAPERAPI_MINIMAL)
   9518         {(void**)&TrackFX_GetParam,"TrackFX_GetParam"},
   9519       #endif
   9520       #if defined(REAPERAPI_WANT_TrackFX_GetParameterStepSizes) || !defined(REAPERAPI_MINIMAL)
   9521         {(void**)&TrackFX_GetParameterStepSizes,"TrackFX_GetParameterStepSizes"},
   9522       #endif
   9523       #if defined(REAPERAPI_WANT_TrackFX_GetParamEx) || !defined(REAPERAPI_MINIMAL)
   9524         {(void**)&TrackFX_GetParamEx,"TrackFX_GetParamEx"},
   9525       #endif
   9526       #if defined(REAPERAPI_WANT_TrackFX_GetParamFromIdent) || !defined(REAPERAPI_MINIMAL)
   9527         {(void**)&TrackFX_GetParamFromIdent,"TrackFX_GetParamFromIdent"},
   9528       #endif
   9529       #if defined(REAPERAPI_WANT_TrackFX_GetParamIdent) || !defined(REAPERAPI_MINIMAL)
   9530         {(void**)&TrackFX_GetParamIdent,"TrackFX_GetParamIdent"},
   9531       #endif
   9532       #if defined(REAPERAPI_WANT_TrackFX_GetParamName) || !defined(REAPERAPI_MINIMAL)
   9533         {(void**)&TrackFX_GetParamName,"TrackFX_GetParamName"},
   9534       #endif
   9535       #if defined(REAPERAPI_WANT_TrackFX_GetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   9536         {(void**)&TrackFX_GetParamNormalized,"TrackFX_GetParamNormalized"},
   9537       #endif
   9538       #if defined(REAPERAPI_WANT_TrackFX_GetPinMappings) || !defined(REAPERAPI_MINIMAL)
   9539         {(void**)&TrackFX_GetPinMappings,"TrackFX_GetPinMappings"},
   9540       #endif
   9541       #if defined(REAPERAPI_WANT_TrackFX_GetPreset) || !defined(REAPERAPI_MINIMAL)
   9542         {(void**)&TrackFX_GetPreset,"TrackFX_GetPreset"},
   9543       #endif
   9544       #if defined(REAPERAPI_WANT_TrackFX_GetPresetIndex) || !defined(REAPERAPI_MINIMAL)
   9545         {(void**)&TrackFX_GetPresetIndex,"TrackFX_GetPresetIndex"},
   9546       #endif
   9547       #if defined(REAPERAPI_WANT_TrackFX_GetRecChainVisible) || !defined(REAPERAPI_MINIMAL)
   9548         {(void**)&TrackFX_GetRecChainVisible,"TrackFX_GetRecChainVisible"},
   9549       #endif
   9550       #if defined(REAPERAPI_WANT_TrackFX_GetRecCount) || !defined(REAPERAPI_MINIMAL)
   9551         {(void**)&TrackFX_GetRecCount,"TrackFX_GetRecCount"},
   9552       #endif
   9553       #if defined(REAPERAPI_WANT_TrackFX_GetUserPresetFilename) || !defined(REAPERAPI_MINIMAL)
   9554         {(void**)&TrackFX_GetUserPresetFilename,"TrackFX_GetUserPresetFilename"},
   9555       #endif
   9556       #if defined(REAPERAPI_WANT_TrackFX_NavigatePresets) || !defined(REAPERAPI_MINIMAL)
   9557         {(void**)&TrackFX_NavigatePresets,"TrackFX_NavigatePresets"},
   9558       #endif
   9559       #if defined(REAPERAPI_WANT_TrackFX_SetEnabled) || !defined(REAPERAPI_MINIMAL)
   9560         {(void**)&TrackFX_SetEnabled,"TrackFX_SetEnabled"},
   9561       #endif
   9562       #if defined(REAPERAPI_WANT_TrackFX_SetEQBandEnabled) || !defined(REAPERAPI_MINIMAL)
   9563         {(void**)&TrackFX_SetEQBandEnabled,"TrackFX_SetEQBandEnabled"},
   9564       #endif
   9565       #if defined(REAPERAPI_WANT_TrackFX_SetEQParam) || !defined(REAPERAPI_MINIMAL)
   9566         {(void**)&TrackFX_SetEQParam,"TrackFX_SetEQParam"},
   9567       #endif
   9568       #if defined(REAPERAPI_WANT_TrackFX_SetNamedConfigParm) || !defined(REAPERAPI_MINIMAL)
   9569         {(void**)&TrackFX_SetNamedConfigParm,"TrackFX_SetNamedConfigParm"},
   9570       #endif
   9571       #if defined(REAPERAPI_WANT_TrackFX_SetOffline) || !defined(REAPERAPI_MINIMAL)
   9572         {(void**)&TrackFX_SetOffline,"TrackFX_SetOffline"},
   9573       #endif
   9574       #if defined(REAPERAPI_WANT_TrackFX_SetOpen) || !defined(REAPERAPI_MINIMAL)
   9575         {(void**)&TrackFX_SetOpen,"TrackFX_SetOpen"},
   9576       #endif
   9577       #if defined(REAPERAPI_WANT_TrackFX_SetParam) || !defined(REAPERAPI_MINIMAL)
   9578         {(void**)&TrackFX_SetParam,"TrackFX_SetParam"},
   9579       #endif
   9580       #if defined(REAPERAPI_WANT_TrackFX_SetParamNormalized) || !defined(REAPERAPI_MINIMAL)
   9581         {(void**)&TrackFX_SetParamNormalized,"TrackFX_SetParamNormalized"},
   9582       #endif
   9583       #if defined(REAPERAPI_WANT_TrackFX_SetPinMappings) || !defined(REAPERAPI_MINIMAL)
   9584         {(void**)&TrackFX_SetPinMappings,"TrackFX_SetPinMappings"},
   9585       #endif
   9586       #if defined(REAPERAPI_WANT_TrackFX_SetPreset) || !defined(REAPERAPI_MINIMAL)
   9587         {(void**)&TrackFX_SetPreset,"TrackFX_SetPreset"},
   9588       #endif
   9589       #if defined(REAPERAPI_WANT_TrackFX_SetPresetByIndex) || !defined(REAPERAPI_MINIMAL)
   9590         {(void**)&TrackFX_SetPresetByIndex,"TrackFX_SetPresetByIndex"},
   9591       #endif
   9592       #if defined(REAPERAPI_WANT_TrackFX_Show) || !defined(REAPERAPI_MINIMAL)
   9593         {(void**)&TrackFX_Show,"TrackFX_Show"},
   9594       #endif
   9595       #if defined(REAPERAPI_WANT_TrackList_AdjustWindows) || !defined(REAPERAPI_MINIMAL)
   9596         {(void**)&TrackList_AdjustWindows,"TrackList_AdjustWindows"},
   9597       #endif
   9598       #if defined(REAPERAPI_WANT_TrackList_UpdateAllExternalSurfaces) || !defined(REAPERAPI_MINIMAL)
   9599         {(void**)&TrackList_UpdateAllExternalSurfaces,"TrackList_UpdateAllExternalSurfaces"},
   9600       #endif
   9601       #if defined(REAPERAPI_WANT_Undo_BeginBlock) || !defined(REAPERAPI_MINIMAL)
   9602         {(void**)&Undo_BeginBlock,"Undo_BeginBlock"},
   9603       #endif
   9604       #if defined(REAPERAPI_WANT_Undo_BeginBlock2) || !defined(REAPERAPI_MINIMAL)
   9605         {(void**)&Undo_BeginBlock2,"Undo_BeginBlock2"},
   9606       #endif
   9607       #if defined(REAPERAPI_WANT_Undo_CanRedo2) || !defined(REAPERAPI_MINIMAL)
   9608         {(void**)&Undo_CanRedo2,"Undo_CanRedo2"},
   9609       #endif
   9610       #if defined(REAPERAPI_WANT_Undo_CanUndo2) || !defined(REAPERAPI_MINIMAL)
   9611         {(void**)&Undo_CanUndo2,"Undo_CanUndo2"},
   9612       #endif
   9613       #if defined(REAPERAPI_WANT_Undo_DoRedo2) || !defined(REAPERAPI_MINIMAL)
   9614         {(void**)&Undo_DoRedo2,"Undo_DoRedo2"},
   9615       #endif
   9616       #if defined(REAPERAPI_WANT_Undo_DoUndo2) || !defined(REAPERAPI_MINIMAL)
   9617         {(void**)&Undo_DoUndo2,"Undo_DoUndo2"},
   9618       #endif
   9619       #if defined(REAPERAPI_WANT_Undo_EndBlock) || !defined(REAPERAPI_MINIMAL)
   9620         {(void**)&Undo_EndBlock,"Undo_EndBlock"},
   9621       #endif
   9622       #if defined(REAPERAPI_WANT_Undo_EndBlock2) || !defined(REAPERAPI_MINIMAL)
   9623         {(void**)&Undo_EndBlock2,"Undo_EndBlock2"},
   9624       #endif
   9625       #if defined(REAPERAPI_WANT_Undo_OnStateChange) || !defined(REAPERAPI_MINIMAL)
   9626         {(void**)&Undo_OnStateChange,"Undo_OnStateChange"},
   9627       #endif
   9628       #if defined(REAPERAPI_WANT_Undo_OnStateChange2) || !defined(REAPERAPI_MINIMAL)
   9629         {(void**)&Undo_OnStateChange2,"Undo_OnStateChange2"},
   9630       #endif
   9631       #if defined(REAPERAPI_WANT_Undo_OnStateChange_Item) || !defined(REAPERAPI_MINIMAL)
   9632         {(void**)&Undo_OnStateChange_Item,"Undo_OnStateChange_Item"},
   9633       #endif
   9634       #if defined(REAPERAPI_WANT_Undo_OnStateChangeEx) || !defined(REAPERAPI_MINIMAL)
   9635         {(void**)&Undo_OnStateChangeEx,"Undo_OnStateChangeEx"},
   9636       #endif
   9637       #if defined(REAPERAPI_WANT_Undo_OnStateChangeEx2) || !defined(REAPERAPI_MINIMAL)
   9638         {(void**)&Undo_OnStateChangeEx2,"Undo_OnStateChangeEx2"},
   9639       #endif
   9640       #if defined(REAPERAPI_WANT_update_disk_counters) || !defined(REAPERAPI_MINIMAL)
   9641         {(void**)&update_disk_counters,"update_disk_counters"},
   9642       #endif
   9643       #if defined(REAPERAPI_WANT_UpdateArrange) || !defined(REAPERAPI_MINIMAL)
   9644         {(void**)&UpdateArrange,"UpdateArrange"},
   9645       #endif
   9646       #if defined(REAPERAPI_WANT_UpdateItemInProject) || !defined(REAPERAPI_MINIMAL)
   9647         {(void**)&UpdateItemInProject,"UpdateItemInProject"},
   9648       #endif
   9649       #if defined(REAPERAPI_WANT_UpdateTimeline) || !defined(REAPERAPI_MINIMAL)
   9650         {(void**)&UpdateTimeline,"UpdateTimeline"},
   9651       #endif
   9652       #if defined(REAPERAPI_WANT_ValidatePtr) || !defined(REAPERAPI_MINIMAL)
   9653         {(void**)&ValidatePtr,"ValidatePtr"},
   9654       #endif
   9655       #if defined(REAPERAPI_WANT_ValidatePtr2) || !defined(REAPERAPI_MINIMAL)
   9656         {(void**)&ValidatePtr2,"ValidatePtr2"},
   9657       #endif
   9658       #if defined(REAPERAPI_WANT_ViewPrefs) || !defined(REAPERAPI_MINIMAL)
   9659         {(void**)&ViewPrefs,"ViewPrefs"},
   9660       #endif
   9661       #if defined(REAPERAPI_WANT_WDL_VirtualWnd_ScaledBlitBG) || !defined(REAPERAPI_MINIMAL)
   9662         {(void**)&WDL_VirtualWnd_ScaledBlitBG,"WDL_VirtualWnd_ScaledBlitBG"},
   9663       #endif
   9664       {NULL, NULL}
   9665     };
   9666     int i,failcnt=0;
   9667     for (i=0;table[i].dest; i++)
   9668       failcnt += !(*table[i].dest = getAPI(table[i].name));
   9669     return failcnt;
   9670   }
   9671 #else//REAPERAPI_IMPLEMENT
   9672   int REAPERAPI_LoadAPI(void *(*getAPI)(const char *));
   9673 #endif 
   9674 #endif // _REAPER_PLUGIN_FUNCTIONS_H_
   9675