Decode Wav files

Committer:
UHSLMarcus
Date:
Wed Mar 01 10:35:59 2017 +0000
Revision:
2:18fdd269b401
Parent:
1:c1046d91bff7
trying triple buffered aproach

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 1:c1046d91bff7 1 /*
UHSLMarcus 1:c1046d91bff7 2 * WAV_Reader.h
UHSLMarcus 1:c1046d91bff7 3 *
UHSLMarcus 1:c1046d91bff7 4 * Created on: 23 Feb 2017
UHSLMarcus 1:c1046d91bff7 5 * Author: ML15AAF
UHSLMarcus 1:c1046d91bff7 6 */
UHSLMarcus 1:c1046d91bff7 7
UHSLMarcus 1:c1046d91bff7 8 #ifndef WAV_READER_H_
UHSLMarcus 1:c1046d91bff7 9 #define WAV_READER_H_
UHSLMarcus 1:c1046d91bff7 10
UHSLMarcus 1:c1046d91bff7 11 #include <mbed.h>
UHSLMarcus 1:c1046d91bff7 12
UHSLMarcus 1:c1046d91bff7 13 /* ERROR CONST */
UHSLMarcus 1:c1046d91bff7 14 /* FILE OPEN */
UHSLMarcus 1:c1046d91bff7 15 #define WAV_READER_FO_NULL_PTR -1
UHSLMarcus 1:c1046d91bff7 16 #define WAV_READER_FO_NOT_RIFF -2
UHSLMarcus 1:c1046d91bff7 17 #define WAV_READER_FO_NOT_WAV -3
UHSLMarcus 1:c1046d91bff7 18 #define WAV_READER_FO_NO_FMT -4
UHSLMarcus 1:c1046d91bff7 19 #define WAV_READER_FO_NO_DATA -5
UHSLMarcus 1:c1046d91bff7 20 #define WAV_READER_FO_NO_DATA_FMT -9
UHSLMarcus 1:c1046d91bff7 21
UHSLMarcus 1:c1046d91bff7 22 class WAV_Reader {
UHSLMarcus 1:c1046d91bff7 23
UHSLMarcus 1:c1046d91bff7 24 public:
UHSLMarcus 1:c1046d91bff7 25
UHSLMarcus 1:c1046d91bff7 26 struct Config {
UHSLMarcus 1:c1046d91bff7 27 uint16_t format_tag;
UHSLMarcus 1:c1046d91bff7 28 uint16_t channels;
UHSLMarcus 1:c1046d91bff7 29 uint32_t samples_per_sec;
UHSLMarcus 1:c1046d91bff7 30 uint32_t avg_bytes_per_sec;
UHSLMarcus 1:c1046d91bff7 31 uint16_t block_align;
UHSLMarcus 1:c1046d91bff7 32 uint16_t bits_per_sample;
UHSLMarcus 1:c1046d91bff7 33 uint32_t data_pos;
UHSLMarcus 1:c1046d91bff7 34 uint32_t data_length;
UHSLMarcus 1:c1046d91bff7 35 uint32_t file_size;
UHSLMarcus 1:c1046d91bff7 36
UHSLMarcus 1:c1046d91bff7 37 Config();
UHSLMarcus 1:c1046d91bff7 38 };
UHSLMarcus 1:c1046d91bff7 39
UHSLMarcus 1:c1046d91bff7 40 WAV_Reader();
UHSLMarcus 1:c1046d91bff7 41 int open(FILE **filepp);
UHSLMarcus 2:18fdd269b401 42 int read(int buff[], int size, int len);
UHSLMarcus 1:c1046d91bff7 43 void reset();
UHSLMarcus 1:c1046d91bff7 44 void seek(int num, int start = -1);
UHSLMarcus 1:c1046d91bff7 45 bool loop();
UHSLMarcus 1:c1046d91bff7 46 void loop(bool enable);
UHSLMarcus 1:c1046d91bff7 47 uint16_t channels();
UHSLMarcus 1:c1046d91bff7 48 uint32_t samples_per_sec();
UHSLMarcus 2:18fdd269b401 49 uint32_t bytes_per_sec();
UHSLMarcus 1:c1046d91bff7 50 uint16_t block_align();
UHSLMarcus 1:c1046d91bff7 51 uint16_t bits_per_sample();
UHSLMarcus 2:18fdd269b401 52 uint32_t data_length();
UHSLMarcus 1:c1046d91bff7 53
UHSLMarcus 1:c1046d91bff7 54 private:
UHSLMarcus 1:c1046d91bff7 55 FILE ** fpp;
UHSLMarcus 1:c1046d91bff7 56 int _current_pos;
UHSLMarcus 1:c1046d91bff7 57 bool _loop;
UHSLMarcus 1:c1046d91bff7 58
UHSLMarcus 1:c1046d91bff7 59 Config config;
UHSLMarcus 1:c1046d91bff7 60
UHSLMarcus 1:c1046d91bff7 61 int read_bytes(FILE *fp, char* out, int len_to_read, int start_off = 0);
UHSLMarcus 1:c1046d91bff7 62 bool check_bytes(FILE *fp, char* check, int len, int start = 0);
UHSLMarcus 1:c1046d91bff7 63 uint32_t read_num(FILE *fp, int len, int start = 0);
UHSLMarcus 1:c1046d91bff7 64 uint32_t get_num(char input[], int byte_count);
UHSLMarcus 1:c1046d91bff7 65 int find_chunk(FILE *fp, char* check, int max_len, int start = 0);
UHSLMarcus 1:c1046d91bff7 66 int move_read_position(int count, int start);
UHSLMarcus 1:c1046d91bff7 67 };
UHSLMarcus 1:c1046d91bff7 68
UHSLMarcus 1:c1046d91bff7 69 #endif /* WAV_READER_H_ */