Merge branch 'master' of gitlab.com:nebogeo/samplebrain

This commit is contained in:
foam 2015-08-07 10:16:15 +01:00
commit 4a3a6bef14
5 changed files with 40 additions and 33 deletions

View File

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>samplebrain 0.7</string> <string>samplebrain 0.8</string>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_4"> <layout class="QVBoxLayout" name="verticalLayout_4">
@ -409,7 +409,7 @@
<number>1</number> <number>1</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10</number> <number>50</number>
</property> </property>
<property name="value"> <property name="value">
<number>1</number> <number>1</number>
@ -434,7 +434,7 @@
<number>1</number> <number>1</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10</number> <number>50</number>
</property> </property>
<property name="value"> <property name="value">
<number>1</number> <number>1</number>

View File

@ -1,14 +1,14 @@
/******************************************************************************** /********************************************************************************
** Form generated from reading UI file 'samplebrainj32146.ui' ** Form generated from reading UI file 'samplebrainj21537.ui'
** **
** Created: Thu Aug 6 13:25:50 2015 ** Created: Fri Aug 7 09:55:34 2015
** by: Qt User Interface Compiler version 4.8.1 ** by: Qt User Interface Compiler version 4.8.1
** **
** WARNING! All changes made in this file will be lost when recompiling UI file! ** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/ ********************************************************************************/
#ifndef SAMPLEBRAINJ32146_H #ifndef SAMPLEBRAINJ21537_H
#define SAMPLEBRAINJ32146_H #define SAMPLEBRAINJ21537_H
#include <QtCore/QVariant> #include <QtCore/QVariant>
#include <QtGui/QAction> #include <QtGui/QAction>
@ -385,7 +385,7 @@ public:
sizePolicy.setHeightForWidth(sliderSearchStretch->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(sliderSearchStretch->sizePolicy().hasHeightForWidth());
sliderSearchStretch->setSizePolicy(sizePolicy); sliderSearchStretch->setSizePolicy(sizePolicy);
sliderSearchStretch->setMinimum(1); sliderSearchStretch->setMinimum(1);
sliderSearchStretch->setMaximum(10); sliderSearchStretch->setMaximum(50);
sliderSearchStretch->setValue(1); sliderSearchStretch->setValue(1);
sliderSearchStretch->setOrientation(Qt::Horizontal); sliderSearchStretch->setOrientation(Qt::Horizontal);
@ -396,7 +396,7 @@ public:
sizePolicy1.setHeightForWidth(spinBoxSearchStretch->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(spinBoxSearchStretch->sizePolicy().hasHeightForWidth());
spinBoxSearchStretch->setSizePolicy(sizePolicy1); spinBoxSearchStretch->setSizePolicy(sizePolicy1);
spinBoxSearchStretch->setMinimum(1); spinBoxSearchStretch->setMinimum(1);
spinBoxSearchStretch->setMaximum(10); spinBoxSearchStretch->setMaximum(50);
spinBoxSearchStretch->setValue(1); spinBoxSearchStretch->setValue(1);
horizontalLayout_19->addWidget(spinBoxSearchStretch); horizontalLayout_19->addWidget(spinBoxSearchStretch);
@ -1043,7 +1043,7 @@ public:
void retranslateUi(QMainWindow *MainWindow) void retranslateUi(QMainWindow *MainWindow)
{ {
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "samplebrain 0.7", 0, QApplication::UnicodeUTF8)); MainWindow->setWindowTitle(QApplication::translate("MainWindow", "samplebrain 0.8", 0, QApplication::UnicodeUTF8));
label_19->setText(QApplication::translate("MainWindow", "brain tweaks", 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)); label_6->setText(QApplication::translate("MainWindow", "fft / mfcc", 0, QApplication::UnicodeUTF8));
#ifndef QT_NO_TOOLTIP #ifndef QT_NO_TOOLTIP
@ -1185,4 +1185,4 @@ namespace Ui {
QT_END_NAMESPACE QT_END_NAMESPACE
#endif // SAMPLEBRAINJ32146_H #endif // SAMPLEBRAINJ21537_H

View File

@ -98,7 +98,7 @@ int main(int argc, char *argv[])
*/ */
brain source; brain source;
ifstream ifs("shosta.brain",ios::binary); ifstream ifs("mix.brain",ios::binary);
ifs||source; ifs||source;
ifs.close(); ifs.close();
@ -124,7 +124,7 @@ int main(int argc, char *argv[])
rr.get_params()->m_num_synapses=40; rr.get_params()->m_num_synapses=40;
rr.set_slide_error(3400.5); rr.set_slide_error(3400.5);
rr.set_search_algo(renderer::SYNAPTIC); rr.set_search_algo(renderer::SYNAPTIC);
rr.set_target_mix(0.2); rr.set_target_mix(0.9);
rr.set_stretch(10); rr.set_stretch(10);
a->start_recording("debug"); a->start_recording("debug");
a->m_client.set_callback(run_audio, &rr); a->m_client.set_callback(run_audio, &rr);

View File

@ -33,7 +33,7 @@ void renderer::init(brain &source, brain &target) {
m_search_algo=BASIC; m_search_algo=BASIC;
m_slide_error=1; m_slide_error=1;
m_target_index=0; m_target_index=0;
m_target_counter=0; m_render_index=0;
m_stretch=1; m_stretch=1;
m_last_tgt_shift=0; m_last_tgt_shift=0;
} }
@ -44,7 +44,7 @@ void renderer::reset() {
m_target_time=0; m_target_time=0;
m_render_time=0; m_render_time=0;
m_target_index=0; m_target_index=0;
m_target_counter=0; m_render_index=0;
m_render_blocks.clear(); m_render_blocks.clear();
m_source.jiggle(); m_source.jiggle();
} }
@ -59,15 +59,21 @@ void renderer::process(u32 nframes, float *buf) {
clean_up(); clean_up();
m_render_time+=nframes; m_render_time+=nframes;
m_target_time+=nframes/(float)m_stretch; //m_target_time+=nframes/(float)m_stretch;
} }
// target_time = samples time into target stream
// render_time = position in output stream, updated per process - used for offsets
bool renderer::find_render_blocks(u32 nframes) { bool renderer::find_render_blocks(u32 nframes) {
// get new blocks from source for the current buffer // get new blocks from source for the current buffer
// where are we phase? // where are we phase?
u32 tgt_shift = m_target.get_block_size()-m_target.get_overlap(); u32 tgt_shift = m_target.get_block_size()-m_target.get_overlap();
m_target_index = m_target_time/(float)tgt_shift;
u32 tgt_end = (m_target_time+nframes)/(float)tgt_shift; u32 tgt_end = (m_target_time+nframes)/(float)tgt_shift;
u32 rnd_end = (m_render_time+nframes)/(float)tgt_shift;
// stuff has changed - recompute and abort // stuff has changed - recompute and abort
if (tgt_shift!=m_last_tgt_shift || if (tgt_shift!=m_last_tgt_shift ||
@ -79,23 +85,26 @@ bool renderer::find_render_blocks(u32 nframes) {
return false; return false;
} }
/*
/* cerr<<"-----------------"<<endl; cerr<<"-----------------"<<endl;
cerr<<"tgt start:"<<m_target_index<<endl; cerr<<"tgt start:"<<m_target_index<<endl;
cerr<<"tgt end:"<<tgt_end<<endl; cerr<<"tgt end:"<<tgt_end<<endl;
cerr<<":"<<tgt_end-m_target_index<<endl; cerr<<":"<<tgt_end-m_target_index<<endl;
cerr<<"block time "<<m_target_counter*tgt_shift<<endl;
cerr<<"target time "<<m_target_time<<endl; cerr<<"target time "<<m_target_time<<endl;
cerr<<"target time (index) "<<m_target_index*tgt_shift<<endl;
cerr<<"real vs index = "<<(s32)m_target_time-(s32)(m_target_index*tgt_shift)<<endl;
cerr<<"render time "<<m_render_time<<endl; cerr<<"render time "<<m_render_time<<endl;
cerr<<"render time (index) "<<m_render_index*tgt_shift<<endl;
cerr<<": "<<(s32)m_render_time-(s32)(m_target_time)<<endl;*/ cerr<<"real vs index = "<<(s32)m_render_time-(s32)(m_render_index*tgt_shift)<<endl;
cerr<<m_render_blocks.size()<<endl;
*/
// search phase // search phase
// get indices for current buffer // get indices for current buffer
u32 counter = m_target_index; u32 counter = m_render_index;
//u32 cur_time = m_render_time; //u32 cur_time = m_render_time;
while (counter<=tgt_end) { while (counter<=rnd_end) {
u32 time=m_target_counter*tgt_shift; u32 time=m_render_index*tgt_shift;
u32 src_index=0; u32 src_index=0;
switch (m_search_algo) { switch (m_search_algo) {
@ -115,23 +124,21 @@ bool renderer::find_render_blocks(u32 nframes) {
m_render_blocks.push_back(render_block(src_index,m_target_index,time)); m_render_blocks.push_back(render_block(src_index,m_target_index,time));
if (m_source.get_current_error()<m_slide_error && if (m_source.get_current_error()<m_slide_error &&
m_target_counter%m_stretch==0) { m_render_index%m_stretch==0) {
m_target_index++; m_target_index++;
//m_target_time+=tgt_shift; m_target_time+=tgt_shift;
} }
m_target_counter++;
} else { } else {
// put them in the index list // put them in the index list
m_render_blocks.push_back(render_block(src_index,m_target_index,time)); m_render_blocks.push_back(render_block(src_index,m_target_index,time));
if (m_target_counter%m_stretch==0) { if (m_render_index%m_stretch==0) {
m_target_index++; m_target_index++;
//m_target_time+=tgt_shift; m_target_time+=tgt_shift;
} }
m_target_counter++;
} }
counter++; counter++;
m_render_index++;
} }
return true; return true;
} }
@ -241,7 +248,7 @@ void renderer::old_process(u32 nframes, float *buf) {
u32 counter = m_target_index; u32 counter = m_target_index;
//u32 cur_time = m_render_time; //u32 cur_time = m_render_time;
while (counter<=tgt_end) { while (counter<=tgt_end) {
u32 time=m_target_index*tgt_shift; u32 time=m_render_index*tgt_shift;
u32 src_index=0; u32 src_index=0;
switch (m_search_algo) { switch (m_search_algo) {

View File

@ -83,7 +83,7 @@ private:
float m_volume; float m_volume;
bool m_playing; bool m_playing;
u32 m_target_index; u32 m_target_index;
u32 m_target_counter; u32 m_render_index;
float m_target_time; float m_target_time;
u32 m_render_time; u32 m_render_time;
u32 m_stretch; u32 m_stretch;