ardour
jack_utils.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 Tim Mayberry
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 #include <stdint.h>
21 
22 #include <vector>
23 #include <map>
24 #include <string>
25 
26 namespace ARDOUR {
27 
28  // Names for the drivers on all possible systems
29  extern const char * const portaudio_driver_name;
30  extern const char * const coreaudio_driver_name;
31  extern const char * const alsa_driver_name;
32  extern const char * const oss_driver_name;
33  extern const char * const freebob_driver_name;
34  extern const char * const ffado_driver_name;
35  extern const char * const netjack_driver_name;
36  extern const char * const dummy_driver_name;
37 
41  void get_jack_audio_driver_names (std::vector<std::string>& driver_names);
42 
46  void get_jack_default_audio_driver_name (std::string& driver_name);
47 
51  void get_jack_midi_system_names (const std::string& driver, std::vector<std::string>& driver_names);
52 
56  void get_jack_default_midi_system_name (const std::string& driver_name, std::string& midi_system);
57 
61  void get_jack_sample_rate_strings (std::vector<std::string>& sample_rates);
62 
66  std::string get_jack_default_sample_rate ();
67 
71  bool get_jack_sample_rate_value_from_string (const std::string& srs, uint32_t& srv);
72 
76  void get_jack_period_size_strings (std::vector<std::string>& samplerates);
77 
81  std::string get_jack_default_period_size ();
82 
86  bool get_jack_period_size_value_from_string (const std::string& pss, uint32_t& psv);
87 
92  void get_jack_dither_mode_strings (const std::string& driver, std::vector<std::string>& dither_modes);
93 
97  std::string get_jack_default_dither_mode (const std::string& driver);
98 
104  std::string get_jack_latency_string (std::string samplerate, float periods, std::string period_size);
105 
109  bool jack_server_running ();
110 
115  typedef std::map<std::string, std::string> device_map_t;
116 
124  void get_jack_alsa_device_names (device_map_t& devices);
125  void get_jack_portaudio_device_names (device_map_t& devices);
126  void get_jack_coreaudio_device_names (device_map_t& devices);
127  void get_jack_oss_device_names (device_map_t& devices);
128  void get_jack_freebob_device_names (device_map_t& devices);
129  void get_jack_ffado_device_names (device_map_t& devices);
130  void get_jack_netjack_device_names (device_map_t& devices);
131  void get_jack_dummy_device_names (device_map_t& devices);
132 
133  /*
134  * @return true if there were devices found for the driver
135  *
136  * @param driver The driver name returned by get_jack_audio_driver_names
137  * @param devices The map used to insert the drivers into, devices will be cleared before
138  * adding the available drivers
139  */
140  bool get_jack_device_names_for_audio_driver (const std::string& driver, device_map_t& devices);
141 
142  /*
143  * @return a list of readable device names for a specific driver.
144  */
145  std::vector<std::string> get_jack_device_names_for_audio_driver (const std::string& driver);
146 
151  bool get_jack_audio_driver_supports_two_devices (const std::string& driver);
152 
153  bool get_jack_audio_driver_supports_latency_adjustment (const std::string& driver);
154 
155  bool get_jack_audio_driver_supports_setting_period_count (const std::string& driver);
156 
163  bool get_jack_server_application_names (std::vector<std::string>& server_names);
164 
172  void set_path_env_for_jack_autostart (const std::vector<std::string>&);
173 
179  bool get_jack_server_dir_paths (std::vector<std::string>& server_dir_paths);
180 
186  bool get_jack_server_paths (const std::vector<std::string>& server_dir_paths,
187  const std::vector<std::string>& server_names,
188  std::vector<std::string>& server_paths);
189 
190 
191  bool get_jack_server_paths (std::vector<std::string>& server_paths);
192 
196  bool get_jack_default_server_path (std::string& server_path);
197 
201  std::string get_jack_server_config_file_name ();
202 
204 
206 
207  bool write_jack_config_file (const std::string& config_file_path, const std::string& command_line);
208 
210 
211  // see implementation for defaults
213 
214  //operator bool
215  //operator ostream
216 
217  std::string server_path;
218  uint32_t timeout;
219  bool no_mlock;
220  uint32_t ports_max;
221  bool realtime;
222  uint32_t priority;
224  bool verbose;
225  bool temporary;
228  std::string driver;
229  std::string input_device;
230  std::string output_device;
231  uint32_t num_periods;
232  uint32_t period_size;
233  uint32_t samplerate;
234  uint32_t input_latency;
235  uint32_t output_latency;
238  std::string dither_mode;
240  bool soft_mode;
241  std::string midi_driver;
242  };
243 
247  bool get_jack_command_line_string (const JackCommandLineOptions& options, std::string& command_line);
248 
252  //std::string get_jack_command_line_from_config_file (const std::string& config_file_path);
253 }
const char *const alsa_driver_name
void get_jack_default_audio_driver_name(std::string &driver_name)
void get_jack_audio_driver_names(std::vector< std::string > &driver_names)
void get_jack_alsa_device_names(device_map_t &devices)
bool get_jack_default_server_path(std::string &server_path)
const char *const netjack_driver_name
void set_path_env_for_jack_autostart(const std::vector< std::string > &)
bool get_jack_command_line_string(const JackCommandLineOptions &options, std::string &command_line)
const char *const ffado_driver_name
void get_jack_period_size_strings(std::vector< std::string > &samplerates)
bool get_jack_audio_driver_supports_two_devices(const std::string &driver)
void get_jack_coreaudio_device_names(device_map_t &devices)
const char *const portaudio_driver_name
void get_jack_oss_device_names(device_map_t &devices)
void get_jack_midi_system_names(const std::string &driver, std::vector< std::string > &driver_names)
std::map< std::string, std::string > device_map_t
Definition: jack_utils.h:115
const char *const dummy_driver_name
void get_jack_sample_rate_strings(std::vector< std::string > &sample_rates)
std::string get_jack_server_user_config_file_path()
void get_jack_dither_mode_strings(const std::string &driver, std::vector< std::string > &dither_modes)
bool get_jack_server_application_names(std::vector< std::string > &server_names)
bool get_jack_server_paths(const std::vector< std::string > &server_dir_paths, const std::vector< std::string > &server_names, std::vector< std::string > &server_paths)
bool get_jack_period_size_value_from_string(const std::string &pss, uint32_t &psv)
Definition: amp.h:29
void get_jack_default_midi_system_name(const std::string &driver_name, std::string &midi_system)
std::string get_jack_server_user_config_dir_path()
void get_jack_portaudio_device_names(device_map_t &devices)
bool get_jack_sample_rate_value_from_string(const std::string &srs, uint32_t &srv)
bool get_jack_audio_driver_supports_latency_adjustment(const std::string &driver)
bool write_jack_config_file(const std::string &config_file_path, const std::string &command_line)
void get_jack_dummy_device_names(device_map_t &devices)
const char *const oss_driver_name
void get_jack_freebob_device_names(device_map_t &devices)
bool get_jack_server_dir_paths(std::vector< std::string > &server_dir_paths)
void get_jack_ffado_device_names(device_map_t &devices)
void get_jack_netjack_device_names(device_map_t &devices)
std::string get_jack_default_period_size()
std::string get_jack_default_dither_mode(const std::string &driver)
bool get_jack_device_names_for_audio_driver(const std::string &driver, device_map_t &devices)
bool jack_server_running()
std::string get_jack_latency_string(std::string samplerate, float periods, std::string period_size)
std::string get_jack_server_config_file_name()
const char *const coreaudio_driver_name
const char *const freebob_driver_name
std::string get_jack_default_sample_rate()
bool get_jack_audio_driver_supports_setting_period_count(const std::string &driver)