23#include <alsa/asoundlib.h>
25#include "audio_sample.h"
47typedef uint32_t ElemCap;
48const ElemCap ELEMCAP_CAN_PLAYBACK = 0x0001;
49const ElemCap ELEMCAP_CAN_CAPTURE = 0x0002;
50const ElemCap ELEMCAP_COMMON = 0x0004;
51const ElemCap ELEMCAP_PLAYBACK_VOL = 0x0008;
52const ElemCap ELEMCAP_CAPTURE_VOL = 0x0010;
53const ElemCap ELEMCAP_COMMON_VOL = 0x0020;
54const ElemCap ELEMCAP_PLAYBACK_SWITCH = 0x0040;
55const ElemCap ELEMCAP_CAPTURE_SWITCH = 0x0080;
56const ElemCap ELEMCAP_COMMON_SWITCH = 0x0100;
63 snd_mixer_elem_t *elem;
64 long minPlayVol, curPlayVol, maxPlayVol;
65 long minCapVol, curCapVol, maxCapVol;
66 long minComVol, curComVol, maxComVol;
67 int playSwitch, capSwitch, comSwitch;
74typedef uint8_t PBState;
75const PBState PB_STATE_STOPPED = 0;
76const PBState PB_STATE_PLAYING = 1;
77const PBState PB_STATE_DRAIN = 2;
78const PBState PB_STATE_RECORDING = 3;
95 bool mixerFilterExact;
99 uint32_t cfgPBPeriodTime;
100 uint32_t cfgPBBufferTime;
101 uint32_t silenceTime;
102 uint32_t cfgRecBufferTime;
103 uint32_t cfgRecStoreTime;
104 uint32_t cfgRecPeriodTime;
105 uint8_t recNumChannels;
106 uint32_t recSampleRate;
113 struct pollfd *pbFDs;
114 uint32_t actPBBufferTime;
115 uint32_t actPBPeriodTime;
116 snd_pcm_uframes_t pbPeriodSize;
117 uint8_t *periodBuffer;
119 snd_pcm_t *recHandle;
121 struct pollfd *recFDs;
122 uint32_t actRecBufferTime;
123 uint32_t actRecPeriodTime;
124 snd_pcm_uframes_t recPeriodSize;
126 snd_mixer_t *mixerHandle;
128 uint32_t numElements;
136 uint32_t recDataLength;
137 uint32_t recDataOffset;
143 virtual void Main (
void);
146 void SendStateMessage (
void);
150 bool AddStoredSample (player_audio_wav_t *waveData);
151 bool AddStoredSample (
const char *filePath);
155 void ClearQueue (
void);
157 bool AddToQueue (player_audio_wav_t *waveData);
159 bool AddSilence (uint32_t time,
AudioSample *format);
160 void AdvanceQueue (
void);
165 bool SetupPlayBack (
void);
167 void PlaybackCallback (
int numFrames);
170 bool SetupRecord (
void);
171 bool SetRecParams (
void);
172 bool SetupRecordBuffer (uint32_t length);
173 void RecordCallback (
int numFrames);
174 void HandleRecordedData (
void);
175 void PublishRecordedData (
void);
178 void StartPlayback (
void);
179 void StopPlayback (
void);
180 void StartRecording (
void);
181 void StopRecording (
void);
184 bool SetupMixer (
void);
185 bool EnumMixerElements (
void);
189 void CleanUpMixerElements (
MixerElement *elements, uint32_t count);
190 void MixerDetailsToPlayer (player_audio_mixer_channel_list_detail_t *dest);
191 void MixerLevelsToPlayer (player_audio_mixer_channel_list_t *dest);
192 void SetElementLevel (uint32_t index,
float level);
193 void SetElementSwitch (uint32_t index,
player_bool_t active);
194 void PublishMixerData (
void);
195 float LevelToPlayer (
long min,
long max,
long level);
196 long LevelFromPlayer (
long min,
long max,
float level);
197 void PrintMixerElements (
MixerElement *elements, uint32_t count);
200 int HandleWavePlayCmd (player_audio_wav_t *waveData);
201 int HandleSamplePlayCmd (player_audio_sample_item_t *data);
203 int HandleMixerChannelCmd (player_audio_mixer_channel_list_t *data);
204 int HandleSampleLoadReq (player_audio_sample_t *data,
QueuePointer &resp_queue);
205 int HandleSampleRetrieveReq (player_audio_sample_t *data,
QueuePointer &resp_queue);
206 int HandleSampleRecordReq (player_audio_sample_rec_req_t *data,
QueuePointer &resp_queue);
207 int HandleMixerChannelListReq (player_audio_mixer_channel_list_detail_t *data,
QueuePointer &resp_queue);
208 int HandleMixerChannelLevelReq (player_audio_mixer_channel_list_t *data,
QueuePointer &resp_queue);
virtual void Main(void)
Main method for driver thread.
Definition alsa.cc:2257
virtual int MainSetup(void)
Sets up the resources needed by the driver thread.
Definition alsa.cc:2156
virtual void MainQuit(void)
Cleanup method for driver thread (called when main exits)
Definition alsa.cc:2197
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Message handler.
Definition alsa.cc:2575
Definition audio_sample.h:33
Class for loading configuration file information.
Definition configfile.h:197
An autopointer for the message queue.
Definition message.h:74
Base class for drivers which oeprate with a thread.
Definition driver.h:553
A boolean variable, 0 for false anything else for true.
Definition player.h:334
Generic message header.
Definition player.h:162