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/interface/samplebrain.ui b/samplebrain/interface/samplebrain.ui
index 00de903..edda3a6 100644
--- a/samplebrain/interface/samplebrain.ui
+++ b/samplebrain/interface/samplebrain.ui
@@ -6,12 +6,12 @@
0
0
- 643
- 619
+ 1134
+ 691
- samplebrain 0.0.5
+ samplebrain 0.6
@@ -31,7 +31,7 @@
search
-
+
-
-
@@ -77,6 +77,9 @@
plain fft match vs mfcc values
+
+ 100
+
50
@@ -134,6 +137,9 @@
match original or normalised blocks
+
+ 100
+
0
@@ -273,6 +279,9 @@
use new blocks rather than similar ones
+
+ 100
+
0
@@ -333,6 +342,9 @@
how long it takes for the novelty to ware off
+
+ 100
+
0
@@ -363,27 +375,151 @@
-
-
-
-
- 0
- 0
-
-
-
-
+
+
-
+
+
+
+ Comic Sans MS
+ 9
+ 75
+ true
+
+
+
+
+
+
+ synpases
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ how many connections to search (ordered in closeness)
+
+
+ 1000
+
+
+ 20
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ how many connections to search (ordered in closeness)
+
+
+ 1000
+
+
+ 20
+
+
+
+
+
+ -
+
+
+
+ Comic Sans MS
+ 10
+ 75
+ true
+
- search for least similar
-
-
-
- 16
- 16
-
+ algorithm
+ -
+
+
-
+
+
+ full brain search
+
+
+ basic
+
+
+ true
+
+
+ buttonGroup_3
+
+
+
+ -
+
+
+ full brain reverse search
+
+
+ rev basic
+
+
+ buttonGroup_3
+
+
+
+ -
+
+
+ search based on synapse connections
+
+
+ synaptic
+
+
+ false
+
+
+ buttonGroup_3
+
+
+
+ -
+
+
+ false
+
+
+ search based on synapses and sonify search process
+
+
+ synaptic slide
+
+
+ true
+
+
+ buttonGroup_3
+
+
+
+
+
-
@@ -391,7 +527,7 @@
- 40
+ 21
20
@@ -641,6 +777,9 @@
bartlett
+
+ buttonGroup_2
+
-
@@ -648,6 +787,9 @@
blackman
+
+ buttonGroup_2
+
-
@@ -655,6 +797,9 @@
gaussian
+
+ buttonGroup_2
+
-
@@ -662,6 +807,9 @@
hamming
+
+ buttonGroup_2
+
-
@@ -669,6 +817,9 @@
hann
+
+ buttonGroup_2
+
-
@@ -676,6 +827,9 @@
flat top
+
+ buttonGroup_2
+
-
@@ -686,6 +840,9 @@
true
+
+ buttonGroup_2
+
-
@@ -693,6 +850,9 @@
rectangle
+
+ buttonGroup_2
+
-
@@ -733,13 +893,6 @@
-
-
-
-
- brain
-
-
-
-
@@ -818,14 +971,27 @@
-
-
-
-
+
-
+
- bartlett
+ gaussian
+
+ buttonGroup
+
- -
+
-
+
+
+ hamming
+
+
+ buttonGroup
+
+
+
+ -
dodgy
@@ -833,51 +999,62 @@
true
+
+ buttonGroup
+
- -
+
-
blackman
+
+ buttonGroup
+
- -
-
-
- gaussian
-
-
-
- -
-
-
- hamming
-
-
-
- -
-
-
- hann
-
-
-
- -
-
-
- flat top
-
-
-
- -
+
-
rectangle
+
+ buttonGroup
+
- -
+
-
+
+
+ bartlett
+
+
+ buttonGroup
+
+
+
+ -
+
+
+ flat top
+
+
+ buttonGroup
+
+
+
+ -
+
+
+ hann
+
+
+ buttonGroup
+
+
+
+ -
window shape
@@ -896,14 +1073,14 @@
- (re)generate
+ (re)generate brain
-
-
-
+
Comic Sans MS
@@ -912,7 +1089,7 @@
- load
+ load brain
@@ -926,7 +1103,7 @@
- save
+ save brain
@@ -1245,22 +1422,6 @@
-
- spinBoxBlockSize
- valueChanged(int)
- MainWindow
- block_size(int)
-
-
- 188
- 105
-
-
- 399
- 301
-
-
-
pushButtonLoadTarget
released()
@@ -1357,54 +1518,6 @@
-
- pushButtonGenerate
- released()
- MainWindow
- generate()
-
-
- 131
- 204
-
-
- 399
- 301
-
-
-
-
- pushButtonLoadSound
- released()
- MainWindow
- load_sound()
-
-
- 381
- 544
-
-
- 399
- 301
-
-
-
-
- doubleSpinBoxBlockOverlap
- valueChanged(double)
- MainWindow
- block_overlap(double)
-
-
- 188
- 138
-
-
- 361
- 301
-
-
-
radioButton_hammingTarget
toggled(bool)
@@ -1421,22 +1534,6 @@
-
- pushButtonDeleteSound
- released()
- MainWindow
- delete_sound()
-
-
- 476
- 544
-
-
- 361
- 301
-
-
-
doubleSpinBoxBlockOverlapTarget
valueChanged(double)
@@ -1453,150 +1550,6 @@
-
- radioButton_dodgy
- toggled(bool)
- MainWindow
- window_dodgy(bool)
-
-
- 75
- 203
-
-
- 361
- 301
-
-
-
-
- radioButton_blackman
- toggled(bool)
- MainWindow
- window_blackman(bool)
-
-
- 75
- 261
-
-
- 361
- 301
-
-
-
-
- radioButton_hann
- toggled(bool)
- MainWindow
- window_hann(bool)
-
-
- 188
- 261
-
-
- 361
- 301
-
-
-
-
- radioButton_hamming
- toggled(bool)
- MainWindow
- window_hamming(bool)
-
-
- 188
- 232
-
-
- 361
- 301
-
-
-
-
- radioButton_gaussian
- toggled(bool)
- MainWindow
- window_gaussian(bool)
-
-
- 188
- 203
-
-
- 361
- 301
-
-
-
-
- pushButtonClearBrain
- released()
- MainWindow
- clear_brain()
-
-
- 590
- 544
-
-
- 361
- 301
-
-
-
-
- radioButton_bartlett
- toggled(bool)
- MainWindow
- window_bartlett(bool)
-
-
- 75
- 232
-
-
- 361
- 301
-
-
-
-
- radioButton_flattop
- toggled(bool)
- MainWindow
- window_flattop(bool)
-
-
- 75
- 290
-
-
- 361
- 301
-
-
-
-
- radioButton_rectagle
- toggled(bool)
- MainWindow
- window_rectangle(bool)
-
-
- 188
- 290
-
-
- 361
- 301
-
-
-
radioButton_rectangleTarget
toggled(bool)
@@ -1757,22 +1710,6 @@
-
- checkBoxInvert
- toggled(bool)
- MainWindow
- invert_slot(bool)
-
-
- 189
- 313
-
-
- 361
- 306
-
-
-
sliderNMix
valueChanged(int)
@@ -1901,6 +1838,390 @@
+
+ sliderSynapses
+ valueChanged(int)
+ spinBoxSynapses
+ setValue(int)
+
+
+ 237
+ 289
+
+
+ 341
+ 289
+
+
+
+
+ sliderSynapses
+ valueChanged(int)
+ MainWindow
+ synapses(int)
+
+
+ 237
+ 289
+
+
+ 566
+ 345
+
+
+
+
+ spinBoxSynapses
+ valueChanged(int)
+ sliderSynapses
+ setValue(int)
+
+
+ 341
+ 289
+
+
+ 237
+ 289
+
+
+
+
+ spinBoxSynapses
+ valueChanged(int)
+ MainWindow
+ synapses(int)
+
+
+ 341
+ 289
+
+
+ 566
+ 345
+
+
+
+
+ radioButtonAlgoBasic
+ toggled(bool)
+ MainWindow
+ algo_basic(bool)
+
+
+ 51
+ 348
+
+
+ 566
+ 345
+
+
+
+
+ radioButtonAlgoRevBasic
+ toggled(bool)
+ MainWindow
+ algo_rev_basic(bool)
+
+
+ 129
+ 348
+
+
+ 566
+ 345
+
+
+
+
+ radioButtonSynaptic
+ toggled(bool)
+ MainWindow
+ algo_synaptic(bool)
+
+
+ 215
+ 348
+
+
+ 566
+ 345
+
+
+
+
+ radioButtonSynapticSlide
+ toggled(bool)
+ MainWindow
+ algo_synaptic_slide(bool)
+
+
+ 314
+ 348
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonLoadBrain
+ released()
+ MainWindow
+ load_brain()
+
+
+ 615
+ 357
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonSaveBrain
+ released()
+ MainWindow
+ save_brain()
+
+
+ 728
+ 357
+
+
+ 566
+ 345
+
+
+
+
+ spinBoxBlockSize
+ valueChanged(int)
+ MainWindow
+ block_size(int)
+
+
+ 728
+ 109
+
+
+ 566
+ 345
+
+
+
+
+ doubleSpinBoxBlockOverlap
+ valueChanged(double)
+ MainWindow
+ block_overlap(double)
+
+
+ 728
+ 145
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_dodgy
+ toggled(bool)
+ MainWindow
+ window_dodgy(bool)
+
+
+ 615
+ 203
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_bartlett
+ toggled(bool)
+ MainWindow
+ window_bartlett(bool)
+
+
+ 615
+ 232
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_blackman
+ toggled(bool)
+ MainWindow
+ window_blackman(bool)
+
+
+ 615
+ 261
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_flattop
+ toggled(bool)
+ MainWindow
+ window_flattop(bool)
+
+
+ 615
+ 290
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_gaussian
+ toggled(bool)
+ MainWindow
+ window_gaussian(bool)
+
+
+ 728
+ 203
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_hamming
+ toggled(bool)
+ MainWindow
+ window_hamming(bool)
+
+
+ 728
+ 232
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_hann
+ toggled(bool)
+ MainWindow
+ window_hann(bool)
+
+
+ 728
+ 261
+
+
+ 566
+ 345
+
+
+
+
+ radioButton_rectagle
+ toggled(bool)
+ MainWindow
+ window_target_rectangle(bool)
+
+
+ 728
+ 290
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonGenerate
+ released()
+ MainWindow
+ generate()
+
+
+ 671
+ 322
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonLoadSound
+ released()
+ MainWindow
+ load_sound()
+
+
+ 841
+ 550
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonDeleteSound
+ released()
+ MainWindow
+ delete_sound()
+
+
+ 951
+ 550
+
+
+ 566
+ 345
+
+
+
+
+ pushButtonClearBrain
+ released()
+ MainWindow
+ clear_brain()
+
+
+ 1061
+ 550
+
+
+ 566
+ 345
+
+
+
play_slot()
@@ -1955,5 +2276,17 @@
novelty_slot(double)
boredom_slot(int)
boredom_slot(double)
+ synapses(int)
+ algo_basic(bool)
+ algo_rev_basic(bool)
+ algo_synaptic(bool)
+ algo_synaptic_slide(bool)
+ load_brain()
+ save_brain()
+
+
+
+
+
diff --git a/samplebrain/qt/MainWindow.h b/samplebrain/qt/MainWindow.h
index a56bea3..9129177 100644
--- a/samplebrain/qt/MainWindow.h
+++ b/samplebrain/qt/MainWindow.h
@@ -92,7 +92,9 @@ private slots:
lo_send(m_audio_address,"/boredom","f",s);
m_Ui.sliderBoredom->setValue(s*100);
}
-
+ void synapses(int s) {
+ lo_send(m_audio_address,"/synapses","i",s);
+ }
void target_mix_slot(int s) {
lo_send(m_audio_address,"/target_mix","f",s/100.0f);
m_Ui.doubleSpinBoxTargetMix->setValue(s/100.0f);
@@ -103,11 +105,12 @@ private slots:
}
void volume_slot(int s) { lo_send(m_audio_address,"/volume","f",s/100.0f); }
- void invert_slot(bool s) { if (s) {
- lo_send(m_audio_address,"/search_algo","i",1);
- } else {
- lo_send(m_audio_address,"/search_algo","i",0);
- }}
+
+ void algo_basic(bool s) { if (s) lo_send(m_audio_address,"/search_algo","i",0); }
+ void algo_rev_basic(bool s) { if (s) lo_send(m_audio_address,"/search_algo","i",1); }
+ void algo_synaptic(bool s) { if (s) lo_send(m_audio_address,"/search_algo","i",2); }
+ void algo_synaptic_slide(bool s) { if (s) lo_send(m_audio_address,"/search_algo","i",3); }
+
void run_slot() {}
void load_target() {
m_last_file=QFileDialog::getOpenFileName(
@@ -196,6 +199,26 @@ private slots:
lo_send(m_audio_address,"/stop","");
}
+ void load_brain() {
+ m_last_file=QFileDialog::getOpenFileName(
+ this,
+ QString("Select a brain file"),
+ m_last_file,
+ QString("Brains (*.brain)"));
+
+ lo_send(m_process_address,"/load_brain","s",m_last_file.toStdString().c_str());
+ }
+ void save_brain() {
+ m_last_file=QFileDialog::getSaveFileName(
+ this,
+ QString("Select a brain file"),
+ m_last_file,
+ QString("Brains (*.brain)"));
+
+ lo_send(m_process_address,"/save_brain","s",m_last_file.toStdString().c_str());
+ }
+
+
void update_status() {
m_feedback.poll(m_Ui.statusbar);
}
diff --git a/samplebrain/qt/audio_thread.cpp b/samplebrain/qt/audio_thread.cpp
index a26448e..37a3994 100644
--- a/samplebrain/qt/audio_thread.cpp
+++ b/samplebrain/qt/audio_thread.cpp
@@ -37,9 +37,7 @@ static bool state = 1;
audio_thread::~audio_thread() {
state=0;
- cerr<<"deleting audio device"<set_playing(true);
}
@@ -117,6 +115,9 @@ void audio_thread::process(sample &s, sample &s2) {
if (name=="/boredom") {
m_renderer->get_source().set_usage_falloff(cmd.get_float(0));
}
+ if (name=="/synapses") {
+ m_renderer->get_params()->m_num_synapses=cmd.get_int(0);
+ }
}
s.zero();
diff --git a/samplebrain/qt/audio_thread.h b/samplebrain/qt/audio_thread.h
index 42367b9..7287ca9 100644
--- a/samplebrain/qt/audio_thread.h
+++ b/samplebrain/qt/audio_thread.h
@@ -33,10 +33,11 @@ public:
static void run_audio(void* c, unsigned int frames);
audio_device *m_audio_device;
+ renderer *m_renderer;
+
private:
void start_audio();
- renderer *m_renderer;
OSC_server m_osc;
process_thread &m_process_thread;
pthread_mutex_t* m_brain_mutex;
diff --git a/samplebrain/qt/generated/ui_samplebrain.h b/samplebrain/qt/generated/ui_samplebrain.h
index d2262ea..fe30b05 100644
--- a/samplebrain/qt/generated/ui_samplebrain.h
+++ b/samplebrain/qt/generated/ui_samplebrain.h
@@ -1,20 +1,19 @@
/********************************************************************************
-** Form generated from reading UI file 'samplebraing19815.ui'
+** Form generated from reading UI file 'samplebrainuQB562.ui'
**
-** Created: Mon Jul 27 14:41:28 2015
+** Created: Tue Aug 4 16:33:54 2015
** by: Qt User Interface Compiler version 4.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
-#ifndef SAMPLEBRAING19815_H
-#define SAMPLEBRAING19815_H
+#ifndef SAMPLEBRAINUQB562_H
+#define SAMPLEBRAINUQB562_H
#include
#include
#include
#include
-#include
#include
#include
#include
@@ -43,7 +42,7 @@ public:
QVBoxLayout *verticalLayout_4;
QTabWidget *tabWidget;
QWidget *controlTab;
- QHBoxLayout *horizontalLayout_17;
+ QHBoxLayout *horizontalLayout_19;
QVBoxLayout *verticalLayout_3;
QLabel *label_19;
QHBoxLayout *horizontalLayout_16;
@@ -68,7 +67,16 @@ public:
QLabel *label_25;
QSlider *sliderBoredom;
QDoubleSpinBox *doubleSpinBoxBoredom;
- QCheckBox *checkBoxInvert;
+ QHBoxLayout *horizontalLayout_17;
+ QLabel *label_26;
+ QSlider *sliderSynapses;
+ QSpinBox *spinBoxSynapses;
+ QLabel *label_27;
+ QHBoxLayout *horizontalLayout_18;
+ QRadioButton *radioButtonAlgoBasic;
+ QRadioButton *radioButtonAlgoRevBasic;
+ QRadioButton *radioButtonSynaptic;
+ QRadioButton *radioButtonSynapticSlide;
QSpacerItem *horizontalSpacer_2;
QSpacerItem *verticalSpacer_3;
QLabel *label_23;
@@ -101,8 +109,6 @@ public:
QLabel *label_14;
QPushButton *pushButtonGenerateTarget;
QSpacerItem *verticalSpacer;
- QWidget *sampleTab;
- QHBoxLayout *horizontalLayout_5;
QVBoxLayout *verticalLayout_2;
QLabel *label_3;
QHBoxLayout *horizontalLayout_4;
@@ -112,18 +118,18 @@ public:
QLabel *label_2;
QDoubleSpinBox *doubleSpinBoxBlockOverlap;
QGridLayout *gridLayout;
- QRadioButton *radioButton_bartlett;
- QRadioButton *radioButton_dodgy;
- QRadioButton *radioButton_blackman;
QRadioButton *radioButton_gaussian;
QRadioButton *radioButton_hamming;
- QRadioButton *radioButton_hann;
- QRadioButton *radioButton_flattop;
+ QRadioButton *radioButton_dodgy;
+ QRadioButton *radioButton_blackman;
QRadioButton *radioButton_rectagle;
+ QRadioButton *radioButton_bartlett;
+ QRadioButton *radioButton_flattop;
+ QRadioButton *radioButton_hann;
QLabel *label_4;
QPushButton *pushButtonGenerate;
QHBoxLayout *horizontalLayout_7;
- QPushButton *pushButtonLosdBrain;
+ QPushButton *pushButtonLoadBrain;
QPushButton *pushButtonSaveBrain;
QSpacerItem *verticalSpacer_2;
QVBoxLayout *verticalLayout;
@@ -145,12 +151,15 @@ public:
QSpacerItem *horizontalSpacer;
QLabel *label_13;
QStatusBar *statusbar;
+ QButtonGroup *buttonGroup;
+ QButtonGroup *buttonGroup_2;
+ QButtonGroup *buttonGroup_3;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
- MainWindow->resize(643, 619);
+ MainWindow->resize(1134, 691);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
verticalLayout_4 = new QVBoxLayout(centralwidget);
@@ -164,8 +173,8 @@ public:
tabWidget->setFont(font);
controlTab = new QWidget();
controlTab->setObjectName(QString::fromUtf8("controlTab"));
- horizontalLayout_17 = new QHBoxLayout(controlTab);
- horizontalLayout_17->setObjectName(QString::fromUtf8("horizontalLayout_17"));
+ horizontalLayout_19 = new QHBoxLayout(controlTab);
+ horizontalLayout_19->setObjectName(QString::fromUtf8("horizontalLayout_19"));
verticalLayout_3 = new QVBoxLayout();
verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3"));
label_19 = new QLabel(controlTab);
@@ -199,6 +208,7 @@ public:
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(sliderRatio->sizePolicy().hasHeightForWidth());
sliderRatio->setSizePolicy(sizePolicy);
+ sliderRatio->setMaximum(100);
sliderRatio->setValue(50);
sliderRatio->setOrientation(Qt::Horizontal);
@@ -232,6 +242,7 @@ public:
sliderNRatio->setObjectName(QString::fromUtf8("sliderNRatio"));
sizePolicy.setHeightForWidth(sliderNRatio->sizePolicy().hasHeightForWidth());
sliderNRatio->setSizePolicy(sizePolicy);
+ sliderNRatio->setMaximum(100);
sliderNRatio->setValue(0);
sliderNRatio->setOrientation(Qt::Horizontal);
@@ -303,6 +314,7 @@ public:
sliderNovelty->setObjectName(QString::fromUtf8("sliderNovelty"));
sizePolicy.setHeightForWidth(sliderNovelty->sizePolicy().hasHeightForWidth());
sliderNovelty->setSizePolicy(sizePolicy);
+ sliderNovelty->setMaximum(100);
sliderNovelty->setValue(0);
sliderNovelty->setOrientation(Qt::Horizontal);
@@ -333,6 +345,7 @@ public:
sliderBoredom->setObjectName(QString::fromUtf8("sliderBoredom"));
sizePolicy.setHeightForWidth(sliderBoredom->sizePolicy().hasHeightForWidth());
sliderBoredom->setSizePolicy(sizePolicy);
+ sliderBoredom->setMaximum(100);
sliderBoredom->setValue(0);
sliderBoredom->setOrientation(Qt::Horizontal);
@@ -351,14 +364,83 @@ public:
verticalLayout_3->addLayout(horizontalLayout_11);
- checkBoxInvert = new QCheckBox(controlTab);
- checkBoxInvert->setObjectName(QString::fromUtf8("checkBoxInvert"));
- checkBoxInvert->setSizeIncrement(QSize(0, 0));
- checkBoxInvert->setIconSize(QSize(16, 16));
+ horizontalLayout_17 = new QHBoxLayout();
+ horizontalLayout_17->setObjectName(QString::fromUtf8("horizontalLayout_17"));
+ label_26 = new QLabel(controlTab);
+ label_26->setObjectName(QString::fromUtf8("label_26"));
+ label_26->setFont(font2);
- verticalLayout_3->addWidget(checkBoxInvert);
+ horizontalLayout_17->addWidget(label_26);
- horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ sliderSynapses = new QSlider(controlTab);
+ sliderSynapses->setObjectName(QString::fromUtf8("sliderSynapses"));
+ sizePolicy.setHeightForWidth(sliderSynapses->sizePolicy().hasHeightForWidth());
+ sliderSynapses->setSizePolicy(sizePolicy);
+ sliderSynapses->setMaximum(1000);
+ sliderSynapses->setValue(20);
+ sliderSynapses->setOrientation(Qt::Horizontal);
+
+ horizontalLayout_17->addWidget(sliderSynapses);
+
+ spinBoxSynapses = new QSpinBox(controlTab);
+ spinBoxSynapses->setObjectName(QString::fromUtf8("spinBoxSynapses"));
+ sizePolicy1.setHeightForWidth(spinBoxSynapses->sizePolicy().hasHeightForWidth());
+ spinBoxSynapses->setSizePolicy(sizePolicy1);
+ spinBoxSynapses->setMaximum(1000);
+ spinBoxSynapses->setValue(20);
+
+ horizontalLayout_17->addWidget(spinBoxSynapses);
+
+
+ verticalLayout_3->addLayout(horizontalLayout_17);
+
+ label_27 = new QLabel(controlTab);
+ label_27->setObjectName(QString::fromUtf8("label_27"));
+ QFont font3;
+ font3.setFamily(QString::fromUtf8("Comic Sans MS"));
+ font3.setPointSize(10);
+ font3.setBold(true);
+ font3.setWeight(75);
+ label_27->setFont(font3);
+
+ verticalLayout_3->addWidget(label_27);
+
+ horizontalLayout_18 = new QHBoxLayout();
+ horizontalLayout_18->setObjectName(QString::fromUtf8("horizontalLayout_18"));
+ radioButtonAlgoBasic = new QRadioButton(controlTab);
+ buttonGroup_3 = new QButtonGroup(MainWindow);
+ buttonGroup_3->setObjectName(QString::fromUtf8("buttonGroup_3"));
+ buttonGroup_3->addButton(radioButtonAlgoBasic);
+ radioButtonAlgoBasic->setObjectName(QString::fromUtf8("radioButtonAlgoBasic"));
+ radioButtonAlgoBasic->setChecked(true);
+
+ horizontalLayout_18->addWidget(radioButtonAlgoBasic);
+
+ radioButtonAlgoRevBasic = new QRadioButton(controlTab);
+ buttonGroup_3->addButton(radioButtonAlgoRevBasic);
+ radioButtonAlgoRevBasic->setObjectName(QString::fromUtf8("radioButtonAlgoRevBasic"));
+
+ horizontalLayout_18->addWidget(radioButtonAlgoRevBasic);
+
+ radioButtonSynaptic = new QRadioButton(controlTab);
+ buttonGroup_3->addButton(radioButtonSynaptic);
+ radioButtonSynaptic->setObjectName(QString::fromUtf8("radioButtonSynaptic"));
+ radioButtonSynaptic->setChecked(false);
+
+ horizontalLayout_18->addWidget(radioButtonSynaptic);
+
+ radioButtonSynapticSlide = new QRadioButton(controlTab);
+ buttonGroup_3->addButton(radioButtonSynapticSlide);
+ radioButtonSynapticSlide->setObjectName(QString::fromUtf8("radioButtonSynapticSlide"));
+ radioButtonSynapticSlide->setEnabled(false);
+ radioButtonSynapticSlide->setCheckable(true);
+
+ horizontalLayout_18->addWidget(radioButtonSynapticSlide);
+
+
+ verticalLayout_3->addLayout(horizontalLayout_18);
+
+ horizontalSpacer_2 = new QSpacerItem(21, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
verticalLayout_3->addItem(horizontalSpacer_2);
@@ -434,7 +516,7 @@ public:
verticalLayout_3->addLayout(horizontalLayout_9);
- horizontalLayout_17->addLayout(verticalLayout_3);
+ horizontalLayout_19->addLayout(verticalLayout_3);
verticalLayout_6 = new QVBoxLayout();
verticalLayout_6->setObjectName(QString::fromUtf8("verticalLayout_6"));
@@ -490,42 +572,52 @@ public:
gridLayout_2 = new QGridLayout();
gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
radioButton_bartlettTarget = new QRadioButton(controlTab);
+ buttonGroup_2 = new QButtonGroup(MainWindow);
+ buttonGroup_2->setObjectName(QString::fromUtf8("buttonGroup_2"));
+ buttonGroup_2->addButton(radioButton_bartlettTarget);
radioButton_bartlettTarget->setObjectName(QString::fromUtf8("radioButton_bartlettTarget"));
gridLayout_2->addWidget(radioButton_bartlettTarget, 3, 0, 1, 1);
radioButton_blackmanTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_blackmanTarget);
radioButton_blackmanTarget->setObjectName(QString::fromUtf8("radioButton_blackmanTarget"));
gridLayout_2->addWidget(radioButton_blackmanTarget, 4, 0, 1, 1);
radioButton_gaussianTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_gaussianTarget);
radioButton_gaussianTarget->setObjectName(QString::fromUtf8("radioButton_gaussianTarget"));
gridLayout_2->addWidget(radioButton_gaussianTarget, 2, 1, 1, 1);
radioButton_hammingTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_hammingTarget);
radioButton_hammingTarget->setObjectName(QString::fromUtf8("radioButton_hammingTarget"));
gridLayout_2->addWidget(radioButton_hammingTarget, 3, 1, 1, 1);
radioButton_hannTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_hannTarget);
radioButton_hannTarget->setObjectName(QString::fromUtf8("radioButton_hannTarget"));
gridLayout_2->addWidget(radioButton_hannTarget, 4, 1, 1, 1);
radioButton_flattopTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_flattopTarget);
radioButton_flattopTarget->setObjectName(QString::fromUtf8("radioButton_flattopTarget"));
gridLayout_2->addWidget(radioButton_flattopTarget, 5, 0, 1, 1);
radioButton_dodgyTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_dodgyTarget);
radioButton_dodgyTarget->setObjectName(QString::fromUtf8("radioButton_dodgyTarget"));
radioButton_dodgyTarget->setChecked(true);
gridLayout_2->addWidget(radioButton_dodgyTarget, 2, 0, 1, 1);
radioButton_rectangleTarget = new QRadioButton(controlTab);
+ buttonGroup_2->addButton(radioButton_rectangleTarget);
radioButton_rectangleTarget->setObjectName(QString::fromUtf8("radioButton_rectangleTarget"));
gridLayout_2->addWidget(radioButton_rectangleTarget, 5, 1, 1, 1);
@@ -549,16 +641,11 @@ public:
verticalLayout_6->addItem(verticalSpacer);
- horizontalLayout_17->addLayout(verticalLayout_6);
+ horizontalLayout_19->addLayout(verticalLayout_6);
- tabWidget->addTab(controlTab, QString());
- sampleTab = new QWidget();
- sampleTab->setObjectName(QString::fromUtf8("sampleTab"));
- horizontalLayout_5 = new QHBoxLayout(sampleTab);
- horizontalLayout_5->setObjectName(QString::fromUtf8("horizontalLayout_5"));
verticalLayout_2 = new QVBoxLayout();
verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
- label_3 = new QLabel(sampleTab);
+ label_3 = new QLabel(controlTab);
label_3->setObjectName(QString::fromUtf8("label_3"));
label_3->setFont(font1);
@@ -566,13 +653,13 @@ public:
horizontalLayout_4 = new QHBoxLayout();
horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
- label = new QLabel(sampleTab);
+ label = new QLabel(controlTab);
label->setObjectName(QString::fromUtf8("label"));
label->setFont(font);
horizontalLayout_4->addWidget(label);
- spinBoxBlockSize = new QSpinBox(sampleTab);
+ spinBoxBlockSize = new QSpinBox(controlTab);
spinBoxBlockSize->setObjectName(QString::fromUtf8("spinBoxBlockSize"));
spinBoxBlockSize->setMaximum(99999);
spinBoxBlockSize->setValue(3000);
@@ -584,13 +671,13 @@ public:
horizontalLayout_6 = new QHBoxLayout();
horizontalLayout_6->setObjectName(QString::fromUtf8("horizontalLayout_6"));
- label_2 = new QLabel(sampleTab);
+ label_2 = new QLabel(controlTab);
label_2->setObjectName(QString::fromUtf8("label_2"));
label_2->setFont(font);
horizontalLayout_6->addWidget(label_2);
- doubleSpinBoxBlockOverlap = new QDoubleSpinBox(sampleTab);
+ doubleSpinBoxBlockOverlap = new QDoubleSpinBox(controlTab);
doubleSpinBoxBlockOverlap->setObjectName(QString::fromUtf8("doubleSpinBoxBlockOverlap"));
doubleSpinBoxBlockOverlap->setMaximum(1);
doubleSpinBoxBlockOverlap->setSingleStep(0.01);
@@ -603,56 +690,66 @@ public:
gridLayout = new QGridLayout();
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- radioButton_bartlett = new QRadioButton(sampleTab);
- radioButton_bartlett->setObjectName(QString::fromUtf8("radioButton_bartlett"));
+ radioButton_gaussian = new QRadioButton(controlTab);
+ buttonGroup = new QButtonGroup(MainWindow);
+ buttonGroup->setObjectName(QString::fromUtf8("buttonGroup"));
+ buttonGroup->addButton(radioButton_gaussian);
+ radioButton_gaussian->setObjectName(QString::fromUtf8("radioButton_gaussian"));
- gridLayout->addWidget(radioButton_bartlett, 3, 0, 1, 1);
+ gridLayout->addWidget(radioButton_gaussian, 3, 1, 1, 1);
- radioButton_dodgy = new QRadioButton(sampleTab);
+ radioButton_hamming = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_hamming);
+ radioButton_hamming->setObjectName(QString::fromUtf8("radioButton_hamming"));
+
+ gridLayout->addWidget(radioButton_hamming, 4, 1, 1, 1);
+
+ radioButton_dodgy = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_dodgy);
radioButton_dodgy->setObjectName(QString::fromUtf8("radioButton_dodgy"));
radioButton_dodgy->setChecked(true);
- gridLayout->addWidget(radioButton_dodgy, 2, 0, 1, 1);
+ gridLayout->addWidget(radioButton_dodgy, 3, 0, 1, 1);
- radioButton_blackman = new QRadioButton(sampleTab);
+ radioButton_blackman = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_blackman);
radioButton_blackman->setObjectName(QString::fromUtf8("radioButton_blackman"));
- gridLayout->addWidget(radioButton_blackman, 4, 0, 1, 1);
+ gridLayout->addWidget(radioButton_blackman, 5, 0, 1, 1);
- radioButton_gaussian = new QRadioButton(sampleTab);
- radioButton_gaussian->setObjectName(QString::fromUtf8("radioButton_gaussian"));
-
- gridLayout->addWidget(radioButton_gaussian, 2, 1, 1, 1);
-
- radioButton_hamming = new QRadioButton(sampleTab);
- radioButton_hamming->setObjectName(QString::fromUtf8("radioButton_hamming"));
-
- gridLayout->addWidget(radioButton_hamming, 3, 1, 1, 1);
-
- radioButton_hann = new QRadioButton(sampleTab);
- radioButton_hann->setObjectName(QString::fromUtf8("radioButton_hann"));
-
- gridLayout->addWidget(radioButton_hann, 4, 1, 1, 1);
-
- radioButton_flattop = new QRadioButton(sampleTab);
- radioButton_flattop->setObjectName(QString::fromUtf8("radioButton_flattop"));
-
- gridLayout->addWidget(radioButton_flattop, 5, 0, 1, 1);
-
- radioButton_rectagle = new QRadioButton(sampleTab);
+ radioButton_rectagle = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_rectagle);
radioButton_rectagle->setObjectName(QString::fromUtf8("radioButton_rectagle"));
- gridLayout->addWidget(radioButton_rectagle, 5, 1, 1, 1);
+ gridLayout->addWidget(radioButton_rectagle, 6, 1, 1, 1);
- label_4 = new QLabel(sampleTab);
+ radioButton_bartlett = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_bartlett);
+ radioButton_bartlett->setObjectName(QString::fromUtf8("radioButton_bartlett"));
+
+ gridLayout->addWidget(radioButton_bartlett, 4, 0, 1, 1);
+
+ radioButton_flattop = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_flattop);
+ radioButton_flattop->setObjectName(QString::fromUtf8("radioButton_flattop"));
+
+ gridLayout->addWidget(radioButton_flattop, 6, 0, 1, 1);
+
+ radioButton_hann = new QRadioButton(controlTab);
+ buttonGroup->addButton(radioButton_hann);
+ radioButton_hann->setObjectName(QString::fromUtf8("radioButton_hann"));
+
+ gridLayout->addWidget(radioButton_hann, 5, 1, 1, 1);
+
+ label_4 = new QLabel(controlTab);
label_4->setObjectName(QString::fromUtf8("label_4"));
- gridLayout->addWidget(label_4, 1, 0, 1, 1);
+ gridLayout->addWidget(label_4, 2, 0, 1, 1);
verticalLayout_2->addLayout(gridLayout);
- pushButtonGenerate = new QPushButton(sampleTab);
+ pushButtonGenerate = new QPushButton(controlTab);
pushButtonGenerate->setObjectName(QString::fromUtf8("pushButtonGenerate"));
pushButtonGenerate->setFont(font);
@@ -660,13 +757,13 @@ public:
horizontalLayout_7 = new QHBoxLayout();
horizontalLayout_7->setObjectName(QString::fromUtf8("horizontalLayout_7"));
- pushButtonLosdBrain = new QPushButton(sampleTab);
- pushButtonLosdBrain->setObjectName(QString::fromUtf8("pushButtonLosdBrain"));
- pushButtonLosdBrain->setFont(font);
+ pushButtonLoadBrain = new QPushButton(controlTab);
+ pushButtonLoadBrain->setObjectName(QString::fromUtf8("pushButtonLoadBrain"));
+ pushButtonLoadBrain->setFont(font);
- horizontalLayout_7->addWidget(pushButtonLosdBrain);
+ horizontalLayout_7->addWidget(pushButtonLoadBrain);
- pushButtonSaveBrain = new QPushButton(sampleTab);
+ pushButtonSaveBrain = new QPushButton(controlTab);
pushButtonSaveBrain->setObjectName(QString::fromUtf8("pushButtonSaveBrain"));
pushButtonSaveBrain->setFont(font);
@@ -680,36 +777,36 @@ public:
verticalLayout_2->addItem(verticalSpacer_2);
- horizontalLayout_5->addLayout(verticalLayout_2);
+ horizontalLayout_19->addLayout(verticalLayout_2);
verticalLayout = new QVBoxLayout();
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
- label_5 = new QLabel(sampleTab);
+ label_5 = new QLabel(controlTab);
label_5->setObjectName(QString::fromUtf8("label_5"));
label_5->setFont(font);
verticalLayout->addWidget(label_5);
- listWidgetSounds = new QListWidget(sampleTab);
+ listWidgetSounds = new QListWidget(controlTab);
listWidgetSounds->setObjectName(QString::fromUtf8("listWidgetSounds"));
verticalLayout->addWidget(listWidgetSounds);
horizontalLayout_2 = new QHBoxLayout();
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
- pushButtonLoadSound = new QPushButton(sampleTab);
+ pushButtonLoadSound = new QPushButton(controlTab);
pushButtonLoadSound->setObjectName(QString::fromUtf8("pushButtonLoadSound"));
pushButtonLoadSound->setFont(font);
horizontalLayout_2->addWidget(pushButtonLoadSound);
- pushButtonDeleteSound = new QPushButton(sampleTab);
+ pushButtonDeleteSound = new QPushButton(controlTab);
pushButtonDeleteSound->setObjectName(QString::fromUtf8("pushButtonDeleteSound"));
pushButtonDeleteSound->setFont(font);
horizontalLayout_2->addWidget(pushButtonDeleteSound);
- pushButtonClearBrain = new QPushButton(sampleTab);
+ pushButtonClearBrain = new QPushButton(controlTab);
pushButtonClearBrain->setObjectName(QString::fromUtf8("pushButtonClearBrain"));
pushButtonClearBrain->setFont(font);
@@ -719,9 +816,9 @@ public:
verticalLayout->addLayout(horizontalLayout_2);
- horizontalLayout_5->addLayout(verticalLayout);
+ horizontalLayout_19->addLayout(verticalLayout);
- tabWidget->addTab(sampleTab, QString());
+ tabWidget->addTab(controlTab, QString());
logTab = new QWidget();
logTab->setObjectName(QString::fromUtf8("logTab"));
horizontalLayout_15 = new QHBoxLayout(logTab);
@@ -809,28 +906,14 @@ public:
QObject::connect(dialVolume, SIGNAL(sliderMoved(int)), MainWindow, SLOT(volume_slot(int)));
QObject::connect(pushButtonStopRecord, SIGNAL(released()), MainWindow, SLOT(stop_record()));
QObject::connect(pushButtonRecord, SIGNAL(released()), MainWindow, SLOT(record()));
- QObject::connect(spinBoxBlockSize, SIGNAL(valueChanged(int)), MainWindow, SLOT(block_size(int)));
QObject::connect(pushButtonLoadTarget, SIGNAL(released()), MainWindow, SLOT(load_target()));
QObject::connect(pushButtonGenerateTarget, SIGNAL(released()), MainWindow, SLOT(generate_target_blocks()));
QObject::connect(spinBoxBlockSizeTarget, SIGNAL(valueChanged(int)), MainWindow, SLOT(target_block_size(int)));
QObject::connect(doubleSpinBoxRatio, SIGNAL(valueChanged(double)), MainWindow, SLOT(ratio_slot(double)));
QObject::connect(spinBoxFFT1Start, SIGNAL(valueChanged(int)), MainWindow, SLOT(fft1_start_slot(int)));
QObject::connect(spinBoxFFT1End, SIGNAL(valueChanged(int)), MainWindow, SLOT(fft1_end_slot(int)));
- QObject::connect(pushButtonGenerate, SIGNAL(released()), MainWindow, SLOT(generate()));
- QObject::connect(pushButtonLoadSound, SIGNAL(released()), MainWindow, SLOT(load_sound()));
- QObject::connect(doubleSpinBoxBlockOverlap, SIGNAL(valueChanged(double)), MainWindow, SLOT(block_overlap(double)));
QObject::connect(radioButton_hammingTarget, SIGNAL(toggled(bool)), MainWindow, SLOT(window_target_hamming(bool)));
- QObject::connect(pushButtonDeleteSound, SIGNAL(released()), MainWindow, SLOT(delete_sound()));
QObject::connect(doubleSpinBoxBlockOverlapTarget, SIGNAL(valueChanged(double)), MainWindow, SLOT(target_block_overlap(double)));
- QObject::connect(radioButton_dodgy, SIGNAL(toggled(bool)), MainWindow, SLOT(window_dodgy(bool)));
- QObject::connect(radioButton_blackman, SIGNAL(toggled(bool)), MainWindow, SLOT(window_blackman(bool)));
- QObject::connect(radioButton_hann, SIGNAL(toggled(bool)), MainWindow, SLOT(window_hann(bool)));
- QObject::connect(radioButton_hamming, SIGNAL(toggled(bool)), MainWindow, SLOT(window_hamming(bool)));
- QObject::connect(radioButton_gaussian, SIGNAL(toggled(bool)), MainWindow, SLOT(window_gaussian(bool)));
- QObject::connect(pushButtonClearBrain, SIGNAL(released()), MainWindow, SLOT(clear_brain()));
- QObject::connect(radioButton_bartlett, SIGNAL(toggled(bool)), MainWindow, SLOT(window_bartlett(bool)));
- QObject::connect(radioButton_flattop, SIGNAL(toggled(bool)), MainWindow, SLOT(window_flattop(bool)));
- QObject::connect(radioButton_rectagle, SIGNAL(toggled(bool)), MainWindow, SLOT(window_rectangle(bool)));
QObject::connect(radioButton_rectangleTarget, SIGNAL(toggled(bool)), MainWindow, SLOT(window_target_rectangle(bool)));
QObject::connect(radioButton_flattopTarget, SIGNAL(toggled(bool)), MainWindow, SLOT(window_target_flattop(bool)));
QObject::connect(radioButton_blackmanTarget, SIGNAL(toggled(bool)), MainWindow, SLOT(window_target_blackman(bool)));
@@ -841,7 +924,6 @@ public:
QObject::connect(sliderRatio, SIGNAL(valueChanged(int)), MainWindow, SLOT(ratio_slot(int)));
QObject::connect(sliderNRatio, SIGNAL(valueChanged(int)), MainWindow, SLOT(n_ratio_slot(int)));
QObject::connect(doubleSpinBoxNRatio, SIGNAL(valueChanged(double)), MainWindow, SLOT(n_ratio_slot(double)));
- QObject::connect(checkBoxInvert, SIGNAL(toggled(bool)), MainWindow, SLOT(invert_slot(bool)));
QObject::connect(sliderNMix, SIGNAL(valueChanged(int)), MainWindow, SLOT(n_mix_slot(int)));
QObject::connect(sliderTargetMix, SIGNAL(valueChanged(int)), MainWindow, SLOT(target_mix_slot(int)));
QObject::connect(doubleSpinBoxNMix, SIGNAL(valueChanged(double)), MainWindow, SLOT(n_mix_slot(double)));
@@ -850,6 +932,30 @@ public:
QObject::connect(sliderBoredom, SIGNAL(valueChanged(int)), MainWindow, SLOT(boredom_slot(int)));
QObject::connect(doubleSpinBoxNovelty, SIGNAL(valueChanged(double)), MainWindow, SLOT(novelty_slot(double)));
QObject::connect(sliderNovelty, SIGNAL(valueChanged(int)), MainWindow, SLOT(novelty_slot(int)));
+ QObject::connect(sliderSynapses, SIGNAL(valueChanged(int)), spinBoxSynapses, SLOT(setValue(int)));
+ QObject::connect(sliderSynapses, SIGNAL(valueChanged(int)), MainWindow, SLOT(synapses(int)));
+ QObject::connect(spinBoxSynapses, SIGNAL(valueChanged(int)), sliderSynapses, SLOT(setValue(int)));
+ QObject::connect(spinBoxSynapses, SIGNAL(valueChanged(int)), MainWindow, SLOT(synapses(int)));
+ QObject::connect(radioButtonAlgoBasic, SIGNAL(toggled(bool)), MainWindow, SLOT(algo_basic(bool)));
+ QObject::connect(radioButtonAlgoRevBasic, SIGNAL(toggled(bool)), MainWindow, SLOT(algo_rev_basic(bool)));
+ QObject::connect(radioButtonSynaptic, SIGNAL(toggled(bool)), MainWindow, SLOT(algo_synaptic(bool)));
+ QObject::connect(radioButtonSynapticSlide, SIGNAL(toggled(bool)), MainWindow, SLOT(algo_synaptic_slide(bool)));
+ QObject::connect(pushButtonLoadBrain, SIGNAL(released()), MainWindow, SLOT(load_brain()));
+ QObject::connect(pushButtonSaveBrain, SIGNAL(released()), MainWindow, SLOT(save_brain()));
+ QObject::connect(spinBoxBlockSize, SIGNAL(valueChanged(int)), MainWindow, SLOT(block_size(int)));
+ QObject::connect(doubleSpinBoxBlockOverlap, SIGNAL(valueChanged(double)), MainWindow, SLOT(block_overlap(double)));
+ QObject::connect(radioButton_dodgy, SIGNAL(toggled(bool)), MainWindow, SLOT(window_dodgy(bool)));
+ QObject::connect(radioButton_bartlett, SIGNAL(toggled(bool)), MainWindow, SLOT(window_bartlett(bool)));
+ QObject::connect(radioButton_blackman, SIGNAL(toggled(bool)), MainWindow, SLOT(window_blackman(bool)));
+ QObject::connect(radioButton_flattop, SIGNAL(toggled(bool)), MainWindow, SLOT(window_flattop(bool)));
+ QObject::connect(radioButton_gaussian, SIGNAL(toggled(bool)), MainWindow, SLOT(window_gaussian(bool)));
+ QObject::connect(radioButton_hamming, SIGNAL(toggled(bool)), MainWindow, SLOT(window_hamming(bool)));
+ QObject::connect(radioButton_hann, SIGNAL(toggled(bool)), MainWindow, SLOT(window_hann(bool)));
+ QObject::connect(radioButton_rectagle, SIGNAL(toggled(bool)), MainWindow, SLOT(window_target_rectangle(bool)));
+ QObject::connect(pushButtonGenerate, SIGNAL(released()), MainWindow, SLOT(generate()));
+ QObject::connect(pushButtonLoadSound, SIGNAL(released()), MainWindow, SLOT(load_sound()));
+ QObject::connect(pushButtonDeleteSound, SIGNAL(released()), MainWindow, SLOT(delete_sound()));
+ QObject::connect(pushButtonClearBrain, SIGNAL(released()), MainWindow, SLOT(clear_brain()));
tabWidget->setCurrentIndex(0);
@@ -859,7 +965,7 @@ public:
void retranslateUi(QMainWindow *MainWindow)
{
- MainWindow->setWindowTitle(QApplication::translate("MainWindow", "samplebrain 0.0.5", 0, QApplication::UnicodeUTF8));
+ MainWindow->setWindowTitle(QApplication::translate("MainWindow", "samplebrain 0.6", 0, QApplication::UnicodeUTF8));
label_19->setText(QApplication::translate("MainWindow", "brain tweaks", 0, QApplication::UnicodeUTF8));
label_6->setText(QApplication::translate("MainWindow", "fft / mfcc", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
@@ -896,9 +1002,32 @@ public:
sliderBoredom->setToolTip(QApplication::translate("MainWindow", "how long it takes for the novelty to ware off", 0, QApplication::UnicodeUTF8));
#endif // QT_NO_TOOLTIP
#ifndef QT_NO_TOOLTIP
- checkBoxInvert->setToolTip(QString());
+ label_26->setToolTip(QString());
#endif // QT_NO_TOOLTIP
- checkBoxInvert->setText(QApplication::translate("MainWindow", "search for least similar", 0, QApplication::UnicodeUTF8));
+ label_26->setText(QApplication::translate("MainWindow", "synpases", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ sliderSynapses->setToolTip(QApplication::translate("MainWindow", "how many connections to search (ordered in closeness)", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+#ifndef QT_NO_TOOLTIP
+ spinBoxSynapses->setToolTip(QApplication::translate("MainWindow", "how many connections to search (ordered in closeness)", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ label_27->setText(QApplication::translate("MainWindow", "algorithm", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ radioButtonAlgoBasic->setToolTip(QApplication::translate("MainWindow", "full brain search", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ radioButtonAlgoBasic->setText(QApplication::translate("MainWindow", "basic", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ radioButtonAlgoRevBasic->setToolTip(QApplication::translate("MainWindow", "full brain reverse search", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ radioButtonAlgoRevBasic->setText(QApplication::translate("MainWindow", "rev basic", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ radioButtonSynaptic->setToolTip(QApplication::translate("MainWindow", "search based on synapse connections", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ radioButtonSynaptic->setText(QApplication::translate("MainWindow", "synaptic", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_TOOLTIP
+ radioButtonSynapticSlide->setToolTip(QApplication::translate("MainWindow", "search based on synapses and sonify search process", 0, QApplication::UnicodeUTF8));
+#endif // QT_NO_TOOLTIP
+ radioButtonSynapticSlide->setText(QApplication::translate("MainWindow", "synaptic slide", 0, QApplication::UnicodeUTF8));
label_23->setText(QApplication::translate("MainWindow", "mix", 0, QApplication::UnicodeUTF8));
label_21->setText(QApplication::translate("MainWindow", "dynamic / normalised ", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP
@@ -922,27 +1051,26 @@ public:
radioButton_rectangleTarget->setText(QApplication::translate("MainWindow", "rectangle", 0, QApplication::UnicodeUTF8));
label_14->setText(QApplication::translate("MainWindow", "window shape", 0, QApplication::UnicodeUTF8));
pushButtonGenerateTarget->setText(QApplication::translate("MainWindow", "(re)generate blocks", 0, QApplication::UnicodeUTF8));
- tabWidget->setTabText(tabWidget->indexOf(controlTab), QApplication::translate("MainWindow", "search", 0, QApplication::UnicodeUTF8));
label_3->setText(QApplication::translate("MainWindow", "brain parameters", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("MainWindow", "block size", 0, QApplication::UnicodeUTF8));
label_2->setText(QApplication::translate("MainWindow", "block overlap", 0, QApplication::UnicodeUTF8));
- radioButton_bartlett->setText(QApplication::translate("MainWindow", "bartlett", 0, QApplication::UnicodeUTF8));
- radioButton_dodgy->setText(QApplication::translate("MainWindow", "dodgy", 0, QApplication::UnicodeUTF8));
- radioButton_blackman->setText(QApplication::translate("MainWindow", "blackman", 0, QApplication::UnicodeUTF8));
radioButton_gaussian->setText(QApplication::translate("MainWindow", "gaussian", 0, QApplication::UnicodeUTF8));
radioButton_hamming->setText(QApplication::translate("MainWindow", "hamming", 0, QApplication::UnicodeUTF8));
- radioButton_hann->setText(QApplication::translate("MainWindow", "hann", 0, QApplication::UnicodeUTF8));
- radioButton_flattop->setText(QApplication::translate("MainWindow", "flat top", 0, QApplication::UnicodeUTF8));
+ radioButton_dodgy->setText(QApplication::translate("MainWindow", "dodgy", 0, QApplication::UnicodeUTF8));
+ radioButton_blackman->setText(QApplication::translate("MainWindow", "blackman", 0, QApplication::UnicodeUTF8));
radioButton_rectagle->setText(QApplication::translate("MainWindow", "rectangle", 0, QApplication::UnicodeUTF8));
+ radioButton_bartlett->setText(QApplication::translate("MainWindow", "bartlett", 0, QApplication::UnicodeUTF8));
+ radioButton_flattop->setText(QApplication::translate("MainWindow", "flat top", 0, QApplication::UnicodeUTF8));
+ radioButton_hann->setText(QApplication::translate("MainWindow", "hann", 0, QApplication::UnicodeUTF8));
label_4->setText(QApplication::translate("MainWindow", "window shape", 0, QApplication::UnicodeUTF8));
- pushButtonGenerate->setText(QApplication::translate("MainWindow", "(re)generate", 0, QApplication::UnicodeUTF8));
- pushButtonLosdBrain->setText(QApplication::translate("MainWindow", "load", 0, QApplication::UnicodeUTF8));
- pushButtonSaveBrain->setText(QApplication::translate("MainWindow", "save", 0, QApplication::UnicodeUTF8));
+ pushButtonGenerate->setText(QApplication::translate("MainWindow", "(re)generate brain", 0, QApplication::UnicodeUTF8));
+ pushButtonLoadBrain->setText(QApplication::translate("MainWindow", "load brain", 0, QApplication::UnicodeUTF8));
+ pushButtonSaveBrain->setText(QApplication::translate("MainWindow", "save brain", 0, QApplication::UnicodeUTF8));
label_5->setText(QApplication::translate("MainWindow", "brain contents", 0, QApplication::UnicodeUTF8));
pushButtonLoadSound->setText(QApplication::translate("MainWindow", "load sound", 0, QApplication::UnicodeUTF8));
pushButtonDeleteSound->setText(QApplication::translate("MainWindow", "delete selected", 0, QApplication::UnicodeUTF8));
pushButtonClearBrain->setText(QApplication::translate("MainWindow", "clear brain", 0, QApplication::UnicodeUTF8));
- tabWidget->setTabText(tabWidget->indexOf(sampleTab), QApplication::translate("MainWindow", "brain", 0, QApplication::UnicodeUTF8));
+ tabWidget->setTabText(tabWidget->indexOf(controlTab), QApplication::translate("MainWindow", "search", 0, QApplication::UnicodeUTF8));
tabWidget->setTabText(tabWidget->indexOf(logTab), QApplication::translate("MainWindow", "log", 0, QApplication::UnicodeUTF8));
pushButtonPlay->setText(QString());
pushButtonStop->setText(QString());
@@ -959,4 +1087,4 @@ namespace Ui {
QT_END_NAMESPACE
-#endif // SAMPLEBRAING19815_H
+#endif // SAMPLEBRAINUQB562_H
diff --git a/samplebrain/qt/process_thread.cpp b/samplebrain/qt/process_thread.cpp
index ebff323..cd96302 100644
--- a/samplebrain/qt/process_thread.cpp
+++ b/samplebrain/qt/process_thread.cpp
@@ -56,7 +56,7 @@ void process_thread::process() {
while(true) {
while (m_osc.get(cmd)) {
string name = cmd.m_name;
- cerr<reset();
pthread_mutex_unlock(m_brain_mutex);
}
if (name=="/load_target") {
@@ -90,11 +92,9 @@ void process_thread::process() {
}
if (name=="/target_overlap") {
m_target_overlap = m_target_block_size*cmd.get_float(0);
- cerr<
#pragma once
@@ -27,11 +28,20 @@ public:
process_thread();
~process_thread();
- brain m_source, m_target;
pthread_mutex_t* m_brain_mutex;
+ void register_renderer(renderer *p) { m_renderer=p; }
+
void process();
+ void load_source(const std::string &filename);
+ void load_target(const std::string &filename);
+ void save_source(const std::string &filename);
+ void save_target(const std::string &filename);
+
+ // only for use in mutex
+ brain m_source, m_target;
+
private:
OSC_server m_osc;
u32 m_source_block_size;
@@ -41,6 +51,9 @@ private:
window::type m_window_type;
window::type m_target_window_type;
pthread_t *m_thread;
+
+ // only use in mutex obvs...
+ renderer *m_renderer;
};
}
diff --git a/samplebrain/qt/qtmain.cpp b/samplebrain/qt/qtmain.cpp
index abffd6b..44fa52e 100644
--- a/samplebrain/qt/qtmain.cpp
+++ b/samplebrain/qt/qtmain.cpp
@@ -33,6 +33,7 @@ int main( int argc , char *argv[] ){
process_thread pt;
audio_thread at(pt);
+ pt.register_renderer(at.m_renderer);
return app.exec();
}
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..1425a92 100644
--- a/samplebrain/src/block.cpp
+++ b/samplebrain/src/block.cpp
@@ -84,6 +84,7 @@ block::block(const string &filename, const sample &pcm, u32 rate, const window &
// rerun the normalised version
normalise(m_n_pcm);
+ w.run(m_n_pcm);
process(m_n_pcm,m_n_fft,m_n_mfcc);
if (ditchpcm) {
@@ -180,8 +181,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 +245,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..ccd836d 100644
--- a/samplebrain/src/brain.cpp
+++ b/samplebrain/src/brain.cpp
@@ -25,6 +25,9 @@
using namespace std;
using namespace spiralcore;
+static const u32 NUM_FIXED_SYNAPSES = 1000;
+static const double usage_factor = 1000000;
+
brain::brain() :
m_current_block_index(0),
m_average_error(0),
@@ -89,8 +92,6 @@ const block &brain::get_block(u32 index) const {
return m_blocks[index];
}
-static const double usage_factor = 1000000;
-
// returns index to block
u32 brain::search(const block &target, const search_params ¶ms) {
double closest = FLT_MAX;
@@ -129,6 +130,7 @@ u32 brain::rev_search(const block &target, const search_params ¶ms) {
return furthest_index;
}
+// 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) {
@@ -140,16 +142,17 @@ double brain::calc_average_diff(search_params ¶ms) {
return diff;
}
-void brain::build_synapses(search_params ¶ms, double thresh) {
+void brain::build_synapses_thresh(search_params ¶ms, double thresh) {
m_average_error = calc_average_diff(params)*thresh;
- double err=m_average_error*thresh;
+ double err = m_average_error*thresh;
u32 brain_size = m_blocks.size();
- u32 outer_index=0;
+ u32 outer_index = 0;
for (vector::iterator i=m_blocks.begin(); i!=m_blocks.end(); ++i) {
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) {
if (index!=outer_index) {
+ // collect connections that are under threshold in closeness
double diff = i->compare(*j,params);
if (diffget_synapse().push_back(index);
@@ -161,21 +164,83 @@ void brain::build_synapses(search_params ¶ms, double thresh) {
}
}
+void brain::build_synapses_fixed(search_params ¶ms) {
+ //m_average_error = calc_average_diff(params)*thresh;
+ u32 brain_size = m_blocks.size();
+ u32 outer_index = 0;
+ 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) {
+ 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) {
+ assert(indexcompare(*j,params);
+ collect.push_back(pair(index,diff));
+ }
+ ++index;
+ }
+
+ // sort them by closeness
+ sort(collect.begin(),collect.end(),
+ [](const pair &a,
+ const pair &b) -> bool {
+ return a.secondget_synapse().push_back(collect[n].first);
+ }
+
+ ++outer_index;
+ }
+}
+
+
+void brain::jiggle() {
+ if (m_blocks.size()>0) {
+ m_current_block_index=rand()%m_blocks.size();
+ } else {
+ m_current_block_index=0;
+ }
+}
+
+
u32 brain::search_synapses(const block &target, search_params ¶ms) {
const block ¤t = get_block(m_current_block_index);
double closest = DBL_MAX;
u32 closest_index = 0;
// find nearest in synaptic connections
+ if (current.get_synapse_const().size()params.m_num_synapses);
+
+ u32 synapse_count=0;
+ // use m_num_synapses to restrict search
+ // only makes sense when ordered by closeness in fixed mode
+ vector::const_iterator i=current.get_synapse_const().begin();
+ while (i!=current.get_synapse_const().end() &&
+ synapse_count::const_iterator i=current.get_synapse_const().begin();
- i!=current.get_synapse_const().end(); ++i) {
const block &other = get_block(*i);
double diff = target.compare(other,params);
if (diffm_ratio=0.5;
+ rr.get_params()->m_ratio=0;
rr.get_params()->m_usage_importance=0.5;
+ rr.get_params()->m_num_synapses=150;
rr.set_slide_error(5.5);
rr.set_search_algo(renderer::SYNAPTIC);
diff --git a/samplebrain/src/renderer.cpp b/samplebrain/src/renderer.cpp
index 0043e2b..0d19c29 100644
--- a/samplebrain/src/renderer.cpp
+++ b/samplebrain/src/renderer.cpp
@@ -43,6 +43,7 @@ void renderer::reset() {
m_render_time=0;
m_target_index=0;
m_render_blocks.clear();
+ m_source.jiggle();
}
void renderer::process(u32 nframes, float *buf) {
@@ -170,8 +171,10 @@ bool renderer::unit_test() {
renderer rr(source,target);
rr.set_playing(true);
- float *buf=new float[10];
+ float *buf=new float[400];
rr.process(10,buf);
+ rr.process(10,buf);
+
assert(rr.m_render_blocks.size()==2);
rr.process(10,buf);
assert(rr.m_render_blocks.size()==2);
@@ -184,7 +187,10 @@ bool renderer::unit_test() {
target.init(10,5,window::RECTANGLE);
rr.process(10,buf);
- assert(rr.m_render_blocks.size()==5);
+ rr.process(10,buf);
+ rr.process(10,buf);
+ rr.process(10,buf);
+ assert(rr.m_render_blocks.size()==4);
delete[] buf;
}
diff --git a/samplebrain/src/search_params.h b/samplebrain/src/search_params.h
index f7c90b8..58eb535 100644
--- a/samplebrain/src/search_params.h
+++ b/samplebrain/src/search_params.h
@@ -26,13 +26,16 @@ public:
m_n_ratio(n_ratio),
m_fft1_start(s1),
m_fft1_end(e1),
- m_usage_importance(usage_importance) {}
+ m_usage_importance(usage_importance),
+ m_num_synapses(20)
+ {}
float m_ratio;
float m_n_ratio;
- int m_fft1_start;
- int m_fft1_end;
+ u32 m_fft1_start;
+ u32 m_fft1_end;
float m_usage_importance;
+ u32 m_num_synapses;
};
}
diff --git a/samplebrain/src/window.cpp b/samplebrain/src/window.cpp
index 6243c38..e038624 100644
--- a/samplebrain/src/window.cpp
+++ b/samplebrain/src/window.cpp
@@ -108,3 +108,25 @@ void window::run(const sample &input) const {
input[n]*=(*m_windows[m_current_type])[n];
}
}
+
+ios &spiralcore::operator||(ios &s, window &b) {
+ u32 version=0;
+ string id("window");
+ s||id||version;
+ s||b.m_current_type;
+ std::ofstream *pos=dynamic_cast(&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