Skip to content

Commit c4b7520

Browse files
author
Martin Klang
committed
added WavFile::read()
1 parent 524f608 commit c4b7520

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

LibSource/WavFile.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,38 +75,41 @@ class WavFile {
7575
void* getData(){
7676
return datachunk->id + sizeof(WavDataChunk);
7777
}
78-
FloatArray createFloatArray(size_t channel){
78+
void read(size_t channel, FloatArray output){
7979
size_t channels = getNumberOfChannels();
80-
size_t len = getNumberOfSamples();
80+
size_t len = min(output.getSize(), getNumberOfSamples());
8181
size_t pos = channel % channels;
82-
FloatArray result = FloatArray::create(len);
8382
if(header->audio_format == 1 && header->bps == 8){ // WAVE_FORMAT_PCM 8-bit
8483
int8_t* data = (int8_t*)getData();
8584
for(size_t i=0; i<len; ++i){
86-
result[i] = (float)data[pos] / 128.0f;
85+
output[i] = (float)data[pos] / 128.0f;
8786
pos += channels;
8887
}
8988
}else if(header->audio_format == 1 && header->bps == 16){ // WAVE_FORMAT_PCM 16-bit
9089
int16_t* data = (int16_t*)getData();
9190
for(size_t i=0; i<len; ++i){
92-
result[i] = (float)data[pos] / 32768.0f;
91+
output[i] = (float)data[pos] / 32768.0f;
9392
pos += channels;
9493
}
9594
// todo: 24-bit data needs decoding
9695
// }else if(header->audio_format == 1 && header->bps == 24){ // WAVE_FORMAT_PCM 24-bit
9796
// int32_t* data = (int32_t*)getData();
9897
// for(size_t i=0; i<len; ++i){
99-
// result[i] = (float)data[pos] / 8388608.0f;
98+
// output[i] = (float)data[pos] / 8388608.0f;
10099
// pos += channels;
101100
// }
102101
}else if(header->audio_format == 3 && header->bps == 32){ // WAVE_FORMAT_IEEE_FLOAT
103102
float* data = (float*)getData();
104103
for(size_t i=0; i<len; ++i){
105-
result[i] = data[pos];
104+
output[i] = data[pos];
106105
pos += channels;
107106
}
108107
}
109-
return result;
108+
}
109+
FloatArray createFloatArray(size_t channel){
110+
FloatArray output = FloatArray::create(getNumberOfSamples());
111+
read(channel, output);
112+
return output;
110113
}
111114
};
112115

0 commit comments

Comments
 (0)