keypad piano project
Dependencies: 4DGL-uLCD-SE SDFileSystem Speaker mbed wave_player
Fork of Beat_Demo_full_full by
Diff: wavfile.c
- Revision:
- 1:90c01826cdb8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wavfile.c Tue Dec 08 00:45:23 2015 +0000 @@ -0,0 +1,83 @@ +/* +A simple sound library for CSE 20211 by Douglas Thain +For course assignments, you should not change this file. +For complete documentation, see: +http://www.nd.edu/~dthain/courses/cse20211/fall2013/wavfile +*/ + +#include "wavfile.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +struct wavfile_header { + char riff_tag[4]; + int riff_length; + char wave_tag[4]; + char fmt_tag[4]; + int fmt_length; + short audio_format; + short num_channels; + int sample_rate; + int byte_rate; + short block_align; + short bits_per_sample; + char data_tag[4]; + int data_length; +}; + +FILE * wavfile_open( const char *filename ) +{ + + struct wavfile_header header; + + int samples_per_second = WAVFILE_SAMPLES_PER_SECOND; + int bits_per_sample = 16; + + strncpy(header.riff_tag,"RIFF",4); + strncpy(header.wave_tag,"WAVE",4); + strncpy(header.fmt_tag,"fmt ",4); + strncpy(header.data_tag,"data",4); + + header.riff_length = 0; + header.fmt_length = 16; + header.audio_format = 1; + header.num_channels = 1; + header.sample_rate = samples_per_second; + header.byte_rate = samples_per_second*(bits_per_sample/8); + header.block_align = bits_per_sample/8; + header.bits_per_sample = bits_per_sample; + header.data_length = 0; + + + FILE * file = fopen(filename,"w"); + if(!file) return 0; + + fwrite(&header,sizeof(header),1,file); + + fflush(file); + + return file; + +} + +void wavfile_write( FILE *file, short data[], int length ) +{ + fwrite(data,sizeof(short),length,file); +} + +void wavfile_close( FILE *file ) +{ + int file_length = ftell(file); + + int data_length = file_length - sizeof(struct wavfile_header); + fseek(file,sizeof(struct wavfile_header) - sizeof(int),SEEK_SET); + fwrite(&data_length,sizeof(data_length),1,file); + + int riff_length = file_length - 8; + fseek(file,4,SEEK_SET); + fwrite(&riff_length,sizeof(riff_length),1,file); + + fclose(file); +}