#include <qdatetime.h>
#include <qradiobutton.h>
-#include <qtextedit.h>
+#include <qtextbrowser.h>
#include <qpushbutton.h>
-
+#include <qwidgetaction.h>
+#include <qevent.h>
+#include <qabstracttextdocumentlayout.h>
#include <Music/Convolution.h>
using namespace Music;
#include "modules/View.h"
CustomInstrumentTunerForm::CustomInstrumentTunerForm()
-: m_capture_thread("fmit")
-, m_timer_refresh(this, "m_timer_refresh")
+: m_config_form(this)
+, m_capture_thread("fmit")
+, m_timer_refresh(this)
, m_algo_combedfft(NULL)
, m_range_filter(&m_dummy_range_filter)
, m_quantizer(&m_latency_quantizer)
-, m_settings("gillesdegottex.ch", "fmit", "009700") // not necessarily equal to the soft version
+, m_settings("fmit", "fmit", "009801") // not necessarily equal to the soft version
{
+ setupUi(this);
+
+ /*QWidgetAction* viewsCaption = new QWidgetAction(ui_tbViews);
+ viewsCaption->setDefaultWidget(new QLabel(tr("Views"), ui_tbViews));
+ ui_tbViews->addAction(viewsCaption);*/
+
View::s_settings = &m_settings;
m_settings.add(m_config_form.ui_chkFullScreen);
m_settings.add(m_config_form.ui_chkAutoSaveOnExit);
m_algo_combedfft = new CombedFT();
for(int i=0; i<m_capture_thread.getTransports().size(); i++)
- m_config_form.ui_cbTransports->insertItem(m_capture_thread.getTransports()[i]->getName());
+ m_config_form.ui_cbTransports->addItem(m_capture_thread.getTransports()[i]->getName());
if(m_capture_thread.getTransports().empty())
QMessageBox::critical(this, "Error", "Please compile me with a capture system ...");
m_dialTune = new DialView(centralWidget());
ui_dialTuneLayout->addWidget(m_dialTune);
- m_glGraph = new GLGraph("Graph", centralWidget());
+ m_glGraph = new GLGraph(centralWidget());
connect(m_glGraph->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
connect(m_glGraph->setting_spinMaxHeight, SIGNAL(valueChanged(int)), this, SLOT(update_views()));
- m_glGraph->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glGraph->setting_show);
ui_graphLayout->addWidget(m_glGraph);
m_glErrorHistory = new GLErrorHistory(centralWidget());
connect(m_glErrorHistory->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glErrorHistory->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glErrorHistory->setting_show);
ui_errorLayout->addWidget(m_glErrorHistory);
// link scales
m_glVolumeHistory = new GLVolumeHistory(centralWidget());
connect(m_config_form.ui_spinVolumeTreshold, SIGNAL(valueChanged(int)), m_glVolumeHistory, SLOT(setVolumeTreshold(int)));
connect(m_glVolumeHistory->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glVolumeHistory->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glVolumeHistory->setting_show);
ui_volumeLayout->addWidget(m_glVolumeHistory);
// link keep settings
m_glSample = new GLSample(centralWidget());
connect(m_glSample->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glSample->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glSample->setting_show);
ui_sampleLayout->addWidget(m_glSample);
m_glFreqStruct = new GLFreqStruct(centralWidget());
connect(m_glFreqStruct->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glFreqStruct->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glFreqStruct->setting_show);
ui_formantsLayout->addWidget(m_glFreqStruct);
m_glFT = new GLFT(centralWidget());
connect(m_glFT->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glFT->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glFT->setting_show);
ui_FT->addWidget(m_glFT);
m_microtonalView = new MicrotonalView(centralWidget());
connect(m_microtonalView->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
connect(m_microtonalView, SIGNAL(tuningFreqChanged(float)), this, SLOT(tuningFreqChanged(float)));
- m_microtonalView->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_microtonalView->setting_show);
ui_microtonalLayout->addWidget(m_microtonalView);
m_glStatistics = new GLStatistics(centralWidget());
connect(m_glStatistics->setting_show, SIGNAL(toggled(bool)), this, SLOT(update_views()));
- m_glStatistics->setting_show->addTo(ui_tbViews);
+ ui_tbViews->addAction(m_glStatistics->setting_show);
ui_microtonalLayout->addWidget(m_glStatistics);
connect(m_dialTune->setting_spinScale, SIGNAL(valueChanged(int)), m_glStatistics->setting_spinScale, SLOT(setValue(int)));
connect(m_dialTune->setting_showTolerance, SIGNAL(toggled(bool)), m_glStatistics->setting_showTolerance, SLOT(setOn(bool)));
connect(m_glStatistics->setting_showTolerance, SIGNAL(toggled(bool)), m_dialTune->setting_showTolerance, SLOT(setOn(bool)));
- connect(m_config_form.buttonOk, SIGNAL(clicked()), this, SLOT(configure_ok()));
+ connect(&m_config_form, SIGNAL(accepted()), this, SLOT(configure_ok()));
+ connect(&m_config_form, SIGNAL(rejected()), this, SLOT(configure_cancel()));
connect(m_config_form.ui_btnRestoreFactorySettings, SIGNAL(clicked()), this, SLOT(restoreFactorySettings()));
connect(m_config_form.ui_spinMinHT, SIGNAL(valueChanged(int)), this, SLOT(noteRangeChanged()));
connect(m_config_form.ui_spinMaxHT, SIGNAL(valueChanged(int)), this, SLOT(noteRangeChanged()));
m_time.start();
connect((QObject*)&m_timer_refresh, SIGNAL(timeout()), this, SLOT(refresh()));
m_timer_refresh.start(m_config_form.ui_spinRefreshTime->value());
+
+// cerr << __FILE__ << " " << __LINE__ << endl;
}
void CustomInstrumentTunerForm::transportChanged(const QString& name)
{
selectTransport(name);
- if(m_capture_thread.getCurrentTransportIndex()!=m_config_form.ui_cbTransports->currentItem())
- m_config_form.ui_cbTransports->setCurrentItem(m_capture_thread.getCurrentTransportIndex());
+ if(m_capture_thread.getCurrentTransportIndex()!=m_config_form.ui_cbTransports->currentIndex())
+ m_config_form.ui_cbTransports->setCurrentIndex(m_capture_thread.getCurrentTransportIndex());
}
void CustomInstrumentTunerForm::selectTransport(const QString& name)
{
{
// cerr << "CustomInstrumentTunerForm::noteRangeChanged" << endl;
- m_config_form.ui_txtMinHT->setText(h2n(m_config_form.ui_spinMinHT->value())+" = "+QString::number(h2f(m_config_form.ui_spinMinHT->value()))+" hz");
- m_config_form.ui_txtMaxHT->setText(h2n(m_config_form.ui_spinMaxHT->value())+" = "+QString::number(h2f(m_config_form.ui_spinMaxHT->value()))+" hz");
+ m_config_form.ui_txtMinHT->setText(QString::fromStdString(h2n(m_config_form.ui_spinMinHT->value())) + " = " + QString::number(h2f(m_config_form.ui_spinMinHT->value())) + " hz");
+ m_config_form.ui_txtMaxHT->setText(QString::fromStdString(h2n(m_config_form.ui_spinMaxHT->value())) + " = " + QString::number(h2f(m_config_form.ui_spinMaxHT->value())) + " hz");
}
void CustomInstrumentTunerForm::errorRaised(const QString& error)
{
// cerr << "CustomInstrumentTunerForm::errorRaised " << error << endl;
- statusBar()->message(QString("ERROR: ")+error);
+ statusBar()->showMessage(QString("ERROR: ")+error);
- ui_lblSoundStability->setBackgroundColor(QColor(180,74,74));
+ QPalette palette;
+ palette.setColor(ui_lblSoundStability->backgroundRole(), QColor(180,74,74));
+ ui_lblSoundStability->setPalette(palette);
}
void CustomInstrumentTunerForm::samplingRateChanged(int sampling_rate)
{
-// cerr << "CustomInstrumentTunerForm::samplingRateChanged " << sampling_rate << endl;
+ cerr << "CustomInstrumentTunerForm::samplingRateChanged " << sampling_rate << endl;
Music::SetSamplingRate(sampling_rate);
- m_rect_range_filter.reset(int(GetSamplingRate()/h2f(GetSemitoneMin())));
+ m_rect_range_filter.reset(int(GetSamplingRate()/2000.0));
+// m_fir_range_filter.setImpulseResponse(fir1_lowpass(400, 2/400));
+// m_rect_range_filter.reset(int(GetSamplingRate()/h2f(GetSemitoneMin())));
+ m_glFT->spinWinLengthChanged(m_glFT->setting_winlen->value());
+ m_glFT->setSamplingRate(sampling_rate);
if(m_config_form.ui_cbTransports->currentText()=="JACK")
m_config_form.ui_lblJACKSamplingRate->setText(QString::number(sampling_rate));
void CustomInstrumentTunerForm::ui_spinAFreq_valueChanged(int AFreq)
{
double A = AFreq;
- if(m_config_form.ui_chkShowA4Offset->isOn())
+ if(m_config_form.ui_chkShowA4Offset->isChecked())
A = h2f(ui_spinA3Offset->value()*1/100.0f, A);
Music::SetAFreq(A);
// cerr << A << endl;
void CustomInstrumentTunerForm::ui_spinAOffset_valueChanged(int offset)
{
double A = ui_spinAFreq->value();
- if(m_config_form.ui_chkShowA4Offset->isOn())
+ if(m_config_form.ui_chkShowA4Offset->isChecked())
A = h2f(offset*1/100.0f, ui_spinAFreq->value());
Music::SetAFreq(A);
// cerr << A << endl;
if(m_compared_freq!=0.0f)
{
ui_txtNoteFreq->display(m_compared_freq);
- ui_txtNote->setText(h2n(f2h(m_compared_freq)));
+ ui_txtNote->setText(QString::fromStdString(h2n(f2h(m_compared_freq))));
}
}
else
QColor ok_color(83,165,105);
// 1/{time between refresh} = {nb refresh by seconds}
- // limit the nb new data by fs/{nb refresh by seconds}
- // add 1 to {nb refresh by second} to eventualy recover lags
+ // limit the nb of new data by fs/{nb refresh by seconds}
+ // add 1 to {nb refresh by second} to eventualy recover small lags
+ // (a big lag is managed by m_values.size()>getPacketSizeSinceLastLock())
int limit = int( m_capture_thread.getSamplingRate() /
(1.0/(m_config_form.ui_spinRefreshTime->value()/1000.0) - 1));
// cerr << "REFRESH ";
m_capture_thread.lock();
- double max_amplitude = 0.0;
+// cerr << "CustomInstrumentTunerForm::refresh locked, values to read=" << m_capture_thread.m_values.size() << endl;
int nb_new_data = 0;
while(!m_capture_thread.m_values.empty() &&
(m_capture_thread.m_values.size()>m_capture_thread.getPacketSizeSinceLastLock() || nb_new_data<limit))
// cerr << value << " ";
m_capture_thread.m_values.pop_back();
- max_amplitude = max(max_amplitude, fabs(value));
-
m_queue.push_front(value);
if(m_glGraph) m_glGraph->addValue(value);
if(m_glFT) m_glFT->buff.push_front(value);
nb_new_data++;
}
m_capture_thread.unlock();
+// cerr << "CustomInstrumentTunerForm::refresh unlocked" << endl;
// cerr << endl;
// ------- Analysis stage -------
// if something goes wrong in the capture system
- if(nb_new_data==0 || m_algo_combedfft==NULL
- || elapsed_time>8*m_config_form.ui_spinRefreshTime->value())
- ui_lblSoundStability->setBackgroundColor(capture_failed_color);
+ if(nb_new_data==0 || m_algo_combedfft==NULL || elapsed_time>8*m_config_form.ui_spinRefreshTime->value())
+ {
+ QPalette palette;
+ palette.setColor(ui_lblSoundStability->backgroundRole(), capture_failed_color);
+ ui_lblSoundStability->setPalette(palette);
+ }
else
{
m_algo_combedfft->apply(m_queue);
+ // TODO hem ... use energy
double max_component = 20*log10(m_algo_combedfft->getComponentsMax());
- ui_pgbVolume->setProgress(100+int(max_component));
+ ui_pgbVolume->setValue(100+int(max_component));
double freq = 0.0;
if(m_algo_combedfft->hasNoteRecognized())
m_quantizer->quantize(freq);
if(!m_quantizer->isPlaying())
- ui_lblSoundStability->setBackgroundColor(empty_color);
+ {
+ QPalette palette;
+ palette.setColor(ui_lblSoundStability->backgroundRole(), empty_color);
+ ui_lblSoundStability->setPalette(palette);
+ }
else
{
+ // Use 100ms rect window
+ int max_amplitude_limit = min(m_queue.size(),size_t(m_capture_thread.getSamplingRate()*100.0/1000));
+ double max_amplitude = 0.0;
+ for(int i=0;i<max_amplitude_limit; i++)
+ max_amplitude = max(max_amplitude, fabs(m_queue[i]));
+
if(max_amplitude>=1.0)
- ui_lblSoundStability->setBackgroundColor(prb_color);
+ {
+ QPalette palette;
+ palette.setColor(ui_lblSoundStability->backgroundRole(), prb_color);
+ ui_lblSoundStability->setPalette(palette);
+ }
else
- ui_lblSoundStability->setBackgroundColor(ok_color);
+ {
+ QPalette palette;
+ palette.setColor(ui_lblSoundStability->backgroundRole(), ok_color);
+ ui_lblSoundStability->setPalette(palette);
+ }
m_freq = m_quantizer->getAverageFrequency();
m_error = f2hf(m_freq, m_compared_freq);
// cerr << "CustomInstrumentTunerForm::noteStarted " << freq << "," << dt << endl;
// set the compared freq
- if(m_microtonalView->setting_show->isOn() && m_microtonalView->hasTuningFreqSelected())
+ if(m_microtonalView->setting_show->isChecked() && m_microtonalView->hasTuningFreqSelected())
m_compared_freq = m_microtonalView->getTuningFreq();
else
m_compared_freq = m_quantizer->getCenterFrequency(); // h2f(f2h(freq));
- if(m_microtonalView->setting_show->isOn() && m_microtonalView->hasTuningFreqSelected())
+ if(m_microtonalView->setting_show->isChecked() && m_microtonalView->hasTuningFreqSelected())
{
ui_txtNoteFreq->display(int(m_microtonalView->getTuningFreq()*100)/100.0);
ui_txtNote->setText(m_microtonalView->getTuningNoteName());
else
{
ui_txtNoteFreq->display(m_compared_freq);
- ui_txtNote->setText(h2n(f2h(m_compared_freq)));
+ ui_txtNote->setText(QString::fromStdString(h2n(f2h(m_compared_freq))));
m_glErrorHistory->addNote(GLErrorHistory::Note(f2h(m_compared_freq)));
m_glVolumeHistory->addNote(GLVolumeHistory::Note(f2h(m_compared_freq)));
}
void CustomInstrumentTunerForm::refresh_data_sample()
{
- if(m_freq==0.0f || !m_glSample->setting_show->isOn())
+ if(m_freq==0.0f || !m_glSample->setting_show->isChecked())
{
m_glSample->clear();
return;
{
if(!(m_algo_combedfft!=NULL &&
m_freq>0.0f &&
- m_glFreqStruct->setting_show->isOn()))
+ m_glFreqStruct->setting_show->isChecked()))
return;
vector<Harmonic> harms = GetHarmonicStruct(m_algo_combedfft->m_plan.out, m_freq, m_glFreqStruct->m_components.size(), m_algo_combedfft->getZeroPaddingFactor());
// m_dialTune->repaint();
- if(m_glGraph->setting_show->isOn())
+ if(m_glGraph->setting_show->isChecked())
m_glGraph->updateGL();
- if(m_glErrorHistory->setting_show->isOn())
+ if(m_glErrorHistory->setting_show->isChecked())
m_glErrorHistory->updateGL();
- if(m_glVolumeHistory->setting_show->isOn())
+ if(m_glVolumeHistory->setting_show->isChecked())
m_glVolumeHistory->updateGL();
- if(m_microtonalView->setting_show->isOn())
+ if(m_microtonalView->setting_show->isChecked())
m_microtonalView->update();
- if(m_glSample->setting_show->isOn())
+ if(m_glSample->setting_show->isChecked())
m_glSample->updateGL();
- if(m_glFreqStruct->setting_show->isOn())
+ if(m_glFreqStruct->setting_show->isChecked())
m_glFreqStruct->updateGL();
- if(m_glFT->setting_show->isOn())
+ if(m_glFT->setting_show->isChecked())
m_glFT->updateGL();
- if(m_glStatistics->setting_show->isOn())
+ if(m_glStatistics->setting_show->isChecked())
m_glStatistics->updateGL();
m_time_refresh_views.start();
void CustomInstrumentTunerForm::keyPressEvent(QKeyEvent * e)
{
- if(e->key()==Key_F)
+ if(e->key()==Qt::Key_F)
toggleFullScreen();
}
void CustomInstrumentTunerForm::resizeEvent(QResizeEvent* e)
{
update_views();
-
- InstrumentTunerForm::resizeEvent(e);
}
void CustomInstrumentTunerForm::update_views()
{
- if( !m_glGraph->setting_show->isOn() &&
- !m_glErrorHistory->setting_show->isOn() &&
- !m_glVolumeHistory->setting_show->isOn() &&
- !m_glSample->setting_show->isOn() &&
- !m_glFreqStruct->setting_show->isOn() &&
- !m_glFT->setting_show->isOn())
+ if( !m_glGraph->setting_show->isChecked() &&
+ !m_glErrorHistory->setting_show->isChecked() &&
+ !m_glVolumeHistory->setting_show->isChecked() &&
+ !m_glSample->setting_show->isChecked() &&
+ !m_glFreqStruct->setting_show->isChecked() &&
+ !m_glFT->setting_show->isChecked())
m_dialTune->setMaximumWidth(size().width());
else
m_dialTune->setMaximumWidth(ui_rightLayout->minimumSize().width());
- if(m_glGraph->setting_show->isOn() &&
- !m_glErrorHistory->setting_show->isOn() &&
- !m_glVolumeHistory->setting_show->isOn() &&
- !m_glSample->setting_show->isOn() &&
- !m_glFreqStruct->setting_show->isOn() &&
- !m_glFT->setting_show->isOn())
+ if(m_glGraph->setting_show->isChecked() &&
+ !m_glErrorHistory->setting_show->isChecked() &&
+ !m_glVolumeHistory->setting_show->isChecked() &&
+ !m_glSample->setting_show->isChecked() &&
+ !m_glFreqStruct->setting_show->isChecked() &&
+ !m_glFT->setting_show->isChecked())
m_glGraph->setMaximumHeight(size().height());
else
m_glGraph->setMaximumHeight(m_glGraph->setting_spinMaxHeight->value());
- if(!m_glErrorHistory->setting_show->isOn() && !m_glVolumeHistory->setting_show->isOn())
+ if(!m_glErrorHistory->setting_show->isChecked() && !m_glVolumeHistory->setting_show->isChecked())
ui_btnKeepErrorHistory->hide();
else
ui_btnKeepErrorHistory->show();
void CustomInstrumentTunerForm::configure()
{
+ // Checking PortAudio devices while capturing using ALSA seems to crash ALSA
+ // thus, stop everything while configuring and capture again when exiting the configuration panel
+ m_capture_thread.stopCapture();
+
noteRangeChanged();
if(m_capture_thread.getCurrentTransportIndex()<m_config_form.ui_cbTransports->count());
- m_config_form.ui_cbTransports->setCurrentItem(m_capture_thread.getCurrentTransportIndex());
+ m_config_form.ui_cbTransports->setCurrentIndex(m_capture_thread.getCurrentTransportIndex());
#ifdef CAPTURE_JACK
// TODO set descr
m_config_form.ui_grpJACK->setTitle(m_capture_thread.getTransport("JACK")->getDescription());
m_config_form.ui_lblJACKSamplingRate->setText(QString::number(m_capture_thread.getSamplingRate()));
#endif
+
#ifdef CAPTURE_PORTAUDIO
- m_config_form.ui_grpPortAudio->setTitle(m_capture_thread.getTransport("PortAudio")->getDescription());
+ m_config_form.ui_grpPortAudio->setTitle(m_capture_thread.getTransport("PortAudio")->getDescription());
m_config_form.ui_spinPortAudioSamplingRate->setValue(m_capture_thread.getSamplingRate());
if(m_capture_thread.getTransport("PortAudio"))
{
if(err != paNoError)
throw QString("PortAudio: CustomInstrumentTunerForm::configure:Pa_Initialize ")+Pa_GetErrorText(err);
int numDevices = Pa_GetDeviceCount();
-
int current_index = -1;
m_config_form.ui_cbPortAudioDeviceName->clear();
- m_config_form.ui_cbPortAudioDeviceName->insertItem("default");
const PaDeviceInfo* deviceInfo;
for(int i=0; i<numDevices; i++)
{
deviceInfo = Pa_GetDeviceInfo(i);
- m_config_form.ui_cbPortAudioDeviceName->insertItem(QString(deviceInfo->name));
+ m_config_form.ui_cbPortAudioDeviceName->addItem(QString(deviceInfo->name));
if(QString(deviceInfo->name)==m_capture_thread.getTransport("PortAudio")->getSource())
- current_index = i+1;
+ current_index = i;
}
- m_config_form.ui_cbPortAudioDeviceName->setCurrentItem(current_index);
+ if(current_index!=-1)
+ m_config_form.ui_cbPortAudioDeviceName->setCurrentIndex(current_index);
}
catch(QString error)
{
- cerr << "CustomInstrumentTunerForm: ERROR: " << error << endl;
+ cerr << "CustomInstrumentTunerForm: ERROR: " << error.toStdString() << endl;
}
Pa_Terminate();
}
#endif
+
#ifdef CAPTURE_ALSA
m_config_form.ui_grpALSA->setTitle(m_capture_thread.getTransport("ALSA")->getDescription());
m_config_form.ui_spinALSASamplingRate->setValue(m_capture_thread.getSamplingRate());
m_config_form.ui_spinOSSSamplingRate->setValue(m_capture_thread.getSamplingRate());
#endif
- m_config_form.adjustSize();
+ m_config_form.adjustSize();
m_config_form.show();
}
+void CustomInstrumentTunerForm::configure_cancel()
+{
+ if(!pauseAction->isChecked() && !m_capture_thread.isCapturing())
+ m_capture_thread.startCapture();
+}
void CustomInstrumentTunerForm::configure_ok()
{
- switch(m_config_form.ui_cbTuning->currentItem())
+ switch(m_config_form.ui_cbTuning->currentIndex())
{
case 0:
SetTuning(CHROMATIC);
break;
}
- if(m_config_form.ui_cbTonality->currentItem()==0) SetTonality(0);
- else if(m_config_form.ui_cbTonality->currentItem()==1) SetTonality(+2);
+ if(m_config_form.ui_cbTonality->currentIndex()==0) SetTonality(0);
+ else if(m_config_form.ui_cbTonality->currentIndex()==1) SetTonality(+2);
else SetTonality(-3);
- if(m_config_form.ui_cbNotesName->currentItem()==0) SetNotesName(LOCAL_ANGLO);
+ if(m_config_form.ui_cbNotesName->currentIndex()==0) SetNotesName(LOCAL_ANGLO);
else SetNotesName(LOCAL_LATIN);
m_microtonalView->notesNameChanged();
m_microtonalView->setAFreq(Music::GetAFreq());
SetSemitoneBounds(m_config_form.ui_spinMinHT->value(), m_config_form.ui_spinMaxHT->value());
- ui_spinA3Offset->setShown(m_config_form.ui_chkShowA4Offset->isOn());
- ui_lblA3Offset->setShown(m_config_form.ui_chkShowA4Offset->isOn());
+ ui_spinA3Offset->setShown(m_config_form.ui_chkShowA4Offset->isChecked());
+ ui_lblA3Offset->setShown(m_config_form.ui_chkShowA4Offset->isChecked());
// if(m_note!=-1000)
// ui_txtNote->setText(h2n(m_note));
m_capture_thread.setSamplingRate(m_config_form.ui_spinOSSSamplingRate->value());
}
#endif
- m_timer_refresh.changeInterval(m_config_form.ui_spinRefreshTime->value());
+ m_timer_refresh.setInterval(m_config_form.ui_spinRefreshTime->value());
// Views
- m_glGraph->m_treshold = pow(10, m_config_form.ui_spinVolumeTreshold->value()/20.0);
+ m_glGraph->m_treshold = invlp(m_config_form.ui_spinVolumeTreshold->value());
m_glGraph->clearValues();
// cerr << "c" << endl;
if(m_config_form.ui_grpRangeFiltering->isChecked())
{
+// cout << "set filters " << GetSamplingRate() << endl;
+// m_rect_range_filter.reset(int(GetSamplingRate()/6000.0));
m_rect_range_filter.reset(int(GetSamplingRate()/h2f(GetSemitoneMin())));
-// m_fir_range_filter.setImpulseResponse(fir1_highpass(int(GetSamplingRate()/h2f(GetSemitoneMin())), ));
+// m_fir_range_filter.setImpulseResponse(fir1_bandpass(104, 2*1000.0/GetSamplingRate(), 2*2000.0/GetSamplingRate()));
+// m_fir_range_filter.setImpulseResponse(fir1_highpass(int(GetSamplingRate()/h2f(GetSemitoneMin())), 0.5));
if(m_config_form.ui_rdRangeFilteringRectangular->isChecked())
m_range_filter = &m_rect_range_filter;
m_algo_combedfft->setWindowFactor(m_config_form.ui_spinWindowSizeFactor->value());
// m_glFT->m_zp_factor = m_config_form.ui_spinWindowSizeFactor->value();
m_algo_combedfft->useAudibilityRatio(m_config_form.ui_chkAlgoUseSubHarmTresh->isChecked());
- m_algo_combedfft->setAudibilityRatio(pow(10, -m_config_form.ui_spinCombedFFTAudibilityRatio->value()/20.0));
- m_algo_combedfft->setAmplitudeTreshold(pow(10, m_config_form.ui_spinVolumeTreshold->value()/20.0));
- m_algo_combedfft->setComponentTreshold(pow(10, m_config_form.ui_spinVolumeTreshold->value()/20.0));
+ m_algo_combedfft->setAudibilityRatio(invlp(-m_config_form.ui_spinCombedFFTAudibilityRatio->value()));
+ m_algo_combedfft->setAmplitudeTreshold(invlp(double(m_config_form.ui_spinVolumeTreshold->value())));
+ m_algo_combedfft->setComponentTreshold(invlp(double(m_config_form.ui_spinVolumeTreshold->value())));
// cerr << "d" << endl;
else
m_quantizer = &m_dummy_quantizer;
-// cerr << pow(10, -m_config_form.ui_spinCombedFFTAudibilityRatio->value()/20.0) << endl;
+// cerr << invlp(-m_config_form.ui_spinCombedFFTAudibilityRatio->value()) << endl;
- if(!pauseAction->isOn() && !m_capture_thread.isCapturing())
+ if(!pauseAction->isChecked() && !m_capture_thread.isCapturing())
m_capture_thread.startCapture();
}
View::saveAll();
// views
- m_settings.writeEntry("width", width());
- m_settings.writeEntry("height", height());
- m_settings.writeEntry("ui_tbViews", ui_tbViews->isShown());
- m_settings.writeEntry("ui_tbButtons", ui_tbButtons->isShown());
+ m_settings.setValue("width", width());
+ m_settings.setValue("height", height());
+ //m_settings.setValue("ui_tbViews", QVariant(ui_tbViews->isVisible()));
+ //m_settings.setValue("ui_tbButtons", ui_tbButtons->isVisible());
// sound capture
- m_settings.writeEntry(m_config_form.ui_cbTransports->name(), m_config_form.ui_cbTransports->currentText());
+ m_settings.setValue(m_config_form.ui_cbTransports->objectName(), m_config_form.ui_cbTransports->currentText());
#ifdef CAPTURE_PORTAUDIO
- m_settings.writeEntry(m_config_form.ui_cbPortAudioDeviceName->name(), m_config_form.ui_cbPortAudioDeviceName->currentText());
+ m_settings.setValue(m_config_form.ui_cbPortAudioDeviceName->objectName(), m_config_form.ui_cbPortAudioDeviceName->currentText());
#endif
}
void CustomInstrumentTunerForm::loadSettings()
{
+// cerr << __FILE__ << ":" << __LINE__ << endl;
+
m_settings.load();
View::loadAll();
// views
- resize(m_settings.readNumEntry("width", 800), m_settings.readNumEntry("height", 600));
- ui_tbViews->setShown(m_settings.readBoolEntry("ui_tbViews", ui_tbViews->isShown()));
- ui_tbButtons->setShown(m_settings.readBoolEntry("ui_tbButtons", ui_tbButtons->isShown()));
+ resize(m_settings.value("width", 800).toInt(), m_settings.value("height", 600).toInt());
+ //ui_tbViews->setVisible(m_settings.value("ui_tbViews", ui_tbViews->isVisible()).toBool());
+ //ui_tbButtons->setVisible(m_settings.value("ui_tbButtons", ui_tbButtons->isVisible()).toBool());
// sound capture
- QString saved_transport = m_settings.readEntry(m_config_form.ui_cbTransports->name(), "");
+ QString saved_transport = m_settings.value(m_config_form.ui_cbTransports->objectName(), "").toString();
if(saved_transport!="")
for(int i=0; i<m_config_form.ui_cbTransports->count(); i++)
- if(m_config_form.ui_cbTransports->text(i)==saved_transport)
- m_config_form.ui_cbTransports->setCurrentItem(i);
+ if(m_config_form.ui_cbTransports->itemText(i)==saved_transport)
+ m_config_form.ui_cbTransports->setCurrentIndex(i);
+
#ifdef CAPTURE_PORTAUDIO
-// cerr << "read: " << m_settings.readEntry("ui_cbPortAudioDeviceName", "default") << endl;
- QString saved_device = m_settings.readEntry(m_config_form.ui_cbPortAudioDeviceName->name(), "default");
+ QString saved_device = m_settings.value(m_config_form.ui_cbPortAudioDeviceName->objectName(), "default").toString();
try
{
PaError err;
if(err != paNoError)
throw QString("PortAudio: CustomInstrumentTunerForm::loadSettings:Pa_Initialize ")+Pa_GetErrorText(err);
int numDevices = Pa_GetDeviceCount();
-
- int current_index = 0;
+// cerr << "PortAudio devices:"<< endl;
+ int saved_index = -1;
m_config_form.ui_cbPortAudioDeviceName->clear();
- m_config_form.ui_cbPortAudioDeviceName->insertItem("default");
const PaDeviceInfo* deviceInfo;
for(int i=0; i<numDevices; i++)
{
deviceInfo = Pa_GetDeviceInfo(i);
- m_config_form.ui_cbPortAudioDeviceName->insertItem(QString(deviceInfo->name));
+// cerr << " " << QString(deviceInfo->name).toStdString() << endl;
+ m_config_form.ui_cbPortAudioDeviceName->addItem(QString(deviceInfo->name));
if(QString(deviceInfo->name)==saved_device)
- current_index = i+1;
+ saved_index = i;
}
- if(current_index<m_config_form.ui_cbPortAudioDeviceName->count())
- m_config_form.ui_cbPortAudioDeviceName->setCurrentItem(current_index);
- }
+ if(saved_index!=-1)
+ m_config_form.ui_cbPortAudioDeviceName->setCurrentIndex(saved_index);
+ }
catch(QString error)
{
// cerr << "CustomInstrumentTunerForm: ERROR: " << error << endl;
m_settings.clear();
View::clearAllSettings();
- m_settings.removeEntry("width");
- m_settings.removeEntry("height");
- m_settings.removeEntry("ui_tbViews");
- m_settings.removeEntry("ui_tbButtons");
+ m_settings.remove("width");
+ m_settings.remove("height");
+ m_settings.remove("ui_cbTransports");
+ //m_settings.remove("ui_tbViews");
+ //m_settings.remove("ui_tbButtons");
- m_settings.removeEntry(m_config_form.ui_cbPortAudioDeviceName->name());
+ m_settings.remove(m_config_form.ui_cbPortAudioDeviceName->objectName());
QMessageBox::information(this, tr("Restore Factory Settings"), tr("You can now restart FMIT to get back factory settings"), QMessageBox::Ok, QMessageBox::NoButton);
}
text += tr("</h3><p><h3>Website:</h3><p>homepage: <a href=\"http://home.gna.org/fmit\">http://home.gna.org/fmit</a>");
text += tr("<p>development site: <a href=\"http://gna.org/projects/fmit\">http://gna.org/projects/fmit</a>");
text += tr("<p>donation link: <a href=\"http://home.gna.org/fmit/donation.html\">http://home.gna.org/fmit/donation.html</a>");
- text += tr("<p><h3>Author:</h3><p>Gilles Degottex [gilles.degottex@net2000.ch]");
+ text += tr("<p><h3>Author:</h3><p>Gilles Degottex <a href=\"mailto:gilles.degottex@gmail.com\">gilles.degottex@gmail.com</a>");
#ifdef PACKAGER_STRING
if(PACKAGER_STRING!="")
text += tr("<p><h3>Packager:</h3><p>")+QString(PACKAGER_STRING).replace(QChar('<'),"[").replace(QChar('>'),"]");
QDialog about_dlg(this);
- QTextEdit* textEdit1;
+ QTextBrowser* textBrowser1;
QPushButton* pushButton1;
QVBoxLayout* Form2Layout;
QHBoxLayout* layout1;
QSpacerItem* spacer1;
QSpacerItem* spacer2;
- about_dlg.setName( tr("about_box") );
- about_dlg.setCaption( tr("About Free Music Instrument Tuner") );
- Form2Layout = new QVBoxLayout( &about_dlg, 11, 6, "Form2Layout");
+ about_dlg.setObjectName( tr("about_box") );
+ about_dlg.setWindowTitle( tr("About Free Music Instrument Tuner") );
+
+ Form2Layout = new QVBoxLayout( &about_dlg );
+ Form2Layout->setMargin(11);
+ Form2Layout->setSpacing(6);
+ about_dlg.setLayout( Form2Layout );
- textEdit1 = new QTextEdit( &about_dlg, "textEdit1" );
- textEdit1->setText(text);
- textEdit1->setReadOnly(true);
- Form2Layout->addWidget( textEdit1 );
+ textBrowser1 = new QTextBrowser( &about_dlg );
+ textBrowser1->setHtml(text);
+ textBrowser1->setOpenExternalLinks(true);
+ textBrowser1->setWordWrapMode(QTextOption::NoWrap);
+ textBrowser1->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ textBrowser1->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ textBrowser1->document()->adjustSize();
+ textBrowser1->setMinimumSize(textBrowser1->document()->size().toSize() + QSize(10, 10));
+ Form2Layout->addWidget( textBrowser1 );
+
+ layout1 = new QHBoxLayout();
+ layout1->setMargin(0);
+ layout1->setSpacing(6);
- layout1 = new QHBoxLayout( 0, 0, 6, "layout1");
spacer1 = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
layout1->addItem( spacer1 );
- pushButton1 = new QPushButton( &about_dlg, "pushButton1" );
- pushButton1->setText( tr( "OK" ) );
+ pushButton1 = new QPushButton(&about_dlg);
+ pushButton1->setText( tr( "&OK" ) );
layout1->addWidget( pushButton1 );
connect(pushButton1, SIGNAL(clicked()), &about_dlg, SLOT(close()));
+
spacer2 = new QSpacerItem( 40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
layout1->addItem( spacer2 );
+
Form2Layout->addLayout( layout1 );
- about_dlg.resize( QSize(400, textEdit1->heightForWidth(400)+100) );
-// about_dlg.clearWState( WState_Polished );
about_dlg.exec();
}