From fcf34b20d40d511cbc36964d53fa00656ad8807a Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sun, 19 May 2013 19:20:08 +0200 Subject: initial commit --- wav.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 wav.c (limited to 'wav.c') diff --git a/wav.c b/wav.c new file mode 100644 index 0000000..e2ca4fd --- /dev/null +++ b/wav.c @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2010 Florian Jung + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + + + +#include + + + +void u16cpy(char *dest, int src) +{ + dest[0]=src%256; + dest[1]=src/256; +} + +void s16cpy(char *dest, int src) +{ + if (src<0) + src=(~(-src))+1; + + u16cpy(dest,src); +} + +void u32cpy(char *dest, long int src) +{ + dest[0]=src%256; + dest[1]=(src/256)%256; + dest[2]=(src/256/256)%256; + dest[3]=(src/256/256/256)%256; +} + +int main(int argc, char** argv) +{ + FILE *f; + f=fopen("test.wav","w"); + + //char buf[44]; + char buf[244]; + + int datalen,filelen,n_chans,samp_rate,bytes; + + datalen=100; + n_chans=1; + samp_rate=22050; + bytes=2; + + + filelen=12 + 24 + 8+datalen; //RIFFWAVE|fmt |DATA + + strcpy(buf+ 0, "RIFF"); + u32cpy(buf+ 4, filelen-8); + strcpy(buf+ 8, "WAVE"); + + strcpy(buf+12, "fmt "); + u32cpy(buf+16, 16); + u16cpy(buf+20, 1); // format=1 (PCM) + u16cpy(buf+22, n_chans); // mono + u32cpy(buf+24, samp_rate); + u32cpy(buf+28, samp_rate*n_chans*bytes); + u16cpy(buf+32, n_chans*bytes); + u16cpy(buf+34, bytes*8); + + strcpy(buf+36, "data"); + u32cpy(buf+40, datalen); + //data follows + + int i; + for (i=0;i<100;i++) + { + s16cpy(buf+i*2+44, sin((double)i/50.0*3.141592654*2)*30000); + //buf[i*2+44]= (sin((double)i/100.0*3.141592654*2)*30000); + } + + + fwrite(buf,1,244,f); + fclose(f); + + return 0; +} -- cgit v1.2.1