X-Git-Url: http://git.johnwright.org/?p=fmit.git;a=blobdiff_plain;f=src%2FCustomInstrumentTunerForm.cpp;fp=src%2FCustomInstrumentTunerForm.cpp;h=d639cd8cb22aca9ce02995f45d8b6be50242f40a;hp=e5a70d57fcc3dda8320934d0d9cf862be2a64aa5;hb=a8fb82288feb6b258f2c04312f0c36ba8d79b494;hpb=adfba0402927438a1869f1e716bcf0e25574ce1e diff --git a/src/CustomInstrumentTunerForm.cpp b/src/CustomInstrumentTunerForm.cpp index e5a70d5..d639cd8 100644 --- a/src/CustomInstrumentTunerForm.cpp +++ b/src/CustomInstrumentTunerForm.cpp @@ -43,21 +43,30 @@ using namespace std; #include #include -#include +#include #include - +#include +#include +#include #include 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); @@ -117,7 +126,7 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() m_algo_combedfft = new CombedFT(); for(int i=0; iinsertItem(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 ..."); @@ -148,15 +157,15 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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 @@ -168,7 +177,7 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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 @@ -178,28 +187,28 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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))); @@ -210,7 +219,8 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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())); @@ -238,14 +248,16 @@ CustomInstrumentTunerForm::CustomInstrumentTunerForm() 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) { @@ -286,26 +298,32 @@ void CustomInstrumentTunerForm::noteRangeChanged() { // 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)); @@ -314,7 +332,7 @@ void CustomInstrumentTunerForm::samplingRateChanged(int 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; @@ -322,7 +340,7 @@ void CustomInstrumentTunerForm::ui_spinAFreq_valueChanged(int AFreq) 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; @@ -337,7 +355,7 @@ void CustomInstrumentTunerForm::tuningFreqChanged(float freq) 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 @@ -371,15 +389,16 @@ void CustomInstrumentTunerForm::refresh() 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_dataaddValue(value); if(m_glFT) m_glFT->buff.push_front(value); @@ -398,6 +415,7 @@ void CustomInstrumentTunerForm::refresh() nb_new_data++; } m_capture_thread.unlock(); +// cerr << "CustomInstrumentTunerForm::refresh unlocked" << endl; // cerr << endl; @@ -412,15 +430,19 @@ void CustomInstrumentTunerForm::refresh() // ------- 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()) @@ -451,13 +473,31 @@ void CustomInstrumentTunerForm::refresh() 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=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); @@ -496,12 +536,12 @@ void CustomInstrumentTunerForm::noteStarted(double freq, double dt) // 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()); @@ -519,7 +559,7 @@ void CustomInstrumentTunerForm::noteStarted(double freq, double dt) 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))); } @@ -532,7 +572,7 @@ void CustomInstrumentTunerForm::noteFinished(double freq, double dt) 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; @@ -547,7 +587,7 @@ void CustomInstrumentTunerForm::refresh_data_harmonics() { if(!(m_algo_combedfft!=NULL && m_freq>0.0f && - m_glFreqStruct->setting_show->isOn())) + m_glFreqStruct->setting_show->isChecked())) return; vector harms = GetHarmonicStruct(m_algo_combedfft->m_plan.out, m_freq, m_glFreqStruct->m_components.size(), m_algo_combedfft->getZeroPaddingFactor()); @@ -570,28 +610,28 @@ void CustomInstrumentTunerForm::refresh_views() // 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(); @@ -599,40 +639,38 @@ void CustomInstrumentTunerForm::refresh_views() 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(); @@ -640,18 +678,23 @@ void CustomInstrumentTunerForm::update_views() 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()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")) { @@ -662,27 +705,27 @@ void CustomInstrumentTunerForm::configure() 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; iinsertItem(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()); @@ -692,12 +735,17 @@ void CustomInstrumentTunerForm::configure() 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); @@ -719,19 +767,19 @@ void CustomInstrumentTunerForm::configure_ok() 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)); @@ -785,18 +833,21 @@ void CustomInstrumentTunerForm::configure_ok() 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; @@ -809,9 +860,9 @@ void CustomInstrumentTunerForm::configure_ok() 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; @@ -825,9 +876,9 @@ void CustomInstrumentTunerForm::configure_ok() 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(); } @@ -837,36 +888,38 @@ void CustomInstrumentTunerForm::saveSettings() 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; icount(); 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; @@ -874,21 +927,21 @@ void CustomInstrumentTunerForm::loadSettings() 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; iinsertItem(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_indexcount()) - 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; @@ -904,12 +957,13 @@ void CustomInstrumentTunerForm::restoreFactorySettings() 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); } @@ -923,7 +977,7 @@ void CustomInstrumentTunerForm::helpAbout() text += tr("

Website:

homepage: http://home.gna.org/fmit"); text += tr("

development site: http://gna.org/projects/fmit"); text += tr("

donation link: http://home.gna.org/fmit/donation.html"); - text += tr("

Author:

Gilles Degottex [gilles.degottex@net2000.ch]"); + text += tr("

Author:

Gilles Degottex gilles.degottex@gmail.com"); #ifdef PACKAGER_STRING if(PACKAGER_STRING!="") text += tr("

Packager:

")+QString(PACKAGER_STRING).replace(QChar('<'),"[").replace(QChar('>'),"]"); @@ -931,35 +985,47 @@ void CustomInstrumentTunerForm::helpAbout() 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(); }