TIME2SAMPLES macro moved to core.h.
[ahxm.git] / out_wav.c
blob14f3ac6b820b19acf458546d0c8806df38226930
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 #include <stdio.h>
29 #include "core.h"
30 #include "output.h"
32 /*******************
33 Data
34 ********************/
36 static FILE * f;
38 /* file positions where total number of samples is stored */
39 static long _p1, _p2;
41 /* sample count */
42 static int _sample_count;
44 /*******************
45 Code
46 ********************/
48 int _out_open_wav(char * file)
50 if((f=fopen(file, "w"))==NULL)
51 return(-100);
53 /* write wav header */
55 fwrite("RIFF",1,4,f);
56 _p1=ftell(f);
57 fput32(36, f);
58 fwrite("WAVE",1,4,f);
59 fwrite("fmt ",1,4,f);
60 fput32(16,f);
61 fput32(0x00020001, f);
62 fput32(_frequency, f);
63 fput32(_frequency * 4,f);
64 fput32(0x00100004, f);
65 fwrite("data",1,4,f);
66 _p2=ftell(f);
67 fput32(0, f);
69 _sample_count=0;
71 return(0);
75 int _out_write_wav(int lsample, int rsample)
77 fput16(lsample, f);
78 fput16(rsample, f);
80 _sample_count++;
82 return(0);
86 int _out_close_wav(void)
88 /* rewind file and write total size */
89 fseek(f, _p1, SEEK_SET);
90 fput32((_sample_count * 4) + 36, f);
92 fseek(f, _p2, SEEK_SET);
93 fput32(_sample_count * 4, f);
95 fclose(f);
97 return(0);