Generators can have portamento.
[ahxm.git] / out_sgi.c
blobb1f6c5ba63fe68e6f63a7d2e174c3f15b32ef28a
1 /*
3 PROGRAM_NAME PROGRAM_VERSION - PROGRAM_DESCRIPTION
5 Copyright (C) 2003 Angel Ortega <angel@triptico.com>
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 http://www.triptico.com
25 #include "config.h"
27 #ifdef SGI
29 #include <stdio.h>
30 #include <dmedia/audio.h>
32 #include "core.h"
33 #include "output.h"
35 /*******************
36 Data
37 ********************/
39 /* audio configuration */
40 static ALconfig ac;
42 /* audio port */
43 static ALport ap;
45 /* handmade buffering */
46 #ifndef BUFFER_SIZE
47 #define BUFFER_SIZE 65536
48 #endif
50 static short _buffer[BUFFER_SIZE];
51 static int _bindex=0;
54 /*******************
55 Code
56 ********************/
58 int _out_open_sgi(char * file)
60 ALpv p[1];
62 ac=alNewConfig();
64 if(!ac) return(-100);
66 if(alSetChannels(ac, AL_STEREO)==-1)
67 return(-101);
69 if(alSetWidth(ac, AL_SAMPLE_16)==-1)
70 return(-102);
72 if(alSetSampFmt(ac, AL_SAMPFMT_TWOSCOMP)==-1)
73 return(-103);
75 if(alSetQueueSize(ac, 131069)==-1)
76 return(-104);
78 if(alSetDevice(ac, AL_DEFAULT_OUTPUT)==-1)
79 return(-105);
81 p[0].param=AL_OUTPUT_RATE;
82 p[0].value.ll=alDoubleToFixed((double)_frequency);
84 if(alSetParams(alGetDevice(ac), p, 1)==-1)
85 return(-106);
87 ap=alOpenPort("Ann Hell", "w", ac);
89 if(!ap) return(-107);
91 return(0);
95 int _out_write_sgi(int lsample, int rsample)
97 _buffer[_bindex++]=(short)lsample;
98 _buffer[_bindex++]=(short)rsample;
100 if(_bindex==BUFFER_SIZE)
102 alWriteFrames(ap, _buffer, BUFFER_SIZE / 2);
103 _bindex=0;
106 return(0);
110 int _out_close_sgi(void)
112 alClosePort(ap);
113 alFreeConfig(ac);
115 return(0);
118 #endif /* SGI */