/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * audioin.h * * Wed Sep 30 11:36:18 CEST 2009 * Copyright 2011 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of libaudioin. * * libaudioin 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. * * libaudioin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with libaudioin; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #ifndef __LIBAUDIOIN_AUDIOIN_H__ #define __LIBAUDIOIN_AUDIOIN_H__ // Use the newer ALSA API #define ALSA_PCM_NEW_HW_PARAMS_API #include #include #include #include #include typedef float sample_t; class AudioIn { public: class CouldNotOpenPCMDevice : public std::exception {}; class UnableToSetHWParams : public std::exception {}; class PcmBufferTooSmall : public std::exception {}; class OverRun : public std::exception {}; class ReadError : public std::exception {}; class ShortRead : public std::exception {}; class CouldNotInitialiseParams : public std::exception {}; class CouldNotSetAccessMode : public std::exception {}; class CouldNotSetFormat : public std::exception {}; class CouldNotSetChannelNumber : public std::exception {}; class UnableToSetSampleRate : public std::exception {}; class UnableToSetPeriodSize : public std::exception {}; class MixerInitilisationFailed : public std::exception {}; class MixerNotInitialised : public std::exception {}; class InvalidMixerLevel : public std::exception {}; class IllegalChannelNumber : public std::exception {}; class CouldNotSetMixerLevel : public std::exception {}; AudioIn(std::string device, std::string mixer, unsigned int srate, int ch); ~AudioIn(); size_t read(sample_t *buf, size_t size); int set_level(unsigned int channel, float level); private: int channels; snd_pcm_t *handle; snd_pcm_hw_params_t *params; unsigned int val; int dir; snd_pcm_uframes_t frames; snd_mixer_t *mixhnd; snd_mixer_elem_t *elem; long lvl_min, lvl_max; }; #endif/*__LIBAUDIOIN_AUDIOIN_H__*/