nkeynes@66: /** nkeynes@561: * $Id$ nkeynes@66: * nkeynes@66: * The esd (esound) audio driver nkeynes@66: * nkeynes@66: * Copyright (c) 2005 Nathan Keynes. nkeynes@66: * nkeynes@66: * This program is free software; you can redistribute it and/or modify nkeynes@66: * it under the terms of the GNU General Public License as published by nkeynes@66: * the Free Software Foundation; either version 2 of the License, or nkeynes@66: * (at your option) any later version. nkeynes@66: * nkeynes@66: * This program is distributed in the hope that it will be useful, nkeynes@66: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@66: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@66: * GNU General Public License for more details. nkeynes@66: */ nkeynes@424: #include nkeynes@424: #include nkeynes@66: #include nkeynes@66: #include "aica/audio.h" nkeynes@66: #include "dream.h" nkeynes@66: nkeynes@1024: static int esd_handle = -1; nkeynes@1024: static int esd_sample_size = 1; nkeynes@66: bhaal22@643: nkeynes@1024: static gboolean audio_esd_init() bhaal22@643: { nkeynes@697: int format = DEFAULT_SAMPLE_FORMAT; nkeynes@697: int rate = DEFAULT_SAMPLE_RATE; nkeynes@736: nkeynes@66: if( esd_handle != -1 ) { nkeynes@697: esd_close(esd_handle); nkeynes@66: } nkeynes@66: esd_format_t esd_format = 0; nkeynes@66: esd_sample_size = 1; nkeynes@66: if( format & AUDIO_FMT_16BIT ) { nkeynes@697: esd_format |= ESD_BITS16; nkeynes@66: } else esd_format |= ESD_BITS8; nkeynes@66: if( format & AUDIO_FMT_STEREO ) { nkeynes@697: esd_format |= ESD_STEREO; nkeynes@66: } nkeynes@66: else esd_format |= ESD_MONO; nkeynes@697: nkeynes@180: esd_handle = esd_play_stream( esd_format, rate, "localhost", "lxdream" ); nkeynes@86: if( esd_handle == -1 ) { nkeynes@697: ERROR( "Unable to open audio output (ESD)" ); nkeynes@697: return FALSE; nkeynes@86: } nkeynes@66: return TRUE; nkeynes@66: } nkeynes@66: nkeynes@1024: static gboolean audio_esd_process_buffer( audio_buffer_t buffer ) nkeynes@66: { nkeynes@66: if( esd_handle != -1 ) { nkeynes@697: write( esd_handle, buffer->data, buffer->length ); nkeynes@697: return TRUE; nkeynes@66: } else { nkeynes@697: ERROR( "ESD not initialized" ); nkeynes@697: return FALSE; nkeynes@66: } nkeynes@66: } nkeynes@66: nkeynes@1024: static gboolean audio_esd_shutdown() bhaal22@643: { nkeynes@697: close(esd_handle); nkeynes@697: esd_handle = -1; nkeynes@697: return TRUE; bhaal22@643: } nkeynes@66: nkeynes@1024: static struct audio_driver audio_esd_driver = { nkeynes@700: "esd", nkeynes@700: N_("Enlightened Sound Daemon driver"), nkeynes@1024: 30, nkeynes@697: DEFAULT_SAMPLE_RATE, nkeynes@697: DEFAULT_SAMPLE_FORMAT, nkeynes@697: audio_esd_init, nkeynes@697: NULL, nkeynes@697: audio_esd_process_buffer, nkeynes@697: NULL, nkeynes@697: audio_esd_shutdown}; bhaal22@643: nkeynes@1024: AUDIO_DRIVER( "esd", audio_esd_driver );