Source code for reapy.core.item.item

import reapy
from reapy import reascript_api as RPR
from reapy.core import ReapyObject


[docs]class Item(ReapyObject): _class_name = "Item" def __init__(self, id): self.id = id def __eq__(self, other): return isinstance(other, Item) and self.id == other.id @property def _args(self): return self.id, @property def active_take(self): """ Return the active take of the item. Returns ------- take : Take Active take of the item. """ take = reapy.Take(RPR.GetActiveTake(self.id)) return take
[docs] def add_take(self): """ Create and return a new take in item. Returns ------- take : Take New take in item. """ take_id = RPR.AddTakeToMediaItem(self.id) take = reapy.Take(take_id) return take
[docs] @reapy.inside_reaper() def delete(self): """Delete item.""" RPR.DeleteTrackMediaItem(self.track.id, self.id)
[docs] def get_info_value(self, param_name): value = RPR.GetMediaItemInfo_Value(self.id, param_name) return value
[docs] def get_take(self, index): """ Return index-th take of item. Parameters ---------- index : int Take index. Returns ------- take : Take index-th take of media item. """ take_id = RPR.GetItemTake(self.id, index) take = reapy.Take(take_id) return take
@reapy.inside_reaper() @property def has_valid_id(self): """ Whether ReaScript ID is still valid. For instance, if item has been deleted, ID will not be valid anymore. :type: bool """ try: project_id = self.project.id except OSError: return False pointer, name = self._get_pointer_and_name() return bool(RPR.ValidatePtr2(project_id, pointer, name)) @property def is_selected(self): """ Return whether item is selected. Returns ------- is_selected : bool Whether item is selected. """ is_selected = bool(RPR.IsMediaItemSelected(self.id)) return is_selected @property def length(self): """ Return item length in seconds. Returns ------- length : float Item length in seconds. """ param_name = "D_LENGTH" length = self.get_info_value(param_name) return length @length.setter def length(self, length): """ Set item length. Parameters ---------- length : float New item length in seconds. """ RPR.SetMediaItemLength(self.id, length, True) @property def n_takes(self): """ Return the number of takes of media item. Returns ------- n_takes : int Number of takes of media item. """ n_takes = RPR.GetMediaItemNumTakes(self.id) return n_takes @property def position(self): """ Return item position in seconds. Returns ------- position : float Item position in seconds. """ position = self.get_info_value("D_POSITION") return position @position.setter def position(self, position): """ Set media item position to `position`. Parameters ---------- position : float New item position in seconds. """ RPR.SetMediaItemPosition(self.id, position, False) @property def project(self): """ Item parent project. :type: reapy.Project """ return reapy.Project(RPR.GetItemProjectContext(self.id))
[docs] def set_info_value(self, param_name, value): return RPR.SetMediaItemInfo_Value(self.id, param_name, value)
[docs] def split(self, position): """ Split item and return left and right parts. Parameters ---------- position : float Split position in seconds. Returns ------- left, right : Item Left and right parts of the split. """ right_id = RPR.SplitMediaItem(self.id, position) left, right = self, Item(right_id) return left, right
@reapy.inside_reaper() @property def takes(self): """ Return list of all takes of media item. Returns ------- takes : list of Take List of all takes of media item. """ n_takes = RPR.GetMediaItemNumTakes(self.id) take_ids = [RPR.GetMediaItemTake(self.id, i) for i in range(n_takes)] takes = [reapy.Take(take_id) for take_id in take_ids] return takes @reapy.inside_reaper() @property def track(self): """ Parent track of item. Set it by passing a track, or a track index. :type: Track Examples -------- >>> track0, track1 = project.tracks[0:2] >>> item = track0.items[0] >>> item.track == track0 True >>> item.track = track1 # Move to track 1 >>> item.track = 0 # Move to track 0 """ track_id = RPR.GetMediaItemTrack(self.id) track = reapy.Track(track_id) return track @track.setter def track(self, track): if isinstance(track, int): track = reapy.Track(track, project=self.project) RPR.MoveMediaItemToTrack(self.id, track.id)
[docs] def update(self): """Update item in REAPER interface.""" RPR.UpdateItemInProject(self.id)