RPR GetSetItemState

From CockosWiki

Revision as of 09:15, 17 December 2009 by Jeffos (Talk | contribs)
Jump to: navigation, search

Main Page > REAPER Documentation > ReaScript > ReaScript API, Functions > RPR GetSetItemState
Main Page > REAPER Documentation > REAPER API > REAPER API Functions > RPR GetSetItemState

Contents

GetSetItemState()

bool GetSetItemState(MediaItem* item, char* str, int maxlen)

This function gets or sets the state of a media item as an xml-ish rpp chunk.

When calling the function, if you set str="" it will return the current state of the item in the corresponding return array/list element. the returned state string is limited to maxlen characters, though there is an upper limit (currently 16K) on maxlen. supply str as an xml/rpp string to set the object state. returns true on success.

GetSetItemState() can be used to examine the state of the item - the item's properties; it returns a string in its return array.

Item State Chunk Definitions

Comments and blank lines in these State Chunks are for illustration only, you can't really have blank lines and comments in State Chunks

Parameters are defined once per Wiki page, rather than repeat a definition on perhaps each Item State Chunk example on this page. For the moment anyway.

Audio Item State Chunk

<ITEM                                                   // Item Section Start
    POSITION 0.00000000000000                           // item position in timeline, in seconds
    SNAPOFFS 0.00000000000000                           // snap offset, in seconds
    LENGTH 145.50000000000000                           // item length, in seconds
    LOOP 0                                              // Is this a loop source? 0=false, 1=true
    ALLTAKES 0                                          // play all takes at once? 0=false, 1=true
    SEL 1                                               // ??
    FADEIN 1 0.010000 0.000000                          // FadeIn Settings
                                                        //  field 1, int, ??
                                                        //  field 2, float, ??
                                                        //  field 3, float, ??
    FADEOUT 1 0.010000 0.000000                         // FadeOut Settings
                                                        //  field 1, int, ??
                                                        //  field 2, float, ??
                                                        //  field 3, float, ??
    MUTE 0                                              // 0=not muted, 1=muted
    IGUID {98E8ECDE-FF4D-4E06-87ED-43A5E7E6A61A}        // ignore, generated nicely by REAPER
    NAME "Some Name or Other - stem"                    // The Item's name
    VOLPAN 1.000000 0.000000 1.000000 -1.000000         // Volume and Pan Settings
                                                        //  field 1, float, ??
                                                        //  field 2, float, ??
                                                        //  field 3, float, ??
                                                        //  field 4, float, ??
    SOFFS 0.00000000000000                              // Item start offset
    PLAYRATE 1.00000000000000 1 0.00000000000000 -1     // Playrate settings
                                                        //  field 1, float, playrate
                                                        //  field 2, int, ??
                                                        //  field 3, float, ??
                                                        //  field 4, int, ??
    CHANMODE 1                                          // ??
    GUID {4EB7779B-D570-4CCF-8739-161D2D32C154}         // ignore, generated nicely by REAPER
    <SOURCE SECTION                                     // Source Section Start
        LENGTH 0.00000000000000                         // Source/Item/Take length
        MODE 3                                          // Mode ??
        STARTPOS 0.00000000000000                       // Take Start Position (in seconds)
        OVERLAP 0.01000000000000                        // Take Overlap (in seconds)
        <SOURCE WAVE                                    // Take Source Wave
            FILE "C:\Full\Path\To\AudioFile.wav"        //  filename
        >
    >                                                   // Source Section End
    TAKE SEL                                            // ??
    NAME "Some Name or Other - stem reversed"           // Take name
    TAKEVOLPAN 0.000000 1.000000 -1.000000              // Take Volume and Pan Settings
                                                        //  field 1, float, ??
                                                        //  field 2, float, ??
                                                        //  field 3, float, ??
                                                        //  field 4, float, ??
    SOFFS 0.00000000000000                              // Item start offset
    PLAYRATE 1.00000000000000 1 0.00000000000000 -1     // Playrate settings
                                                        //  field 1, float, playrate
                                                        //  field 2, int, ??
                                                        //  field 3, float, ??
                                                        //  field 4, int, ??
    CHANMODE 1                                          // ??
    GUID {4EB7779B-D570-4CCF-8739-161D2D32C154}         // ignore, generated nicely by REAPER
    <SOURCE WAVE                                        // Take Source Wave
        FILE "C:\Full\Path\To\AudioFile reversed.wav"   //  filename
    >                                                   // Source Section End
>                                                       // Item Section End

Midi Item State Chunk

<ITEM                                                   // Item Section Start
    POSITION 12.00000000000000                          // Duplicated definition, see above...
    SNAPOFFS 0.00000000000000
    LENGTH 8.81585503963759
    LOOP 1
    ALLTAKES 0
    SEL 1
    FADEIN 1 0.000000 0.000000
    FADEOUT 1 0.000000 0.000000
    MUTE 0
    IGUID {967EE770-4144-472A-89D6-B72BB910A916}
    NAME "lalala untitled MIDI item"
    VOLPAN 1.000000 0.000000 1.000000 -1.000000
    SOFFS 0.00000000000000 0.00000000000000
    PLAYRATE 1.00000000000000 1 0.00000000000000 -65536
    CHANMODE 0
    GUID {9C93A652-09A2-4A46-9E1B-EF83EB7CED29}
    <SOURCE MIDI                                        // Source Section Start
        HASDATA 1 960 QN                                // ??
        e 300 90 2b 60                                  // Standard MIDI Message
                                                        // field1, e|E s=selected, E=not selected
                                                        // field2, int, msg start offset
                                                        // field3, msg type and channel num, hexadecimal
                                                            // 80 = note off, channel 0
                                                            // 90 = note on, channel 0
                                                            // b0 = Control Change, channel 0
                                                        // field4, Data1, depends on the message type (eg. note number)
                                                        // field5, Data2, depends on the message type (eg. velocity)
        e 60 80 2b 00                                   // selected msg, offset 60, note off, note 2b, velocity 0
        <X 286306 0                                     // SysEx section start (SysEx midi message, variable length)
                                                        // field1, X sysex
                                                        // field2, ?
                                                        // field3, ?
          8AECAwQF9w==                                  // (Base64 encoded)
        >                                               // SysEx section end
        E 540 b0 7b 00                                  // unselected msg, offset 540, Control Change , all notes off (cc123)
        GUID {9DAB52C8-6257-4A4E-9E60-323514C0DB9B}
        IGNTEMPO 0 120.00000000 4 4                     // ??
        VELLANE 128 97 0                                // Velocity Lane Settings (for Internal MIDI Editor)
        BANKPROGRAMFILE "C:\Path\To\GM.reabank"         // ??
        CFGEDITVIEW 3787.833051 0.178906 0 48 0 0 0     // ??
        CFGEDIT 1 1 0 1 1 16 1 1 1 1 1 0.06250000 -4 -4 1404 1001 0 2 0 0 0.00000000 0 0
        EVTFILTER 0 -1 -1 -1 -1 0 1                     // Event filter ??
    >                                                   // Source Section End
>                                                       // Item Section End

MIDI Event -> field2 above... This is the number of ticks (it's ok, I'll tell you in a minute) since the last event or (if this is the first MIDI Event) the start of the Item.

Ticks then. A tick is a small slice of a beat, so the number of Ticks per second varies with the BPM (Beats Per Minute) of the music.

<wiki math markup> <math>1 beat = 2.6041666666666666666666666666667e-4 \times 240 \times 16</math> </wiki math markup>

1 beat = 2.6041666666666666666666666666667e-4 * 240 * 16

The MIDI format used in REAPER State Chunks and .rpp files is documented here State Chunk And RPP MIDI Format.

Parameters

MediaItem* item,   A pointer to a valid MediaItem, as returned by GetSelectedMediaItem()
char* str,         str="" to get the state returned in str, str as an xml/rpp string to set the object state.
int maxlen,        maximum number of characters that will be returned, limited to 16k

Returns

An Array/List
 bool,             true on success, false on failure
 MediaItem* item,  unchanged
 char* str,        the current state of the item, possibly after a Set operation
 int maxlen,       unchanged

Caveats

After using AddMediaItemToTrack() and then setting the contents of the new item with GetSetItemState() you might experience some "graphical glitches" - involving Items apparently disappearing after Zooming in or out, Waveforms (Peaks images) not always displaying.

These odd things resolve after saving the project, closing and then reloading it but that's not something you'll want to do in a script. The Item's display will also be corrected if you use another (Non-GetSet*State function) to update the Item, e.g You could use SetMediaItemInfo_Value() to set the position.

Examples

C++


Perl

#
# GetSetItemState.pl
#
# "Get" and "Set" example
#

use strict;
use warnings;

use constant CURR_PROJ => 0;

my ($bool, $it, $chunk, $maxlen);

my $length = -1;
my $result = "fail";

# Get the first selected item in the current project
$it = RPR_GetSelectedMediaItem(CURR_PROJ, 0);

# set-up for call to GetSetItemState
$chunk="";     # Get, not Set
$maxlen=2048;  # max num of chars to return

# Get the ItemState
($bool, $it, $chunk, $maxlen) = RPR_GetSetItemState($it, $chunk, $maxlen);
$result = "pass" if $bool;
RPR_ShowConsoleMsg("GetSetItemState reports $result\n$chunk\n");

RPR_ShowConsoleMsg("LENGTH = $length\n");
# Pick out the LENGTH property
$chunk =~ /LENGTH\s+(.*)\n/;
$length = $1;
# Display the current LENGTH property
RPR_ShowConsoleMsg("LENGTH = $length\n");

# Add one second to the LENGTH property
$length++;
$chunk =~ s/LENGTH.*\n/LENGTH $length\n/;

# Set the ItemState
$result = "fail";
($bool, $it, $chunk, $maxlen) = RPR_GetSetItemState($it, $chunk, $maxlen);
$result = "pass" if $bool;
RPR_ShowConsoleMsg("AFTER SET: GetSetItemState reports $result\n$chunk\n");

Python


See Also

get set state: GetSetEnvelopeState, GetSetItemState, GetSetTrackState

item: AddMediaItemToTrack, AddTakeToMediaItem, GetTrackMediaItem, GetTrackNumMediaItems, CountMediaItems, CountSelectedMediaItems, GetItemProjectContext, SetMediaItemInfo_Value, CountTrackMediaItems, SetMediaItemTakeInfo_Value, GetMediaItem, GetMediaItem_Track, GetMediaItemInfo_Value, GetMediaItemNumTakes, GetMediaItemTake, GetMediaItemTake_Item, GetMediaItemTake_Source, GetMediaItemTake_Track, GetMediaItemTakeInfo_Value, SplitMediaItem, MoveMediaItemToTrack, GetSelectedMediaItem, DeleteTrackMediaItem, GetSetItemState, GetSetMediaItemTakeInfo_String, Undo_OnStateChange_Item, UpdateItemInProject,

(Section automatically generated, edits may be overwritten.)

Stuff

Main Page > REAPER Documentation > ReaScript > ReaScript API, Functions > RPR GetSetItemState
Main Page > REAPER Documentation > REAPER API > REAPER API Functions > RPR GetSetItemState

Personal tools