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 @@
+
+
+
+
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