|
- /*
- ZynAddSubFX - a software synthesizer
-
- AlsaEngine.h - ALSA Driver
- Copyright (C) 2009 Alan Calvert
- Copyright (C) 2014 Mark McCurry
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- */
-
- #ifndef ALSA_ENGINE_H
- #define ALSA_ENGINE_H
-
- #include <pthread.h>
- #include <string>
- #include <alsa/asoundlib.h>
- #include <queue>
-
- #include "AudioOut.h"
- #include "MidiIn.h"
- #include "OutMgr.h"
- #include "../Misc/Stereo.h"
-
- namespace zyncarla {
-
- class AlsaEngine:public AudioOut, MidiIn
- {
- public:
- AlsaEngine(const SYNTH_T &synth);
- ~AlsaEngine();
-
- bool Start();
- void Stop();
-
- void setAudioEn(bool nval);
- bool getAudioEn() const;
- void setMidiEn(bool nval);
- bool getMidiEn() const;
-
- protected:
- void *AudioThread();
- static void *_AudioThread(void *arg);
- void *MidiThread();
- static void *_MidiThread(void *arg);
-
- private:
- bool openMidi();
- void stopMidi();
- bool openAudio();
- void stopAudio();
-
- short *interleave(const Stereo<float *> &smps);
-
- struct {
- std::string device;
- snd_seq_t *handle;
- int alsaId;
- bool exiting;
- pthread_t pThread;
- } midi;
-
- struct {
- snd_pcm_t *handle;
- snd_pcm_hw_params_t *params;
- unsigned int sampleRate;
- snd_pcm_uframes_t frames;
- unsigned int periods;
- short *buffer;
- pthread_t pThread;
- float peaks[1];
- } audio;
-
- void *processAudio();
- };
-
- }
-
- #endif
|