Revision 2:18fdd269b401, committed 2017-03-01
- Comitter:
- UHSLMarcus
- Date:
- Wed Mar 01 10:35:59 2017 +0000
- Parent:
- 1:c1046d91bff7
- Commit message:
- trying triple buffered aproach
Changed in this revision
diff -r c1046d91bff7 -r 18fdd269b401 WAV_Reader.cpp
--- 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) {
diff -r c1046d91bff7 -r 18fdd269b401 WAV_Reader.h
--- 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;