/* * vim: softtabstop=4 shiftwidth=4 cindent foldmethod=marker expandtab * * $LastChangedDate$ * $Revision$ * $LastChangedBy$ * $URL$ * * Copyright 2009-2011 Eric Connell * * This file is part of Mangler. * * Mangler 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 3 of the License, or * (at your option) any later version. * * Mangler 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 Mangler. If not, see . */ #ifndef _MANGLERAUDIO_H #define _MANGLERAUDIO_H #include "config.h" #ifdef HAVE_OSS # include # include # include #endif #ifdef HAVE_ESPEAK # include #endif #include "manglerbackend.h" #include #include #include #define AUDIO_CONTROL 0 #define AUDIO_INPUT 1 #define AUDIO_OUTPUT 2 #define AUDIO_NOTIFY 3 class ManglerPCM { public: ManglerPCM(uint32_t length, uint8_t *sample) { this->length = length; this->sample = (uint8_t *)malloc(length); // I'm a C programmer... sue me memcpy(this->sample, sample, length); } ~ManglerPCM() { free(this->sample); } uint32_t length; uint8_t *sample; }; class ManglerAudioDevice { public: ManglerAudioDevice(uint32_t id, Glib::ustring name, Glib::ustring description) { this->id = id; this->name = name; this->description = description; } ~ManglerAudioDevice() { } uint32_t id; Glib::ustring name; Glib::ustring description; }; class ManglerAudio { public: ManglerAudio(int type, uint32_t rate = 0, uint8_t channels = 1, uint32_t pcm_framesize = 0, uint8_t buffer = 4, bool check_loggedin = true); ~ManglerAudio(); ManglerBackend *backend; int type; uint32_t rate; uint32_t pcm_framesize; uint8_t channels; uint8_t buffer; bool check_loggedin; GAsyncQueue* pcm_queue; bool outputStreamOpen; bool inputStreamOpen; bool stop_output; bool stop_input; std::map sounds; std::vector outputDevices; std::vector inputDevices; bool switchBackend(Glib::ustring audioSubsystem); bool open(void); void close(bool drain = false); void queue(uint32_t length, uint8_t *sample); void finish(bool drop = false); void output(void); void input(void); void getDeviceList(Glib::ustring audioSubsystem); void playNotification(Glib::ustring name); void playText(Glib::ustring text); }; int timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y); #endif