diff options
Diffstat (limited to 'src/audiofile.cc')
-rw-r--r-- | src/audiofile.cc | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/src/audiofile.cc b/src/audiofile.cc index 9c00bed..2533b33 100644 --- a/src/audiofile.cc +++ b/src/audiofile.cc @@ -31,22 +31,12 @@ #include <sndfile.h> -AudioFile::AudioFile(std::string filename, bool preload, int min_velocity) +AudioFile::AudioFile(std::string filename) { this->filename = filename; + data = NULL; size = 0; - - char *p = (char*)filename.c_str() + filename.length() - 6; - int num = atoi(p); - if(num < 0) num *= -1; - - //printf("%s", filename.c_str()); - if(preload && num >= min_velocity) { - //printf(" ... loading"); - load(); - } - printf("."); fflush(stdout); } AudioFile::~AudioFile() @@ -56,40 +46,29 @@ AudioFile::~AudioFile() void AudioFile::unload() { - if(!data) return; - - free(data); - data = NULL; - size = 0; + if(data) { + delete data; + data = NULL; + size = 0; + } } -#define THRESHOLD 0.0001 void AudioFile::load() { if(data) return; - SF_INFO sf_info; - SNDFILE *fh = sf_open(filename.c_str(), SFM_READ, &sf_info); - - size = sf_seek(fh, 0, SEEK_END); - jack_default_audio_sample_t* tmp_data = (jack_default_audio_sample_t*)malloc(sizeof(jack_default_audio_sample_t)*size); - - // printf("Loading %s, %d samples\n", filename.c_str(), size); - - sf_seek(fh, 0, SEEK_SET); - sf_read_float(fh, tmp_data, size); - - // for(size_t i = 0; i < size; i++) data[i] *= 0.1; - - sf_close(fh); - - // Find real size (crop 'silence') - while(size > 0 && tmp_data[size--] < THRESHOLD) {} - data = (jack_default_audio_sample_t*)malloc(sizeof(jack_default_audio_sample_t)*size); - for(size_t i = 0; i < size; i++) data[i] = tmp_data[i]; - // ramp down - // if(size > 1024) for(size_t i = 1024; i >= 0; i--) data[size - i] *= (float)i/1024.0; - free(tmp_data); - + SF_INFO sf_info; + SNDFILE *fh = sf_open(filename.c_str(), SFM_READ, &sf_info); + if(!fh) { + printf("Load error...\n"); + return; + } + + size = sf_info.frames; + data = new sample_t[size]; + + sf_read_float(fh, data, size); + + sf_close(fh); } |