ardour
auditioner.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2001 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 
18 */
19 
20 #ifndef __ardour_auditioner_h__
21 #define __ardour_auditioner_h__
22 
23 #include <string>
24 
25 #include <glibmm/threads.h>
26 
27 #include "ardour/ardour.h"
28 #include "ardour/track.h"
29 
30 namespace ARDOUR {
31 
32 class Session;
33 class AudioDiskstream;
34 class AudioRegion;
35 class AudioPlaylist;
36 class MidiDiskstream;
37 class MidiRegion;
38 
40 {
41  public:
43  ~Auditioner ();
44 
45  int init ();
46  int connect ();
47 
48  void audition_region (boost::shared_ptr<Region>);
49 
50  void seek_to_frame (frameoffset_t pos) { if (_seek_frame < 0 && !_seeking) { _seek_frame = pos; }}
51  void seek_to_percent (float const pos) { if (_seek_frame < 0 && !_seeking) { _seek_frame = floorf(length * pos / 100.0); }}
52 
53  ARDOUR::AudioPlaylist& prepare_playlist ();
54 
55  int play_audition (framecnt_t nframes);
56 
57  MonitorState monitoring_state () const;
58 
59  void cancel_audition () {
60  g_atomic_int_set (&_auditioning, 0);
61  }
62 
63  bool auditioning() const { return g_atomic_int_get (&_auditioning); }
64  bool needs_monitor() const { return via_monitor; }
65 
66  virtual ChanCount input_streams () const;
67 
68  frameoffset_t seek_frame() const { return _seeking ? _seek_frame : -1;}
70  _seek_complete = true;
71  if (_seeking) { current_frame = pos; _seek_complete = true;}
72  }
73 
74  PBD::Signal2<void, ARDOUR::framecnt_t, ARDOUR::framecnt_t> AuditionProgress;
75 
76  /* Track */
77  int roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler);
78  DataType data_type () const;
79 
80  int roll_audio (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler);
81  int roll_midi (pframes_t nframes, framepos_t start_frame, framepos_t end_frame, int declick, bool& need_butler);
82 
83  boost::shared_ptr<Diskstream> create_diskstream ();
84  void set_diskstream (boost::shared_ptr<Diskstream> ds);
85 
86  /* fake track */
87  void set_state_part_two () {}
88  int set_state (const XMLNode&, int) { return 0; }
89  bool bounceable (boost::shared_ptr<Processor>, bool) const { return false; }
91  void unfreeze () {}
92 
94  { return boost::shared_ptr<Region> (); }
95 
97  { return boost::shared_ptr<Region> (); }
98 
100  { return -1; }
101 
103  { return boost::shared_ptr<Diskstream> (); }
104 
105  boost::shared_ptr<AudioDiskstream> audio_diskstream() const;
106  boost::shared_ptr<MidiDiskstream> midi_diskstream() const;
107 
108  private:
112  mutable gint _auditioning;
113  Glib::Threads::Mutex lock;
116  bool _seeking;
123 
127 
128  void drop_ports ();
129  void lookup_synth ();
130  void config_changed (std::string);
131  static void *_drop_ports (void *);
132  void actually_drop_ports ();
133  void output_changed (IOChange, void*);
135 };
136 
137 }; /* namespace ARDOUR */
138 
139 #endif /* __ardour_auditioner_h__ */
boost::shared_ptr< Processor > asynth
Definition: auditioner.h:126
boost::shared_ptr< AudioRegion > the_region
Definition: auditioner.h:109
framecnt_t length
Definition: auditioner.h:114
int export_stuff(BufferSet &, framepos_t, framecnt_t, boost::shared_ptr< Processor >, bool, bool, bool)
Definition: auditioner.h:99
boost::shared_ptr< Diskstream > _diskstream_midi
Definition: auditioner.h:125
boost::shared_ptr< Region > bounce_range(framepos_t, framepos_t, InterThreadInfo &, boost::shared_ptr< Processor >, bool)
Definition: auditioner.h:96
uint32_t pframes_t
Definition: types.h:61
boost::shared_ptr< Diskstream > diskstream_factory(XMLNode const &)
Definition: auditioner.h:102
framepos_t current_frame
Definition: auditioner.h:111
void cancel_audition()
Definition: auditioner.h:59
int64_t framecnt_t
Definition: types.h:76
bool needs_monitor() const
Definition: auditioner.h:64
frameoffset_t seek_frame() const
Definition: auditioner.h:68
Definition: amp.h:29
MonitorState
Definition: types.h:393
bool auditioning() const
Definition: auditioner.h:63
boost::shared_ptr< Diskstream > _diskstream_audio
Definition: auditioner.h:124
void freeze_me(InterThreadInfo &)
Definition: auditioner.h:90
void seek_to_percent(float const pos)
Definition: auditioner.h:51
int64_t framepos_t
Definition: types.h:66
Glib::Threads::Mutex lock
Definition: auditioner.h:113
int64_t frameoffset_t
Definition: types.h:71
bool bounceable(boost::shared_ptr< Processor >, bool) const
Definition: auditioner.h:89
#define LIBARDOUR_API
void seek_to_frame(frameoffset_t pos)
Definition: auditioner.h:50
frameoffset_t _import_position
Definition: auditioner.h:134
void set_state_part_two()
Definition: auditioner.h:87
Definition: xml++.h:95
boost::shared_ptr< Region > bounce(InterThreadInfo &)
Definition: auditioner.h:93
frameoffset_t _seek_frame
Definition: auditioner.h:115
int set_state(const XMLNode &, int)
Definition: auditioner.h:88
void seek_response(frameoffset_t pos)
Definition: auditioner.h:69
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
Definition: globals.cc:376
LIBARDOUR_API PBD::PropertyDescriptor< framecnt_t > length
Definition: region.cc:64
PBD::Signal2< void, ARDOUR::framecnt_t, ARDOUR::framecnt_t > AuditionProgress
Definition: auditioner.h:74
boost::shared_ptr< MidiRegion > midi_region
Definition: auditioner.h:110