/[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 143 - (show annotations) (download) (as text)
Wed Jun 23 18:54:08 2004 UTC (19 years, 10 months ago) by capela
File MIME type: text/x-c++hdr
File size: 4422 byte(s)
* SET CHANNEL AUDIO_OUTPUT_TYPE <chan> <driver> command is back!
  creates an audio output device instance of the given driver type
  ('Jack' or 'Alsa') with default parameters if none exists,
  otherwise it just picks the first available device and assign
  it to the intended sampler channel.

* The AudioOutputDevice class get's a new pure virtual method,
  Driver(), which is implemented on both of the existing inherited
  classes, AudioOutputDeviceAlsa and AudioOutputDeviceJack, with
  the sole purpose to return the driver type name as a String
  ('Alsa' and 'Jack', respectively).

* The quoting on the filename argument for the LOAD INSTRUMENT
  command has been made optional; you can have both ways, with
  single quotes or none, keeping compability with older LSCP
  specification.

* An additional sanity check is made on LOAD INSTRUMENT, whether
  the sampler channel has an audio output device assigned, thus
  preventing the server from crashing on instrument file load.

* The GET AUDIO_OUTPUT_DEVICE INFO now includes the missing
  'driver' item, as predicted by the draft protocol document.

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 virtual String Driver();
69
70 static String Description();
71 static String Version();
72 static std::map<String,DeviceCreationParameter*> AvailableParameters();
73
74 int Process(uint Samples); // FIXME: should be private
75 protected:
76 AudioOutputDeviceJack(String* AutoConnectPortIDs = NULL, uint AutoConnectPorts = 0);
77 private:
78 ConditionServer csIsPlaying;
79 uint uiMaxSamplesPerCycle;
80 jack_client_t* hJackClient;
81 std::vector<jack_port_t*> hJackPorts;
82 };
83
84 // Callback functions for the libjack API
85 int __libjack_process_callback(jack_nframes_t nframes, void* arg);
86 void __libjack_shutdown_callback(void* arg);
87 }
88
89 #endif // HAVE_JACK
90 #endif // __LS_AUDIOOUTPUTDEVICEJACK_H__

  ViewVC Help
Powered by ViewVC