BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __BSE_TRACK_H__ 00003 #define __BSE_TRACK_H__ 00004 00005 #include <bse/bseitem.hh> 00006 #include <bse/bsesnet.hh> 00007 #include <bse/bsecontextmerger.hh> 00008 00009 G_BEGIN_DECLS 00010 00011 /* --- BSE type macros --- */ 00012 #define BSE_TYPE_TRACK (BSE_TYPE_ID (BseTrack)) 00013 #define BSE_TRACK(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_TRACK, BseTrack)) 00014 #define BSE_TRACK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_TRACK, BseTrackClass)) 00015 #define BSE_IS_TRACK(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_TRACK)) 00016 #define BSE_IS_TRACK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_TRACK)) 00017 #define BSE_TRACK_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_TRACK, BseTrackClass)) 00018 00019 struct BseTrackEntry { 00020 guint tick; 00021 guint id; 00022 BsePart *part; 00023 }; 00024 struct BseTrack : BseContextMerger { 00025 guint channel_id; 00026 guint max_voices; 00027 BseSNet *snet; 00028 BseSNet *pnet; 00029 /* wave synthesis */ 00030 BseWave *wave; 00031 BseSNet *wnet; 00032 /* playback intergration */ 00033 BseSource *sub_synth; 00034 BseSource *voice_input; 00035 BseSource *voice_switch; 00036 BseSource *postprocess; 00037 SfiRing *bus_outputs; /* maintained by bsebus.[hc] */ 00038 /* fields protected by sequencer mutex */ 00039 guint n_entries_SL : 30; 00040 guint muted_SL : 1; 00041 BseTrackEntry *entries_SL; 00042 guint midi_channel_SL; 00043 gboolean track_done_SL; 00044 }; 00045 struct BseTrackClass : BseContextMergerClass 00046 {}; 00047 00048 /* --- prototypes -- */ 00049 void bse_track_add_modules (BseTrack *self, 00050 BseContainer *container, 00051 BseMidiReceiver *midi_receiver); 00052 void bse_track_remove_modules (BseTrack *self, 00053 BseContainer *container); 00054 void bse_track_clone_voices (BseTrack *self, 00055 BseSNet *snet, 00056 guint context, 00057 BseMidiContext mcontext, 00058 BseTrans *trans); 00059 BseSource* bse_track_get_output (BseTrack *self); 00060 guint bse_track_get_last_tick(BseTrack *self); 00061 guint bse_track_insert_part (BseTrack *self, 00062 guint tick, 00063 BsePart *part); 00064 void bse_track_remove_tick (BseTrack *self, 00065 guint tick); 00066 BseTrackPartSeq* bse_track_list_parts (BseTrack *self); 00067 BseTrackPartSeq* bse_track_list_part (BseTrack *self, 00068 BsePart *part); 00069 gboolean bse_track_find_part (BseTrack *self, 00070 BsePart *part, 00071 guint *start_p); 00072 BseTrackEntry* bse_track_lookup_tick (BseTrack *self, 00073 guint tick); 00074 BseTrackEntry* bse_track_find_link (BseTrack *self, 00075 guint id); 00076 BsePart* bse_track_get_part_SL (BseTrack *self, 00077 guint tick, 00078 guint *start, 00079 guint *next); 00080 00081 G_END_DECLS 00082 00083 #endif /* __BSE_TRACK_H__ */