/******************************************************************************\ * Copyright (c) 2004-2008 * * Author(s): * Volker Fischer, Alexander Kurpiers * * This code is based on the Open-Source sound interface implementation of * the Dream DRM Receiver project. * \******************************************************************************/ #if !defined(_SOUND_H__9518A621345F78_3634567_8C0D_EEBF182CF549__INCLUDED_) #define _SOUND_H__9518A621345F78_3634567_8C0D_EEBF182CF549__INCLUDED_ #include #include #include #include #include #include #include #include "util.h" #include "global.h" #if WITH_SOUND # define ALSA_PCM_NEW_HW_PARAMS_API # define ALSA_PCM_NEW_SW_PARAMS_API # include #endif /* Definitions ****************************************************************/ #define NUM_IN_OUT_CHANNELS 2 /* always stereo */ /* the number of periods is critical for latency */ #define NUM_PERIOD_BLOCKS_IN 2 #define NUM_PERIOD_BLOCKS_OUT 2 #define MAX_SND_BUF_IN 200 #define MAX_SND_BUF_OUT 200 /* Classes ********************************************************************/ class CSound { public: CSound() #if WITH_SOUND : rhandle(NULL), phandle(NULL), iCurPeriodSizeIn(NUM_PERIOD_BLOCKS_IN), iCurPeriodSizeOut(NUM_PERIOD_BLOCKS_OUT), bChangParamIn(true), bChangParamOut(true) #endif {} virtual ~CSound() {Close();} // not implemented yet, always return one device and default string int GetNumDev() { return 1; } std::string GetDeviceName ( const int iDiD ) { return "wave mapper"; } int SetDev ( const int iNewDev ) {} // dummy int GetDev() { return 0; } #if WITH_SOUND void SetInNumBuf(int iNewNum); int GetInNumBuf() {return iCurPeriodSizeIn;} void SetOutNumBuf(int iNewNum); int GetOutNumBuf() {return iCurPeriodSizeOut;} void InitRecording(int iNewBufferSize, bool bNewBlocking = true); void InitPlayback(int iNewBufferSize, bool bNewBlocking = false); bool Read(CVector& psData); bool Write(CVector& psData); void Close(); protected: snd_pcm_t* rhandle; snd_pcm_t* phandle; bool SetHWParams(snd_pcm_t* handle, const int iBufferSizeIn, const int iNumPeriodBlocks); int iBufferSizeOut; int iBufferSizeIn; bool bChangParamIn; int iCurPeriodSizeIn; bool bChangParamOut; int iCurPeriodSizeOut; #else /* Dummy definitions */ void SetInNumBuf(int iNewNum) {} int GetInNumBuf() {return 1;} void SetOutNumBuf(int iNewNum) {} int GetOutNumBuf() {return 1;} void InitRecording(int iNewBufferSize, bool bNewBlocking = true) {printf("no sound!");} void InitPlayback(int iNewBufferSize, bool bNewBlocking = false) {printf("no sound!");} bool Read(CVector& psData) {printf("no sound!"); return false;} bool Write(CVector& psData) {printf("no sound!"); return false;} void Close() {} #endif }; #endif // !defined(_SOUND_H__9518A621345F78_3634567_8C0D_EEBF182CF549__INCLUDED_)