2
audio_mint: audio output for MINT
4
copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1
5
see COPYING and AUTHORS files in distribution or http://mpg123.de
6
initially written by Petr Stehlik
9
/* derived from LINUX, VOXWARE and SUN for MiNT Audio Device by Petr Stehlik */
18
int real_rate_printed = 0;
22
static int audio_rate_best_match(struct audio_info_struct *ai)
26
if(!ai || ai->fn < 0 || ai->rate < 0)
29
ret = ioctl(ai->fn,AIOCSSPEED, (void *)dsp_rate);
30
ret = ioctl(ai->fn,AIOCGSPEED,&dsp_rate);
37
static int audio_set_rate(struct audio_info_struct *ai)
39
int dsp_rate = ai->rate;
43
ret = ioctl(ai->fn, AIOCSSPEED, (void *)dsp_rate);
44
if (ret >= 0 && !real_rate_printed) {
45
ioctl(ai->fn,AIOCGSPEED,&real_rate);
46
if (real_rate != dsp_rate) {
47
fprintf(stderr, "Replay rate: %d Hz\n", real_rate);
48
real_rate_printed = 1;
57
static int audio_set_channels(struct audio_info_struct *ai)
59
int chan = ai->channels;
64
return ioctl(ai->fn, AIOCSCHAN, (void *)chan);
67
static int audio_set_format(struct audio_info_struct *ai)
75
case AUDIO_FORMAT_SIGNED_16:
79
case AUDIO_FORMAT_UNSIGNED_8:
82
case AUDIO_FORMAT_SIGNED_8:
85
case AUDIO_FORMAT_ULAW_8:
89
return ioctl(ai->fn, AIOCSFMT, (void *)fmts);
92
static int audio_reset_parameters(struct audio_info_struct *ai)
95
ret = ioctl(ai->fn,AIOCRESET,NULL);
97
ret = audio_set_format(ai);
99
ret = audio_set_channels(ai);
101
ret = audio_set_rate(ai);
107
int audio_open(struct audio_info_struct *ai)
113
ai->device = "/dev/audio";
115
ai->fn = open(ai->device,O_WRONLY);
119
fprintf(stderr,"Can't open %s!\n",ai->device);
122
ioctl(ai->fn, AIOCGBLKSIZE, &outburst);
123
if(outburst > MAXOUTBURST)
124
outburst = MAXOUTBURST;
125
if(audio_reset_parameters(ai) < 0) {
131
int audio_get_formats(struct audio_info_struct *ai)
136
if(ioctl(ai->fn,AIOCGFMTS,&fmts) < 0)
140
ret |= AUDIO_FORMAT_ULAW_8;
142
ret |= AUDIO_FORMAT_SIGNED_16;
144
ret |= AUDIO_FORMAT_UNSIGNED_8;
146
ret |= AUDIO_FORMAT_SIGNED_8;
151
int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len)
153
return write(ai->fn,buf,len);
156
int audio_close(struct audio_info_struct *ai)
162
void audio_queueflush(struct audio_info_struct *ai)