Decode Wav files
WAV_Reader.h@2:18fdd269b401, 2017-03-01 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |