Zrythm
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
track_lane.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2019-2023 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
10#ifndef __AUDIO_TRACK_LANE_H__
11#define __AUDIO_TRACK_LANE_H__
12
13#include "dsp/region.h"
14#include "utils/yaml.h"
15
16typedef struct _TrackLaneWidget TrackLaneWidget;
17typedef struct Tracklist Tracklist;
19typedef void MIDI_FILE;
20
27#define TRACK_LANE_MAGIC 3418552
28#define IS_TRACK_LANE(x) (((TrackLane *) x)->magic == TRACK_LANE_MAGIC)
29#define IS_TRACK_LANE_AND_NONNULL(x) (x && IS_TRACK_LANE (x))
30
31#define track_lane_is_auditioner(self) \
32 (self->track && track_is_auditioner (self->track))
33
34#define track_lane_is_in_active_project(self) \
35 (self->track && track_is_in_active_project (self->track))
36
44typedef struct TrackLane
45{
47 int pos;
48
50 char * name;
51
53 // TrackLaneWidget * widget;
54
56 int y;
57
59 double height;
60
62 int mute;
63
65 int solo;
66
69 int num_regions;
70 size_t regions_size;
71
78 uint8_t midi_ch;
79
80 /* FIXME this is bad design - this object should not care
81 * about widgets */
84 int num_buttons;
85
88
89 int magic;
90
91} TrackLane;
92
93void
94track_lane_init_loaded (TrackLane * self, Track * track);
95
105TrackLane *
106track_lane_new (Track * track, int pos);
107
112void
113track_lane_insert_region (TrackLane * self, Region * region, int idx);
114
118void
120
124void
126
130void
132
137void
139
146void
147track_lane_rename (TrackLane * self, const char * new_name, bool with_action);
148
152void
153track_lane_rename_with_action (TrackLane * self, const char * new_name);
154
163NONNULL void
165 TrackLane * self,
166 bool solo,
167 bool trigger_undo,
168 bool fire_events);
169
170NONNULL bool
171track_lane_get_soloed (const TrackLane * const self);
172
181NONNULL void
183 TrackLane * self,
184 bool mute,
185 bool trigger_undo,
186 bool fire_events);
187
188NONNULL bool
189track_lane_get_muted (const TrackLane * const self);
190
191const char *
192track_lane_get_name (TrackLane * self);
193
201void
202track_lane_update_positions (TrackLane * self, bool from_ticks, bool bpm_change);
203
208void
210
216TrackLane *
217track_lane_clone (const TrackLane * src, Track * track);
218
233NONNULL_ARGS (1, 2)
235 TrackLane * self,
236 MIDI_FILE * mf,
237 MidiEvents * events,
238 const Position * start,
239 const Position * end,
240 bool lanes_as_tracks,
241 bool use_track_or_lane_pos);
242
243NONNULL Tracklist *
244track_lane_get_tracklist (const TrackLane * self);
245
246NONNULL Track *
247track_lane_get_track (const TrackLane * self);
248
252NONNULL int
254
258TrackLane *
260
264NONNULL void
266
271#endif // __AUDIO_TRACK_LANE_H__
A region in the timeline.
NONNULL_ARGS(1) int undo_manager_undo(UndoManager *self
Undo last action.
NONNULL void track_lane_set_muted(TrackLane *self, bool mute, bool trigger_undo, bool fire_events)
Sets track lane muted, updates UI and optionally adds the action to the undo stack.
NONNULL void track_lane_free(TrackLane *lane)
Frees the TrackLane.
void track_lane_rename(TrackLane *self, const char *new_name, bool with_action)
Rename the lane.
NONNULL int track_lane_calculate_lane_idx(const TrackLane *self)
Calculates a unique index for this lane.
void track_lane_update_positions(TrackLane *self, bool from_ticks, bool bpm_change)
Updates the positions in each child recursively.
void track_lane_remove_region(TrackLane *self, Region *region)
Removes but does not free the region.
void track_lane_write_to_midi_file(TrackLane *self, MIDI_FILE *mf, MidiEvents *events, const Position *start, const Position *end, bool lanes_as_tracks, bool use_track_or_lane_pos)
Writes the lane to the given MIDI file.
TrackLane * track_lane_gen_snapshot(const TrackLane *self)
Generate a snapshot for playback.
void track_lane_update_track_name_hash(TrackLane *self)
Sets the new track name hash to all the lane's objects recursively.
void track_lane_rename_with_action(TrackLane *self, const char *new_name)
Wrapper over track_lane_rename().
TrackLane * track_lane_clone(const TrackLane *src, Track *track)
Clones the TrackLane.
void track_lane_clear(TrackLane *self)
Removes all objects recursively from the track lane.
void track_lane_insert_region(TrackLane *self, Region *region, int idx)
Inserts a Region to the given TrackLane at the given index.
NONNULL void track_lane_set_soloed(TrackLane *self, bool solo, bool trigger_undo, bool fire_events)
Sets track lane soloed, updates UI and optionally adds the action to the undo stack.
void track_lane_add_region(TrackLane *self, Region *region)
Adds a Region to the given TrackLane.
TrackLane * track_lane_new(Track *track, int pos)
Creates a new TrackLane at the given pos in the given Track.
void track_lane_unselect_all(TrackLane *self)
Unselects all arranger objects.
Custom button to be drawn inside drawing areas.
Container for passing midi events through ports.
Definition midi_event.h:62
A Position is made up of bars.beats.sixteenths.ticks.
Definition position.h:124
A region (clip) is an object on the timeline that contains either MidiNote's or AudioClip's.
Definition region.h:72
A TrackLane belongs to a Track (can have many TrackLanes in a Track) and contains Regions.
Definition track_lane.h:45
uint8_t midi_ch
MIDI channel, if MIDI lane, starting at 1.
Definition track_lane.h:78
double height
Position of handle.
Definition track_lane.h:59
int y
TrackLaneWidget for this lane.
Definition track_lane.h:56
int pos
Position in the Track.
Definition track_lane.h:47
int solo
Soloed or not.
Definition track_lane.h:65
Region ** regions
Regions in this track.
Definition track_lane.h:68
int mute
Muted or not.
Definition track_lane.h:62
char * name
Name of lane, e.g.
Definition track_lane.h:50
Track * track
Owner track.
Definition track_lane.h:87
CustomButtonWidget * buttons[8]
Buttons used by the track widget.
Definition track_lane.h:83
Track to be inserted into the Project's Tracklist.
Definition track.h:177
The Tracklist contains all the tracks in the Project.
Definition tracklist.h:61
YAML utils.