RPR GetSetMediaItemTakeInfo
From CockosWiki
(Difference between revisions)
(→Example) |
|||
Line 27: | Line 27: | ||
void * | void * | ||
==Example== | ==Example== | ||
- | < | + | ===C++=== |
- | </ | + | <source lang=cpp highlight="28-29"> |
+ | void DoInsRndFileEx(bool RndLen,bool RndOffset,bool UseTimeSel) | ||
+ | { | ||
+ | if (g_filenames->GetSize()>0) | ||
+ | { | ||
+ | int filenameindex=rand() % g_filenames->GetSize(); | ||
+ | |||
+ | t_vect_of_Reaper_tracks TheTracks; | ||
+ | XenGetProjectTracks(TheTracks,true); | ||
+ | if (TheTracks.size()>0) | ||
+ | { | ||
+ | PCM_source *NewPCM=PCM_Source_CreateFromFile(g_filenames->Get(filenameindex)); | ||
+ | MediaItem *NewItem=AddMediaItemToTrack(TheTracks[0]); | ||
+ | MediaItem_Take *NewTake=AddTakeToMediaItem(NewItem); | ||
+ | double TimeSelStart=0.0; | ||
+ | double TimeSelEnd=NewPCM->GetLength(); | ||
+ | GetSet_LoopTimeRange(false,false,&TimeSelStart,&TimeSelEnd,false); | ||
+ | double ItemPos=TimeSelStart; | ||
+ | double ItemLen=NewPCM->GetLength(); | ||
+ | double MediaOffset=0.0; | ||
+ | if (RndOffset) | ||
+ | { | ||
+ | MediaOffset=(NewPCM->GetLength()/RAND_MAX)*rand(); | ||
+ | ItemLen-=MediaOffset; | ||
+ | } | ||
+ | if (RndLen) ItemLen=((NewPCM->GetLength()-MediaOffset)/RAND_MAX)*rand(); | ||
+ | if (UseTimeSel) ItemLen=TimeSelEnd-TimeSelStart; | ||
+ | if (!UseTimeSel) ItemPos=GetCursorPosition(); | ||
+ | GetSetMediaItemTakeInfo(NewTake,"P_SOURCE",NewPCM); | ||
+ | GetSetMediaItemTakeInfo(NewTake,"D_STARTOFFS",&MediaOffset); | ||
+ | |||
+ | GetSetMediaItemInfo(NewItem,"D_POSITION",&ItemPos); | ||
+ | GetSetMediaItemInfo(NewItem,"D_LENGTH",&ItemLen); | ||
+ | Main_OnCommand(40047,0); // build any missing peaks | ||
+ | SetEditCurPos(ItemPos+ItemLen,false,false); | ||
+ | Undo_OnStateChangeEx("Insert random file (Extended)",4,-1); | ||
+ | |||
+ | UpdateTimeline(); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
==See Also== | ==See Also== | ||
---- | ---- | ||
{{API_Doc_Footer}} | {{API_Doc_Footer}} | ||
[[Category:API]] | [[Category:API]] |
Latest revision as of 19:56, 29 January 2010
Main Page > REAPER Documentation > ReaScript > ReaScript API, Functions > RPR GetSetMediaItemTakeInfo
Main Page > REAPER Documentation > REAPER API > REAPER API Functions > RPR GetSetMediaItemTakeInfo
Contents |
GetSetMediaItemTakeInfo()
void * GetSetMediaItemTakeInfo(MediaItem_Take *tk, const char *parmname, void *setNewValue)
get (or set) different take parameters
- "P_TRACK" : pointer to MediaTrack (read-only)
- "P_ITEM" : pointer to MediaItem (read-only)
- "P_NAME" : char * to take name
- "P_SOURCE" : PCM_source *. Note that if setting this, you should first retrieve the old source, set the new, THEN delete the old.
- "D_STARTOFFS" : double *, start offset in take of item
- "D_VOL" : double *, take volume
- "D_PAN" : double *, take pan
- "D_PANLAW" : double *, take pan law (-1.0=default, 0.5=-6dB, 1.0=+0dB, etc)
- "D_PLAYRATE" : double *, take play rate (1.0=normal, 2.0=doublespeed, etc)
- "D_PITCH" : double *, take pitch adjust (in semitones, 0.0=normal, +12 = one octave up, etc)
- "B_PPITCH", bool *, "preserve pitch when changing rate"
- "I_CHANMODE", int *, channel mode (0=normal, 1=revstereo, 2=downmix, 3=l, 4=r)
- "I_PITCHMODE", int *, pitch shifter mode, -1=proj default, otherwise high word=shifter low word = parameter
- "GUID" : GUID * : 16-byte GUID, can query or update
Parameters
MediaItem_Take *tk, const char *parmname, void *setNewValue
Returns
void *
Example
C++
void DoInsRndFileEx(bool RndLen,bool RndOffset,bool UseTimeSel) { if (g_filenames->GetSize()>0) { int filenameindex=rand() % g_filenames->GetSize(); t_vect_of_Reaper_tracks TheTracks; XenGetProjectTracks(TheTracks,true); if (TheTracks.size()>0) { PCM_source *NewPCM=PCM_Source_CreateFromFile(g_filenames->Get(filenameindex)); MediaItem *NewItem=AddMediaItemToTrack(TheTracks[0]); MediaItem_Take *NewTake=AddTakeToMediaItem(NewItem); double TimeSelStart=0.0; double TimeSelEnd=NewPCM->GetLength(); GetSet_LoopTimeRange(false,false,&TimeSelStart,&TimeSelEnd,false); double ItemPos=TimeSelStart; double ItemLen=NewPCM->GetLength(); double MediaOffset=0.0; if (RndOffset) { MediaOffset=(NewPCM->GetLength()/RAND_MAX)*rand(); ItemLen-=MediaOffset; } if (RndLen) ItemLen=((NewPCM->GetLength()-MediaOffset)/RAND_MAX)*rand(); if (UseTimeSel) ItemLen=TimeSelEnd-TimeSelStart; if (!UseTimeSel) ItemPos=GetCursorPosition(); GetSetMediaItemTakeInfo(NewTake,"P_SOURCE",NewPCM); GetSetMediaItemTakeInfo(NewTake,"D_STARTOFFS",&MediaOffset); GetSetMediaItemInfo(NewItem,"D_POSITION",&ItemPos); GetSetMediaItemInfo(NewItem,"D_LENGTH",&ItemLen); Main_OnCommand(40047,0); // build any missing peaks SetEditCurPos(ItemPos+ItemLen,false,false); Undo_OnStateChangeEx("Insert random file (Extended)",4,-1); UpdateTimeline(); } } }
See Also
Main Page > REAPER Documentation > ReaScript > ReaScript API, Functions > RPR GetSetMediaItemTakeInfo
Main Page > REAPER Documentation > REAPER API > REAPER API Functions > RPR GetSetMediaItemTakeInfo