00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef AUDIOCHANNEL_H
00024 #define AUDIOCHANNEL_H
00025
00026 #include "defines.h"
00027 #include <QString>
00028 #include "Mixer.h"
00029 #include "RingBuffer.h"
00030
00031 class RingBuffer;
00032
00033 class AudioChannel
00034 {
00035
00036 public:
00037 AudioChannel(const QString& busName, const QString& audioType, int flags, uint channelNumber );
00038 ~AudioChannel();
00039
00040 audio_sample_t* get_buffer(nframes_t )
00041 {
00042 hasData = true;
00043 return buf;
00044 }
00045
00046 void set_latency(unsigned int latency);
00047
00048 void silence_buffer(nframes_t nframes)
00049 {
00050 memset (buf, 0, sizeof (audio_sample_t) * nframes);
00051 }
00052
00053 void set_buffer_size(nframes_t size);
00054 void set_monitor_peaks(bool monitor);
00055
00056
00057 uint get_number() const
00058 {
00059 return m_number;
00060 }
00061
00062 void monitor_peaks()
00063 {
00064 float peakValue = 0;
00065
00066 peakValue = Mixer::compute_peak( buf, bufSize, peakValue );
00067 peaks->write( (char*)&peakValue, 1 * sizeof(audio_sample_t));
00068 }
00069
00070 audio_sample_t get_peak_value();
00071
00072 QString get_name()
00073 {
00074 return m_name;
00075 }
00076
00077 uint get_buffer_size()
00078 {
00079 return bufSize;
00080 }
00081
00082 private:
00083 audio_sample_t* buf;
00084 RingBuffer* peaks;
00085 uint bufSize;
00086 uint m_latency;
00087 uint m_number;
00088 int m_flags;
00089 bool hasData;
00090 bool mlocked;
00091 bool monitoring;
00092 QString m_name;
00093 QString m_audioType;
00094
00095 friend class JackDriver;
00096 friend class AlsaDriver;
00097 friend class PADriver;
00098 friend class PulseAudioDriver;
00099 friend class Driver;
00100 friend class CoreAudioDriver;
00101
00102 int has_data()
00103 {
00104 return hasData || monitoring;
00105 }
00106
00107 audio_sample_t* get_data()
00108 {
00109 hasData = false;
00110 monitor_peaks();
00111 return buf;
00112 }
00113
00114 };
00115
00116 #endif
00117
00118