Decode Wav files

Files at this revision

API Documentation at this revision

Comitter:
UHSLMarcus
Date:
Wed Mar 01 10:35:59 2017 +0000
Parent:
1:c1046d91bff7
Commit message:
trying triple buffered aproach

Changed in this revision

WAV_Reader.cpp Show annotated file Show diff for this revision Revisions of this file
WAV_Reader.h Show annotated file Show diff for this revision Revisions of this file
--- a/WAV_Reader.cpp	Fri Feb 24 15:18:01 2017 +0000
+++ b/WAV_Reader.cpp	Wed Mar 01 10:35:59 2017 +0000
@@ -65,9 +65,9 @@
     return success;
 }
 
-int WAV_Reader::read(char buff[], int len) {
+int WAV_Reader::read(int buff[], int size, int len) {
     int data_left = config.data_length - _current_pos;
-    int to_read = len;
+    int to_read = len*size;
 
     if (to_read > data_left) {
         if (data_left == 0 && _loop) {
@@ -77,15 +77,22 @@
         }
     }
 
-    size_t ret = fread(buff, 1, to_read, *fpp);
-    move_read_position(ret, _current_pos);
+    char* bytes = new char[to_read];
+    size_t read_bytes = fread(bytes, 1, to_read, *fpp);
+    read_bytes -= read_bytes % size;
+    int count = 0;
+    for (int i = 0; i < read_bytes; i += size){
+    	buff[count++] = get_num(bytes+i, size);
+    }
+    delete[] bytes;
+    move_read_position(read_bytes, _current_pos);
 
-    to_read = len - ret;
+    to_read = len*size - read_bytes;
     if (to_read > 0 && _loop) {
-        ret += read(buff + ret, to_read);
+        read_bytes += read(buff + read_bytes/size, size, to_read);
     }
 
-    return ret;
+    return read_bytes;
 }
 
 void WAV_Reader::reset() {
@@ -114,6 +121,10 @@
     return config.samples_per_sec;
 }
 
+uint32_t WAV_Reader::bytes_per_sec() {
+	return config.avg_bytes_per_sec;
+}
+
 uint16_t WAV_Reader::block_align() {
     return config.block_align;
 }
@@ -122,6 +133,10 @@
     return config.bits_per_sample;
 }
 
+uint32_t WAV_Reader::data_length() {
+	return config.data_length;
+}
+
 /** Private **/
 
 int WAV_Reader::read_bytes(FILE *fp, char* out, int len_to_read, int start_off) {
@@ -158,7 +173,7 @@
 
     uint32_t output = 0;
     for (int i = 0; i < byte_count; i++) {
-        // numbers are stored least significant byte in the WAV header. So reverse and add to find the number
+        // numbers are stored least significant byte. So reverse and add to find the number
         output += input[i] << (i * 8);
     }
 
@@ -168,7 +183,7 @@
 
 int WAV_Reader::find_chunk(FILE *fp, char* check, int max_len, int start) {
     int result = -1;
-    char extracted[5];
+
     int pos = start;
 
     while ((pos + 8) < max_len && result == -1) {
--- a/WAV_Reader.h	Fri Feb 24 15:18:01 2017 +0000
+++ b/WAV_Reader.h	Wed Mar 01 10:35:59 2017 +0000
@@ -39,15 +39,17 @@
 
         WAV_Reader();
         int open(FILE **filepp);
-        int read(char buff[], int len);
+        int read(int buff[], int size, int len);
         void reset();
         void seek(int num, int start = -1);
         bool loop();
         void loop(bool enable);
         uint16_t channels();
         uint32_t samples_per_sec();
+        uint32_t bytes_per_sec();
         uint16_t block_align();
         uint16_t bits_per_sample();
+        uint32_t data_length();
 
     private:
         FILE ** fpp;