BEAST/BSE - Better Audio System and Sound Engine  0.8.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
bsetrack.hh
Go to the documentation of this file.
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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines