BEAST - Free Software Audio Synthesizer and Tracker  0.9.2
bsetrack.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __BSE_TRACK_H__
3 #define __BSE_TRACK_H__
4 
5 #include <bse/bseitem.hh>
6 #include <bse/bsesnet.hh>
8 
9 G_BEGIN_DECLS
10 
11 /* --- BSE type macros --- */
12 #define BSE_TYPE_TRACK (BSE_TYPE_ID (BseTrack))
13 #define BSE_TRACK(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_TRACK, BseTrack))
14 #define BSE_TRACK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_TRACK, BseTrackClass))
15 #define BSE_IS_TRACK(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_TRACK))
16 #define BSE_IS_TRACK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_TRACK))
17 #define BSE_TRACK_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_TRACK, BseTrackClass))
18 
19 struct BseTrackEntry {
20  guint tick;
21  guint id;
22  BsePart *part;
23 };
25  guint channel_id;
26  guint max_voices;
27  BseSNet *snet;
28  BseSNet *pnet;
29  /* wave synthesis */
30  BseWave *wave;
31  BseSNet *wnet;
32  /* playback intergration */
33  BseSource *sub_synth;
34  BseSource *voice_input;
35  BseSource *voice_switch;
36  BseSource *postprocess;
37  SfiRing *bus_outputs; /* maintained by bsebus.[hc] */
38  /* fields protected by sequencer mutex */
39  guint n_entries_SL : 30;
40  guint muted_SL : 1;
41  BseTrackEntry *entries_SL;
42  guint midi_channel_SL;
43  gboolean track_done_SL;
44 };
46 {};
47 
48 /* --- prototypes -- */
49 void bse_track_add_modules (BseTrack *self,
50  BseContainer *container,
51  BseMidiReceiver *midi_receiver);
52 void bse_track_remove_modules (BseTrack *self,
53  BseContainer *container);
54 void bse_track_clone_voices (BseTrack *self,
55  BseSNet *snet,
56  guint context,
57  BseMidiContext mcontext,
58  BseTrans *trans);
59 BseSource* bse_track_get_output (BseTrack *self);
60 guint bse_track_get_last_tick(BseTrack *self);
61 guint bse_track_insert_part (BseTrack *self,
62  guint tick,
63  BsePart *part);
64 void bse_track_remove_tick (BseTrack *self,
65  guint tick);
66 BseTrackPartSeq* bse_track_list_parts (BseTrack *self);
67 BseTrackPartSeq* bse_track_list_part (BseTrack *self,
68  BsePart *part);
69 gboolean bse_track_find_part (BseTrack *self,
70  BsePart *part,
71  guint *start_p);
72 BseTrackEntry* bse_track_lookup_tick (BseTrack *self,
73  guint tick);
74 BseTrackEntry* bse_track_find_link (BseTrack *self,
75  guint id);
76 BsePart* bse_track_get_part_SL (BseTrack *self,
77  guint tick,
78  guint *start,
79  guint *next);
80 G_END_DECLS
81 
82 namespace Bse {
83 
84 class TrackImpl : public ContextMergerImpl, public virtual TrackIface {
85 protected:
86  virtual ~TrackImpl ();
87 public:
88  explicit TrackImpl (BseObject*);
89  virtual SongTiming get_timing (int tick) override;
90  virtual int insert_part (int tick, PartIface &part) override;
91  virtual void remove_tick (int tick) override;
92  virtual PartIfaceP get_part (int tick) override;
93  virtual int get_last_tick () override;
94  virtual ErrorType ensure_output () override;
95  virtual SourceIfaceP get_output_source () override;
96 };
97 
98 } // Bse
99 
100 #endif /* __BSE_TRACK_H__ */
virtual void remove_tick(int tick) override
See Track::remove_tick()
Definition: bsetrack.cc:1099
Definition: bsetrack.hh:24
Definition: bsecontextmerger.hh:21
Definition: bsecontainer.hh:26
The Bse namespace contains all functions of the synthesis engine.
Definition: bstbseutils.cc:67
Definition: bsesnet.hh:48
Definition: bsesnet.hh:36
See also the corresponding IDL class Track.
Definition: bseserverapi.hh:889
Definition: bsecontextmerger.hh:30
virtual PartIfaceP get_part(int tick) override
See Track::get_part()
Definition: bsetrack.cc:1119
virtual SourceIfaceP get_output_source() override
See Track::get_output_source()
Definition: bsetrack.cc:1154
virtual SongTiming get_timing(int tick) override
See Track::get_timing()
Definition: bsetrack.cc:1071
Definition: bsecontextmerger.hh:18
Definition: bsetrack.hh:84
virtual int insert_part(int tick, PartIface &part) override
See Track::insert_part()
Definition: bsetrack.cc:1084
Definition: bseobject.hh:60
Definition: bsewave.hh:26
Definition: bsesource.hh:84
Definition: sfiring.hh:23
See also the corresponding IDL class Part.
Definition: bseserverapi.hh:573
Definition: bsetrack.hh:45
Definition: bsetrack.hh:19
virtual int get_last_tick() override
See Track::get_last_tick()
Definition: bsetrack.cc:1127
Song timing configuration.
Definition: bseapi.idl:322
virtual ErrorType ensure_output() override
See Track::ensure_output()
Definition: bsetrack.cc:1134
Definition: bsepart.hh:26