diff --git a/samplebrain/Makefile.in b/samplebrain/Makefile.in index c13d21b..67aeb3b 100644 --- a/samplebrain/Makefile.in +++ b/samplebrain/Makefile.in @@ -16,7 +16,7 @@ SRCS := src/fft.cpp \ TARGET_SRCS := src/main.cpp # @CFLAGS@ -CCFLAGS = -Ofast -march=native -mtune=native -std=c++11 -ffast-math -Wno-unused -Isrc -I/opt/local/include +CCFLAGS = -g -Ofast -march=native -mtune=native -std=c++11 -ffast-math -Wno-unused -Isrc -I/opt/local/include LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ diff --git a/samplebrain/interface/buttons.svg b/samplebrain/interface/buttons.svg new file mode 100644 index 0000000..f689ce8 --- /dev/null +++ b/samplebrain/interface/buttons.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/samplebrain/src/aquila/filter/MelFilter.dep b/samplebrain/src/aquila/filter/MelFilter.dep index 7f839c8..a8f6135 100644 --- a/samplebrain/src/aquila/filter/MelFilter.dep +++ b/samplebrain/src/aquila/filter/MelFilter.dep @@ -1,2 +1,2 @@ MelFilter.o: src/aquila/filter/MelFilter.cpp \ - src/aquila/filter/MelFilter.h src/aquila/filter/../global.h + src/aquila/filter/MelFilter.h src/aquila/filter/../global.h diff --git a/samplebrain/src/aquila/filter/MelFilterBank.dep b/samplebrain/src/aquila/filter/MelFilterBank.dep index c185fee..66f6b52 100644 --- a/samplebrain/src/aquila/filter/MelFilterBank.dep +++ b/samplebrain/src/aquila/filter/MelFilterBank.dep @@ -1,3 +1,3 @@ MelFilterBank.o: src/aquila/filter/MelFilterBank.cpp \ - src/aquila/filter/MelFilterBank.h src/aquila/filter/../global.h \ - src/aquila/filter/MelFilter.h + src/aquila/filter/MelFilterBank.h src/aquila/filter/../global.h \ + src/aquila/filter/MelFilter.h diff --git a/samplebrain/src/aquila/transform/Dct.dep b/samplebrain/src/aquila/transform/Dct.dep index 728d5d1..42a89f3 100644 --- a/samplebrain/src/aquila/transform/Dct.dep +++ b/samplebrain/src/aquila/transform/Dct.dep @@ -1,2 +1,2 @@ Dct.o: src/aquila/transform/Dct.cpp src/aquila/transform/Dct.h \ - src/aquila/transform/../global.h + src/aquila/transform/../global.h diff --git a/samplebrain/src/block.cpp b/samplebrain/src/block.cpp index 73d369d..96f19f3 100644 --- a/samplebrain/src/block.cpp +++ b/samplebrain/src/block.cpp @@ -180,8 +180,24 @@ double block::compare(const block &other, const search_params ¶ms) const { other.m_usage, params.m_usage_importance); } +ios &spiralcore::operator||(ios &s, block &b) { + u32 version=1; + string id("block"); + s||id||version; + + s||b.m_pcm||b.m_fft||b.m_mfcc; + s||b.m_n_pcm||b.m_n_fft||b.m_n_mfcc; + + s||b.m_block_size||b.m_rate||b.m_orig_filename; + stream_vector(s,b.m_synapse); + return s; +} + + bool block::unit_test() { + stream_unit_test(); + sample ntest(3); u32 idx=0; ntest[idx++]=-1; @@ -228,6 +244,25 @@ bool block::unit_test() { assert(bb.m_rate==44100); assert(bb.m_block_size==data.get_length()); + ofstream of("test_data/blocktest.bin",ios::binary); + of||bb; + of.close(); + + cerr<<"written"< m_synapse; float m_usage; + friend ios &operator||(ios &s, block &b); + }; +ios &operator||(ios &s, block &b); + } #endif diff --git a/samplebrain/src/brain.cpp b/samplebrain/src/brain.cpp index f18378e..794114b 100644 --- a/samplebrain/src/brain.cpp +++ b/samplebrain/src/brain.cpp @@ -223,6 +223,23 @@ void brain::deplete_usage() { } */ +ios &spiralcore::operator||(ios &s, brain::sound &b) { + u32 version=0; + string id("brain::sound"); + s||id||version; + s||b.m_filename||b.m_sample; +} + +ios &spiralcore::operator||(ios &s, brain &b) { + u32 version=0; + string id("brain"); + s||id||version; + s||b.m_blocks; + stream_list(s,b.m_samples); + s||b.m_block_size||b.m_overlap||b.m_window; + s||b.m_current_block_index||b.m_average_error||b.m_usage_falloff; +} + bool brain::unit_test() { brain b; assert(b.m_samples.size()==0); @@ -258,6 +275,24 @@ bool brain::unit_test() { assert(b3.search(b2.m_blocks[19],p)==19); assert(b3.search(b2.m_blocks[29],p)==29); + ofstream of("test_data/test.brain",ios::binary); + of||b3; + of.close(); + + brain b4; + ifstream ifs("test_data/test.brain",ios::binary); + ifs||b4; + ifs.close(); + + + assert(b4.search(b2.m_blocks[0],p)==0); + assert(b4.search(b2.m_blocks[9],p)==9); + assert(b4.search(b2.m_blocks[19],p)==19); + assert(b4.search(b2.m_blocks[29],p)==29); + + + cerr<<"!!!"<(&s); + if (pos!=NULL) { + u32 size=0; + // get the size from the first window + if (b.m_windows.size()>0) { + size=b.m_windows[0]->get_length(); + } + s||size; + } else { + u32 size=0; + s||size; + // reinit using size if we are reading in + b.init(size); + } + return s; +} diff --git a/samplebrain/src/window.h b/samplebrain/src/window.h index e60d3ab..a4e29ba 100644 --- a/samplebrain/src/window.h +++ b/samplebrain/src/window.h @@ -44,6 +44,8 @@ public: void set_current_type(type t) { m_current_type=t; } void run(const sample &sample) const; + friend ios &operator||(ios &s, window &b); + private: void clear(); @@ -53,6 +55,8 @@ private: }; +ios &operator||(ios &s, window &b); + } #endif diff --git a/samplebrain/test_data/noise.wav b/samplebrain/test_data/noise.wav new file mode 100644 index 0000000..1855b33 Binary files /dev/null and b/samplebrain/test_data/noise.wav differ diff --git a/samplebrain/test_data/up.wav b/samplebrain/test_data/up.wav new file mode 100644 index 0000000..f5d6f40 Binary files /dev/null and b/samplebrain/test_data/up.wav differ diff --git a/test.cpp b/test.cpp index d9830d6..3bc0031 100644 --- a/test.cpp +++ b/test.cpp @@ -4,6 +4,9 @@ #include #include +#include + + using namespace std; class desc { @@ -54,9 +57,89 @@ public: } }; + + +templateios &operator||(ios &s, T &v) { + ofstream *pos=dynamic_cast(&s); + if (pos!=NULL) { + ofstream &os = *pos; + return os.write((char*)(&v),sizeof(T)); + } + else + { + ifstream *pis=dynamic_cast(&s); + assert(pis); + ifstream &is = *pis; + return is.read((char *)(&v),sizeof(T)); + } +} + +templateios &stream_array(ios &s, T *v, size_t &len) { + ofstream *pos=dynamic_cast(&s); + if (pos!=NULL) { + ofstream &os = *pos; + os||len; + return os.write((char*)v,sizeof(T)*len); + } + else + { + ifstream *pis=dynamic_cast(&s); + assert(pis); + ifstream &is = *pis; + is||len; + return is.read((char *)v,sizeof(T)*len); + } +} + + + + +class sertest { +public: + sertest() { + size = 100; + buf = new float[size]; + } + + void build() { + for (unsigned int n=0; n