keypad piano project

Dependencies:   4DGL-uLCD-SE SDFileSystem Speaker mbed wave_player

Fork of Beat_Demo_full_full by James Hawkins

Committer:
UnitedHolmes
Date:
Tue Dec 08 00:45:23 2015 +0000
Revision:
1:90c01826cdb8
no

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UnitedHolmes 1:90c01826cdb8 1 /*
UnitedHolmes 1:90c01826cdb8 2 A simple sound library for CSE 20211 by Douglas Thain
UnitedHolmes 1:90c01826cdb8 3 For course assignments, you should not change this file.
UnitedHolmes 1:90c01826cdb8 4 For complete documentation, see:
UnitedHolmes 1:90c01826cdb8 5 http://www.nd.edu/~dthain/courses/cse20211/fall2013/wavfile
UnitedHolmes 1:90c01826cdb8 6 */
UnitedHolmes 1:90c01826cdb8 7
UnitedHolmes 1:90c01826cdb8 8 #include "wavfile.h"
UnitedHolmes 1:90c01826cdb8 9
UnitedHolmes 1:90c01826cdb8 10 #include <stdio.h>
UnitedHolmes 1:90c01826cdb8 11 #include <stdlib.h>
UnitedHolmes 1:90c01826cdb8 12 #include <string.h>
UnitedHolmes 1:90c01826cdb8 13
UnitedHolmes 1:90c01826cdb8 14 struct wavfile_header {
UnitedHolmes 1:90c01826cdb8 15 char riff_tag[4];
UnitedHolmes 1:90c01826cdb8 16 int riff_length;
UnitedHolmes 1:90c01826cdb8 17 char wave_tag[4];
UnitedHolmes 1:90c01826cdb8 18 char fmt_tag[4];
UnitedHolmes 1:90c01826cdb8 19 int fmt_length;
UnitedHolmes 1:90c01826cdb8 20 short audio_format;
UnitedHolmes 1:90c01826cdb8 21 short num_channels;
UnitedHolmes 1:90c01826cdb8 22 int sample_rate;
UnitedHolmes 1:90c01826cdb8 23 int byte_rate;
UnitedHolmes 1:90c01826cdb8 24 short block_align;
UnitedHolmes 1:90c01826cdb8 25 short bits_per_sample;
UnitedHolmes 1:90c01826cdb8 26 char data_tag[4];
UnitedHolmes 1:90c01826cdb8 27 int data_length;
UnitedHolmes 1:90c01826cdb8 28 };
UnitedHolmes 1:90c01826cdb8 29
UnitedHolmes 1:90c01826cdb8 30 FILE * wavfile_open( const char *filename )
UnitedHolmes 1:90c01826cdb8 31 {
UnitedHolmes 1:90c01826cdb8 32
UnitedHolmes 1:90c01826cdb8 33 struct wavfile_header header;
UnitedHolmes 1:90c01826cdb8 34
UnitedHolmes 1:90c01826cdb8 35 int samples_per_second = WAVFILE_SAMPLES_PER_SECOND;
UnitedHolmes 1:90c01826cdb8 36 int bits_per_sample = 16;
UnitedHolmes 1:90c01826cdb8 37
UnitedHolmes 1:90c01826cdb8 38 strncpy(header.riff_tag,"RIFF",4);
UnitedHolmes 1:90c01826cdb8 39 strncpy(header.wave_tag,"WAVE",4);
UnitedHolmes 1:90c01826cdb8 40 strncpy(header.fmt_tag,"fmt ",4);
UnitedHolmes 1:90c01826cdb8 41 strncpy(header.data_tag,"data",4);
UnitedHolmes 1:90c01826cdb8 42
UnitedHolmes 1:90c01826cdb8 43 header.riff_length = 0;
UnitedHolmes 1:90c01826cdb8 44 header.fmt_length = 16;
UnitedHolmes 1:90c01826cdb8 45 header.audio_format = 1;
UnitedHolmes 1:90c01826cdb8 46 header.num_channels = 1;
UnitedHolmes 1:90c01826cdb8 47 header.sample_rate = samples_per_second;
UnitedHolmes 1:90c01826cdb8 48 header.byte_rate = samples_per_second*(bits_per_sample/8);
UnitedHolmes 1:90c01826cdb8 49 header.block_align = bits_per_sample/8;
UnitedHolmes 1:90c01826cdb8 50 header.bits_per_sample = bits_per_sample;
UnitedHolmes 1:90c01826cdb8 51 header.data_length = 0;
UnitedHolmes 1:90c01826cdb8 52
UnitedHolmes 1:90c01826cdb8 53
UnitedHolmes 1:90c01826cdb8 54 FILE * file = fopen(filename,"w");
UnitedHolmes 1:90c01826cdb8 55 if(!file) return 0;
UnitedHolmes 1:90c01826cdb8 56
UnitedHolmes 1:90c01826cdb8 57 fwrite(&header,sizeof(header),1,file);
UnitedHolmes 1:90c01826cdb8 58
UnitedHolmes 1:90c01826cdb8 59 fflush(file);
UnitedHolmes 1:90c01826cdb8 60
UnitedHolmes 1:90c01826cdb8 61 return file;
UnitedHolmes 1:90c01826cdb8 62
UnitedHolmes 1:90c01826cdb8 63 }
UnitedHolmes 1:90c01826cdb8 64
UnitedHolmes 1:90c01826cdb8 65 void wavfile_write( FILE *file, short data[], int length )
UnitedHolmes 1:90c01826cdb8 66 {
UnitedHolmes 1:90c01826cdb8 67 fwrite(data,sizeof(short),length,file);
UnitedHolmes 1:90c01826cdb8 68 }
UnitedHolmes 1:90c01826cdb8 69
UnitedHolmes 1:90c01826cdb8 70 void wavfile_close( FILE *file )
UnitedHolmes 1:90c01826cdb8 71 {
UnitedHolmes 1:90c01826cdb8 72 int file_length = ftell(file);
UnitedHolmes 1:90c01826cdb8 73
UnitedHolmes 1:90c01826cdb8 74 int data_length = file_length - sizeof(struct wavfile_header);
UnitedHolmes 1:90c01826cdb8 75 fseek(file,sizeof(struct wavfile_header) - sizeof(int),SEEK_SET);
UnitedHolmes 1:90c01826cdb8 76 fwrite(&data_length,sizeof(data_length),1,file);
UnitedHolmes 1:90c01826cdb8 77
UnitedHolmes 1:90c01826cdb8 78 int riff_length = file_length - 8;
UnitedHolmes 1:90c01826cdb8 79 fseek(file,4,SEEK_SET);
UnitedHolmes 1:90c01826cdb8 80 fwrite(&riff_length,sizeof(riff_length),1,file);
UnitedHolmes 1:90c01826cdb8 81
UnitedHolmes 1:90c01826cdb8 82 fclose(file);
UnitedHolmes 1:90c01826cdb8 83 }