/[svn]/linuxsampler/trunk/src/engines/gig/EngineChannel.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/engines/gig/EngineChannel.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 411 - (hide annotations) (download) (as text)
Sat Feb 26 02:01:14 2005 UTC (19 years, 1 month ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 6191 byte(s)
* design change: using now one sampler engine instance and one disk thread
  instance for all sampler channels that are connected to the same audio
  output device (and are using the same engine type of course)
* added EngineFactory / EngineChannelFactory to remove the annoying build
  dependencies e.g. of the lscpserver to the actual sampler engine
  implementations
* bumped version to 0.3.0 (current CVS state is still quite broken,
  previous, stable CVS version was tagged as "v0_2_0" and is also available
  as source tarball)

1 schoenebeck 411 /***************************************************************************
2     * *
3     * LinuxSampler - modular, streaming capable sampler *
4     * *
5     * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck *
6     * Copyright (C) 2005 Christian Schoenebeck *
7     * *
8     * This program is free software; you can redistribute it and/or modify *
9     * it under the terms of the GNU General Public License as published by *
10     * the Free Software Foundation; either version 2 of the License, or *
11     * (at your option) any later version. *
12     * *
13     * This program is distributed in the hope that it will be useful, *
14     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16     * GNU General Public License for more details. *
17     * *
18     * You should have received a copy of the GNU General Public License *
19     * along with this program; if not, write to the Free Software *
20     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21     * MA 02111-1307 USA *
22     ***************************************************************************/
23    
24     #ifndef __LS_GIG_ENGINECHANNEL_H__
25     #define __LS_GIG_ENGINECHANNEL_H__
26    
27     #if DEBUG_HEADERS
28     # warning EngineChannel.h included
29     #endif // DEBUG_HEADERS
30    
31     #include "../common/Event.h"
32     #include "../common/EngineChannel.h"
33     #include "EngineGlobals.h"
34     #include "Engine.h"
35     #include "InstrumentResourceManager.h"
36    
37     namespace LinuxSampler { namespace gig {
38    
39     class midi_key_info_t;
40    
41     class EngineChannel : public LinuxSampler::EngineChannel, public InstrumentConsumer {
42     public:
43     EngineChannel();
44     virtual ~EngineChannel();
45    
46     // implementation of abstract methods derived from interface class 'LinuxSampler::EngineChannel'
47     virtual int RenderAudio(uint Samples);
48     virtual void PrepareLoadInstrument(const char* FileName, uint Instrument);
49     virtual void LoadInstrument();
50     virtual void SendNoteOn(uint8_t Key, uint8_t Velocity);
51     virtual void SendNoteOff(uint8_t Key, uint8_t Velocity);
52     virtual void SendPitchbend(int Pitch);
53     virtual void SendControlChange(uint8_t Controller, uint8_t Value);
54     virtual float Volume();
55     virtual void Volume(float f);
56     virtual uint Channels();
57     virtual void Connect(AudioOutputDevice* pAudioOut);
58     virtual void DisconnectAudioOutputDevice();
59     virtual void SetOutputChannel(uint EngineAudioChannel, uint AudioDeviceChannel);
60     virtual int OutputChannel(uint EngineAudioChannel);
61     virtual String InstrumentFileName();
62     virtual String InstrumentName();
63     virtual int InstrumentIndex();
64     virtual int InstrumentStatus();
65     virtual LinuxSampler::Engine* GetEngine();
66    
67     // implementation of abstract methods derived from interface class 'InstrumentConsumer'
68     virtual void ResourceToBeUpdated(::gig::Instrument* pResource, void*& pUpdateArg);
69     virtual void ResourceUpdated(::gig::Instrument* pOldResource, ::gig::Instrument* pNewResource, void* pUpdateArg);
70    
71     //protected:
72     Engine* pEngine;
73     float* pOutputLeft; ///< Audio output channel buffer (left)
74     float* pOutputRight; ///< Audio output channel buffer (right)
75     int AudioDeviceChannelLeft; ///< audio device channel number to which the left channel is connected to
76     int AudioDeviceChannelRight; ///< audio device channel number to which the right channel is connected to
77     RingBuffer<Event>* pEventQueue; ///< Input event queue.
78     uint8_t ControllerTable[128]; ///< Reflects the current values (0-127) of all MIDI controllers for this engine / sampler channel.
79     midi_key_info_t* pMIDIKeyInfo; ///< Contains all active voices sorted by MIDI key number and other informations to the respective MIDI key
80     Pool<uint>* pActiveKeys; ///< Holds all keys in it's allocation list with active voices.
81     std::map<uint,uint*> ActiveKeyGroups; ///< Contains active keys (in case they belong to a key group) ordered by key group ID.
82     ::gig::Instrument* pInstrument;
83     bool SustainPedal; ///< true if sustain pedal is down
84     double GlobalVolume; ///< overall volume (a value < 1.0 means attenuation, a value > 1.0 means amplification)
85     int Pitch; ///< Current (absolute) MIDI pitch value.
86     int CurrentKeyDimension; ///< Current value (0-127) for the keyboard dimension, altered by pressing a keyswitching key.
87     String InstrumentFile;
88     int InstrumentIdx;
89     String InstrumentIdxName;
90     int InstrumentStat;
91    
92     friend class Engine;
93     friend class Voice;
94     friend class InstrumentResourceManager;
95    
96     private:
97     void ResetInternal();
98     };
99    
100     }} // namespace LinuxSampler::gig
101    
102     #endif // __LS_GIG_ENGINECHANNEL_H__

  ViewVC Help
Powered by ViewVC