Error code unification.
[ahxm.git] / out_wav.c
blob4efb14cd0823b1f9ae308e5851b7ce9e1ef6c7cd
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 <stdio.h>
26 #include "output.h"
28 /*******************
29 Data
30 ********************/
32 extern int _frequency;
34 static FILE * f;
36 /* file positions where total number of samples is stored */
37 static long _p1, _p2;
39 /* sample count */
40 static int _sample_count;
42 /*******************
43 Code
44 ********************/
46 int _out_open_wav(char * file)
48 if((f=fopen(file, "w"))==NULL)
49 return(-100);
51 /* write wav header */
53 fwrite("RIFF",1,4,f);
54 _p1=ftell(f);
55 fput32(36, f);
56 fwrite("WAVE",1,4,f);
57 fwrite("fmt ",1,4,f);
58 fput32(16,f);
59 fput32(0x00020001, f);
60 fput32(_frequency, f);
61 fput32(_frequency * 4,f);
62 fput32(0x00100004, f);
63 fwrite("data",1,4,f);
64 _p2=ftell(f);
65 fput32(0, f);
67 _sample_count=0;
69 return(0);
73 int _out_write_wav(int lsample, int rsample)
75 fput16(lsample, f);
76 fput16(rsample, f);
78 _sample_count++;
80 return(0);
84 int _out_close_wav(void)
86 /* rewind file and write total size */
87 fseek(f, _p1, SEEK_SET);
88 fput32((_sample_count * 4) + 36, f);
90 fseek(f, _p2, SEEK_SET);
91 fput32(_sample_count * 4, f);
93 fclose(f);
95 return(0);