RTP Audio System
2.0.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### Audio Mixer #### 00007 // #### #### 00008 // #### Copyright (C) 1999-2012 by Thomas Dreibholz #### 00009 // #### #### 00010 // #### Contact: #### 00011 // #### EMail: dreibh@iem.uni-due.de #### 00012 // #### WWW: https://www.nntb.no/~dreibh/rtpaudio #### 00013 // #### #### 00014 // #### ---------------------------------------------------------------- #### 00015 // #### #### 00016 // #### This program is free software: you can redistribute it and/or #### 00017 // #### modify it under the terms of the GNU General Public License as #### 00018 // #### published by the Free Software Foundation, either version 3 of #### 00019 // #### the License, or (at your option) any later version. #### 00020 // #### #### 00021 // #### This program is distributed in the hope that it will be useful, #### 00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of #### 00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #### 00024 // #### GNU General Public License for more details. #### 00025 // #### #### 00026 // #### You should have received a copy of the GNU General Public #### 00027 // #### License along with this program. If not, see #### 00028 // #### <http://www.gnu.org/licenses/>. #### 00029 // #### #### 00030 // ########################################################################## 00031 // $Id: audiomixer.h 1329 2011-12-23 22:06:51Z dreibh $ 00032 00033 00034 #ifndef AUDIOMIXER_H 00035 #define AUDIOMIXER_H 00036 00037 00038 #include "tdsystem.h" 00039 #include "audiodevice.h" 00040 00041 #ifdef HAVE_PULSEAUDIO 00042 #include "condition.h" 00043 #include <pulse/volume.h> 00044 #include <pulse/introspect.h> 00045 #define SOUND_MIXER_PCM 0 // Dummy value 00046 #else 00047 #include <sys/soundcard.h> 00048 #endif 00049 00050 00058 class AudioMixer 00059 { 00060 // ====== Constructor/Destructor ========================================= 00061 public: 00069 AudioMixer(AudioDevice* audioDevice, 00070 int mixerChannel = SOUND_MIXER_PCM, 00071 const char* name = "/dev/mixer"); 00072 00076 ~AudioMixer(); 00077 00078 00079 // ====== Mixer functions ================================================ 00085 inline bool ready() const; 00086 00094 bool getVolume(card8& left, card8& right); 00095 00103 bool setVolume(const card8 left, const card8 right); 00104 00105 00106 // ====== Private data =================================================== 00107 private: 00108 #ifdef HAVE_PULSEAUDIO 00109 static void sink_info_cb(pa_context* context, const pa_sink_info* si, int eol, void* userData); 00110 00111 AudioDevice* Device; 00112 pa_channel_map Map; 00113 pa_cvolume Volume; 00114 Condition VolumeUpdated; 00115 #else 00116 int Device; 00117 int Channel; 00118 #endif 00119 }; 00120 00121 00122 #include "audiomixer.icc" 00123 00124 00125 #endif