diff --git a/samplebrain/src/brain.cpp b/samplebrain/src/brain.cpp index 5fa8173..229518d 100644 --- a/samplebrain/src/brain.cpp +++ b/samplebrain/src/brain.cpp @@ -45,14 +45,23 @@ void brain::load_sound(std::string filename) { SNDFILE* f=sf_open(filename.c_str(), SFM_READ, &sfinfo); if (f!=NULL) { sample s(sfinfo.frames); - sf_readf_float(f, s.get_non_const_buffer(), s.get_length()); + float *temp = new float[sfinfo.channels * sfinfo.frames]; + sf_readf_float(f, temp, sfinfo.channels * sfinfo.frames); + // mix down stereo to mono + for(u32 i=0; i::iterator i=m_samples.begin(); i!=m_samples.end(); ++i) { + for (auto i=m_samples.begin(); i!=m_samples.end(); ++i) { if (i->m_filename==filename) { m_samples.erase(i); status::update("deleted %s",filename.c_str()); @@ -75,9 +84,9 @@ void brain::init(u32 block_size, u32 overlap, window::type t, bool ditchpcm) { m_window.init(block_size); m_window.set_current_type(t); u32 count=0; - for (std::list::iterator i=m_samples.begin(); i!=m_samples.end(); ++i) { + for (auto s : m_samples) { count++; - chop_and_add(*i, count, ditchpcm); + chop_and_add(s, count, ditchpcm); } status::update("all samples processed"); } @@ -123,8 +132,8 @@ u32 brain::search(const block &target, const search_params ¶ms) { double closest = FLT_MAX; u32 closest_index = 0; u32 index = 0; - for (vector::const_iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) { - double diff = target.compare(*i,params); + for (auto b : m_blocks) { + double diff = target.compare(b,params); if (diff::const_iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) { - double diff = target.compare(*i,params); + for (auto b:m_blocks) { + double diff = target.compare(b,params); if (diff>furthest) { furthest=diff; furthest_index = index; @@ -160,9 +169,9 @@ u32 brain::rev_search(const block &target, const search_params ¶ms) { // really slow - every to every comparison of blocks calculating average distance double brain::calc_average_diff(search_params ¶ms) { double diff=0; - for (vector::const_iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) { - for (vector::const_iterator j=m_blocks.begin(); j!=m_blocks.end(); ++j) { - diff += j->compare(*i,params); + for (auto i:m_blocks) { + for (auto j:m_blocks) { + diff += j.compare(i,params); } diff/=(double)m_blocks.size(); } @@ -174,15 +183,15 @@ void brain::build_synapses_thresh(search_params ¶ms, double thresh) { double err = m_average_error*thresh; u32 brain_size = m_blocks.size(); u32 outer_index = 0; - for (vector::iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) { + for (auto i:m_blocks) { u32 index = 0; status::update("building synapses %d%%",(int)(outer_index/(float)brain_size*100)); - for (vector::const_iterator j=m_blocks.begin(); j!=m_blocks.end(); ++j) { + for (auto j:m_blocks) { if (index!=outer_index) { // collect connections that are under threshold in closeness - double diff = i->compare(*j,params); + double diff = i.compare(j,params); if (diffget_synapse().push_back(index); + i.get_synapse().push_back(index); } } ++index; @@ -198,17 +207,17 @@ void brain::build_synapses_fixed(search_params ¶ms) { u32 num_synapses = NUM_FIXED_SYNAPSES; if (num_synapses>=m_blocks.size()) num_synapses=m_blocks.size()-1; - for (vector::iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) { + for (auto i:m_blocks) { status::update("building synapses %d%%",(int)(outer_index/(float)brain_size*100)); u32 index = 0; vector> collect; // collect comparisons to all other blocks - for (vector::const_iterator j=m_blocks.begin(); j!=m_blocks.end(); ++j) { + for (auto j:m_blocks) { assert(indexcompare(*j,params); - collect.push_back(pair(index,diff)); + double diff = i.compare(j,params); + collect.push_back(pair(index,diff)); } ++index; } @@ -224,8 +233,7 @@ void brain::build_synapses_fixed(search_params ¶ms) { // add the closest ones to the list for(u32 n=0; nget_synapse().push_back(collect[n].first); + i.get_synapse().push_back(collect[n].first); } ++outer_index;