/[svn]/linuxsampler/trunk/src/audiodriver/AudioOutputDeviceJack.h
ViewVC logotype

Contents of /linuxsampler/trunk/src/audiodriver/AudioOutputDeviceJack.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 123 - (show annotations) (download) (as text)
Mon Jun 14 19:33:16 2004 UTC (19 years, 10 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 4384 byte(s)
* src/common: added template class 'optional<>' which can be used e.g. as
  return type whenever a value might be returned, but don't has to; this
  template class pretty much acts like a pointer of the given type, but is
  much more safer than a simple pointer
* src/audiodriver: added static class AudioDeviceFactory to create audio
  devices at runtime by using a string and to obtain driver informations
  of drivers at runtime, driver classes should simply use the macro
  REGISTER_AUDIO_OUTPUT_DRIVER(DriverName,DriverClass) in their cpp file
  to register the driver to LinuxSampler (no changes needed anymore in the
  LS code to add a new audio output driver)
* src/drivers: added classes to dynamically manage driver parameters; there
  are two different kinds of parameters: parameters which are need to
  create a new device (DeviceCreationParameterX) used to e.g. create an
  audio output device or a MIDI input device and parameters which are only
  available at runtime, means when a device is already created
  (DeviceRuntimeParameterX) which will be e.g. used as audio channel
  parameters and MIDI port parameters
* src/linuxsampler.cpp: all registered audio output drivers will be shown
  on the console on startup
* src/network: implemented configuration of audio output devices via LSCP

1 /***************************************************************************
2 * *
3 * LinuxSampler - modular, streaming capable sampler *
4 * *
5 * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
20 * MA 02111-1307 USA *
21 ***************************************************************************/
22
23 #ifndef __LS_AUDIOOUTPUTDEVICEJACK_H__
24 #define __LS_AUDIOOUTPUTDEVICEJACK_H__
25
26 #include "../common/global.h"
27
28 #if HAVE_JACK
29
30 #include <vector>
31 #include <sstream>
32 #include <jack/jack.h>
33
34 #include "AudioOutputDevice.h"
35 #include "../common/ConditionServer.h"
36
37 namespace LinuxSampler {
38
39 /** JACK audio output driver
40 *
41 * Implements audio output to the JACK Audio Connection Kit (JACK).
42 */
43 class AudioOutputDeviceJack : public AudioOutputDevice {
44 public:
45 AudioOutputDeviceJack(std::map<String,String> Parameters);
46 ~AudioOutputDeviceJack();
47
48 // Audio channel parameter to connect to other Jack clients
49 class ParameterJackBindings : public DeviceRuntimeParameterStrings {
50 public:
51 ParameterJackBindings(AudioChannel* pChannel, std::vector<String> InitialBindings) : DeviceRuntimeParameterStrings(InitialBindings) { this->pChannel = pChannel; }
52 virtual String Description() { return "Bindings to other JACK clients"; }
53 virtual bool Fix() { return false; }
54 virtual std::vector<String> PossibilitiesAsString() { return std::vector<String>(); /* TODO: to be implemented */ }
55 virtual void OnSetValue(std::vector<String> vS) { /* TODO: code to connect to other jack clients */ }
56 protected:
57 AudioChannel* pChannel;
58 };
59
60 // derived abstract methods from class 'AudioOutputDevice'
61 virtual void Play();
62 virtual bool IsPlaying();
63 virtual void Stop();
64 virtual void AcquireChannels(uint uiChannels);
65 virtual uint MaxSamplesPerCycle();
66 virtual uint SampleRate();
67
68 static String Description();
69 static String Version();
70 static std::map<String,DeviceCreationParameter*> AvailableParameters();
71
72 int Process(uint Samples); // FIXME: should be private
73 protected:
74 AudioOutputDeviceJack(String* AutoConnectPortIDs = NULL, uint AutoConnectPorts = 0);
75 private:
76 ConditionServer csIsPlaying;
77 uint uiMaxSamplesPerCycle;
78 jack_client_t* hJackClient;
79 std::vector<jack_port_t*> hJackPorts;
80 };
81
82 // Callback functions for the libjack API
83 int __libjack_process_callback(jack_nframes_t nframes, void* arg);
84 void __libjack_shutdown_callback(void* arg);
85 }
86
87 #endif // HAVE_JACK
88 #endif // __LS_AUDIOOUTPUTDEVICEJACK_H__

  ViewVC Help
Powered by ViewVC