All notable changes to this project will be documented in this file.
reapy.map
for efficient mapping ofreapy
functions to large iterables of arguments.
- Native ReaScript functions
RPR_MIDI_GetAllEvts
,RPR_MIDI_GetTextSysexEvt
,RPR_MIDI_SetAllEvts
,RPR_MIDI_SetCC
,RPR_MIDI_SetEvt
,RPR_MIDI_SetNote
andRPR_MIDI_SetTextSysexEvt
used to raise errors because they tried to encode MIDI messages as UTF-8. Their counterparts inreapy.reascript_api
are patched and work as described in the official ReaScript documentation.
0.10.0 - 2020-12-29
get_user_inputs
to retrieve several inputs from user at once.
0.9.0 - 2020-11-10
set_info_value
methods forItem
andTake
.
reapy.reconnect()
not working after REAPER crashes on macOS (see issue #96).- Typo in
region.end
getter (see issue #101).
0.8.0 - 2020-08-28
Project.record()
method to start recording.reapy.configure_reaper()
to simplify installation process. See the installation guide in the docs for details.
0.7.2 - 2020-05-26
- Crash on import introduced in 0.7.1.
0.7.1 - 2020-05-26
- SWS functions were not available from outside REAPER on portable installs (see detailed issue on the REAPER forum).
0.7.0 - 2020-05-09
add_project_tab(make_current_project=True) -> Project:
Project
extended with:close() -> None
open(in_new_tab=False)
Track
extended with:set_info_value(param_name: str, param_value: float) -> None
index -> int
property
- Parameters
in_new_tab: bool
andmake_current_project: bool
inopen_project
. has_valid_id
property onProject
,Track
,Item
,Take
,Envelope
, andSource
. Example use case is checking whether an object has been deleted.Take.project
property (parent project of a take).errors.InvalidObjectError
that may be raised when trying to use an object that has invalid ID.
- Several
Track
properties (e.g.Track.name
orTrack.items
) only worked if their parent project was currently selected (see issues #62 and #80). Now they can be retrieved regardless of the current project. - ReaScript function
RPR_ValidatePtr2
is bugged and always returnsFalse
. However,reapy.reascript_api.ValidatePtr2
now works as intended. - Bug with take envelopes:
Take.envelopes[x]
always raised aKeyError
even for validx
. Envelope.parent
used to return anEnvelopeList
instead of the actualTrack
orTake
parent.
- Getting FX by name (e.g.
track.fxs[name]
) used to work with unprefixed FX name (e.g.'ReaComp (Cockos)'
instead of'VST: ReaComp (Cockos)'
). Now it is the opposite, which is consistent with the prefixed value returned byFX.name
.
0.6.0 - 2020-04-18
- New API in
Send
:- read-only property
Send.dest_track -> Track
- properties
Send.midi_source
,Send.midi_dest
- read-only property
Track.received
read-only property- Support for
Project
external state:Project.set_ext_state(section: str, key: str, value: Union[Any, str], pickled: bool) -> int size
Project.get_ext_state(section: str, key: str, pickled: bool) -> Union[Any, str
- First argument
id
ofProject
can now be a project name (with or without extension) or an integer (the GUI index of the project). Project
extended with methods:get_info_string(param_name: str) -> str
get_info_value(param_name: str) -> float
set_info_string(param_name: str, param_string: str)
set_info_value(param_name: str, param_value: float)
- REAPER control over the network.
reapy
can be installed on a machine even if it does not have REAPER installed, and then control other instances by usingreapy.connect
. - Several ReaScript API bugs of
reaper_python.py
are fixed inreapy.reascript_api
. Currently replaced:MIDI_GetHash
MIDI_GetTrackHash
MIDI_InsertEvt
MIDI_InsertTextSysexEvt
MIDI_SetEvt
MIDIEvent
andMIDIEventList
classes now not only abstract, but can be used directly.MIDIEvent
extended with:delete()
for deleting from the take. Works in every Event class.set(self, message=None, position=None, selected=None, muted=None, unit="seconds", sort=True)
, currently works only in generic event.
Take
extended with:add_event(self, message: ty.Iterable[int], position, unit: str = "seconds") -> None
.add_sysex(self, message: ty.Iterable[int], position: float, unit: str = "seconds", evt_type: int = -1) -> None
.midi_events
property (MIDIEventList
).midi_hash(self, notes_only: bool = False) -> str
.n_midi_events
property.
Track
extended withmidi_hash(self, notes_only: bool = False) -> str:
.
index
argument inreapy.Project
is deprecated in favor ofid
.reapy.Project(index=3)
becomesreapy.Project(3)
.
- Typo in
reapy.has_ext_state
(issue #46). - Deferred script error in REAPER when subclassing reapy classes (issue #66).
Project.selected_items
returning invalid items (issue #72).sort
boolean argument inTake.add_note
behaving oppositely to expected.
0.5.0 - 2019-11-23
reapy.reconnect
to retry connecting to REAPER from the outside.- Four play states properties on
Project
:
Project.play_state was buggy and has been removed.
- Fix error when terminating ReaScripts (issue #35)
Project.play_state
property. It was buggy and has been replaced by the four play states properties mentioned above.
0.4.3 - 2019-10-27
- Stubs to use
reapy
withmypy
.
- Endless loop when using
Project.tracks
(issue #40).
- Iterating over
Project.tracks
takes only one distant API call, instead of one per track.
0.4.2 - 2019-10-06
- Error when importing
reapy
from outside REAPER while the distant API is disabled. - Error when using
Project.make_current_project()
(issue #35).
0.4.1 - 2019-09-22
- Bug when enabling distant API.
0.4.0 - 2019-09-18
Project.make_current_project
can be used as a context manager to temporarily set a project as current project.- Decorator
inside_reaper
, that can be used with functions and properties. - Methods on
Take
:- Methods
Take.beat_to_ppq
,Take.ppq_to_beat
- Methods
- Context managers + decorators
prevent_ui_refresh
,reaprint
,undo_block
inside_reaper
can now be used as a function decorator, too- Methods and properties on
Track
:- Methods
Track.get_info_string
,Track.set_info_string
- Properties
Track.GUID
andTrack.icon
. - Property setter for
Track.name
.
- Methods
- Access to tracks by name (example:
project.tracks["PIANO"]
) - Access to tracks and FXs with slices (example:
project.tracks[3:6]
) - Ability to delete tracks and FXs with the
del
keyword (example:del project.tracks[2]
) - Track selection helpers at the project level:
- Methods [
Project.select_all_tracks
], [Project.unselect_all_tracks
] Project.selected_tracks
property can now be manually set to any iterable of tracks.
- Methods [
- Mute and solo helpers on
Track
:- Methods [
Track.solo
], [Track.mute
], [Track.unsolo
], [Track.unmute
], - Properties [
Track.is_solo
] and [Track.is_muted
]. Manually setting them is equivalent to calling the methods above.
- Methods [
- External code can work about 10% faster due to refactoring
tools.json
encoding and decoding. Project.add_track
supportsname
keyword argument and negative indices.
- Bug when using
with reapy.inside_reaper():
from inside REAPER - No more lost data when transferring too long lists over the local network (issue 12)
- Fix
Project.time_selection
setter (wouldn't set initial non-zero start values properly) - Fix
Take.add_note
when adding notes withunit='beats'
- Fix
BrokenPipeError
when an external app disconnects silently - Fix setting color in
Project.add_marker
andProject.add_region
methods
reapy.Program
is replaced byreapy.inside_reaper
.
0.3.0 - 2019-05-08
- SWS support (if the SWS extension is installed, then its functions are available in
reapy.reascript_api
from inside and outside REAPER)
- Bug when running
from reapy.reascript_api import *
from inside REAPER when extensions such as ReaPack are installed.
0.2.1 - 2019-04-30
- Issue #17 (typo in
Take.get_info_value
)
0.2.0 - 2019-03-23
audio.get_n_inputs
,audio.get_n_outputs
audio.get_input_latency
,audio.get_output_latency
audio.get_input_names
,audio.get_output_names
midi.get_max_inputs
,midi.get_max_outputs
midi.get_n_inputs
,midi.get_n_outputs
midi.get_input_names
,midi.get_output_names
Envelope.parent
Envelope.get_value
Envelope.get_derivatives
FXParam.add_envelope
FXParam.envelope
Take.envelopes
,Track.envelopes
FX.open_chain
,FX.close_chain
,FX.open_floating_window
,FX.close_floating_window
,FX.window
FX.n_inputs
,FX.n_outputs
FXParam.normalized
for getting and setting normalized param valuesFXParam.formatted
,FXParam.format_value
,NormalizedFXParam.format_value
Project.focused_fx
,Project.last_touched_fx
Take.visible_fx
,Track.visible_fx
- [
Track.fxs
] and [Take.fxs
] support negative indexing
Take.is_midi
Take.n_cc
,Take.n_notes
,Take.n_text_sysex
Take.add_note
Take.notes
Take.time_to_ppq
,Take.ppq_to_time
Take.select_all_midi_events
,Take.unselect_all_midi_events
- class
Note
- class
MIDIEditor
midi.reinit
browse_for_file
ui.get_color_theme
,ui.set_color_theme
ui.get_leftmost_track_in_mixer
,ui.set_leftmost_track_in_mixer
get_main_window
Window.refresh
- class
ToolTip
Track.get_envelope
(replaced byTrack.envelopes
)
- Bug when enabling
reapy
for MacOS (issue here) - Bug when enabling
reapy
when no Control/OSC/web has ever been enabled in REAPER (issue here)
0.1.0 - 2019-02-28
reapy.inside_reaper
context manager for efficient calls from outside REAPER and corresponding documentationreapy.defer
andreapy.at_exit
to replaceRPR_defer
andRPR_atexit
in a more stable way, and corresponding documentationTrack.add_fx
andTake.add_fx
- Documentation for uninstalling process