Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER Developer Forum

Reply
 
Thread Tools Display Modes
Old 04-03-2008, 07:34 PM   #1
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 10,335
Default The "how do I?" REAPER plug-in extension thread

If anybody wants to know how to do a particular task using the plug-in extension API, ask it here and we will either tell you, or interpret it as a request for that particular API!

-Justin
Justin is offline   Reply With Quote
Old 04-03-2008, 07:46 PM   #2
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

OK, this is gonna be really lame : but how do I access the Reaper project's items and their takes from the APIs?
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-03-2008, 08:09 PM   #3
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 10,335
Default

Quote:
Originally Posted by Xenakios View Post
OK, this is gonna be really lame : but how do I access the Reaper project's items and their takes from the APIs?
Look at "GetTrackMediaItem" in reaper_plugin.h.. there are a few other functions for accessing information about those items, and modifying them. This is supported in v2.149+.


-Justin

Last edited by Justin; 04-04-2008 at 12:27 PM.
Justin is offline   Reply With Quote
Old 04-04-2008, 05:16 AM   #4
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Well, I guess I now know how to :

__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-04-2008, 07:37 AM   #5
sws
Code Monkey
 
sws's Avatar
 
Join Date: Sep 2007
Location: Madison, WI
Posts: 850
Default

Howto:

1) Get/set track color?

2) Get/set HW/MIDI input of track?
sws is offline   Reply With Quote
Old 04-04-2008, 11:09 AM   #6
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 10,335
Default

Quote:
Originally Posted by sws View Post
Howto:

1) Get/set track color?

2) Get/set HW/MIDI input of track?

TODO: coming soon


-Justin
Justin is offline   Reply With Quote
Old 04-05-2008, 11:55 AM   #7
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Justin,

"How do I?" easily find a list of the available Int Command values (I think that's what they're called - i.e. 40172 = Previous Marker/Project Start).

Currently I'm editing, and re-editing, the Keyboard/Control facility in Preferences and then opening reaper-kb.ini to obtain the value.

Thanks!

Deric.

Edit: Also... Could you please explain 'KEY 9 84 0 0' vs. 'KEY 1 84 40001 0' is this (the former) just when there is a duplicate?
__________________
REAPER? Oh yes...

Last edited by Deric; 04-05-2008 at 12:10 PM. Reason: Added question.
Deric is offline   Reply With Quote
Old 04-05-2008, 12:19 PM   #8
404NotFound
Human being with feelings
 
404NotFound's Avatar
 
Join Date: Oct 2007
Location: Berlin, GER
Posts: 199
Default

Deric: Grab the latest preview build on LoL, go to Help -> Show action list... and double click on the Filter label.
404NotFound is offline   Reply With Quote
Old 04-05-2008, 12:22 PM   #9
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

404NotFound,

Great! Thanks a lot!

Edit: Cheers! That's great - and saves a LOT of time and messing about!
__________________
REAPER? Oh yes...

Last edited by Deric; 04-05-2008 at 12:27 PM.
Deric is offline   Reply With Quote
Old 04-05-2008, 12:29 PM   #10
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Is there a way to get that info out into a text file or similar???
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-05-2008, 12:48 PM   #11
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 10,335
Default

Quote:
Originally Posted by Deric View Post
Is there a way to get that info out into a text file or similar???
not really, but for now searching is easy enough..
Justin is offline   Reply With Quote
Old 04-05-2008, 12:54 PM   #12
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

OK thanks Justin.

Cheers!

(Think I'll write up a total-beginners guide to all the stuff I've done - when it's done... yeah, sure, yeah..)
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-05-2008, 04:06 PM   #13
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Sorry about this...

Why doesn't this work?:

else if (evt->midi_message[1] == 0x4C)
{
Main_OnCommand(40291, 0);
}

I was 'hoping' this would 'open FX chain for selected track' but the Compiler generates 'Identifier not found'.

I appreciate I must've taken this too literally - but can someone please explain how I should be implementing this? One example would be great (please!) as I should then be able to use that method for many of the other actions I want to implement.

I also used the above approach for 'GetSetMediaTrackInfo()' with the same result.
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-05-2008, 04:51 PM   #14
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

You need to "tell" the compiler/plugin that the Main_OnCommand function exists...Also to register with Reaper the ability to run commands. (By the way, this maybe deprecated/wrong info, maybe Justin will correct me if I am wrong...)

Actually, I was about to tell you how to do that, but it would probably only be valid for the project I have been working on my own. One which does not implement a new control surface. So I don't think the advice would work directly. You are probably about to meet the wonderful world of project file dependencies. Just spent quite a lot of time today myself figuring that out...

Well, anyway if this helps at all :

You should put this before all "payload" code :

Code:
void (*Main_OnCommand)(int command, int flag);

Then put this in the "plugin entrypoint function" after the return 0 :

Code:
*((void **)&Main_OnCommand) = rec->GetFunc("Main_OnCommand");
if (!Main_OnCommand) MessageBox(NULL,"mainOnCommand not found!","Error",MB_OK);
The entry function is found in the source code by finding this :

Code:
extern "C"
{

REAPER_PLUGIN_DLL_EXPORT int REAPER_PLUGIN_ENTRYPOINT(REAPER_PLUGIN_HINSTANCE hInstance, reaper_plugin_info_t *rec)
{
  g_hInst=hInstance;
  if (rec)
  {
    if (rec->caller_version != REAPER_PLUGIN_VERSION || !rec->GetFunc)
      return 0;
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/

Last edited by Xenakios; 04-05-2008 at 05:04 PM.
Xenakios is online now   Reply With Quote
Old 04-05-2008, 05:00 PM   #15
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Hi Xenakios,

Not sure how to tell anything anything TBH...

Anyway, I've been looking some more (whilst waiting for a response) and have noticed, for example :

SendMessage(g_hwnd,WM_COMMAND,IsKeyDown(VK_SHIFT)? ID_INSERT_MARKERRGN:ID_INSERT_MARKER,0)

The above instructs 'something' to Write a Marker. (It's from csurf_mcu.cpp)

[Edit2: The above is, I think, checking the state of the Shift key and then, depending on the value of Shift, either inserting a Mrker Region or Inserting a Marker. Handy.]

Then there is the following in csurf.h :

#define ID_INSERT_MARKERRGN 40174
#define ID_INSERT_MARKER 40157

Problem 'might' be csurf.h only has a few of the Command Message Defines.

If there was a complete set of them I would try the ID_etc in the SendMessage command line for them.

Of course I could be barking up, completely, the wrong tree...

If I knew how, and where, this stuff needed to be added (and exactly what needed to be added) I'd add it, but I don't know any of that let alone if this is correct thinking...

Edit: But for sure - please explain how to "tell" the compliler/plugin that Main_OnCommand exists - and I'll try it...
__________________
REAPER? Oh yes...

Last edited by Deric; 04-05-2008 at 05:14 PM. Reason: Asked for clarification. Edit2: Added guess on dual-function with Shift key
Deric is offline   Reply With Quote
Old 04-05-2008, 05:15 PM   #16
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Quote:
Originally Posted by Deric View Post

SendMessage(g_hwnd,WM_COMMAND,IsKeyDown(VK_SHIFT)? ID_INSERT_MARKERRGN:ID_INSERT_MARKER,0)
Try changing that to :

SendMessage(g_hwnd,WM_COMMAND,40291,0);

(40291 here being the command number for view fx chain for current track.)

SendMessage is basically another way to make Reaper to execute commands. (It's a Windows function that sends messages to the window here spesified by g_hwnd). g_hwnd sort of being the variable for Reaper etc here...I forgot about this method of executing commands, sorry, as I thought Main_OnCommand could be a bit cleaner etc...
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/

Last edited by Xenakios; 04-05-2008 at 05:20 PM.
Xenakios is online now   Reply With Quote
Old 04-05-2008, 05:23 PM   #17
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

That's great that Xenakios... I think you've got it.

I was just coming back to post that this works:

SendMessage(g_hwnd,WM_COMMAND,ID_MARKER_NEXT,0);

However, of course, we'd need every command to be included as opposed to just the command-code.

Anyway, the above does work so, assuming the codes pass in the same way, that should be the real deal!

Cheers Xenakios! I'll post back (into this post) shortly (say ten minutes) with an update on the success of using the codes instead of the ID_etc.

Cheers!

Edit: Yes, well done Xenakios, that works a treat! (including the command-number). Great stuff! I'll try out a few others now too. I can see how Justin's implemented momentary-toggle as far as Shift goes (see previous post), but what do you think is the best way to update, and check, the status of a latching-toggle? Do you know how I can implement a new variable for a latching-toggle?
__________________
REAPER? Oh yes...

Last edited by Deric; 04-05-2008 at 05:41 PM. Reason: Update and question.
Deric is offline   Reply With Quote
Old 04-05-2008, 08:09 PM   #18
drew
Mobile
 
drew's Avatar
 
Join Date: Jan 2006
Location: London & São Paulo. Hardcore commercial REAPERite
Posts: 1,630
Default

https://stash.reaper.fm/oldsb/34485/r...dentifiers.txt

Hope this helps!
__________________
Proudly using REAPER exclusively for professional music production at Qsonics.com and recording broadcast and narrative voiceovers at DrewWhite.com.
drew is offline   Reply With Quote
Old 04-06-2008, 12:02 AM   #19
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Oh Yeah! That's a GREAT help (anything that makes this easier/quicker/less-of-a-hunt)!

Cheers Drew!


Ps. Snow on the Thames this morning.

(no it's not a song, at least not yet anyway!)
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-06-2008, 12:52 AM   #20
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Anyone see how to set what key VK_SHIFT represents?

Or, perhaps, more usefully - anyone explain how to include new keys for IsKeyDown ?

Any help, pointers, files-to-look-at, links, whatever, appreciated!

Thanks!
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-06-2008, 02:29 AM   #21
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

I think IsKeyDown() is a Windows function to check for the computer's keys, not for the control surface...I might be wrong, let me finally check the Reaper control surface source codes more closely... There's a bunch of VK_(KEYNAMEHERE) constants defined in Windows but I don't think you are interested in that, right?

edit : Ok, a quick look at the csurf-source codes didn't make it entirely clear how all that works...IsKeyDown() seems to be a function defined in the Cockos source code, on the other hand the VK_THEKEY-codes strongly suggest it is Windows stuff...
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/

Last edited by Xenakios; 04-06-2008 at 02:41 AM.
Xenakios is online now   Reply With Quote
Old 04-06-2008, 02:39 AM   #22
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Morning!

Have a look at this (from csurf_mcu.cpp):

bool IsKeyDown(int key)
{
if (m_midiin && !m_is_mcuex)
{
if (key == VK_SHIFT) return !!(m_mackie_modifiers&1);
//if (key == VK_SHIFT) return !!(m_mackie_modifiers&1);
if (key == VK_CONTROL) return !!(m_mackie_modifiers&4);
if (key == VK_MENU) return !!(m_mackie_modifiers&8);
}

return false;
}

I'll add a few more bits in a minute but thought I'd post this for now to save you looking in, possibly, the wrong place.

Edit: And this from reaper_plugin.h :

virtual bool IsKeyDown(int key) { return false; }
// VK_CONTROL, VK_MENU, VK_SHIFT, etc, whatever makes sense for your surface
__________________
REAPER? Oh yes...

Last edited by Deric; 04-06-2008 at 02:52 AM. Reason: Added info.
Deric is offline   Reply With Quote
Old 04-06-2008, 02:54 AM   #23
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Yep, I looked at exactly that but can't make anything out of it. I don't know anything about the Mackie controller, so it's probably something quite spesific to that...

The m_mackie_modifiers variable seems to be manipulated in these parts of the code :

Code:
if (evt->midi_message[1] >= 0x46 && evt->midi_message[1] < 0x4A)
          {
            int mask=(1<<(evt->midi_message[1]-0x46));
            if (evt->midi_message[2] >= 0x40)
              m_mackie_modifiers|=mask;
            else
              m_mackie_modifiers&=~mask;
          }
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-06-2008, 03:14 AM   #24
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Thing is, I think this stuff is 'just' looking at MIDI messages that are being sent from the MCU TO the PC...

i.e. I think that they are 'just' MIDI messages.

I'm assuming (oh, oh) that therefore the code we are looking at is just using these (standard) MIDI messages and deciding what to do depending on what is received.

Problem is, whilst I can see what my surfaces are generating, I can't figure out how to modify the 'receive value' as far as Justin/Christophe's code goes.

i.e. I think they've seen what the MCU generates and made various commands as a result - but other control surfaces generate different codes for the same thing.

In this particular case I'm trying to understand how to give a different value to 'Shift' so that I can have two functions for each button.

Justin/Christophe have done it like this:

if (evt->midi_message[1] == 0x59)
{
SendMessage(g_hwnd,WM_COMMAND,IsKeyDown(VK_SHIFT)? ID_INSERT_MARKERRGN:ID_INSERT_MARKER,0);
}

This will insert a 'marker region' if the Shift key is down, or will insert a 'marker' if the Shift key is not down.

I want to assign a value to VK_SHIFT so that it will work with something that sends a different value than the MCU.

I also want to understand how the Zoom key works...

There is so much power and felxibilty that could be implemented... Next/Previous Transient, Next/Previous Item, Adjust Loop size, etc, etc...

A little (OK, tiny!) bit of knowledge is so frustrating! I can see what I want to do - but can't work out how to do it!

Edit: Do you understand how the m_mackie_modifiers code sample (you posted) works? (I don't BTW).
__________________
REAPER? Oh yes...

Last edited by Deric; 04-06-2008 at 03:16 AM. Reason: Added question.
Deric is offline   Reply With Quote
Old 04-06-2008, 03:20 AM   #25
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

The "problem" with the code from Cockos is that it is pretty condensed, making it difficult for "newbies" to understand (me included )...I can't help you much about this, you should try to sniff what MIDI-messages your control surface sends to the computer when you press the various buttons in different ways etc...Then make the MIDI-event handler code based on those.

Use a bunch of "stupid" code like this, forget about keymasks (like the m_mackie_modifiers) and stuff :

Code:
else if (evt->midi_message[1] == 0x4C)
{
  SendMessage(g_hwnd,WM_COMMAND,40291,0);
}
Whether that approach works or not, depends on how complex your control surface is and what you need it to control.
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/

Last edited by Xenakios; 04-06-2008 at 03:28 AM.
Xenakios is online now   Reply With Quote
Old 04-06-2008, 03:27 AM   #26
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Hi Xenakios,

Yes, I've already determined all the codes it sends and have added all the 'simple' ones - as in your example - for all of the keys.

What I wanted to do now though... was to increase the flexibility by making use of some of additional keys. These mean that two keys are pressed - so REAPER receives one value followed by another value.

I don't mind doing it the 'long way' and adding 'pairs' received MIDI input messages (instead of doing it more efficiently as Justin/Christophe have done) - but I'm not sure how to do this...

Edit: Agreed that the documentation within the code is sparse for for newbies! It makes it a lot more of a headache than I'd like!
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-06-2008, 03:47 AM   #27
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

In summary, "How do I?":

Define a key which has two states (Latching - On/Off. i.e. Zoom).
- By this I mean, a key that can be either 'up'(off) or 'down'(on) and it stays there until you press it again. I want to be able to use this to assign different functions to keys - depending on whether the key is up or down.


Define a key that has a 'temporary' state (Non-Latching i.e. Shift key).
- By this I mean, a key that is pressed immediately before a second key is pressed (and then both are released at once). Again I want this to assign a different funtion to the (second) key pressed.

If I knew how to do this I would able to finish this 01X surface .dll - and it'd work more usefully than it does with the DAW it was originally designed to work with!
__________________
REAPER? Oh yes...

Last edited by Deric; 04-06-2008 at 04:21 AM. Reason: Added clarification etc.
Deric is offline   Reply With Quote
Old 04-06-2008, 03:48 AM   #28
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Someone knowing better about all that will have to answer you. If your control surface sends MIDI messages sequentially, you need access to a larger buffer of received MIDI events than just a single message etc...I have no idea how that works, sorry...
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-06-2008, 04:24 AM   #29
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Justin/Christophe/any-other-devs,

Could any of you please help with this?

Quote:
Originally Posted by Deric View Post
..."How do I?"...
Xenakios, thanks for trying to help with this, it is appreciated, and you've already helped me lots already!

Cheers!
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-06-2008, 05:08 AM   #30
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,887
Default

What are you guys compiling those dll's with?

I've been considering taking some baby steps towards working with the API.

And for Justin...

Is it possible in the future to bring the API funtcions up to a higher level for us C-idiots? A win custom control perhaps?
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".

Last edited by Lawrence; 04-06-2008 at 05:16 AM.
Lawrence is offline   Reply With Quote
Old 04-06-2008, 10:56 AM   #31
Justin
Administrator
 
Justin's Avatar
 
Join Date: Jan 2005
Location: NYC
Posts: 10,335
Default

It may be possible to wrap many of these API functions into a reaper_api.dll that you could load, yes (though you'd need to be in the reaper process, so you'd still need to do a few things to get REAPER to load you on startup). I'll look at making something like this.

-Justin
Justin is offline   Reply With Quote
Old 04-07-2008, 07:10 AM   #32
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Quote:
Originally Posted by Lawrence View Post
What are you guys compiling those dll's with?...
Hi Lawrence,

You'll need these:

The SDK:

http://www.microsoft.com/downloads/d...displaylang=en

You'll probably need the x86 version of the above - look down the page.

C++ Express:

http://www.microsoft.com/express/vc/

Then have a look in some of the CSurf threads in this sub-forum to see how to set it up - Xenakios, and SWS, gave me all the help I needed to get C++ Express running correctly - it needs to have Included stuff and you need to change the Build to Release and not Debug.
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 04-07-2008, 07:35 AM   #33
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Quote:
Originally Posted by Deric View Post
Hi Lawrence,

You'll need these:
Lawrence has already officially resigned from trying to do things that way...
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-07-2008, 08:32 AM   #34
Lawrence
Human being with feelings
 
Join Date: Mar 2007
Posts: 20,887
Default

Quote:
Originally Posted by Xenakios View Post
Lawrence has already officially resigned from trying to do things that way...
Yeah, ... pretty much.

But I never say never. I just say ... "very highly unlikely".
__________________
"I, Bozo The Clown, do solemly swear to uphold the Consti.. consti... uh, how do you pronounce that again?".

Last edited by Lawrence; 04-07-2008 at 08:38 AM.
Lawrence is offline   Reply With Quote
Old 04-07-2008, 10:48 PM   #35
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

How do I get access to tracks' automation envelopes?
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Old 04-14-2008, 08:59 PM   #36
spacelabstudio
Human being with feelings
 
spacelabstudio's Avatar
 
Join Date: Apr 2008
Location: Durham, NC
Posts: 66
Default

How do I interrogate metronome state?

In my fantasy world there is a Reaper class with a singleton instance. Singleton instance is passed into plugin which can then drill down to find the state of pretty much anything. Reaper is controlled via method calls in this object graph.

Lacking this there would need to be a SetMetronomeState defined in the csurf api? Or is there actually a way to interrogate Reaper for arbitrary information without having to rely on Reaper to push out to the plugin?

Thanks,
Chris
spacelabstudio is offline   Reply With Quote
Old 05-10-2008, 09:20 AM   #37
sws
Code Monkey
 
sws's Avatar
 
Join Date: Sep 2007
Location: Madison, WI
Posts: 850
Default

Justin,

Could you add functions to add/change/delete markers (regions)?

Thanks!
sws is offline   Reply With Quote
Old 05-10-2008, 09:43 AM   #38
Deric
Human being with feelings
 
Join Date: Mar 2007
Posts: 794
Default

Hi SWS,

Not sure what you're after but we can currently do the following with SendMessage:

40157 Markers: Insert marker at current posiiton
40160 Markers: Go to marker 10
40161 Markers: Go to marker 1
40162 Markers: Go to marker 2
40163 Markers: Go to marker 3
40164 Markers: Go to marker 4
40165 Markers: Go to marker 5
40166 Markers: Go to marker 6
40167 Markers: Go to marker 7
40168 Markers: Go to marker 8
40169 Markers: Go to marker 9
40171 Markers: Insert and/or edit marker at current position
40172 Markers: Previous marker/project start
40173 Markers: Next marker/project end
40174 Markers: Insert region from time selection
40256 Markers: Insert time signature /tempo change marker at edit cursor
40338 Markers: Time signature measure from time selection
40420 Markers: Remove all markers from time selection
40589 Locking: set marker locking mode
40590 Locking: clear marker locking mode
40591 Locking: toggle marker locking mode
40592 Locking: set time signature marker locking mode
40593 Locking: clear time signature marker locking mode
40594 Locking: toggle time signature marker locking mode
40613 Markers: Delete marker near cursor
40614 Markers: Edit marker near cursor
40615 Markers: Delete region near cursor
40616 Markers: Edit region near cursor
40617 Markers: Delete time signature marker near cursor
40618 Markers: Edit time signature marker near cursor

Don't know if that helps you?

Deric.
__________________
REAPER? Oh yes...
Deric is offline   Reply With Quote
Old 05-10-2008, 09:50 AM   #39
sws
Code Monkey
 
sws's Avatar
 
Join Date: Sep 2007
Location: Madison, WI
Posts: 850
Default

Thanks, Deric. I should have been more specific I guess.

I'd like functions to arbitrarily manipulate markers. I can totally hack around it all by moving the edit cursor but it's be nice to just have a SetMarker(double time, char* name, int id); DeleteMarker(int id).

EDIT: not to mention that currently there's no way to name markers/regions from the API.

Last edited by sws; 05-10-2008 at 10:27 AM.
sws is offline   Reply With Quote
Old 05-10-2008, 10:18 AM   #40
Xenakios
Human being with feelings
 
Xenakios's Avatar
 
Join Date: Feb 2007
Location: Oulu, Finland
Posts: 6,610
Default

Quote:
Originally Posted by sws View Post
Thanks, Deric. I should have been more specific I guess.

I'd like functions to arbitrarily manipulate markers. I can totally hack around it all by moving the edit cursor but it's be nice to just have a SetMarker(double time, char* name, int id); DeleteMarker(int id).
Yeah, this would be nice to have...
__________________
For info on SWS Reaper extension plugin (including Xenakios' previous extension/actions) :
http://www.sws-extension.org/
https://github.com/Jeff0S/sws
--
Xenakios blog (about HourGlass and λ) :
http://xenakios.wordpress.com/
Xenakios is online now   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 11:13 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2017, vBulletin Solutions Inc.