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_is_auditioner(self) \
28 (self->track && track_is_auditioner (self->track))
29
30#define track_lane_is_in_active_project(self) \
31 (self->track && track_is_in_active_project (self->track))
32
40typedef struct TrackLane
41{
43 int pos;
44
46 char * name;
47
49 // TrackLaneWidget * widget;
50
52 int y;
53
55 double height;
56
58 int mute;
59
61 int solo;
62
65 int num_regions;
66 size_t regions_size;
67
74 uint8_t midi_ch;
75
76 /* FIXME this is bad design - this object should not care
77 * about widgets */
80 int num_buttons;
81
84
85} TrackLane;
86
87void
88track_lane_init_loaded (TrackLane * self, Track * track);
89
100track_lane_new (Track * track, int pos);
101
106void
107track_lane_insert_region (TrackLane * self, ZRegion * region, int idx);
108
112void
114
118void
120
124void
126
131void
133
140void
141track_lane_rename (TrackLane * self, const char * new_name, bool with_action);
142
146void
147track_lane_rename_with_action (TrackLane * self, const char * new_name);
148
157NONNULL void
159 TrackLane * self,
160 bool solo,
161 bool trigger_undo,
162 bool fire_events);
163
164NONNULL bool
165track_lane_get_soloed (const TrackLane * const self);
166
175NONNULL void
177 TrackLane * self,
178 bool mute,
179 bool trigger_undo,
180 bool fire_events);
181
182NONNULL bool
183track_lane_get_muted (const TrackLane * const self);
184
185const char *
186track_lane_get_name (TrackLane * self);
187
195void
196track_lane_update_positions (TrackLane * self, bool from_ticks, bool bpm_change);
197
202void
204
210TrackLane *
211track_lane_clone (const TrackLane * src, Track * track);
212
227NONNULL_ARGS (1, 2)
229 TrackLane * self,
230 MIDI_FILE * mf,
231 MidiEvents * events,
232 const Position * start,
233 const Position * end,
234 bool lanes_as_tracks,
235 bool use_track_or_lane_pos);
236
237NONNULL Tracklist *
238track_lane_get_tracklist (const TrackLane * self);
239
240NONNULL Track *
241track_lane_get_track (const TrackLane * self);
242
246NONNULL int
248
252TrackLane *
254
258NONNULL void
260
265#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_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.
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.
TrackLane * track_lane_new(Track *track, int pos)
Creates a new TrackLane at the given pos in the given Track.
void track_lane_add_region(TrackLane *self, ZRegion *region)
Adds a ZRegion to the given TrackLane.
void track_lane_unselect_all(TrackLane *self)
Unselects all arranger objects.
void track_lane_insert_region(TrackLane *self, ZRegion *region, int idx)
Inserts a ZRegion to the given TrackLane at the given index.
void track_lane_remove_region(TrackLane *self, ZRegion *region)
Removes but does not free the region.
Custom button to be drawn inside drawing areas.
Container for passing midi events through ports.
Definition midi_event.h:68
A Position is made up of bars.beats.sixteenths.ticks.
Definition position.h:126
A TrackLane belongs to a Track (can have many TrackLanes in a Track) and contains Regions.
Definition track_lane.h:41
uint8_t midi_ch
MIDI channel, if MIDI lane, starting at 1.
Definition track_lane.h:74
double height
Position of handle.
Definition track_lane.h:55
int y
TrackLaneWidget for this lane.
Definition track_lane.h:52
int pos
Position in the Track.
Definition track_lane.h:43
int solo
Soloed or not.
Definition track_lane.h:61
int mute
Muted or not.
Definition track_lane.h:58
char * name
Name of lane, e.g.
Definition track_lane.h:46
Track * track
Owner track.
Definition track_lane.h:83
CustomButtonWidget * buttons[8]
Buttons used by the track widget.
Definition track_lane.h:79
ZRegion ** regions
Regions in this track.
Definition track_lane.h:64
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
A region (clip) is an object on the timeline that contains either MidiNote's or AudioClip's.
Definition region.h:72
YAML utils.